接口
@@ -0,0 +1,46 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
||||
const common_vendor = require("./common/vendor.js");
|
||||
const util_index = require("./util/index.js");
|
||||
if (!Math) {
|
||||
"./pages/index/index.js";
|
||||
"./pages/my/index.js";
|
||||
"./pages/deposit/index.js";
|
||||
"./pages/order/index.js";
|
||||
"./pages/feedback/index.js";
|
||||
"./pages/help/index.js";
|
||||
"./pages/device/detail.js";
|
||||
"./pages/serve/bagCheck/index.js";
|
||||
"./pages/device/return.js";
|
||||
}
|
||||
const _sfc_main = {
|
||||
onLaunch: function() {
|
||||
common_vendor.index.__f__("log", "at App.vue:10", "App Launch");
|
||||
},
|
||||
onShow: async function() {
|
||||
common_vendor.index.__f__("log", "at App.vue:14", "App Show");
|
||||
await this.autoLogin();
|
||||
},
|
||||
onHide: function() {
|
||||
common_vendor.index.__f__("log", "at App.vue:19", "App Hide");
|
||||
},
|
||||
methods: {
|
||||
async autoLogin() {
|
||||
try {
|
||||
const loginResult = await util_index.wxLogin();
|
||||
common_vendor.index.__f__("log", "at App.vue:28", "自动登录成功:", loginResult);
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at App.vue:31", "自动登录失败:", error);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
function createApp() {
|
||||
const app = common_vendor.createSSRApp(_sfc_main);
|
||||
return {
|
||||
app
|
||||
};
|
||||
}
|
||||
createApp().app.mount("#app");
|
||||
exports.createApp = createApp;
|
||||
//# sourceMappingURL=../.sourcemap/mp-weixin/app.js.map
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"pages": [
|
||||
"pages/index/index",
|
||||
"pages/my/index",
|
||||
"pages/deposit/index",
|
||||
"pages/order/index",
|
||||
"pages/feedback/index",
|
||||
"pages/help/index",
|
||||
"pages/device/detail",
|
||||
"pages/serve/bagCheck/index",
|
||||
"pages/device/return"
|
||||
],
|
||||
"window": {
|
||||
"navigationBarTextStyle": "black",
|
||||
"navigationBarTitleText": "共享风扇",
|
||||
"navigationBarBackgroundColor": "#F8F8F8",
|
||||
"backgroundColor": "#F8F8F8"
|
||||
},
|
||||
"tabBar": {
|
||||
"color": "#999999",
|
||||
"selectedColor": "#1976D2",
|
||||
"backgroundColor": "#ffffff",
|
||||
"list": [
|
||||
{
|
||||
"pagePath": "pages/index/index",
|
||||
"text": "首页",
|
||||
"iconPath": "static/home.png",
|
||||
"selectedIconPath": "static/home-active.png"
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/my/index",
|
||||
"text": "我的",
|
||||
"iconPath": "static/user.png",
|
||||
"selectedIconPath": "static/user-active.png"
|
||||
}
|
||||
]
|
||||
},
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
const _imports_0$1 = "/static/scan-icon.png";
|
||||
const _imports_0 = "/static/jl.png";
|
||||
const _imports_1 = "/static/complaint.png";
|
||||
const _imports_2 = "/static/hlep.png";
|
||||
exports._imports_0 = _imports_0$1;
|
||||
exports._imports_0$1 = _imports_0;
|
||||
exports._imports_1 = _imports_1;
|
||||
exports._imports_2 = _imports_2;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map
|
||||
@@ -0,0 +1,24 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../common/vendor.js");
|
||||
const config_url = require("./url.js");
|
||||
const request = (option) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
common_vendor.index.request({
|
||||
url: config_url.URL + option.url,
|
||||
method: option.method,
|
||||
data: option.data,
|
||||
header: {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
...option.headers,
|
||||
"appid": config_url.appid,
|
||||
"Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
|
||||
"Clientid": common_vendor.index.getStorageSync("client_id")
|
||||
},
|
||||
success(res) {
|
||||
resolve(res.data);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
exports.request = request;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/http.js.map
|
||||
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
const URL = "https://notify.gxfs123.com";
|
||||
const appid = "wxabe9cc4db1005fcb";
|
||||
exports.URL = URL;
|
||||
exports.appid = appid;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/url.js.map
|
||||
@@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
const config_http = require("./http.js");
|
||||
const login = (data) => {
|
||||
return config_http.request({
|
||||
url: "/app/user/login",
|
||||
method: "get",
|
||||
data
|
||||
});
|
||||
};
|
||||
const getMyIndexInfo = (data) => {
|
||||
return config_http.request({
|
||||
url: "/app/user/userInfo",
|
||||
method: "get",
|
||||
data
|
||||
});
|
||||
};
|
||||
const getOrderList = (data) => {
|
||||
return config_http.request({
|
||||
url: "/app/order/list",
|
||||
method: "get",
|
||||
data,
|
||||
hideLoading: true
|
||||
});
|
||||
};
|
||||
const queryHasOrder = (data) => {
|
||||
return config_http.request({
|
||||
url: `/app/order/getActiveOrder/${data}`,
|
||||
method: "get"
|
||||
});
|
||||
};
|
||||
const getDeviceInfo = (deviceNo) => {
|
||||
return config_http.request({
|
||||
url: `/app/device/${deviceNo}`,
|
||||
method: "get"
|
||||
});
|
||||
};
|
||||
exports.getDeviceInfo = getDeviceInfo;
|
||||
exports.getMyIndexInfo = getMyIndexInfo;
|
||||
exports.getOrderList = getOrderList;
|
||||
exports.login = login;
|
||||
exports.queryHasOrder = queryHasOrder;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/user.js.map
|
||||
@@ -0,0 +1,40 @@
|
||||
"use strict";
|
||||
const HELP_CONTENT = {
|
||||
// FAQ列表
|
||||
FAQ_LIST: [
|
||||
{
|
||||
question: "如何租借风扇?",
|
||||
answer: '点击首页"扫码租借"按钮,使用微信扫描设备上的二维码,按提示完成支付即可使用。'
|
||||
},
|
||||
{
|
||||
question: "收费标准是怎样的?",
|
||||
answer: "使用费用为2元/小时,不足1小时按1小时计算。押金99元,归还后自动退还。"
|
||||
},
|
||||
{
|
||||
question: "如何归还风扇?",
|
||||
answer: '将风扇带到任意归还点,点击首页"扫码归还"按钮,扫描归还点二维码即可完成归还。'
|
||||
},
|
||||
{
|
||||
question: "押金多久能退还?",
|
||||
answer: "归还设备后押金将自动发起退款,预计0-7个工作日到账。"
|
||||
},
|
||||
{
|
||||
question: "设备无法正常使用怎么办?",
|
||||
answer: '您可以通过"我的-投诉与建议"提交故障反馈,或直接拨打客服电话处理。'
|
||||
}
|
||||
],
|
||||
// 联系方式
|
||||
CONTACT: {
|
||||
TITLE: "联系客服",
|
||||
PHONE: {
|
||||
LABEL: "客服电话",
|
||||
VALUE: "400-888-8888"
|
||||
},
|
||||
SERVICE_TIME: {
|
||||
LABEL: "服务时间",
|
||||
VALUE: "周一至周日 09:00-22:00"
|
||||
}
|
||||
}
|
||||
};
|
||||
exports.HELP_CONTENT = HELP_CONTENT;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/constants/help.js.map
|
||||
@@ -0,0 +1,48 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
depositAmount: "99.00",
|
||||
records: [
|
||||
{ type: "支付", time: "2024-03-20 15:30", amount: "99.00" },
|
||||
{ type: "退还", time: "2024-03-19 12:00", amount: "99.00" }
|
||||
]
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
handleWithdraw() {
|
||||
common_vendor.index.showModal({
|
||||
title: "确认提现",
|
||||
content: "押金将原路退回,预计0-7个工作日到账",
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
common_vendor.index.showToast({
|
||||
title: "提现申请已提交",
|
||||
icon: "success"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return {
|
||||
a: common_vendor.t($data.depositAmount),
|
||||
b: common_vendor.o((...args) => $options.handleWithdraw && $options.handleWithdraw(...args)),
|
||||
c: common_vendor.f($data.records, (item, index, i0) => {
|
||||
return {
|
||||
a: common_vendor.t(item.type),
|
||||
b: common_vendor.t(item.time),
|
||||
c: common_vendor.t(item.type === "退还" ? "+" : "-"),
|
||||
d: common_vendor.t(item.amount),
|
||||
e: common_vendor.n(item.type === "退还" ? "refund" : ""),
|
||||
f: index
|
||||
};
|
||||
})
|
||||
};
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-c7792057"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/deposit/index.js.map
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"navigationBarTitleText": "押金管理",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="deposit-container data-v-c7792057"><view class="deposit-card data-v-c7792057"><view class="title data-v-c7792057">押金余额</view><view class="amount data-v-c7792057">¥{{a}}</view><button class="withdraw-btn data-v-c7792057" bindtap="{{b}}">提现</button></view><view class="notice-card data-v-c7792057"><view class="notice-title data-v-c7792057"><view class="dot data-v-c7792057"></view><text class="data-v-c7792057">提现说明</text></view><view class="notice-content data-v-c7792057"><view class="notice-item data-v-c7792057">1. 提现金额将原路退回支付账户</view><view class="notice-item data-v-c7792057">2. 提现申请提交后预计0-7个工作日到账</view><view class="notice-item data-v-c7792057">3. 如超时未收到,请联系客服处理</view></view></view><view class="record-card data-v-c7792057"><view class="record-title data-v-c7792057">押金记录</view><view class="record-list data-v-c7792057"><view wx:for="{{c}}" wx:for-item="item" wx:key="f" class="record-item data-v-c7792057"><view class="record-info data-v-c7792057"><text class="record-type data-v-c7792057">{{item.a}}</text><text class="record-time data-v-c7792057">{{item.b}}</text></view><text class="{{['record-amount', 'data-v-c7792057', item.e]}}">{{item.c}}¥{{item.d}}</text></view></view></view></view>
|
||||
@@ -0,0 +1,135 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.deposit-container.data-v-c7792057 {
|
||||
min-height: 100vh;
|
||||
background: #f8f8f8;
|
||||
padding: 30rpx;
|
||||
}
|
||||
.deposit-container .deposit-card.data-v-c7792057 {
|
||||
background: linear-gradient(135deg, #1976D2, #64B5F6);
|
||||
border-radius: 20rpx;
|
||||
padding: 40rpx;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
box-shadow: 0 4rpx 20rpx rgba(25, 118, 210, 0.2);
|
||||
}
|
||||
.deposit-container .deposit-card .title.data-v-c7792057 {
|
||||
font-size: 28rpx;
|
||||
opacity: 0.9;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.deposit-container .deposit-card .amount.data-v-c7792057 {
|
||||
font-size: 72rpx;
|
||||
font-weight: bold;
|
||||
margin-bottom: 40rpx;
|
||||
}
|
||||
.deposit-container .deposit-card .withdraw-btn.data-v-c7792057 {
|
||||
background: #fff;
|
||||
color: #1976D2;
|
||||
width: 80%;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 40rpx;
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.deposit-container .deposit-card .withdraw-btn.data-v-c7792057:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
.deposit-container .notice-card.data-v-c7792057 {
|
||||
margin-top: 30rpx;
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.deposit-container .notice-card .notice-title.data-v-c7792057 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.deposit-container .notice-card .notice-title .dot.data-v-c7792057 {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background: #1976D2;
|
||||
border-radius: 50%;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.deposit-container .notice-card .notice-title text.data-v-c7792057 {
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
.deposit-container .notice-card .notice-content .notice-item.data-v-c7792057 {
|
||||
font-size: 26rpx;
|
||||
color: #666;
|
||||
line-height: 1.8;
|
||||
padding-left: 22rpx;
|
||||
}
|
||||
.deposit-container .record-card.data-v-c7792057 {
|
||||
margin-top: 30rpx;
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.deposit-container .record-card .record-title.data-v-c7792057 {
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
margin-bottom: 20rpx;
|
||||
border-left: 8rpx solid #1976D2;
|
||||
padding-left: 20rpx;
|
||||
}
|
||||
.deposit-container .record-card .record-list .record-item.data-v-c7792057 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 0;
|
||||
border-bottom: 1rpx solid #f5f5f5;
|
||||
}
|
||||
.deposit-container .record-card .record-list .record-item.data-v-c7792057:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
.deposit-container .record-card .record-list .record-item .record-info .record-type.data-v-c7792057 {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
margin-bottom: 6rpx;
|
||||
display: block;
|
||||
}
|
||||
.deposit-container .record-card .record-list .record-item .record-info .record-time.data-v-c7792057 {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
.deposit-container .record-card .record-list .record-item .record-amount.data-v-c7792057 {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
}
|
||||
.deposit-container .record-card .record-list .record-item .record-amount.refund.data-v-c7792057 {
|
||||
color: #4CAF50;
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const config_user = require("../../config/user.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
deviceInfo: {},
|
||||
deviceId: "",
|
||||
deviceLocation: "一号教学楼大厅",
|
||||
batteryLevel: 95,
|
||||
hasActiveOrder: false,
|
||||
deviceStatus: {
|
||||
text: "可使用",
|
||||
class: "available"
|
||||
},
|
||||
selectedPackage: 1,
|
||||
packages: [
|
||||
{
|
||||
time: "1小时",
|
||||
price: "2.00",
|
||||
unitPrice: "2.00"
|
||||
},
|
||||
{
|
||||
time: "4小时",
|
||||
price: "6.00",
|
||||
unitPrice: "1.50"
|
||||
},
|
||||
{
|
||||
time: "12小时",
|
||||
price: "15.00",
|
||||
unitPrice: "1.25"
|
||||
}
|
||||
],
|
||||
isLoggedIn: false
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.deviceId = options.deviceNo;
|
||||
common_vendor.index.__f__("log", "at pages/device/detail.vue:110", options.deviceNo);
|
||||
this.getDeviceInfo();
|
||||
},
|
||||
methods: {
|
||||
// 检查登录状态和订单
|
||||
async getDeviceInfo() {
|
||||
const res = await config_user.getDeviceInfo(this.deviceId);
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo = res.data;
|
||||
}
|
||||
},
|
||||
// 显示登录提示
|
||||
showLoginTip() {
|
||||
common_vendor.index.showModal({
|
||||
title: "提示",
|
||||
content: "请先登录后再操作",
|
||||
confirmText: "去登录",
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
common_vendor.index.navigateTo({
|
||||
url: "/pages/login/index"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
selectPackage(index) {
|
||||
this.selectedPackage = index;
|
||||
},
|
||||
// 检查订单状态
|
||||
async checkOrderStatus() {
|
||||
try {
|
||||
const result = await this.$api.checkActiveOrder();
|
||||
if (result.hasOrder) {
|
||||
common_vendor.index.redirectTo({
|
||||
url: `/pages/device/return?deviceId=${this.deviceId}`
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.showToast({
|
||||
title: "订单状态查询失败",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
},
|
||||
// 处理租借操作
|
||||
handleRent() {
|
||||
if (!this.isLoggedIn) {
|
||||
this.showLoginTip();
|
||||
return;
|
||||
}
|
||||
const selectedPkg = this.packages[this.selectedPackage];
|
||||
common_vendor.index.showModal({
|
||||
title: "确认租借",
|
||||
content: `确认支付押金¥99.00及${selectedPkg.time}套餐费用¥${selectedPkg.price}?`,
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.submitRentOrder();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
// 提交租借订单
|
||||
async submitRentOrder() {
|
||||
try {
|
||||
common_vendor.index.showLoading({
|
||||
title: "处理中"
|
||||
});
|
||||
const selectedPkg = this.packages[this.selectedPackage];
|
||||
const result = await this.$api.createOrder({
|
||||
deviceId: this.deviceId,
|
||||
packageId: this.selectedPackage,
|
||||
duration: selectedPkg.time,
|
||||
amount: selectedPkg.price
|
||||
});
|
||||
common_vendor.index.hideLoading();
|
||||
if (result.success) {
|
||||
common_vendor.index.showToast({
|
||||
title: "租借成功",
|
||||
icon: "success"
|
||||
});
|
||||
setTimeout(() => {
|
||||
common_vendor.index.redirectTo({
|
||||
url: `/pages/return/index?deviceId=${this.deviceId}&orderId=${result.orderId}`
|
||||
});
|
||||
}, 1500);
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.hideLoading();
|
||||
common_vendor.index.showToast({
|
||||
title: "租借失败,请重试",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return common_vendor.e({
|
||||
a: common_vendor.t($data.deviceId),
|
||||
b: common_vendor.t($data.deviceStatus.text),
|
||||
c: common_vendor.n($data.deviceStatus.class),
|
||||
d: common_vendor.t($data.deviceLocation),
|
||||
e: common_vendor.t($data.batteryLevel),
|
||||
f: !$data.hasActiveOrder
|
||||
}, !$data.hasActiveOrder ? {
|
||||
g: common_vendor.f($data.packages, (pkg, index, i0) => {
|
||||
return {
|
||||
a: common_vendor.t(pkg.time),
|
||||
b: common_vendor.t(pkg.price),
|
||||
c: common_vendor.t(pkg.unitPrice),
|
||||
d: index,
|
||||
e: $data.selectedPackage === index ? 1 : "",
|
||||
f: common_vendor.o(($event) => $options.selectPackage(index), index)
|
||||
};
|
||||
})
|
||||
} : {}, {
|
||||
h: !$data.hasActiveOrder
|
||||
}, !$data.hasActiveOrder ? {} : {}, {
|
||||
i: common_vendor.t($data.hasActiveOrder ? "归还设备" : "立即租借"),
|
||||
j: common_vendor.n($data.hasActiveOrder ? "return" : "rent"),
|
||||
k: common_vendor.o((...args) => _ctx.handleAction && _ctx.handleAction(...args))
|
||||
});
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-d65de3a7"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/device/detail.js.map
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"navigationBarTitleText": "设备详情",
|
||||
"navigationBarBackgroundColor": "#ffffff",
|
||||
"navigationBarTextStyle": "black",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="detail-container data-v-d65de3a7"><view class="device-card data-v-d65de3a7"><view class="device-header data-v-d65de3a7"><view class="device-title data-v-d65de3a7"><text class="name data-v-d65de3a7">共享风扇</text><text class="id data-v-d65de3a7">设备号:{{a}}</text></view><view class="{{['status', 'data-v-d65de3a7', c]}}">{{b}}</view></view><view class="device-info data-v-d65de3a7"><view class="info-item data-v-d65de3a7"><text class="label data-v-d65de3a7">设备位置</text><text class="value data-v-d65de3a7">{{d}}</text></view><view class="info-item data-v-d65de3a7"><text class="label data-v-d65de3a7">电池电量</text><text class="value data-v-d65de3a7">{{e}}%</text></view></view></view><view wx:if="{{f}}" class="package-section data-v-d65de3a7"><view class="section-title data-v-d65de3a7">选择套餐</view><view class="package-list data-v-d65de3a7"><view wx:for="{{g}}" wx:for-item="pkg" wx:key="d" class="{{['package-item', 'data-v-d65de3a7', pkg.e && 'active']}}" bindtap="{{pkg.f}}"><view class="package-content data-v-d65de3a7"><text class="time data-v-d65de3a7">{{pkg.a}}</text><text class="price data-v-d65de3a7">¥{{pkg.b}}</text></view><text class="unit-price data-v-d65de3a7">约{{pkg.c}}元/小时</text></view></view></view><view class="notice-section data-v-d65de3a7"><view class="section-title data-v-d65de3a7">使用说明</view><view class="notice-list data-v-d65de3a7"><view class="notice-item data-v-d65de3a7"><view class="dot data-v-d65de3a7"></view><text class="data-v-d65de3a7">请在使用前检查设备是否完好</text></view><view class="notice-item data-v-d65de3a7"><view class="dot data-v-d65de3a7"></view><text class="data-v-d65de3a7">超出使用时间将自动按小时计费</text></view><view class="notice-item data-v-d65de3a7"><view class="dot data-v-d65de3a7"></view><text class="data-v-d65de3a7">请在指定区域内使用设备</text></view></view></view><view class="bottom-bar data-v-d65de3a7"><view wx:if="{{h}}" class="price-info data-v-d65de3a7"><text class="deposit-text data-v-d65de3a7">押金:</text><text class="deposit-amount data-v-d65de3a7">¥99</text></view><button class="{{['action-btn', 'data-v-d65de3a7', j]}}" bindtap="{{k}}">{{i}}</button></view></view>
|
||||
@@ -0,0 +1,219 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.detail-container.data-v-d65de3a7 {
|
||||
min-height: 100vh;
|
||||
background: #f8f8f8;
|
||||
padding: 30rpx;
|
||||
padding-bottom: 180rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.detail-container .device-card.data-v-d65de3a7 {
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.detail-container .device-card .device-header.data-v-d65de3a7 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.detail-container .device-card .device-header .device-title .name.data-v-d65de3a7 {
|
||||
font-size: 36rpx;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.detail-container .device-card .device-header .device-title .id.data-v-d65de3a7 {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
.detail-container .device-card .device-header .status.data-v-d65de3a7 {
|
||||
padding: 8rpx 24rpx;
|
||||
border-radius: 24rpx;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
.detail-container .device-card .device-header .status.available.data-v-d65de3a7 {
|
||||
background: #E8F5E9;
|
||||
color: #4CAF50;
|
||||
}
|
||||
.detail-container .device-card .device-header .status.in-use.data-v-d65de3a7 {
|
||||
background: #E3F2FD;
|
||||
color: #1976D2;
|
||||
}
|
||||
.detail-container .device-card .device-info .info-item.data-v-d65de3a7 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
.detail-container .device-card .device-info .info-item.data-v-d65de3a7:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.detail-container .device-card .device-info .info-item .label.data-v-d65de3a7 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
.detail-container .device-card .device-info .info-item .value.data-v-d65de3a7 {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
.detail-container .package-section.data-v-d65de3a7 {
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.detail-container .package-section .section-title.data-v-d65de3a7 {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
.detail-container .package-section .package-list.data-v-d65de3a7 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item.data-v-d65de3a7 {
|
||||
flex: 1;
|
||||
margin: 0 10rpx;
|
||||
padding: 24rpx;
|
||||
background: #F5F5F5;
|
||||
border-radius: 16rpx;
|
||||
text-align: center;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item.data-v-d65de3a7:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item.data-v-d65de3a7:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item.active.data-v-d65de3a7 {
|
||||
background: #E3F2FD;
|
||||
border: 2rpx solid #1976D2;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item.active .package-content .time.data-v-d65de3a7,
|
||||
.detail-container .package-section .package-list .package-item.active .package-content .price.data-v-d65de3a7 {
|
||||
color: #1976D2;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item .package-content.data-v-d65de3a7 {
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item .package-content .time.data-v-d65de3a7 {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
margin-bottom: 8rpx;
|
||||
display: block;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item .package-content .price.data-v-d65de3a7 {
|
||||
font-size: 36rpx;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
}
|
||||
.detail-container .package-section .package-list .package-item .unit-price.data-v-d65de3a7 {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
.detail-container .notice-section.data-v-d65de3a7 {
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.detail-container .notice-section .section-title.data-v-d65de3a7 {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
.detail-container .notice-section .notice-list .notice-item.data-v-d65de3a7 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
.detail-container .notice-section .notice-list .notice-item.data-v-d65de3a7:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.detail-container .notice-section .notice-list .notice-item .dot.data-v-d65de3a7 {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background: #1976D2;
|
||||
border-radius: 50%;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
.detail-container .notice-section .notice-list .notice-item text.data-v-d65de3a7 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.detail-container .bottom-bar.data-v-d65de3a7 {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #fff;
|
||||
padding: 20rpx 30rpx;
|
||||
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.detail-container .bottom-bar .price-info .deposit-text.data-v-d65de3a7 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
.detail-container .bottom-bar .price-info .deposit-amount.data-v-d65de3a7 {
|
||||
font-size: 36rpx;
|
||||
font-weight: 600;
|
||||
color: #FF9800;
|
||||
}
|
||||
.detail-container .bottom-bar .action-btn.data-v-d65de3a7 {
|
||||
flex: 1;
|
||||
margin-left: 30rpx;
|
||||
height: 88rpx;
|
||||
border-radius: 44rpx;
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: none;
|
||||
}
|
||||
.detail-container .bottom-bar .action-btn.rent.data-v-d65de3a7 {
|
||||
background: linear-gradient(135deg, #1976D2, #42A5F5);
|
||||
color: #fff;
|
||||
}
|
||||
.detail-container .bottom-bar .action-btn.return.data-v-d65de3a7 {
|
||||
background: linear-gradient(135deg, #FF9800, #FFB74D);
|
||||
color: #fff;
|
||||
}
|
||||
.detail-container .bottom-bar .action-btn.data-v-d65de3a7:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
deviceId: "",
|
||||
orderInfo: {
|
||||
orderId: "",
|
||||
startTime: "",
|
||||
usedTime: "",
|
||||
currentFee: "0.00"
|
||||
},
|
||||
unlocking: false,
|
||||
timer: null
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.deviceId = options.deviceId;
|
||||
this.getActiveOrder();
|
||||
},
|
||||
onUnload() {
|
||||
this.clearTimer();
|
||||
},
|
||||
methods: {
|
||||
// 获取进行中的订单信息
|
||||
async getActiveOrder() {
|
||||
try {
|
||||
common_vendor.index.showLoading({ title: "加载中" });
|
||||
const result = await this.$api.getActiveOrder();
|
||||
if (result.success) {
|
||||
this.orderInfo = {
|
||||
orderId: result.data.orderId,
|
||||
startTime: result.data.startTime,
|
||||
usedTime: result.data.usedTime,
|
||||
currentFee: result.data.currentFee
|
||||
};
|
||||
this.startTimer();
|
||||
} else {
|
||||
common_vendor.index.showToast({
|
||||
title: "没有进行中的订单",
|
||||
icon: "none"
|
||||
});
|
||||
setTimeout(() => {
|
||||
common_vendor.index.reLaunch({
|
||||
url: "/pages/index/index"
|
||||
});
|
||||
}, 1500);
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.showToast({
|
||||
title: "获取订单信息失败",
|
||||
icon: "none"
|
||||
});
|
||||
} finally {
|
||||
common_vendor.index.hideLoading();
|
||||
}
|
||||
},
|
||||
// 处理开锁请求
|
||||
async handleUnlock() {
|
||||
if (this.unlocking)
|
||||
return;
|
||||
try {
|
||||
this.unlocking = true;
|
||||
common_vendor.index.showLoading({ title: "开锁中" });
|
||||
const result = await this.$api.unlockDevice({
|
||||
deviceId: this.deviceId,
|
||||
orderId: this.orderInfo.orderId
|
||||
});
|
||||
if (result.success) {
|
||||
common_vendor.index.showToast({
|
||||
title: "开锁成功",
|
||||
icon: "success"
|
||||
});
|
||||
} else {
|
||||
throw new Error(result.message || "开锁失败");
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.showToast({
|
||||
title: error.message || "开锁失败,请重试",
|
||||
icon: "none"
|
||||
});
|
||||
} finally {
|
||||
this.unlocking = false;
|
||||
common_vendor.index.hideLoading();
|
||||
}
|
||||
},
|
||||
// 更新使用时长
|
||||
startTimer() {
|
||||
this.timer = setInterval(async () => {
|
||||
try {
|
||||
const result = await this.$api.getOrderStatus(this.orderInfo.orderId);
|
||||
if (result.success) {
|
||||
this.orderInfo.usedTime = result.data.usedTime;
|
||||
this.orderInfo.currentFee = result.data.currentFee;
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/device/return.vue:162", "更新订单状态失败:", error);
|
||||
}
|
||||
}, 6e4);
|
||||
},
|
||||
clearTimer() {
|
||||
if (this.timer) {
|
||||
clearInterval(this.timer);
|
||||
this.timer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return {
|
||||
a: common_vendor.t($data.orderInfo.orderId),
|
||||
b: common_vendor.t($data.deviceId),
|
||||
c: common_vendor.t($data.orderInfo.startTime),
|
||||
d: common_vendor.t($data.orderInfo.usedTime),
|
||||
e: common_vendor.t($data.orderInfo.currentFee),
|
||||
f: common_vendor.t($data.unlocking ? "开锁中..." : "开锁归还"),
|
||||
g: common_vendor.o((...args) => $options.handleUnlock && $options.handleUnlock(...args)),
|
||||
h: $data.unlocking
|
||||
};
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-df932504"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/device/return.js.map
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"navigationBarTitleText": "归还设备",
|
||||
"navigationBarBackgroundColor": "#ffffff",
|
||||
"navigationBarTextStyle": "black",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="return-container data-v-df932504"><view class="order-card data-v-df932504"><view class="order-header data-v-df932504"><text class="title data-v-df932504">使用中</text><text class="order-no data-v-df932504">订单号:{{a}}</text></view><view class="device-info data-v-df932504"><text class="device-name data-v-df932504">共享风扇</text><text class="device-id data-v-df932504">设备号:{{b}}</text></view><view class="time-info data-v-df932504"><view class="time-item data-v-df932504"><text class="label data-v-df932504">开始时间</text><text class="value data-v-df932504">{{c}}</text></view><view class="time-item data-v-df932504"><text class="label data-v-df932504">已使用时长</text><text class="value highlight data-v-df932504">{{d}}</text></view><view class="time-item data-v-df932504"><text class="label data-v-df932504">当前费用</text><text class="value data-v-df932504">¥{{e}}</text></view></view></view><view class="notice-card data-v-df932504"><view class="notice-title data-v-df932504">归还说明</view><view class="notice-list data-v-df932504"><view class="notice-item data-v-df932504"><view class="dot data-v-df932504"></view><text class="data-v-df932504">请确保设备完好无损</text></view><view class="notice-item data-v-df932504"><view class="dot data-v-df932504"></view><text class="data-v-df932504">请在指定区域内归还设备</text></view><view class="notice-item data-v-df932504"><view class="dot data-v-df932504"></view><text class="data-v-df932504">归还后押金将自动退还</text></view></view></view><view class="bottom-bar data-v-df932504"><button class="unlock-btn data-v-df932504" bindtap="{{g}}" disabled="{{h}}">{{f}}</button></view></view>
|
||||
@@ -0,0 +1,151 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.return-container.data-v-df932504 {
|
||||
min-height: 100vh;
|
||||
background: #f8f8f8;
|
||||
padding: 30rpx;
|
||||
padding-bottom: 180rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.return-container .order-card.data-v-df932504 {
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.return-container .order-card .order-header.data-v-df932504 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.return-container .order-card .order-header .title.data-v-df932504 {
|
||||
font-size: 36rpx;
|
||||
font-weight: 600;
|
||||
color: #1976D2;
|
||||
}
|
||||
.return-container .order-card .order-header .order-no.data-v-df932504 {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
.return-container .order-card .device-info.data-v-df932504 {
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.return-container .order-card .device-info .device-name.data-v-df932504 {
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.return-container .order-card .device-info .device-id.data-v-df932504 {
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
.return-container .order-card .time-info .time-item.data-v-df932504 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.return-container .order-card .time-info .time-item.data-v-df932504:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.return-container .order-card .time-info .time-item .label.data-v-df932504 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
.return-container .order-card .time-info .time-item .value.data-v-df932504 {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
.return-container .order-card .time-info .time-item .value.highlight.data-v-df932504 {
|
||||
color: #1976D2;
|
||||
font-weight: 500;
|
||||
}
|
||||
.return-container .notice-card.data-v-df932504 {
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.return-container .notice-card .notice-title.data-v-df932504 {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
.return-container .notice-card .notice-list .notice-item.data-v-df932504 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
.return-container .notice-card .notice-list .notice-item.data-v-df932504:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.return-container .notice-card .notice-list .notice-item .dot.data-v-df932504 {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background: #1976D2;
|
||||
border-radius: 50%;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
.return-container .notice-card .notice-list .notice-item text.data-v-df932504 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.return-container .bottom-bar.data-v-df932504 {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #fff;
|
||||
padding: 20rpx 30rpx;
|
||||
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.return-container .bottom-bar .unlock-btn.data-v-df932504 {
|
||||
width: 80%;
|
||||
height: 88rpx;
|
||||
background: linear-gradient(135deg, #1976D2, #42A5F5);
|
||||
border-radius: 44rpx;
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: none;
|
||||
}
|
||||
.return-container .bottom-bar .unlock-btn.data-v-df932504:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
.return-container .bottom-bar .unlock-btn[disabled].data-v-df932504 {
|
||||
background: #ccc;
|
||||
transform: none;
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
types: ["设备故障", "收费问题", "使用建议", "其他"],
|
||||
selectedType: -1,
|
||||
description: "",
|
||||
images: [],
|
||||
contact: ""
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
selectType(index) {
|
||||
this.selectedType = index;
|
||||
},
|
||||
chooseImage() {
|
||||
common_vendor.index.chooseImage({
|
||||
count: 3 - this.images.length,
|
||||
success: (res) => {
|
||||
this.images = [...this.images, ...res.tempFilePaths];
|
||||
}
|
||||
});
|
||||
},
|
||||
deleteImage(index) {
|
||||
this.images.splice(index, 1);
|
||||
},
|
||||
submitFeedback() {
|
||||
if (this.selectedType === -1) {
|
||||
common_vendor.index.showToast({
|
||||
title: "请选择问题类型",
|
||||
icon: "none"
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!this.description.trim()) {
|
||||
common_vendor.index.showToast({
|
||||
title: "请描述您的问题",
|
||||
icon: "none"
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!this.contact) {
|
||||
common_vendor.index.showToast({
|
||||
title: "请留下联系方式",
|
||||
icon: "none"
|
||||
});
|
||||
return;
|
||||
}
|
||||
common_vendor.index.showToast({
|
||||
title: "提交成功",
|
||||
icon: "success"
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return common_vendor.e({
|
||||
a: common_vendor.f($data.types, (type, index, i0) => {
|
||||
return {
|
||||
a: common_vendor.t(type),
|
||||
b: index,
|
||||
c: $data.selectedType === index ? 1 : "",
|
||||
d: common_vendor.o(($event) => $options.selectType(index), index)
|
||||
};
|
||||
}),
|
||||
b: $data.description,
|
||||
c: common_vendor.o(($event) => $data.description = $event.detail.value),
|
||||
d: common_vendor.t($data.description.length),
|
||||
e: common_vendor.f($data.images, (img, index, i0) => {
|
||||
return {
|
||||
a: img,
|
||||
b: common_vendor.o(($event) => $options.deleteImage(index), index),
|
||||
c: index
|
||||
};
|
||||
}),
|
||||
f: $data.images.length < 3
|
||||
}, $data.images.length < 3 ? {
|
||||
g: common_vendor.o((...args) => $options.chooseImage && $options.chooseImage(...args))
|
||||
} : {}, {
|
||||
h: $data.contact,
|
||||
i: common_vendor.o(($event) => $data.contact = $event.detail.value),
|
||||
j: common_vendor.o((...args) => $options.submitFeedback && $options.submitFeedback(...args))
|
||||
});
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-2aa7bac2"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/feedback/index.js.map
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"navigationBarTitleText": "投诉与建议",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="feedback-container data-v-2aa7bac2"><view class="type-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">问题类型</view><view class="type-grid data-v-2aa7bac2"><view wx:for="{{a}}" wx:for-item="type" wx:key="b" class="{{['type-item', 'data-v-2aa7bac2', type.c && 'active']}}" bindtap="{{type.d}}">{{type.a}}</view></view></view><view class="description-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">问题描述</view><block wx:if="{{r0}}"><textarea class="description-input data-v-2aa7bac2" placeholder="请详细描述您遇到的问题,以便我们更好地为您解决" maxlength="500" value="{{b}}" bindinput="{{c}}"/></block><view class="word-count data-v-2aa7bac2">{{d}}/500</view></view><view class="upload-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">图片上传(选填)</view><view class="upload-grid data-v-2aa7bac2"><view wx:for="{{e}}" wx:for-item="img" wx:key="c" class="upload-item data-v-2aa7bac2"><image class="data-v-2aa7bac2" src="{{img.a}}" mode="aspectFill"/><view class="delete-btn data-v-2aa7bac2" bindtap="{{img.b}}">×</view></view><view wx:if="{{f}}" class="upload-btn data-v-2aa7bac2" bindtap="{{g}}"><text class="plus data-v-2aa7bac2">+</text><text class="tip data-v-2aa7bac2">上传图片</text></view></view></view><view class="contact-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">联系方式</view><input class="contact-input data-v-2aa7bac2" placeholder="请留下您的手机号,方便我们联系您" type="number" maxlength="11" value="{{h}}" bindinput="{{i}}"/></view><view class="submit-section data-v-2aa7bac2"><button class="submit-btn data-v-2aa7bac2" bindtap="{{j}}">提交反馈</button></view></view>
|
||||
@@ -0,0 +1,175 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.feedback-container.data-v-2aa7bac2 {
|
||||
min-height: 100vh;
|
||||
background: #f8f8f8;
|
||||
padding: 30rpx;
|
||||
}
|
||||
.feedback-container .section-title.data-v-2aa7bac2 {
|
||||
font-size: 30rpx;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.feedback-container .type-section.data-v-2aa7bac2 {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.feedback-container .type-section .type-grid.data-v-2aa7bac2 {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 0 -10rpx;
|
||||
}
|
||||
.feedback-container .type-section .type-grid .type-item.data-v-2aa7bac2 {
|
||||
width: calc(50% - 20rpx);
|
||||
margin: 10rpx;
|
||||
height: 80rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #f5f5f5;
|
||||
border-radius: 10rpx;
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.feedback-container .type-section .type-grid .type-item.active.data-v-2aa7bac2 {
|
||||
background: #E3F2FD;
|
||||
color: #1976D2;
|
||||
}
|
||||
.feedback-container .description-section.data-v-2aa7bac2 {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.feedback-container .description-section .description-input.data-v-2aa7bac2 {
|
||||
width: 100%;
|
||||
height: 240rpx;
|
||||
background: #f8f8f8;
|
||||
border-radius: 10rpx;
|
||||
padding: 20rpx;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.feedback-container .description-section .word-count.data-v-2aa7bac2 {
|
||||
text-align: right;
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
.feedback-container .upload-section.data-v-2aa7bac2 {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.feedback-container .upload-section .upload-grid.data-v-2aa7bac2 {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.feedback-container .upload-section .upload-grid .upload-item.data-v-2aa7bac2 {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
margin-right: 20rpx;
|
||||
margin-bottom: 20rpx;
|
||||
position: relative;
|
||||
}
|
||||
.feedback-container .upload-section .upload-grid .upload-item image.data-v-2aa7bac2 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
.feedback-container .upload-section .upload-grid .upload-item .delete-btn.data-v-2aa7bac2 {
|
||||
position: absolute;
|
||||
right: -10rpx;
|
||||
top: -10rpx;
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.feedback-container .upload-section .upload-grid .upload-btn.data-v-2aa7bac2 {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
background: #f5f5f5;
|
||||
border-radius: 10rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #999;
|
||||
}
|
||||
.feedback-container .upload-section .upload-grid .upload-btn .plus.data-v-2aa7bac2 {
|
||||
font-size: 60rpx;
|
||||
line-height: 1;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.feedback-container .upload-section .upload-grid .upload-btn .tip.data-v-2aa7bac2 {
|
||||
font-size: 24rpx;
|
||||
}
|
||||
.feedback-container .contact-section.data-v-2aa7bac2 {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 40rpx;
|
||||
}
|
||||
.feedback-container .contact-section .contact-input.data-v-2aa7bac2 {
|
||||
width: 100%;
|
||||
height: 80rpx;
|
||||
background: #f8f8f8;
|
||||
border-radius: 10rpx;
|
||||
padding: 0 20rpx;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.feedback-container .submit-section.data-v-2aa7bac2 {
|
||||
padding: 0 40rpx;
|
||||
}
|
||||
.feedback-container .submit-section .submit-btn.data-v-2aa7bac2 {
|
||||
width: 100%;
|
||||
height: 88rpx;
|
||||
background: #1976D2;
|
||||
color: #fff;
|
||||
border-radius: 44rpx;
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.feedback-container .submit-section .submit-btn.data-v-2aa7bac2:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const constants_help = require("../../constants/help.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
HELP_CONTENT: constants_help.HELP_CONTENT,
|
||||
faqList: constants_help.HELP_CONTENT.FAQ_LIST.map((item) => ({
|
||||
...item,
|
||||
isOpen: false
|
||||
}))
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
toggleFaq(index) {
|
||||
this.faqList[index].isOpen = !this.faqList[index].isOpen;
|
||||
},
|
||||
makePhoneCall() {
|
||||
common_vendor.index.makePhoneCall({
|
||||
phoneNumber: constants_help.HELP_CONTENT.CONTACT.PHONE.VALUE
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return {
|
||||
a: common_vendor.f($data.faqList, (item, index, i0) => {
|
||||
return {
|
||||
a: common_vendor.t(item.question),
|
||||
b: item.isOpen ? 1 : "",
|
||||
c: common_vendor.t(item.answer),
|
||||
d: item.isOpen,
|
||||
e: index,
|
||||
f: common_vendor.o(($event) => $options.toggleFaq(index), index)
|
||||
};
|
||||
}),
|
||||
b: common_vendor.t($data.HELP_CONTENT.CONTACT.TITLE),
|
||||
c: common_vendor.t($data.HELP_CONTENT.CONTACT.PHONE.LABEL),
|
||||
d: common_vendor.t($data.HELP_CONTENT.CONTACT.PHONE.VALUE),
|
||||
e: common_vendor.o((...args) => $options.makePhoneCall && $options.makePhoneCall(...args)),
|
||||
f: common_vendor.t($data.HELP_CONTENT.CONTACT.SERVICE_TIME.LABEL),
|
||||
g: common_vendor.t($data.HELP_CONTENT.CONTACT.SERVICE_TIME.VALUE)
|
||||
};
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-e6af2099"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/help/index.js.map
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"navigationBarTitleText": "帮助中心",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="help-container data-v-e6af2099"><view class="faq-list data-v-e6af2099"><view wx:for="{{a}}" wx:for-item="item" wx:key="e" class="faq-item data-v-e6af2099" bindtap="{{item.f}}"><view class="faq-header data-v-e6af2099"><text class="question data-v-e6af2099">{{item.a}}</text><view class="{{['arrow', 'data-v-e6af2099', item.b && 'open']}}"></view></view><view class="answer data-v-e6af2099" hidden="{{!item.d}}">{{item.c}}</view></view></view><view class="contact-card data-v-e6af2099"><view class="contact-title data-v-e6af2099">{{b}}</view><view class="contact-content data-v-e6af2099"><view class="contact-item data-v-e6af2099"><text class="label data-v-e6af2099">{{c}}</text><text class="value data-v-e6af2099" bindtap="{{e}}">{{d}}</text></view><view class="contact-item data-v-e6af2099"><text class="label data-v-e6af2099">{{f}}</text><text class="value data-v-e6af2099">{{g}}</text></view></view></view></view>
|
||||
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.help-container.data-v-e6af2099 {
|
||||
min-height: 100vh;
|
||||
background: #f8f8f8;
|
||||
padding: 30rpx;
|
||||
}
|
||||
.help-container .faq-list.data-v-e6af2099 {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 20rpx;
|
||||
margin-bottom: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.help-container .faq-list .faq-item.data-v-e6af2099 {
|
||||
border-bottom: 1rpx solid #f5f5f5;
|
||||
}
|
||||
.help-container .faq-list .faq-item.data-v-e6af2099:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
.help-container .faq-list .faq-item .faq-header.data-v-e6af2099 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 30rpx 20rpx;
|
||||
}
|
||||
.help-container .faq-list .faq-item .faq-header .question.data-v-e6af2099 {
|
||||
font-size: 30rpx;
|
||||
color: #333;
|
||||
flex: 1;
|
||||
padding-right: 20rpx;
|
||||
}
|
||||
.help-container .faq-list .faq-item .faq-header .arrow.data-v-e6af2099 {
|
||||
width: 16rpx;
|
||||
height: 16rpx;
|
||||
border-right: 4rpx solid #999;
|
||||
border-bottom: 4rpx solid #999;
|
||||
transform: rotate(45deg);
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.help-container .faq-list .faq-item .faq-header .arrow.open.data-v-e6af2099 {
|
||||
transform: rotate(-135deg);
|
||||
}
|
||||
.help-container .faq-list .faq-item .answer.data-v-e6af2099 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
line-height: 1.6;
|
||||
padding: 0 20rpx 30rpx;
|
||||
background: #f9f9f9;
|
||||
border-radius: 10rpx;
|
||||
margin: 0 20rpx 20rpx;
|
||||
}
|
||||
.help-container .contact-card.data-v-e6af2099 {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.help-container .contact-card .contact-title.data-v-e6af2099 {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20rpx;
|
||||
border-left: 8rpx solid #1976D2;
|
||||
padding-left: 20rpx;
|
||||
}
|
||||
.help-container .contact-card .contact-content .contact-item.data-v-e6af2099 {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
.help-container .contact-card .contact-content .contact-item .label.data-v-e6af2099 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
.help-container .contact-card .contact-content .contact-item .value.data-v-e6af2099 {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
}
|
||||
.help-container .contact-card .contact-content .contact-item .value.data-v-e6af2099:active {
|
||||
opacity: 0.7;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const util_index = require("../../util/index.js");
|
||||
const common_assets = require("../../common/assets.js");
|
||||
const _sfc_main = {
|
||||
methods: {
|
||||
handleScan() {
|
||||
common_vendor.index.scanCode({
|
||||
success: (res) => {
|
||||
let deviceNo = util_index.getQueryString(res.path, "deviceNo");
|
||||
common_vendor.index.navigateTo({
|
||||
url: `/pages/serve/bagCheck/index?deviceNo=${deviceNo}`
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
common_vendor.index.showToast({
|
||||
title: "扫码失败",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return {
|
||||
a: common_assets._imports_0,
|
||||
b: common_vendor.o((...args) => $options.handleScan && $options.handleScan(...args))
|
||||
};
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-1cf27b2a"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/index/index.js.map
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"navigationBarTitleText": "共享风扇",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="container data-v-1cf27b2a"><view class="banner data-v-1cf27b2a"><view class="temp-banner data-v-1cf27b2a"><text class="banner-text data-v-1cf27b2a">共享风扇</text><text class="banner-subtitle data-v-1cf27b2a">让清凉随身携带</text><view class="banner-bg data-v-1cf27b2a"></view></view></view><view class="scan-area data-v-1cf27b2a"><view class="scan-btn data-v-1cf27b2a" bindtap="{{b}}"><view class="btn-content data-v-1cf27b2a"><image class="btn-icon data-v-1cf27b2a" src="{{a}}" mode="aspectFit"/><text class="btn-text data-v-1cf27b2a">扫一扫</text></view><text class="btn-desc data-v-1cf27b2a">扫描设备二维码使用或归还</text></view></view><view class="tips-section data-v-1cf27b2a"><view class="tips-header data-v-1cf27b2a"><view class="tips-title data-v-1cf27b2a">使用小贴士</view></view><view class="tips-list data-v-1cf27b2a"><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">租借时间:每次最长可租借12小时</text></view><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">押金说明:租借需支付99元押金,归还后自动退还</text></view><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">收费标准:2元/小时,不足1小时按1小时计算</text></view><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">爱护提示:请勿将设备带离指定区域,保持设备清洁</text></view></view></view></view>
|
||||
@@ -0,0 +1,194 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.container.data-v-1cf27b2a {
|
||||
height: 87.5vh;
|
||||
background: #f8f8f8;
|
||||
padding-bottom: 40rpx;
|
||||
}
|
||||
.container .banner.data-v-1cf27b2a {
|
||||
padding: 30rpx;
|
||||
}
|
||||
.container .banner .temp-banner.data-v-1cf27b2a {
|
||||
height: 300rpx;
|
||||
background: linear-gradient(135deg, #1976D2, #42A5F5);
|
||||
border-radius: 30rpx;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
box-shadow: 0 8rpx 32rpx rgba(25, 118, 210, 0.2);
|
||||
}
|
||||
.container .banner .temp-banner .banner-text.data-v-1cf27b2a {
|
||||
font-size: 56rpx;
|
||||
font-weight: bold;
|
||||
margin-bottom: 20rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.container .banner .temp-banner .banner-subtitle.data-v-1cf27b2a {
|
||||
font-size: 32rpx;
|
||||
opacity: 0.95;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.container .banner .temp-banner .banner-bg.data-v-1cf27b2a {
|
||||
position: absolute;
|
||||
right: -60rpx;
|
||||
bottom: -60rpx;
|
||||
width: 300rpx;
|
||||
height: 300rpx;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 50%;
|
||||
transform: rotate(-15deg);
|
||||
}
|
||||
.container .banner .temp-banner.data-v-1cf27b2a::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: -80rpx;
|
||||
top: -80rpx;
|
||||
width: 240rpx;
|
||||
height: 240rpx;
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
border-radius: 50%;
|
||||
}
|
||||
.container .scan-area.data-v-1cf27b2a {
|
||||
padding: 20rpx 30rpx 40rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.container .scan-area .scan-btn.data-v-1cf27b2a {
|
||||
width: 460rpx;
|
||||
height: 200rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: linear-gradient(135deg, #00C853, #69F0AE);
|
||||
border-radius: 30rpx;
|
||||
box-shadow: 0 8rpx 32rpx rgba(0, 200, 83, 0.2);
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.container .scan-area .scan-btn.data-v-1cf27b2a:active {
|
||||
transform: scale(0.98);
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 200, 83, 0.15);
|
||||
}
|
||||
.container .scan-area .scan-btn.data-v-1cf27b2a::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: linear-gradient(rgba(255, 255, 255, 0.1), transparent);
|
||||
}
|
||||
.container .scan-area .scan-btn .btn-content.data-v-1cf27b2a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 12rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.container .scan-area .scan-btn .btn-content .btn-icon.data-v-1cf27b2a {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
.container .scan-area .scan-btn .btn-content .btn-text.data-v-1cf27b2a {
|
||||
font-size: 42rpx;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.container .scan-area .scan-btn .btn-desc.data-v-1cf27b2a {
|
||||
font-size: 26rpx;
|
||||
color: rgba(255, 255, 255, 0.95);
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.container .tips-section.data-v-1cf27b2a {
|
||||
margin: 0 30rpx;
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.05);
|
||||
overflow: hidden;
|
||||
}
|
||||
.container .tips-section .tips-header.data-v-1cf27b2a {
|
||||
padding: 30rpx;
|
||||
background: linear-gradient(to right, #F5F9FF, #fff);
|
||||
border-bottom: 2rpx solid #f0f0f0;
|
||||
}
|
||||
.container .tips-section .tips-header .tips-title.data-v-1cf27b2a {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
position: relative;
|
||||
padding-left: 24rpx;
|
||||
}
|
||||
.container .tips-section .tips-header .tips-title.data-v-1cf27b2a::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 8rpx;
|
||||
height: 32rpx;
|
||||
background: #1976D2;
|
||||
border-radius: 4rpx;
|
||||
}
|
||||
.container .tips-section .tips-list.data-v-1cf27b2a {
|
||||
padding: 20rpx 30rpx;
|
||||
}
|
||||
.container .tips-section .tips-list .tip-item.data-v-1cf27b2a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 24rpx;
|
||||
padding: 0 10rpx;
|
||||
}
|
||||
.container .tips-section .tips-list .tip-item.data-v-1cf27b2a:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.container .tips-section .tips-list .tip-item .tip-dot.data-v-1cf27b2a {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background: #1976D2;
|
||||
border-radius: 50%;
|
||||
margin-right: 16rpx;
|
||||
flex-shrink: 0;
|
||||
box-shadow: 0 2rpx 6rpx rgba(25, 118, 210, 0.2);
|
||||
}
|
||||
.container .tips-section .tips-list .tip-item text.data-v-1cf27b2a {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
line-height: 1.6;
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const util_index = require("../../util/index.js");
|
||||
const common_assets = require("../../common/assets.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
userInfo: {},
|
||||
deposit: "0.00",
|
||||
tempAvatar: "",
|
||||
tempNickname: "",
|
||||
show: false
|
||||
};
|
||||
},
|
||||
onShow() {
|
||||
this.getInfo();
|
||||
},
|
||||
methods: {
|
||||
async getInfo() {
|
||||
try {
|
||||
const token = common_vendor.index.getStorageSync("token");
|
||||
if (!token) {
|
||||
await util_index.wxLogin();
|
||||
this.getInfo();
|
||||
return;
|
||||
}
|
||||
const res = await util_index.getUserInfo();
|
||||
common_vendor.index.__f__("log", "at pages/my/index.vue:105", res);
|
||||
if (res.code === 200) {
|
||||
const userInfo = {
|
||||
nickName: res.data.nickname,
|
||||
phone: res.data.phone,
|
||||
avatar: res.data.iconUrl,
|
||||
isAdmin: res.data.isAdmin
|
||||
};
|
||||
this.userInfo = userInfo;
|
||||
common_vendor.index.setStorageSync("userInfo", userInfo);
|
||||
this.deposit = res.data.balanceAmount || "0.00";
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/my/index.vue:120", "获取用户信息失败:", error);
|
||||
common_vendor.index.showToast({
|
||||
title: "获取用户信息失败",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
},
|
||||
navigateTo(url) {
|
||||
common_vendor.index.navigateTo({
|
||||
url
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return common_vendor.e({
|
||||
a: $data.userInfo.avatar || "/static/user.png",
|
||||
b: $data.userInfo.nickName
|
||||
}, $data.userInfo.nickName ? {
|
||||
c: common_vendor.t($data.userInfo.nickName),
|
||||
d: common_vendor.t($data.userInfo.phone || "")
|
||||
} : {}, {
|
||||
e: common_vendor.o((...args) => _ctx.showPopup && _ctx.showPopup(...args)),
|
||||
f: common_vendor.t($data.deposit),
|
||||
g: common_vendor.o(($event) => $options.navigateTo("/pages/deposit/index")),
|
||||
h: common_assets._imports_0$1,
|
||||
i: common_vendor.o(($event) => $options.navigateTo("/pages/order/index")),
|
||||
j: common_assets._imports_1,
|
||||
k: common_vendor.o(($event) => $options.navigateTo("/pages/feedback/index")),
|
||||
l: common_assets._imports_2,
|
||||
m: common_vendor.o(($event) => $options.navigateTo("/pages/help/index"))
|
||||
});
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-f97bc692"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/my/index.js.map
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"navigationBarTitleText": "个人中心",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="my-container data-v-f97bc692"><view class="user-info data-v-f97bc692"><view class="floating-dots data-v-f97bc692"></view><view class="user-info-content data-v-f97bc692" bindtap="{{e}}"><view class="avatar-wrap data-v-f97bc692"><image class="avatar data-v-f97bc692" src="{{a}}" mode="aspectFill"/></view><view wx:if="{{b}}" class="info-content data-v-f97bc692"><view class="text-group data-v-f97bc692"><text class="nickname data-v-f97bc692">{{c}}</text><text class="phone data-v-f97bc692">{{d}}</text></view></view><view wx:else class="info-content not-login data-v-f97bc692"><text class="login-text data-v-f97bc692">点击登录</text><text class="login-desc data-v-f97bc692">登录后享受更多服务</text></view></view><view class="wave-decoration data-v-f97bc692"></view></view><view class="balance-card data-v-f97bc692"><view class="balance-content data-v-f97bc692"><text class="label data-v-f97bc692">押金余额</text><text class="amount data-v-f97bc692">¥{{f}}</text></view><view class="withdraw-btn data-v-f97bc692" bindtap="{{g}}"> 提现 <view class="arrow data-v-f97bc692"></view></view></view><view class="function-list data-v-f97bc692"><view class="function-item data-v-f97bc692" bindtap="{{i}}"><view class="item-left data-v-f97bc692"><view class="icon-wrap order data-v-f97bc692"><image src="{{h}}" mode="aspectFit" class="icon-image data-v-f97bc692"/></view><text class="title data-v-f97bc692">租借记录</text></view><view class="arrow data-v-f97bc692"></view></view><view class="function-item data-v-f97bc692" bindtap="{{k}}"><view class="item-left data-v-f97bc692"><view class="icon-wrap feedback data-v-f97bc692"><image src="{{j}}" mode="aspectFit" class="icon-image data-v-f97bc692"/></view><text class="title data-v-f97bc692">投诉与建议</text></view><view class="arrow data-v-f97bc692"></view></view><view class="function-item data-v-f97bc692" bindtap="{{m}}"><view class="item-left data-v-f97bc692"><view class="icon-wrap help data-v-f97bc692"><image src="{{l}}" mode="aspectFit" class="icon-image data-v-f97bc692"/></view><text class="title data-v-f97bc692">帮助中心</text></view><view class="arrow data-v-f97bc692"></view></view></view></view>
|
||||
@@ -0,0 +1,328 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.my-container.data-v-f97bc692 {
|
||||
min-height: 87.5vh;
|
||||
background: #f8f8f8;
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
}
|
||||
.my-container .user-info.data-v-f97bc692 {
|
||||
height: 360rpx;
|
||||
background: linear-gradient(135deg, #1976D2, #42A5F5);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.my-container .user-info.data-v-f97bc692::before, .my-container .user-info.data-v-f97bc692::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-repeat: no-repeat;
|
||||
opacity: 0.1;
|
||||
}
|
||||
.my-container .user-info.data-v-f97bc692::before {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
left: -40rpx;
|
||||
top: -40rpx;
|
||||
background-image: radial-gradient(circle, #fff 2rpx, transparent 3rpx);
|
||||
background-size: 30rpx 30rpx;
|
||||
transform: rotate(30deg);
|
||||
}
|
||||
.my-container .user-info.data-v-f97bc692::after {
|
||||
width: 300rpx;
|
||||
height: 300rpx;
|
||||
right: -60rpx;
|
||||
bottom: -60rpx;
|
||||
background: radial-gradient(circle at center, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 30%, transparent 30.5%), radial-gradient(circle at center, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 20%, transparent 20.5%);
|
||||
background-size: 60rpx 60rpx;
|
||||
background-position: 0 0, 30rpx 30rpx;
|
||||
transform: rotate(-15deg);
|
||||
}
|
||||
.my-container .user-info .floating-dots.data-v-f97bc692 {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
.my-container .user-info .floating-dots.data-v-f97bc692::before, .my-container .user-info .floating-dots.data-v-f97bc692::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
border-radius: 50%;
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
animation: float-f97bc692 3s infinite ease-in-out;
|
||||
}
|
||||
.my-container .user-info .floating-dots.data-v-f97bc692::before {
|
||||
top: 20%;
|
||||
right: 10%;
|
||||
animation-delay: -2s;
|
||||
}
|
||||
.my-container .user-info .floating-dots.data-v-f97bc692::after {
|
||||
top: 50%;
|
||||
right: 20%;
|
||||
width: 8rpx;
|
||||
height: 8rpx;
|
||||
animation-delay: -1s;
|
||||
}
|
||||
.my-container .user-info .user-info-content.data-v-f97bc692 {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
padding: 60rpx 40rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.my-container .user-info .user-info-content .avatar-wrap.data-v-f97bc692 {
|
||||
width: 140rpx;
|
||||
height: 140rpx;
|
||||
border-radius: 70rpx;
|
||||
border: 6rpx solid rgba(255, 255, 255, 0.3);
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1), 0 0 0 6rpx rgba(255, 255, 255, 0.1);
|
||||
margin-right: 40rpx;
|
||||
position: relative;
|
||||
}
|
||||
.my-container .user-info .user-info-content .avatar-wrap.data-v-f97bc692::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -10%;
|
||||
left: -10%;
|
||||
right: -10%;
|
||||
bottom: -10%;
|
||||
background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.1), transparent);
|
||||
animation: shine-f97bc692 2s infinite;
|
||||
}
|
||||
.my-container .user-info .user-info-content .avatar-wrap .avatar.data-v-f97bc692 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #fff;
|
||||
}
|
||||
.my-container .user-info .user-info-content .info-content.not-login .login-text.data-v-f97bc692 {
|
||||
font-size: 40rpx;
|
||||
color: #fff;
|
||||
font-weight: 500;
|
||||
margin-bottom: 12rpx;
|
||||
display: block;
|
||||
}
|
||||
.my-container .user-info .user-info-content .info-content.not-login .login-desc.data-v-f97bc692 {
|
||||
font-size: 28rpx;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
display: block;
|
||||
}
|
||||
.my-container .user-info .user-info-content .info-content .text-group.data-v-f97bc692 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 16rpx;
|
||||
}
|
||||
.my-container .user-info .user-info-content .info-content .text-group .nickname.data-v-f97bc692 {
|
||||
font-size: 42rpx;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
|
||||
letter-spacing: 2rpx;
|
||||
}
|
||||
.my-container .user-info .user-info-content .info-content .text-group .phone.data-v-f97bc692 {
|
||||
font-size: 30rpx;
|
||||
color: rgba(255, 255, 255, 0.85);
|
||||
font-weight: 400;
|
||||
letter-spacing: 1rpx;
|
||||
position: relative;
|
||||
padding: 4rpx 24rpx;
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
border-radius: 24rpx;
|
||||
-webkit-backdrop-filter: blur(4px);
|
||||
backdrop-filter: blur(4px);
|
||||
}
|
||||
.my-container .user-info .wave-decoration.data-v-f97bc692 {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 120rpx;
|
||||
background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNDQwIDMyMCI+PHBhdGggZmlsbD0icmdiYSgyNTUsMjU1LDI1NSwwLjEpIiBkPSJNMCwyNjAuMjI3YzE3My42NjEsMCwzMjEuMTM3LDAsNDQyLjQyOCwwYzE4MS41MTcsMCwyODUuNjQ1LDAsMzk3LjU3MiwwQzk1Mi4zODksMjYwLjIyNywxMTQwLjI3MSwyNjAuMjI3LDE0NDAsMjYwLjIyN1YwSDBWMjYwLjIyN3oiLz48L3N2Zz4=") bottom/100% no-repeat;
|
||||
opacity: 0.8;
|
||||
}
|
||||
@keyframes float-f97bc692 {
|
||||
0%, 100% {
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: translateY(-20rpx) scale(1.1);
|
||||
}
|
||||
}
|
||||
@keyframes shine-f97bc692 {
|
||||
0% {
|
||||
transform: translateX(-100%) rotate(45deg);
|
||||
}
|
||||
80%, 100% {
|
||||
transform: translateX(100%) rotate(45deg);
|
||||
}
|
||||
}
|
||||
.my-container .balance-card.data-v-f97bc692 {
|
||||
margin: -60rpx 30rpx 30rpx;
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 40rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
box-shadow: 0 8rpx 32rpx rgba(25, 118, 210, 0.1);
|
||||
}
|
||||
.my-container .balance-card .balance-content .label.data-v-f97bc692 {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
margin-bottom: 12rpx;
|
||||
display: block;
|
||||
}
|
||||
.my-container .balance-card .balance-content .amount.data-v-f97bc692 {
|
||||
font-size: 52rpx;
|
||||
color: #1976D2;
|
||||
font-weight: bold;
|
||||
}
|
||||
.my-container .balance-card .withdraw-btn.data-v-f97bc692 {
|
||||
padding: 20rpx 36rpx;
|
||||
background: linear-gradient(135deg, #1976D2, #42A5F5);
|
||||
color: #fff;
|
||||
border-radius: 36rpx;
|
||||
font-size: 30rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-shadow: 0 4rpx 12rpx rgba(25, 118, 210, 0.2);
|
||||
}
|
||||
.my-container .balance-card .withdraw-btn.data-v-f97bc692:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
.my-container .balance-card .withdraw-btn .arrow.data-v-f97bc692 {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
border-top: 3rpx solid #fff;
|
||||
border-right: 3rpx solid #fff;
|
||||
transform: rotate(45deg);
|
||||
margin-left: 12rpx;
|
||||
}
|
||||
.my-container .function-list.data-v-f97bc692 {
|
||||
margin: 0 30rpx;
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 10rpx 20rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.my-container .function-list .function-item.data-v-f97bc692 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 32rpx 20rpx;
|
||||
border-bottom: 1rpx solid #f5f5f5;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.my-container .function-list .function-item.data-v-f97bc692:active {
|
||||
background: #f9f9f9;
|
||||
}
|
||||
.my-container .function-list .function-item.data-v-f97bc692:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
.my-container .function-list .function-item .item-left.data-v-f97bc692 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.my-container .function-list .function-item .item-left .icon-wrap.data-v-f97bc692 {
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
margin-right: 24rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 20rpx;
|
||||
background: #F5F9FF;
|
||||
}
|
||||
.my-container .function-list .function-item .item-left .icon-wrap .icon-image.data-v-f97bc692 {
|
||||
width: 44rpx;
|
||||
height: 44rpx;
|
||||
}
|
||||
.my-container .function-list .function-item .item-left .title.data-v-f97bc692 {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
}
|
||||
.my-container .function-list .function-item .arrow.data-v-f97bc692 {
|
||||
width: 16rpx;
|
||||
height: 16rpx;
|
||||
border-top: 3rpx solid #999;
|
||||
border-right: 3rpx solid #999;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.my-container .popup-content.data-v-f97bc692 {
|
||||
background-color: #fff;
|
||||
border-radius: 24rpx 24rpx 0 0;
|
||||
padding: 40rpx 30rpx;
|
||||
}
|
||||
.my-container .popup-content .popup-title.data-v-f97bc692 {
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
margin-bottom: 40rpx;
|
||||
}
|
||||
.my-container .popup-content .popup-body.data-v-f97bc692 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 30rpx;
|
||||
}
|
||||
.my-container .popup-content .avatar-btn.data-v-f97bc692 {
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
background: #f5f5f5;
|
||||
border-radius: 44rpx;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
.my-container .popup-content .avatar-btn.data-v-f97bc692::after {
|
||||
border: none;
|
||||
}
|
||||
.my-container .popup-content .avatar-btn.data-v-f97bc692:active {
|
||||
opacity: 0.8;
|
||||
}
|
||||
.my-container .popup-content .nickname-input.data-v-f97bc692 {
|
||||
height: 88rpx;
|
||||
background: #f5f5f5;
|
||||
border-radius: 44rpx;
|
||||
padding: 0 30rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.my-container .popup-content .submit-btn.data-v-f97bc692 {
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
background: #1976D2;
|
||||
color: #fff;
|
||||
border-radius: 44rpx;
|
||||
font-size: 30rpx;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
.my-container .popup-content .submit-btn.data-v-f97bc692:active {
|
||||
opacity: 0.9;
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const config_user = require("../../config/user.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
currentTab: 0,
|
||||
tabs: ["全部", "使用中", "已完成"],
|
||||
orderList: [
|
||||
{
|
||||
orderNo: "ORDER202403200001",
|
||||
status: "using",
|
||||
statusText: "使用中",
|
||||
deviceId: "FAN001",
|
||||
startTime: "2024-03-20 15:30",
|
||||
endTime: "",
|
||||
amount: "2.00"
|
||||
},
|
||||
{
|
||||
orderNo: "ORDER202403190001",
|
||||
status: "finished",
|
||||
statusText: "已完成",
|
||||
deviceId: "FAN002",
|
||||
startTime: "2024-03-19 13:00",
|
||||
endTime: "2024-03-19 15:00",
|
||||
amount: "4.00"
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
async onLoad() {
|
||||
const res = await config_user.getOrderList();
|
||||
common_vendor.index.__f__("log", "at pages/order/index.vue:84", res);
|
||||
},
|
||||
methods: {
|
||||
switchTab(index) {
|
||||
this.currentTab = index;
|
||||
}
|
||||
}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return common_vendor.e({
|
||||
a: common_vendor.f($data.tabs, (tab, index, i0) => {
|
||||
return {
|
||||
a: common_vendor.t(tab),
|
||||
b: index,
|
||||
c: $data.currentTab === index ? 1 : "",
|
||||
d: common_vendor.o(($event) => $options.switchTab(index), index)
|
||||
};
|
||||
}),
|
||||
b: common_vendor.f($data.orderList, (order, index, i0) => {
|
||||
return {
|
||||
a: common_vendor.t(order.orderNo),
|
||||
b: common_vendor.t(order.statusText),
|
||||
c: common_vendor.n(order.status),
|
||||
d: common_vendor.t(order.deviceId),
|
||||
e: common_vendor.t(order.startTime),
|
||||
f: common_vendor.t(order.endTime || "-"),
|
||||
g: common_vendor.t(order.amount),
|
||||
h: index
|
||||
};
|
||||
}),
|
||||
c: $data.orderList.length === 0
|
||||
}, $data.orderList.length === 0 ? {} : {});
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-17a44f9d"]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/order/index.js.map
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"navigationBarTitleText": "租借记录",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view class="order-container data-v-17a44f9d"><view class="tab-bar data-v-17a44f9d"><view wx:for="{{a}}" wx:for-item="tab" wx:key="b" class="{{['tab-item', 'data-v-17a44f9d', tab.c && 'active']}}" bindtap="{{tab.d}}">{{tab.a}}</view></view><view class="order-list data-v-17a44f9d"><view wx:for="{{b}}" wx:for-item="order" wx:key="h" class="order-item data-v-17a44f9d"><view class="order-header data-v-17a44f9d"><text class="order-no data-v-17a44f9d">订单号:{{order.a}}</text><text class="{{['order-status', 'data-v-17a44f9d', order.c]}}">{{order.b}}</text></view><view class="order-content data-v-17a44f9d"><view class="device-info data-v-17a44f9d"><text class="device-name data-v-17a44f9d">共享风扇</text><text class="device-id data-v-17a44f9d">设备号:{{order.d}}</text></view><view class="time-info data-v-17a44f9d"><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">开始时间:</text><text class="value data-v-17a44f9d">{{order.e}}</text></view><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">结束时间:</text><text class="value data-v-17a44f9d">{{order.f}}</text></view></view><view class="price-info data-v-17a44f9d"><text class="amount data-v-17a44f9d">¥{{order.g}}</text></view></view></view></view><view wx:if="{{c}}" class="empty-tip data-v-17a44f9d"><view class="empty-icon data-v-17a44f9d"></view><text class="data-v-17a44f9d">暂无订单记录</text></view></view>
|
||||
@@ -0,0 +1,138 @@
|
||||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
/* 颜色变量 */
|
||||
/* 行为相关颜色 */
|
||||
/* 文字基本颜色 */
|
||||
/* 背景颜色 */
|
||||
/* 边框颜色 */
|
||||
/* 尺寸变量 */
|
||||
/* 文字尺寸 */
|
||||
/* 图片尺寸 */
|
||||
/* Border Radius */
|
||||
/* 水平间距 */
|
||||
/* 垂直间距 */
|
||||
/* 透明度 */
|
||||
/* 文章场景相关 */
|
||||
.order-container.data-v-17a44f9d {
|
||||
min-height: 100vh;
|
||||
background: #f8f8f8;
|
||||
}
|
||||
.order-container .tab-bar.data-v-17a44f9d {
|
||||
display: flex;
|
||||
background: #fff;
|
||||
padding: 20rpx 0;
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.order-container .tab-bar .tab-item.data-v-17a44f9d {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
position: relative;
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
.order-container .tab-bar .tab-item.active.data-v-17a44f9d {
|
||||
color: #1976D2;
|
||||
font-weight: 500;
|
||||
}
|
||||
.order-container .tab-bar .tab-item.active.data-v-17a44f9d::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 40rpx;
|
||||
height: 4rpx;
|
||||
background: #1976D2;
|
||||
border-radius: 2rpx;
|
||||
}
|
||||
.order-container .order-list.data-v-17a44f9d {
|
||||
padding: 20rpx;
|
||||
}
|
||||
.order-container .order-list .order-item.data-v-17a44f9d {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
margin-bottom: 20rpx;
|
||||
padding: 30rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
.order-container .order-list .order-item .order-header.data-v-17a44f9d {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-bottom: 20rpx;
|
||||
border-bottom: 1rpx solid #f5f5f5;
|
||||
}
|
||||
.order-container .order-list .order-item .order-header .order-no.data-v-17a44f9d {
|
||||
font-size: 26rpx;
|
||||
color: #666;
|
||||
}
|
||||
.order-container .order-list .order-item .order-header .order-status.data-v-17a44f9d {
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.order-container .order-list .order-item .order-header .order-status.using.data-v-17a44f9d {
|
||||
color: #1976D2;
|
||||
}
|
||||
.order-container .order-list .order-item .order-header .order-status.finished.data-v-17a44f9d {
|
||||
color: #4CAF50;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content.data-v-17a44f9d {
|
||||
padding-top: 20rpx;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content .device-info.data-v-17a44f9d {
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content .device-info .device-name.data-v-17a44f9d {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content .device-info .device-id.data-v-17a44f9d {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content .time-info .time-item.data-v-17a44f9d {
|
||||
font-size: 26rpx;
|
||||
color: #666;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content .time-info .time-item .label.data-v-17a44f9d {
|
||||
color: #999;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content .price-info.data-v-17a44f9d {
|
||||
text-align: right;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
.order-container .order-list .order-item .order-content .price-info .amount.data-v-17a44f9d {
|
||||
font-size: 36rpx;
|
||||
color: #FF9800;
|
||||
font-weight: 500;
|
||||
}
|
||||
.order-container .empty-tip.data-v-17a44f9d {
|
||||
padding: 100rpx 0;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.order-container .empty-tip .empty-icon.data-v-17a44f9d {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
margin: 0 auto 20rpx;
|
||||
background: #f0f0f0;
|
||||
border-radius: 50%;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../../common/vendor.js");
|
||||
const util_index = require("../../../util/index.js");
|
||||
const config_user = require("../../../config/user.js");
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
async onLoad(option) {
|
||||
if (!common_vendor.index.getStorageSync("token")) {
|
||||
const res = await util_index.wxLogin();
|
||||
common_vendor.index.__f__("log", "at pages/serve/bagCheck/index.vue:26", 333, res);
|
||||
}
|
||||
const reuslt = await config_user.queryHasOrder(111);
|
||||
if (reuslt.data.length != 0) {
|
||||
common_vendor.index.reLaunch({
|
||||
url: `/pages/device/return?deviceNo=${option.deviceNo}`
|
||||
});
|
||||
} else {
|
||||
common_vendor.index.reLaunch({
|
||||
url: `/pages/device/detail?deviceNo=${option.deviceNo}`
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {}
|
||||
};
|
||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
return {};
|
||||
}
|
||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
|
||||
wx.createPage(MiniProgramPage);
|
||||
//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages/serve/bagCheck/index.js.map
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"navigationBarTitleText": "共享风扇",
|
||||
"usingComponents": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<view></view>
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"description": "项目配置文件。",
|
||||
"packOptions": {
|
||||
"ignore": [],
|
||||
"include": []
|
||||
},
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"es6": true,
|
||||
"postcss": false,
|
||||
"minified": false,
|
||||
"newFeature": true,
|
||||
"bigPackageSizeSupport": true,
|
||||
"babelSetting": {
|
||||
"ignore": [],
|
||||
"disablePlugins": [],
|
||||
"outputPath": ""
|
||||
},
|
||||
"condition": false
|
||||
},
|
||||
"compileType": "miniprogram",
|
||||
"libVersion": "3.7.4",
|
||||
"appid": "wxabe9cc4db1005fcb",
|
||||
"projectname": "fs",
|
||||
"condition": {},
|
||||
"editorSetting": {
|
||||
"tabIndent": "insertSpaces",
|
||||
"tabSize": 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
|
||||
"projectname": "fs",
|
||||
"setting": {
|
||||
"compileHotReLoad": true
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,62 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../common/vendor.js");
|
||||
const config_user = require("../config/user.js");
|
||||
const wxLogin = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
common_vendor.index.login({
|
||||
provider: "weixin",
|
||||
success: async (loginRes) => {
|
||||
try {
|
||||
if (loginRes.code) {
|
||||
const result = await config_user.login({
|
||||
code: loginRes.code,
|
||||
appid: "wxabe9cc4db1005fcb"
|
||||
});
|
||||
if (result.code === 200) {
|
||||
common_vendor.index.setStorageSync("token", result.data.LoginWxVo.access_token);
|
||||
common_vendor.index.setStorageSync("client_id", result.data.LoginWxVo.client_id);
|
||||
resolve(result.data);
|
||||
} else {
|
||||
throw new Error(result.message || "登录失败");
|
||||
}
|
||||
} else {
|
||||
throw new Error("获取微信登录凭证失败");
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.showToast({
|
||||
title: error.message || "登录失败",
|
||||
icon: "none"
|
||||
});
|
||||
reject(error);
|
||||
}
|
||||
},
|
||||
fail: (error) => {
|
||||
common_vendor.index.showToast({
|
||||
title: "微信登录失败",
|
||||
icon: "none"
|
||||
});
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
const getUserInfo = () => {
|
||||
return new Promise(async (res, rej) => {
|
||||
const result = await config_user.getMyIndexInfo({
|
||||
isHide: false
|
||||
});
|
||||
res(result);
|
||||
});
|
||||
};
|
||||
const getQueryString = function(url, name) {
|
||||
var reg = new RegExp("(^|&|/?)" + name + "=([^&|/?]*)(&|/?|$)", "i");
|
||||
var r = url.substr(1).match(reg);
|
||||
if (r != null) {
|
||||
return r[2];
|
||||
}
|
||||
return null;
|
||||
};
|
||||
exports.getQueryString = getQueryString;
|
||||
exports.getUserInfo = getUserInfo;
|
||||
exports.wxLogin = wxLogin;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/util/index.js.map
|
||||