diff --git a/config/url.js b/config/url.js
index 7108441..6a31d63 100644
--- a/config/url.js
+++ b/config/url.js
@@ -1,4 +1,4 @@
-// export const URL = "https://notify.gxfs123.com"
+// export const URL = "https://unifans.gxfs123.com"
export const URL = "http://127.0.0.1:8080"
-export const appid = "wx3ae63fb09936b379"
\ No newline at end of file
+export const appid = "wxe752f45e7f7aa271"
\ No newline at end of file
diff --git a/config/user.js b/config/user.js
index adbc6ff..f3d7b7a 100644
--- a/config/user.js
+++ b/config/user.js
@@ -18,6 +18,16 @@ export const getMyIndexInfo = (data) => {
})
}
+// 添加押金提现API
+export const withdrawDeposit = (orderId) => {
+ console.log('调用提现API,订单ID:', orderId)
+ return request({
+ url: `/app/withdraw/add/${orderId}`,
+ method: 'get',
+ hideLoading: true
+ })
+}
+
//获取所有全部订单
export const getOrderList = (data) => {
return request({
@@ -102,14 +112,7 @@ export const confirmPaymentAndRent = (orderId) => {
})
}
-//备用方法:直接发送租借指令
-export const sendRentCommand = (orderId) => {
- console.log(`直接发送租借指令, orderId: ${orderId}`)
- return request({
- url: `/app/device/sendRentCommand?orderId=${orderId}`,
- method: 'post'
- })
-}
+
//投诉反馈
export const addUserFeedback = (data) => {
diff --git a/main.js b/main.js
index 3337180..335b305 100644
--- a/main.js
+++ b/main.js
@@ -1,4 +1,5 @@
import App from './App'
+import { orderMonitor } from './utils/orderMonitor.js'
import uView from "uview-ui";
@@ -7,6 +8,10 @@ import uView from "uview-ui";
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
+
+// 注册全局订单监控服务
+Vue.prototype.$orderMonitor = orderMonitor
+
App.mpType = 'app'
Vue.use(uView)
const app = new Vue({
@@ -20,6 +25,9 @@ import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
+ // 注册全局订单监控服务到VUE3
+ app.config.globalProperties.$orderMonitor = orderMonitor
+
return {
app
}
diff --git a/manifest.json b/manifest.json
index 4656b91..638c563 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,6 +1,6 @@
{
"name" : "fs",
- "appid" : "__UNI__66470C9",
+ "appid" : "__UNI__4630191",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
@@ -50,7 +50,7 @@
"quickapp" : {},
/* 小程序特有相关 */
"mp-weixin" : {
- "appid" : "wx3ae63fb09936b379",
+ "appid" : "wxe752f45e7f7aa271",
"setting" : {
"urlCheck" : false
},
diff --git a/pages/deposit/index.vue b/pages/deposit/index.vue
index dcc9222..89de25b 100644
--- a/pages/deposit/index.vue
+++ b/pages/deposit/index.vue
@@ -4,7 +4,7 @@
押金余额
¥{{ depositAmount }}
-
+
@@ -21,7 +21,7 @@
-
+
押金记录
@@ -39,30 +39,150 @@
+
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/app.js b/unpackage/dist/build/mp-weixin/app.js
new file mode 100644
index 0000000..405b683
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/app.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./common/vendor.js"),n=require("./util/index.js"),e=require("./utils/orderMonitor.js");Math;const t={onLaunch:function(){console.log("App Launch")},onShow:async function(){console.log("App Show"),await this.autoLogin()},onHide:function(){console.log("App Hide")},methods:{async autoLogin(){try{const o=await n.wxLogin();console.log("自动登录成功:",o)}catch(o){console.error("自动登录失败:",o)}}}};function r(){const n=o.createSSRApp(t);return n.config.globalProperties.$orderMonitor=e.orderMonitor,{app:n}}r().app.mount("#app"),exports.createApp=r;
diff --git a/unpackage/dist/build/mp-weixin/app.json b/unpackage/dist/build/mp-weixin/app.json
new file mode 100644
index 0000000..0a54f7f
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/app.json
@@ -0,0 +1,42 @@
+{
+ "pages": [
+ "pages/index/index",
+ "pages/my/index",
+ "pages/deposit/index",
+ "pages/order/index",
+ "pages/order/payment",
+ "pages/feedback/index",
+ "pages/help/index",
+ "pages/device/detail",
+ "pages/serve/bagCheck/index",
+ "pages/return/index",
+ "pages/order/success",
+ "pages/order/return-success"
+ ],
+ "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": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/app.wxss b/unpackage/dist/build/mp-weixin/app.wxss
new file mode 100644
index 0000000..1f13b8c
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/app.wxss
@@ -0,0 +1,2 @@
+.u-relative,.u-rela{position:relative}.u-absolute,.u-abso{position:absolute}image{display:inline-block}view,text{box-sizing:border-box}.u-font-xs{font-size:22rpx}.u-font-sm{font-size:26rpx}.u-font-md{font-size:28rpx}.u-font-lg{font-size:30rpx}.u-font-xl{font-size:34rpx}.u-flex{display:flex;flex-direction:row;align-items:center}.u-flex-wrap{flex-wrap:wrap}.u-flex-nowrap{flex-wrap:nowrap}.u-col-center{align-items:center}.u-col-top{align-items:flex-start}.u-col-bottom{align-items:flex-end}.u-row-center{justify-content:center}.u-row-left{justify-content:flex-start}.u-row-right{justify-content:flex-end}.u-row-between{justify-content:space-between}.u-row-around{justify-content:space-around}.u-text-left{text-align:left}.u-text-center{text-align:center}.u-text-right{text-align:right}.u-flex-col{display:flex;flex-direction:column}.u-flex-0{flex:0}.u-flex-1{flex:1}.u-flex-2{flex:2}.u-flex-3{flex:3}.u-flex-4{flex:4}.u-flex-5{flex:5}.u-flex-6{flex:6}.u-flex-7{flex:7}.u-flex-8{flex:8}.u-flex-9{flex:9}.u-flex-10{flex:10}.u-flex-11{flex:11}.u-flex-12{flex:12}.u-font-9{font-size:9px}.u-font-10{font-size:10px}.u-font-11{font-size:11px}.u-font-12{font-size:12px}.u-font-13{font-size:13px}.u-font-14{font-size:14px}.u-font-15{font-size:15px}.u-font-16{font-size:16px}.u-font-17{font-size:17px}.u-font-18{font-size:18px}.u-font-19{font-size:19px}.u-font-20{font-size:20rpx}.u-font-21{font-size:21rpx}.u-font-22{font-size:22rpx}.u-font-23{font-size:23rpx}.u-font-24{font-size:24rpx}.u-font-25{font-size:25rpx}.u-font-26{font-size:26rpx}.u-font-27{font-size:27rpx}.u-font-28{font-size:28rpx}.u-font-29{font-size:29rpx}.u-font-30{font-size:30rpx}.u-font-31{font-size:31rpx}.u-font-32{font-size:32rpx}.u-font-33{font-size:33rpx}.u-font-34{font-size:34rpx}.u-font-35{font-size:35rpx}.u-font-36{font-size:36rpx}.u-font-37{font-size:37rpx}.u-font-38{font-size:38rpx}.u-font-39{font-size:39rpx}.u-font-40{font-size:40rpx}.u-margin-0,.u-m-0{margin:0rpx!important}.u-padding-0,.u-p-0{padding:0rpx!important}.u-m-l-0{margin-left:0rpx!important}.u-p-l-0{padding-left:0rpx!important}.u-margin-left-0{margin-left:0rpx!important}.u-padding-left-0{padding-left:0rpx!important}.u-m-t-0{margin-top:0rpx!important}.u-p-t-0{padding-top:0rpx!important}.u-margin-top-0{margin-top:0rpx!important}.u-padding-top-0{padding-top:0rpx!important}.u-m-r-0{margin-right:0rpx!important}.u-p-r-0{padding-right:0rpx!important}.u-margin-right-0{margin-right:0rpx!important}.u-padding-right-0{padding-right:0rpx!important}.u-m-b-0{margin-bottom:0rpx!important}.u-p-b-0{padding-bottom:0rpx!important}.u-margin-bottom-0{margin-bottom:0rpx!important}.u-padding-bottom-0{padding-bottom:0rpx!important}.u-margin-2,.u-m-2{margin:2rpx!important}.u-padding-2,.u-p-2{padding:2rpx!important}.u-m-l-2{margin-left:2rpx!important}.u-p-l-2{padding-left:2rpx!important}.u-margin-left-2{margin-left:2rpx!important}.u-padding-left-2{padding-left:2rpx!important}.u-m-t-2{margin-top:2rpx!important}.u-p-t-2{padding-top:2rpx!important}.u-margin-top-2{margin-top:2rpx!important}.u-padding-top-2{padding-top:2rpx!important}.u-m-r-2{margin-right:2rpx!important}.u-p-r-2{padding-right:2rpx!important}.u-margin-right-2{margin-right:2rpx!important}.u-padding-right-2{padding-right:2rpx!important}.u-m-b-2{margin-bottom:2rpx!important}.u-p-b-2{padding-bottom:2rpx!important}.u-margin-bottom-2{margin-bottom:2rpx!important}.u-padding-bottom-2{padding-bottom:2rpx!important}.u-margin-4,.u-m-4{margin:4rpx!important}.u-padding-4,.u-p-4{padding:4rpx!important}.u-m-l-4{margin-left:4rpx!important}.u-p-l-4{padding-left:4rpx!important}.u-margin-left-4{margin-left:4rpx!important}.u-padding-left-4{padding-left:4rpx!important}.u-m-t-4{margin-top:4rpx!important}.u-p-t-4{padding-top:4rpx!important}.u-margin-top-4{margin-top:4rpx!important}.u-padding-top-4{padding-top:4rpx!important}.u-m-r-4{margin-right:4rpx!important}.u-p-r-4{padding-right:4rpx!important}.u-margin-right-4{margin-right:4rpx!important}.u-padding-right-4{padding-right:4rpx!important}.u-m-b-4{margin-bottom:4rpx!important}.u-p-b-4{padding-bottom:4rpx!important}.u-margin-bottom-4{margin-bottom:4rpx!important}.u-padding-bottom-4{padding-bottom:4rpx!important}.u-margin-5,.u-m-5{margin:5rpx!important}.u-padding-5,.u-p-5{padding:5rpx!important}.u-m-l-5{margin-left:5rpx!important}.u-p-l-5{padding-left:5rpx!important}.u-margin-left-5{margin-left:5rpx!important}.u-padding-left-5{padding-left:5rpx!important}.u-m-t-5{margin-top:5rpx!important}.u-p-t-5{padding-top:5rpx!important}.u-margin-top-5{margin-top:5rpx!important}.u-padding-top-5{padding-top:5rpx!important}.u-m-r-5{margin-right:5rpx!important}.u-p-r-5{padding-right:5rpx!important}.u-margin-right-5{margin-right:5rpx!important}.u-padding-right-5{padding-right:5rpx!important}.u-m-b-5{margin-bottom:5rpx!important}.u-p-b-5{padding-bottom:5rpx!important}.u-margin-bottom-5{margin-bottom:5rpx!important}.u-padding-bottom-5{padding-bottom:5rpx!important}.u-margin-6,.u-m-6{margin:6rpx!important}.u-padding-6,.u-p-6{padding:6rpx!important}.u-m-l-6{margin-left:6rpx!important}.u-p-l-6{padding-left:6rpx!important}.u-margin-left-6{margin-left:6rpx!important}.u-padding-left-6{padding-left:6rpx!important}.u-m-t-6{margin-top:6rpx!important}.u-p-t-6{padding-top:6rpx!important}.u-margin-top-6{margin-top:6rpx!important}.u-padding-top-6{padding-top:6rpx!important}.u-m-r-6{margin-right:6rpx!important}.u-p-r-6{padding-right:6rpx!important}.u-margin-right-6{margin-right:6rpx!important}.u-padding-right-6{padding-right:6rpx!important}.u-m-b-6{margin-bottom:6rpx!important}.u-p-b-6{padding-bottom:6rpx!important}.u-margin-bottom-6{margin-bottom:6rpx!important}.u-padding-bottom-6{padding-bottom:6rpx!important}.u-margin-8,.u-m-8{margin:8rpx!important}.u-padding-8,.u-p-8{padding:8rpx!important}.u-m-l-8{margin-left:8rpx!important}.u-p-l-8{padding-left:8rpx!important}.u-margin-left-8{margin-left:8rpx!important}.u-padding-left-8{padding-left:8rpx!important}.u-m-t-8{margin-top:8rpx!important}.u-p-t-8{padding-top:8rpx!important}.u-margin-top-8{margin-top:8rpx!important}.u-padding-top-8{padding-top:8rpx!important}.u-m-r-8{margin-right:8rpx!important}.u-p-r-8{padding-right:8rpx!important}.u-margin-right-8{margin-right:8rpx!important}.u-padding-right-8{padding-right:8rpx!important}.u-m-b-8{margin-bottom:8rpx!important}.u-p-b-8{padding-bottom:8rpx!important}.u-margin-bottom-8{margin-bottom:8rpx!important}.u-padding-bottom-8{padding-bottom:8rpx!important}.u-margin-10,.u-m-10{margin:10rpx!important}.u-padding-10,.u-p-10{padding:10rpx!important}.u-m-l-10{margin-left:10rpx!important}.u-p-l-10{padding-left:10rpx!important}.u-margin-left-10{margin-left:10rpx!important}.u-padding-left-10{padding-left:10rpx!important}.u-m-t-10{margin-top:10rpx!important}.u-p-t-10{padding-top:10rpx!important}.u-margin-top-10{margin-top:10rpx!important}.u-padding-top-10{padding-top:10rpx!important}.u-m-r-10{margin-right:10rpx!important}.u-p-r-10{padding-right:10rpx!important}.u-margin-right-10{margin-right:10rpx!important}.u-padding-right-10{padding-right:10rpx!important}.u-m-b-10{margin-bottom:10rpx!important}.u-p-b-10{padding-bottom:10rpx!important}.u-margin-bottom-10{margin-bottom:10rpx!important}.u-padding-bottom-10{padding-bottom:10rpx!important}.u-margin-12,.u-m-12{margin:12rpx!important}.u-padding-12,.u-p-12{padding:12rpx!important}.u-m-l-12{margin-left:12rpx!important}.u-p-l-12{padding-left:12rpx!important}.u-margin-left-12{margin-left:12rpx!important}.u-padding-left-12{padding-left:12rpx!important}.u-m-t-12{margin-top:12rpx!important}.u-p-t-12{padding-top:12rpx!important}.u-margin-top-12{margin-top:12rpx!important}.u-padding-top-12{padding-top:12rpx!important}.u-m-r-12{margin-right:12rpx!important}.u-p-r-12{padding-right:12rpx!important}.u-margin-right-12{margin-right:12rpx!important}.u-padding-right-12{padding-right:12rpx!important}.u-m-b-12{margin-bottom:12rpx!important}.u-p-b-12{padding-bottom:12rpx!important}.u-margin-bottom-12{margin-bottom:12rpx!important}.u-padding-bottom-12{padding-bottom:12rpx!important}.u-margin-14,.u-m-14{margin:14rpx!important}.u-padding-14,.u-p-14{padding:14rpx!important}.u-m-l-14{margin-left:14rpx!important}.u-p-l-14{padding-left:14rpx!important}.u-margin-left-14{margin-left:14rpx!important}.u-padding-left-14{padding-left:14rpx!important}.u-m-t-14{margin-top:14rpx!important}.u-p-t-14{padding-top:14rpx!important}.u-margin-top-14{margin-top:14rpx!important}.u-padding-top-14{padding-top:14rpx!important}.u-m-r-14{margin-right:14rpx!important}.u-p-r-14{padding-right:14rpx!important}.u-margin-right-14{margin-right:14rpx!important}.u-padding-right-14{padding-right:14rpx!important}.u-m-b-14{margin-bottom:14rpx!important}.u-p-b-14{padding-bottom:14rpx!important}.u-margin-bottom-14{margin-bottom:14rpx!important}.u-padding-bottom-14{padding-bottom:14rpx!important}.u-margin-15,.u-m-15{margin:15rpx!important}.u-padding-15,.u-p-15{padding:15rpx!important}.u-m-l-15{margin-left:15rpx!important}.u-p-l-15{padding-left:15rpx!important}.u-margin-left-15{margin-left:15rpx!important}.u-padding-left-15{padding-left:15rpx!important}.u-m-t-15{margin-top:15rpx!important}.u-p-t-15{padding-top:15rpx!important}.u-margin-top-15{margin-top:15rpx!important}.u-padding-top-15{padding-top:15rpx!important}.u-m-r-15{margin-right:15rpx!important}.u-p-r-15{padding-right:15rpx!important}.u-margin-right-15{margin-right:15rpx!important}.u-padding-right-15{padding-right:15rpx!important}.u-m-b-15{margin-bottom:15rpx!important}.u-p-b-15{padding-bottom:15rpx!important}.u-margin-bottom-15{margin-bottom:15rpx!important}.u-padding-bottom-15{padding-bottom:15rpx!important}.u-margin-16,.u-m-16{margin:16rpx!important}.u-padding-16,.u-p-16{padding:16rpx!important}.u-m-l-16{margin-left:16rpx!important}.u-p-l-16{padding-left:16rpx!important}.u-margin-left-16{margin-left:16rpx!important}.u-padding-left-16{padding-left:16rpx!important}.u-m-t-16{margin-top:16rpx!important}.u-p-t-16{padding-top:16rpx!important}.u-margin-top-16{margin-top:16rpx!important}.u-padding-top-16{padding-top:16rpx!important}.u-m-r-16{margin-right:16rpx!important}.u-p-r-16{padding-right:16rpx!important}.u-margin-right-16{margin-right:16rpx!important}.u-padding-right-16{padding-right:16rpx!important}.u-m-b-16{margin-bottom:16rpx!important}.u-p-b-16{padding-bottom:16rpx!important}.u-margin-bottom-16{margin-bottom:16rpx!important}.u-padding-bottom-16{padding-bottom:16rpx!important}.u-margin-18,.u-m-18{margin:18rpx!important}.u-padding-18,.u-p-18{padding:18rpx!important}.u-m-l-18{margin-left:18rpx!important}.u-p-l-18{padding-left:18rpx!important}.u-margin-left-18{margin-left:18rpx!important}.u-padding-left-18{padding-left:18rpx!important}.u-m-t-18{margin-top:18rpx!important}.u-p-t-18{padding-top:18rpx!important}.u-margin-top-18{margin-top:18rpx!important}.u-padding-top-18{padding-top:18rpx!important}.u-m-r-18{margin-right:18rpx!important}.u-p-r-18{padding-right:18rpx!important}.u-margin-right-18{margin-right:18rpx!important}.u-padding-right-18{padding-right:18rpx!important}.u-m-b-18{margin-bottom:18rpx!important}.u-p-b-18{padding-bottom:18rpx!important}.u-margin-bottom-18{margin-bottom:18rpx!important}.u-padding-bottom-18{padding-bottom:18rpx!important}.u-margin-20,.u-m-20{margin:20rpx!important}.u-padding-20,.u-p-20{padding:20rpx!important}.u-m-l-20{margin-left:20rpx!important}.u-p-l-20{padding-left:20rpx!important}.u-margin-left-20{margin-left:20rpx!important}.u-padding-left-20{padding-left:20rpx!important}.u-m-t-20{margin-top:20rpx!important}.u-p-t-20{padding-top:20rpx!important}.u-margin-top-20{margin-top:20rpx!important}.u-padding-top-20{padding-top:20rpx!important}.u-m-r-20{margin-right:20rpx!important}.u-p-r-20{padding-right:20rpx!important}.u-margin-right-20{margin-right:20rpx!important}.u-padding-right-20{padding-right:20rpx!important}.u-m-b-20{margin-bottom:20rpx!important}.u-p-b-20{padding-bottom:20rpx!important}.u-margin-bottom-20{margin-bottom:20rpx!important}.u-padding-bottom-20{padding-bottom:20rpx!important}.u-margin-22,.u-m-22{margin:22rpx!important}.u-padding-22,.u-p-22{padding:22rpx!important}.u-m-l-22{margin-left:22rpx!important}.u-p-l-22{padding-left:22rpx!important}.u-margin-left-22{margin-left:22rpx!important}.u-padding-left-22{padding-left:22rpx!important}.u-m-t-22{margin-top:22rpx!important}.u-p-t-22{padding-top:22rpx!important}.u-margin-top-22{margin-top:22rpx!important}.u-padding-top-22{padding-top:22rpx!important}.u-m-r-22{margin-right:22rpx!important}.u-p-r-22{padding-right:22rpx!important}.u-margin-right-22{margin-right:22rpx!important}.u-padding-right-22{padding-right:22rpx!important}.u-m-b-22{margin-bottom:22rpx!important}.u-p-b-22{padding-bottom:22rpx!important}.u-margin-bottom-22{margin-bottom:22rpx!important}.u-padding-bottom-22{padding-bottom:22rpx!important}.u-margin-24,.u-m-24{margin:24rpx!important}.u-padding-24,.u-p-24{padding:24rpx!important}.u-m-l-24{margin-left:24rpx!important}.u-p-l-24{padding-left:24rpx!important}.u-margin-left-24{margin-left:24rpx!important}.u-padding-left-24{padding-left:24rpx!important}.u-m-t-24{margin-top:24rpx!important}.u-p-t-24{padding-top:24rpx!important}.u-margin-top-24{margin-top:24rpx!important}.u-padding-top-24{padding-top:24rpx!important}.u-m-r-24{margin-right:24rpx!important}.u-p-r-24{padding-right:24rpx!important}.u-margin-right-24{margin-right:24rpx!important}.u-padding-right-24{padding-right:24rpx!important}.u-m-b-24{margin-bottom:24rpx!important}.u-p-b-24{padding-bottom:24rpx!important}.u-margin-bottom-24{margin-bottom:24rpx!important}.u-padding-bottom-24{padding-bottom:24rpx!important}.u-margin-25,.u-m-25{margin:25rpx!important}.u-padding-25,.u-p-25{padding:25rpx!important}.u-m-l-25{margin-left:25rpx!important}.u-p-l-25{padding-left:25rpx!important}.u-margin-left-25{margin-left:25rpx!important}.u-padding-left-25{padding-left:25rpx!important}.u-m-t-25{margin-top:25rpx!important}.u-p-t-25{padding-top:25rpx!important}.u-margin-top-25{margin-top:25rpx!important}.u-padding-top-25{padding-top:25rpx!important}.u-m-r-25{margin-right:25rpx!important}.u-p-r-25{padding-right:25rpx!important}.u-margin-right-25{margin-right:25rpx!important}.u-padding-right-25{padding-right:25rpx!important}.u-m-b-25{margin-bottom:25rpx!important}.u-p-b-25{padding-bottom:25rpx!important}.u-margin-bottom-25{margin-bottom:25rpx!important}.u-padding-bottom-25{padding-bottom:25rpx!important}.u-margin-26,.u-m-26{margin:26rpx!important}.u-padding-26,.u-p-26{padding:26rpx!important}.u-m-l-26{margin-left:26rpx!important}.u-p-l-26{padding-left:26rpx!important}.u-margin-left-26{margin-left:26rpx!important}.u-padding-left-26{padding-left:26rpx!important}.u-m-t-26{margin-top:26rpx!important}.u-p-t-26{padding-top:26rpx!important}.u-margin-top-26{margin-top:26rpx!important}.u-padding-top-26{padding-top:26rpx!important}.u-m-r-26{margin-right:26rpx!important}.u-p-r-26{padding-right:26rpx!important}.u-margin-right-26{margin-right:26rpx!important}.u-padding-right-26{padding-right:26rpx!important}.u-m-b-26{margin-bottom:26rpx!important}.u-p-b-26{padding-bottom:26rpx!important}.u-margin-bottom-26{margin-bottom:26rpx!important}.u-padding-bottom-26{padding-bottom:26rpx!important}.u-margin-28,.u-m-28{margin:28rpx!important}.u-padding-28,.u-p-28{padding:28rpx!important}.u-m-l-28{margin-left:28rpx!important}.u-p-l-28{padding-left:28rpx!important}.u-margin-left-28{margin-left:28rpx!important}.u-padding-left-28{padding-left:28rpx!important}.u-m-t-28{margin-top:28rpx!important}.u-p-t-28{padding-top:28rpx!important}.u-margin-top-28{margin-top:28rpx!important}.u-padding-top-28{padding-top:28rpx!important}.u-m-r-28{margin-right:28rpx!important}.u-p-r-28{padding-right:28rpx!important}.u-margin-right-28{margin-right:28rpx!important}.u-padding-right-28{padding-right:28rpx!important}.u-m-b-28{margin-bottom:28rpx!important}.u-p-b-28{padding-bottom:28rpx!important}.u-margin-bottom-28{margin-bottom:28rpx!important}.u-padding-bottom-28{padding-bottom:28rpx!important}.u-margin-30,.u-m-30{margin:30rpx!important}.u-padding-30,.u-p-30{padding:30rpx!important}.u-m-l-30{margin-left:30rpx!important}.u-p-l-30{padding-left:30rpx!important}.u-margin-left-30{margin-left:30rpx!important}.u-padding-left-30{padding-left:30rpx!important}.u-m-t-30{margin-top:30rpx!important}.u-p-t-30{padding-top:30rpx!important}.u-margin-top-30{margin-top:30rpx!important}.u-padding-top-30{padding-top:30rpx!important}.u-m-r-30{margin-right:30rpx!important}.u-p-r-30{padding-right:30rpx!important}.u-margin-right-30{margin-right:30rpx!important}.u-padding-right-30{padding-right:30rpx!important}.u-m-b-30{margin-bottom:30rpx!important}.u-p-b-30{padding-bottom:30rpx!important}.u-margin-bottom-30{margin-bottom:30rpx!important}.u-padding-bottom-30{padding-bottom:30rpx!important}.u-margin-32,.u-m-32{margin:32rpx!important}.u-padding-32,.u-p-32{padding:32rpx!important}.u-m-l-32{margin-left:32rpx!important}.u-p-l-32{padding-left:32rpx!important}.u-margin-left-32{margin-left:32rpx!important}.u-padding-left-32{padding-left:32rpx!important}.u-m-t-32{margin-top:32rpx!important}.u-p-t-32{padding-top:32rpx!important}.u-margin-top-32{margin-top:32rpx!important}.u-padding-top-32{padding-top:32rpx!important}.u-m-r-32{margin-right:32rpx!important}.u-p-r-32{padding-right:32rpx!important}.u-margin-right-32{margin-right:32rpx!important}.u-padding-right-32{padding-right:32rpx!important}.u-m-b-32{margin-bottom:32rpx!important}.u-p-b-32{padding-bottom:32rpx!important}.u-margin-bottom-32{margin-bottom:32rpx!important}.u-padding-bottom-32{padding-bottom:32rpx!important}.u-margin-34,.u-m-34{margin:34rpx!important}.u-padding-34,.u-p-34{padding:34rpx!important}.u-m-l-34{margin-left:34rpx!important}.u-p-l-34{padding-left:34rpx!important}.u-margin-left-34{margin-left:34rpx!important}.u-padding-left-34{padding-left:34rpx!important}.u-m-t-34{margin-top:34rpx!important}.u-p-t-34{padding-top:34rpx!important}.u-margin-top-34{margin-top:34rpx!important}.u-padding-top-34{padding-top:34rpx!important}.u-m-r-34{margin-right:34rpx!important}.u-p-r-34{padding-right:34rpx!important}.u-margin-right-34{margin-right:34rpx!important}.u-padding-right-34{padding-right:34rpx!important}.u-m-b-34{margin-bottom:34rpx!important}.u-p-b-34{padding-bottom:34rpx!important}.u-margin-bottom-34{margin-bottom:34rpx!important}.u-padding-bottom-34{padding-bottom:34rpx!important}.u-margin-35,.u-m-35{margin:35rpx!important}.u-padding-35,.u-p-35{padding:35rpx!important}.u-m-l-35{margin-left:35rpx!important}.u-p-l-35{padding-left:35rpx!important}.u-margin-left-35{margin-left:35rpx!important}.u-padding-left-35{padding-left:35rpx!important}.u-m-t-35{margin-top:35rpx!important}.u-p-t-35{padding-top:35rpx!important}.u-margin-top-35{margin-top:35rpx!important}.u-padding-top-35{padding-top:35rpx!important}.u-m-r-35{margin-right:35rpx!important}.u-p-r-35{padding-right:35rpx!important}.u-margin-right-35{margin-right:35rpx!important}.u-padding-right-35{padding-right:35rpx!important}.u-m-b-35{margin-bottom:35rpx!important}.u-p-b-35{padding-bottom:35rpx!important}.u-margin-bottom-35{margin-bottom:35rpx!important}.u-padding-bottom-35{padding-bottom:35rpx!important}.u-margin-36,.u-m-36{margin:36rpx!important}.u-padding-36,.u-p-36{padding:36rpx!important}.u-m-l-36{margin-left:36rpx!important}.u-p-l-36{padding-left:36rpx!important}.u-margin-left-36{margin-left:36rpx!important}.u-padding-left-36{padding-left:36rpx!important}.u-m-t-36{margin-top:36rpx!important}.u-p-t-36{padding-top:36rpx!important}.u-margin-top-36{margin-top:36rpx!important}.u-padding-top-36{padding-top:36rpx!important}.u-m-r-36{margin-right:36rpx!important}.u-p-r-36{padding-right:36rpx!important}.u-margin-right-36{margin-right:36rpx!important}.u-padding-right-36{padding-right:36rpx!important}.u-m-b-36{margin-bottom:36rpx!important}.u-p-b-36{padding-bottom:36rpx!important}.u-margin-bottom-36{margin-bottom:36rpx!important}.u-padding-bottom-36{padding-bottom:36rpx!important}.u-margin-38,.u-m-38{margin:38rpx!important}.u-padding-38,.u-p-38{padding:38rpx!important}.u-m-l-38{margin-left:38rpx!important}.u-p-l-38{padding-left:38rpx!important}.u-margin-left-38{margin-left:38rpx!important}.u-padding-left-38{padding-left:38rpx!important}.u-m-t-38{margin-top:38rpx!important}.u-p-t-38{padding-top:38rpx!important}.u-margin-top-38{margin-top:38rpx!important}.u-padding-top-38{padding-top:38rpx!important}.u-m-r-38{margin-right:38rpx!important}.u-p-r-38{padding-right:38rpx!important}.u-margin-right-38{margin-right:38rpx!important}.u-padding-right-38{padding-right:38rpx!important}.u-m-b-38{margin-bottom:38rpx!important}.u-p-b-38{padding-bottom:38rpx!important}.u-margin-bottom-38{margin-bottom:38rpx!important}.u-padding-bottom-38{padding-bottom:38rpx!important}.u-margin-40,.u-m-40{margin:40rpx!important}.u-padding-40,.u-p-40{padding:40rpx!important}.u-m-l-40{margin-left:40rpx!important}.u-p-l-40{padding-left:40rpx!important}.u-margin-left-40{margin-left:40rpx!important}.u-padding-left-40{padding-left:40rpx!important}.u-m-t-40{margin-top:40rpx!important}.u-p-t-40{padding-top:40rpx!important}.u-margin-top-40{margin-top:40rpx!important}.u-padding-top-40{padding-top:40rpx!important}.u-m-r-40{margin-right:40rpx!important}.u-p-r-40{padding-right:40rpx!important}.u-margin-right-40{margin-right:40rpx!important}.u-padding-right-40{padding-right:40rpx!important}.u-m-b-40{margin-bottom:40rpx!important}.u-p-b-40{padding-bottom:40rpx!important}.u-margin-bottom-40{margin-bottom:40rpx!important}.u-padding-bottom-40{padding-bottom:40rpx!important}.u-margin-42,.u-m-42{margin:42rpx!important}.u-padding-42,.u-p-42{padding:42rpx!important}.u-m-l-42{margin-left:42rpx!important}.u-p-l-42{padding-left:42rpx!important}.u-margin-left-42{margin-left:42rpx!important}.u-padding-left-42{padding-left:42rpx!important}.u-m-t-42{margin-top:42rpx!important}.u-p-t-42{padding-top:42rpx!important}.u-margin-top-42{margin-top:42rpx!important}.u-padding-top-42{padding-top:42rpx!important}.u-m-r-42{margin-right:42rpx!important}.u-p-r-42{padding-right:42rpx!important}.u-margin-right-42{margin-right:42rpx!important}.u-padding-right-42{padding-right:42rpx!important}.u-m-b-42{margin-bottom:42rpx!important}.u-p-b-42{padding-bottom:42rpx!important}.u-margin-bottom-42{margin-bottom:42rpx!important}.u-padding-bottom-42{padding-bottom:42rpx!important}.u-margin-44,.u-m-44{margin:44rpx!important}.u-padding-44,.u-p-44{padding:44rpx!important}.u-m-l-44{margin-left:44rpx!important}.u-p-l-44{padding-left:44rpx!important}.u-margin-left-44{margin-left:44rpx!important}.u-padding-left-44{padding-left:44rpx!important}.u-m-t-44{margin-top:44rpx!important}.u-p-t-44{padding-top:44rpx!important}.u-margin-top-44{margin-top:44rpx!important}.u-padding-top-44{padding-top:44rpx!important}.u-m-r-44{margin-right:44rpx!important}.u-p-r-44{padding-right:44rpx!important}.u-margin-right-44{margin-right:44rpx!important}.u-padding-right-44{padding-right:44rpx!important}.u-m-b-44{margin-bottom:44rpx!important}.u-p-b-44{padding-bottom:44rpx!important}.u-margin-bottom-44{margin-bottom:44rpx!important}.u-padding-bottom-44{padding-bottom:44rpx!important}.u-margin-45,.u-m-45{margin:45rpx!important}.u-padding-45,.u-p-45{padding:45rpx!important}.u-m-l-45{margin-left:45rpx!important}.u-p-l-45{padding-left:45rpx!important}.u-margin-left-45{margin-left:45rpx!important}.u-padding-left-45{padding-left:45rpx!important}.u-m-t-45{margin-top:45rpx!important}.u-p-t-45{padding-top:45rpx!important}.u-margin-top-45{margin-top:45rpx!important}.u-padding-top-45{padding-top:45rpx!important}.u-m-r-45{margin-right:45rpx!important}.u-p-r-45{padding-right:45rpx!important}.u-margin-right-45{margin-right:45rpx!important}.u-padding-right-45{padding-right:45rpx!important}.u-m-b-45{margin-bottom:45rpx!important}.u-p-b-45{padding-bottom:45rpx!important}.u-margin-bottom-45{margin-bottom:45rpx!important}.u-padding-bottom-45{padding-bottom:45rpx!important}.u-margin-46,.u-m-46{margin:46rpx!important}.u-padding-46,.u-p-46{padding:46rpx!important}.u-m-l-46{margin-left:46rpx!important}.u-p-l-46{padding-left:46rpx!important}.u-margin-left-46{margin-left:46rpx!important}.u-padding-left-46{padding-left:46rpx!important}.u-m-t-46{margin-top:46rpx!important}.u-p-t-46{padding-top:46rpx!important}.u-margin-top-46{margin-top:46rpx!important}.u-padding-top-46{padding-top:46rpx!important}.u-m-r-46{margin-right:46rpx!important}.u-p-r-46{padding-right:46rpx!important}.u-margin-right-46{margin-right:46rpx!important}.u-padding-right-46{padding-right:46rpx!important}.u-m-b-46{margin-bottom:46rpx!important}.u-p-b-46{padding-bottom:46rpx!important}.u-margin-bottom-46{margin-bottom:46rpx!important}.u-padding-bottom-46{padding-bottom:46rpx!important}.u-margin-48,.u-m-48{margin:48rpx!important}.u-padding-48,.u-p-48{padding:48rpx!important}.u-m-l-48{margin-left:48rpx!important}.u-p-l-48{padding-left:48rpx!important}.u-margin-left-48{margin-left:48rpx!important}.u-padding-left-48{padding-left:48rpx!important}.u-m-t-48{margin-top:48rpx!important}.u-p-t-48{padding-top:48rpx!important}.u-margin-top-48{margin-top:48rpx!important}.u-padding-top-48{padding-top:48rpx!important}.u-m-r-48{margin-right:48rpx!important}.u-p-r-48{padding-right:48rpx!important}.u-margin-right-48{margin-right:48rpx!important}.u-padding-right-48{padding-right:48rpx!important}.u-m-b-48{margin-bottom:48rpx!important}.u-p-b-48{padding-bottom:48rpx!important}.u-margin-bottom-48{margin-bottom:48rpx!important}.u-padding-bottom-48{padding-bottom:48rpx!important}.u-margin-50,.u-m-50{margin:50rpx!important}.u-padding-50,.u-p-50{padding:50rpx!important}.u-m-l-50{margin-left:50rpx!important}.u-p-l-50{padding-left:50rpx!important}.u-margin-left-50{margin-left:50rpx!important}.u-padding-left-50{padding-left:50rpx!important}.u-m-t-50{margin-top:50rpx!important}.u-p-t-50{padding-top:50rpx!important}.u-margin-top-50{margin-top:50rpx!important}.u-padding-top-50{padding-top:50rpx!important}.u-m-r-50{margin-right:50rpx!important}.u-p-r-50{padding-right:50rpx!important}.u-margin-right-50{margin-right:50rpx!important}.u-padding-right-50{padding-right:50rpx!important}.u-m-b-50{margin-bottom:50rpx!important}.u-p-b-50{padding-bottom:50rpx!important}.u-margin-bottom-50{margin-bottom:50rpx!important}.u-padding-bottom-50{padding-bottom:50rpx!important}.u-margin-52,.u-m-52{margin:52rpx!important}.u-padding-52,.u-p-52{padding:52rpx!important}.u-m-l-52{margin-left:52rpx!important}.u-p-l-52{padding-left:52rpx!important}.u-margin-left-52{margin-left:52rpx!important}.u-padding-left-52{padding-left:52rpx!important}.u-m-t-52{margin-top:52rpx!important}.u-p-t-52{padding-top:52rpx!important}.u-margin-top-52{margin-top:52rpx!important}.u-padding-top-52{padding-top:52rpx!important}.u-m-r-52{margin-right:52rpx!important}.u-p-r-52{padding-right:52rpx!important}.u-margin-right-52{margin-right:52rpx!important}.u-padding-right-52{padding-right:52rpx!important}.u-m-b-52{margin-bottom:52rpx!important}.u-p-b-52{padding-bottom:52rpx!important}.u-margin-bottom-52{margin-bottom:52rpx!important}.u-padding-bottom-52{padding-bottom:52rpx!important}.u-margin-54,.u-m-54{margin:54rpx!important}.u-padding-54,.u-p-54{padding:54rpx!important}.u-m-l-54{margin-left:54rpx!important}.u-p-l-54{padding-left:54rpx!important}.u-margin-left-54{margin-left:54rpx!important}.u-padding-left-54{padding-left:54rpx!important}.u-m-t-54{margin-top:54rpx!important}.u-p-t-54{padding-top:54rpx!important}.u-margin-top-54{margin-top:54rpx!important}.u-padding-top-54{padding-top:54rpx!important}.u-m-r-54{margin-right:54rpx!important}.u-p-r-54{padding-right:54rpx!important}.u-margin-right-54{margin-right:54rpx!important}.u-padding-right-54{padding-right:54rpx!important}.u-m-b-54{margin-bottom:54rpx!important}.u-p-b-54{padding-bottom:54rpx!important}.u-margin-bottom-54{margin-bottom:54rpx!important}.u-padding-bottom-54{padding-bottom:54rpx!important}.u-margin-55,.u-m-55{margin:55rpx!important}.u-padding-55,.u-p-55{padding:55rpx!important}.u-m-l-55{margin-left:55rpx!important}.u-p-l-55{padding-left:55rpx!important}.u-margin-left-55{margin-left:55rpx!important}.u-padding-left-55{padding-left:55rpx!important}.u-m-t-55{margin-top:55rpx!important}.u-p-t-55{padding-top:55rpx!important}.u-margin-top-55{margin-top:55rpx!important}.u-padding-top-55{padding-top:55rpx!important}.u-m-r-55{margin-right:55rpx!important}.u-p-r-55{padding-right:55rpx!important}.u-margin-right-55{margin-right:55rpx!important}.u-padding-right-55{padding-right:55rpx!important}.u-m-b-55{margin-bottom:55rpx!important}.u-p-b-55{padding-bottom:55rpx!important}.u-margin-bottom-55{margin-bottom:55rpx!important}.u-padding-bottom-55{padding-bottom:55rpx!important}.u-margin-56,.u-m-56{margin:56rpx!important}.u-padding-56,.u-p-56{padding:56rpx!important}.u-m-l-56{margin-left:56rpx!important}.u-p-l-56{padding-left:56rpx!important}.u-margin-left-56{margin-left:56rpx!important}.u-padding-left-56{padding-left:56rpx!important}.u-m-t-56{margin-top:56rpx!important}.u-p-t-56{padding-top:56rpx!important}.u-margin-top-56{margin-top:56rpx!important}.u-padding-top-56{padding-top:56rpx!important}.u-m-r-56{margin-right:56rpx!important}.u-p-r-56{padding-right:56rpx!important}.u-margin-right-56{margin-right:56rpx!important}.u-padding-right-56{padding-right:56rpx!important}.u-m-b-56{margin-bottom:56rpx!important}.u-p-b-56{padding-bottom:56rpx!important}.u-margin-bottom-56{margin-bottom:56rpx!important}.u-padding-bottom-56{padding-bottom:56rpx!important}.u-margin-58,.u-m-58{margin:58rpx!important}.u-padding-58,.u-p-58{padding:58rpx!important}.u-m-l-58{margin-left:58rpx!important}.u-p-l-58{padding-left:58rpx!important}.u-margin-left-58{margin-left:58rpx!important}.u-padding-left-58{padding-left:58rpx!important}.u-m-t-58{margin-top:58rpx!important}.u-p-t-58{padding-top:58rpx!important}.u-margin-top-58{margin-top:58rpx!important}.u-padding-top-58{padding-top:58rpx!important}.u-m-r-58{margin-right:58rpx!important}.u-p-r-58{padding-right:58rpx!important}.u-margin-right-58{margin-right:58rpx!important}.u-padding-right-58{padding-right:58rpx!important}.u-m-b-58{margin-bottom:58rpx!important}.u-p-b-58{padding-bottom:58rpx!important}.u-margin-bottom-58{margin-bottom:58rpx!important}.u-padding-bottom-58{padding-bottom:58rpx!important}.u-margin-60,.u-m-60{margin:60rpx!important}.u-padding-60,.u-p-60{padding:60rpx!important}.u-m-l-60{margin-left:60rpx!important}.u-p-l-60{padding-left:60rpx!important}.u-margin-left-60{margin-left:60rpx!important}.u-padding-left-60{padding-left:60rpx!important}.u-m-t-60{margin-top:60rpx!important}.u-p-t-60{padding-top:60rpx!important}.u-margin-top-60{margin-top:60rpx!important}.u-padding-top-60{padding-top:60rpx!important}.u-m-r-60{margin-right:60rpx!important}.u-p-r-60{padding-right:60rpx!important}.u-margin-right-60{margin-right:60rpx!important}.u-padding-right-60{padding-right:60rpx!important}.u-m-b-60{margin-bottom:60rpx!important}.u-p-b-60{padding-bottom:60rpx!important}.u-margin-bottom-60{margin-bottom:60rpx!important}.u-padding-bottom-60{padding-bottom:60rpx!important}.u-margin-62,.u-m-62{margin:62rpx!important}.u-padding-62,.u-p-62{padding:62rpx!important}.u-m-l-62{margin-left:62rpx!important}.u-p-l-62{padding-left:62rpx!important}.u-margin-left-62{margin-left:62rpx!important}.u-padding-left-62{padding-left:62rpx!important}.u-m-t-62{margin-top:62rpx!important}.u-p-t-62{padding-top:62rpx!important}.u-margin-top-62{margin-top:62rpx!important}.u-padding-top-62{padding-top:62rpx!important}.u-m-r-62{margin-right:62rpx!important}.u-p-r-62{padding-right:62rpx!important}.u-margin-right-62{margin-right:62rpx!important}.u-padding-right-62{padding-right:62rpx!important}.u-m-b-62{margin-bottom:62rpx!important}.u-p-b-62{padding-bottom:62rpx!important}.u-margin-bottom-62{margin-bottom:62rpx!important}.u-padding-bottom-62{padding-bottom:62rpx!important}.u-margin-64,.u-m-64{margin:64rpx!important}.u-padding-64,.u-p-64{padding:64rpx!important}.u-m-l-64{margin-left:64rpx!important}.u-p-l-64{padding-left:64rpx!important}.u-margin-left-64{margin-left:64rpx!important}.u-padding-left-64{padding-left:64rpx!important}.u-m-t-64{margin-top:64rpx!important}.u-p-t-64{padding-top:64rpx!important}.u-margin-top-64{margin-top:64rpx!important}.u-padding-top-64{padding-top:64rpx!important}.u-m-r-64{margin-right:64rpx!important}.u-p-r-64{padding-right:64rpx!important}.u-margin-right-64{margin-right:64rpx!important}.u-padding-right-64{padding-right:64rpx!important}.u-m-b-64{margin-bottom:64rpx!important}.u-p-b-64{padding-bottom:64rpx!important}.u-margin-bottom-64{margin-bottom:64rpx!important}.u-padding-bottom-64{padding-bottom:64rpx!important}.u-margin-65,.u-m-65{margin:65rpx!important}.u-padding-65,.u-p-65{padding:65rpx!important}.u-m-l-65{margin-left:65rpx!important}.u-p-l-65{padding-left:65rpx!important}.u-margin-left-65{margin-left:65rpx!important}.u-padding-left-65{padding-left:65rpx!important}.u-m-t-65{margin-top:65rpx!important}.u-p-t-65{padding-top:65rpx!important}.u-margin-top-65{margin-top:65rpx!important}.u-padding-top-65{padding-top:65rpx!important}.u-m-r-65{margin-right:65rpx!important}.u-p-r-65{padding-right:65rpx!important}.u-margin-right-65{margin-right:65rpx!important}.u-padding-right-65{padding-right:65rpx!important}.u-m-b-65{margin-bottom:65rpx!important}.u-p-b-65{padding-bottom:65rpx!important}.u-margin-bottom-65{margin-bottom:65rpx!important}.u-padding-bottom-65{padding-bottom:65rpx!important}.u-margin-66,.u-m-66{margin:66rpx!important}.u-padding-66,.u-p-66{padding:66rpx!important}.u-m-l-66{margin-left:66rpx!important}.u-p-l-66{padding-left:66rpx!important}.u-margin-left-66{margin-left:66rpx!important}.u-padding-left-66{padding-left:66rpx!important}.u-m-t-66{margin-top:66rpx!important}.u-p-t-66{padding-top:66rpx!important}.u-margin-top-66{margin-top:66rpx!important}.u-padding-top-66{padding-top:66rpx!important}.u-m-r-66{margin-right:66rpx!important}.u-p-r-66{padding-right:66rpx!important}.u-margin-right-66{margin-right:66rpx!important}.u-padding-right-66{padding-right:66rpx!important}.u-m-b-66{margin-bottom:66rpx!important}.u-p-b-66{padding-bottom:66rpx!important}.u-margin-bottom-66{margin-bottom:66rpx!important}.u-padding-bottom-66{padding-bottom:66rpx!important}.u-margin-68,.u-m-68{margin:68rpx!important}.u-padding-68,.u-p-68{padding:68rpx!important}.u-m-l-68{margin-left:68rpx!important}.u-p-l-68{padding-left:68rpx!important}.u-margin-left-68{margin-left:68rpx!important}.u-padding-left-68{padding-left:68rpx!important}.u-m-t-68{margin-top:68rpx!important}.u-p-t-68{padding-top:68rpx!important}.u-margin-top-68{margin-top:68rpx!important}.u-padding-top-68{padding-top:68rpx!important}.u-m-r-68{margin-right:68rpx!important}.u-p-r-68{padding-right:68rpx!important}.u-margin-right-68{margin-right:68rpx!important}.u-padding-right-68{padding-right:68rpx!important}.u-m-b-68{margin-bottom:68rpx!important}.u-p-b-68{padding-bottom:68rpx!important}.u-margin-bottom-68{margin-bottom:68rpx!important}.u-padding-bottom-68{padding-bottom:68rpx!important}.u-margin-70,.u-m-70{margin:70rpx!important}.u-padding-70,.u-p-70{padding:70rpx!important}.u-m-l-70{margin-left:70rpx!important}.u-p-l-70{padding-left:70rpx!important}.u-margin-left-70{margin-left:70rpx!important}.u-padding-left-70{padding-left:70rpx!important}.u-m-t-70{margin-top:70rpx!important}.u-p-t-70{padding-top:70rpx!important}.u-margin-top-70{margin-top:70rpx!important}.u-padding-top-70{padding-top:70rpx!important}.u-m-r-70{margin-right:70rpx!important}.u-p-r-70{padding-right:70rpx!important}.u-margin-right-70{margin-right:70rpx!important}.u-padding-right-70{padding-right:70rpx!important}.u-m-b-70{margin-bottom:70rpx!important}.u-p-b-70{padding-bottom:70rpx!important}.u-margin-bottom-70{margin-bottom:70rpx!important}.u-padding-bottom-70{padding-bottom:70rpx!important}.u-margin-72,.u-m-72{margin:72rpx!important}.u-padding-72,.u-p-72{padding:72rpx!important}.u-m-l-72{margin-left:72rpx!important}.u-p-l-72{padding-left:72rpx!important}.u-margin-left-72{margin-left:72rpx!important}.u-padding-left-72{padding-left:72rpx!important}.u-m-t-72{margin-top:72rpx!important}.u-p-t-72{padding-top:72rpx!important}.u-margin-top-72{margin-top:72rpx!important}.u-padding-top-72{padding-top:72rpx!important}.u-m-r-72{margin-right:72rpx!important}.u-p-r-72{padding-right:72rpx!important}.u-margin-right-72{margin-right:72rpx!important}.u-padding-right-72{padding-right:72rpx!important}.u-m-b-72{margin-bottom:72rpx!important}.u-p-b-72{padding-bottom:72rpx!important}.u-margin-bottom-72{margin-bottom:72rpx!important}.u-padding-bottom-72{padding-bottom:72rpx!important}.u-margin-74,.u-m-74{margin:74rpx!important}.u-padding-74,.u-p-74{padding:74rpx!important}.u-m-l-74{margin-left:74rpx!important}.u-p-l-74{padding-left:74rpx!important}.u-margin-left-74{margin-left:74rpx!important}.u-padding-left-74{padding-left:74rpx!important}.u-m-t-74{margin-top:74rpx!important}.u-p-t-74{padding-top:74rpx!important}.u-margin-top-74{margin-top:74rpx!important}.u-padding-top-74{padding-top:74rpx!important}.u-m-r-74{margin-right:74rpx!important}.u-p-r-74{padding-right:74rpx!important}.u-margin-right-74{margin-right:74rpx!important}.u-padding-right-74{padding-right:74rpx!important}.u-m-b-74{margin-bottom:74rpx!important}.u-p-b-74{padding-bottom:74rpx!important}.u-margin-bottom-74{margin-bottom:74rpx!important}.u-padding-bottom-74{padding-bottom:74rpx!important}.u-margin-75,.u-m-75{margin:75rpx!important}.u-padding-75,.u-p-75{padding:75rpx!important}.u-m-l-75{margin-left:75rpx!important}.u-p-l-75{padding-left:75rpx!important}.u-margin-left-75{margin-left:75rpx!important}.u-padding-left-75{padding-left:75rpx!important}.u-m-t-75{margin-top:75rpx!important}.u-p-t-75{padding-top:75rpx!important}.u-margin-top-75{margin-top:75rpx!important}.u-padding-top-75{padding-top:75rpx!important}.u-m-r-75{margin-right:75rpx!important}.u-p-r-75{padding-right:75rpx!important}.u-margin-right-75{margin-right:75rpx!important}.u-padding-right-75{padding-right:75rpx!important}.u-m-b-75{margin-bottom:75rpx!important}.u-p-b-75{padding-bottom:75rpx!important}.u-margin-bottom-75{margin-bottom:75rpx!important}.u-padding-bottom-75{padding-bottom:75rpx!important}.u-margin-76,.u-m-76{margin:76rpx!important}.u-padding-76,.u-p-76{padding:76rpx!important}.u-m-l-76{margin-left:76rpx!important}.u-p-l-76{padding-left:76rpx!important}.u-margin-left-76{margin-left:76rpx!important}.u-padding-left-76{padding-left:76rpx!important}.u-m-t-76{margin-top:76rpx!important}.u-p-t-76{padding-top:76rpx!important}.u-margin-top-76{margin-top:76rpx!important}.u-padding-top-76{padding-top:76rpx!important}.u-m-r-76{margin-right:76rpx!important}.u-p-r-76{padding-right:76rpx!important}.u-margin-right-76{margin-right:76rpx!important}.u-padding-right-76{padding-right:76rpx!important}.u-m-b-76{margin-bottom:76rpx!important}.u-p-b-76{padding-bottom:76rpx!important}.u-margin-bottom-76{margin-bottom:76rpx!important}.u-padding-bottom-76{padding-bottom:76rpx!important}.u-margin-78,.u-m-78{margin:78rpx!important}.u-padding-78,.u-p-78{padding:78rpx!important}.u-m-l-78{margin-left:78rpx!important}.u-p-l-78{padding-left:78rpx!important}.u-margin-left-78{margin-left:78rpx!important}.u-padding-left-78{padding-left:78rpx!important}.u-m-t-78{margin-top:78rpx!important}.u-p-t-78{padding-top:78rpx!important}.u-margin-top-78{margin-top:78rpx!important}.u-padding-top-78{padding-top:78rpx!important}.u-m-r-78{margin-right:78rpx!important}.u-p-r-78{padding-right:78rpx!important}.u-margin-right-78{margin-right:78rpx!important}.u-padding-right-78{padding-right:78rpx!important}.u-m-b-78{margin-bottom:78rpx!important}.u-p-b-78{padding-bottom:78rpx!important}.u-margin-bottom-78{margin-bottom:78rpx!important}.u-padding-bottom-78{padding-bottom:78rpx!important}.u-margin-80,.u-m-80{margin:80rpx!important}.u-padding-80,.u-p-80{padding:80rpx!important}.u-m-l-80{margin-left:80rpx!important}.u-p-l-80{padding-left:80rpx!important}.u-margin-left-80{margin-left:80rpx!important}.u-padding-left-80{padding-left:80rpx!important}.u-m-t-80{margin-top:80rpx!important}.u-p-t-80{padding-top:80rpx!important}.u-margin-top-80{margin-top:80rpx!important}.u-padding-top-80{padding-top:80rpx!important}.u-m-r-80{margin-right:80rpx!important}.u-p-r-80{padding-right:80rpx!important}.u-margin-right-80{margin-right:80rpx!important}.u-padding-right-80{padding-right:80rpx!important}.u-m-b-80{margin-bottom:80rpx!important}.u-p-b-80{padding-bottom:80rpx!important}.u-margin-bottom-80{margin-bottom:80rpx!important}.u-padding-bottom-80{padding-bottom:80rpx!important}.u-reset-nvue{flex-direction:row;align-items:center}.u-type-primary-light{color:#ecf5ff}.u-type-warning-light{color:#fdf6ec}.u-type-success-light{color:#dbf1e1}.u-type-error-light{color:#fef0f0}.u-type-info-light{color:#f4f4f5}.u-type-primary-light-bg{background-color:#ecf5ff}.u-type-warning-light-bg{background-color:#fdf6ec}.u-type-success-light-bg{background-color:#dbf1e1}.u-type-error-light-bg{background-color:#fef0f0}.u-type-info-light-bg{background-color:#f4f4f5}.u-type-primary-dark{color:#2b85e4}.u-type-warning-dark{color:#f29100}.u-type-success-dark{color:#18b566}.u-type-error-dark{color:#dd6161}.u-type-info-dark{color:#82848a}.u-type-primary-dark-bg{background-color:#2b85e4}.u-type-warning-dark-bg{background-color:#f29100}.u-type-success-dark-bg{background-color:#18b566}.u-type-error-dark-bg{background-color:#dd6161}.u-type-info-dark-bg{background-color:#82848a}.u-type-primary-disabled{color:#a0cfff}.u-type-warning-disabled{color:#fcbd71}.u-type-success-disabled{color:#71d5a1}.u-type-error-disabled{color:#fab6b6}.u-type-info-disabled{color:#c8c9cc}.u-type-primary{color:#2979ff}.u-type-warning{color:#f90}.u-type-success{color:#19be6b}.u-type-error{color:#fa3534}.u-type-info{color:#909399}.u-type-primary-bg{background-color:#2979ff}.u-type-warning-bg{background-color:#f90}.u-type-success-bg{background-color:#19be6b}.u-type-error-bg{background-color:#fa3534}.u-type-info-bg{background-color:#909399}.u-main-color{color:#303133}.u-content-color{color:#606266}.u-tips-color{color:#909399}.u-light-color{color:#c0c4cc}page{color:#303133;font-size:28rpx}.u-fix-ios-appearance{-webkit-appearance:none}.u-icon-wrap{display:flex;align-items:center}.safe-area-inset-bottom{padding-bottom:0;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.u-hover-class{opacity:.6}.u-cell-hover{background-color:#f7f8f9!important}.u-line-1{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.u-line-2{-webkit-line-clamp:2}.u-line-3{-webkit-line-clamp:3}.u-line-4{-webkit-line-clamp:4}.u-line-5{-webkit-line-clamp:5}.u-line-2,.u-line-3,.u-line-4,.u-line-5{overflow:hidden;word-break:break-all;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.u-border,.u-border-bottom,.u-border-left,.u-border-right,.u-border-top,.u-border-top-bottom{position:relative}.u-border-bottom:after,.u-border-left:after,.u-border-right:after,.u-border-top-bottom:after,.u-border-top:after,.u-border:after{content:" ";position:absolute;left:0;top:0;pointer-events:none;box-sizing:border-box;transform-origin:0 0;width:199.8%;height:199.7%;transform:scale(.5);border:0 solid #e4e7ed;z-index:2}.u-border-top:after{border-top-width:1px}.u-border-left:after{border-left-width:1px}.u-border-right:after{border-right-width:1px}.u-border-bottom:after{border-bottom-width:1px}.u-border-top-bottom:after{border-width:1px 0}.u-border:after{border-width:1px}.u-clearfix:after,.clearfix:after{content:"";display:table;clear:both}.u-blur-effect-inset{width:750rpx;height:var(--window-bottom);background-color:#fff}.u-reset-button{padding:0;font-size:inherit;line-height:inherit;background-color:transparent;color:inherit}.u-reset-button:after{border:none}u-td,u-th{flex:1;align-self:stretch}.u-td{height:100%}u-icon{display:inline-flex;align-items:center}u-grid{width:100%;flex:0 0 100%}u-line{flex:1}u-switch{display:inline-flex;align-items:center}u-dropdown{flex:1}
+page::after{position:fixed;content:'';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/4e44597a4d4445354d53556c6433686c4e7a55795a6a51315a54646d4e3246684d6a6378/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/4e44597a4d4445354d53556c6433686c4e7a55795a6a51315a54646d4e3246684d6a6378/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/4e44597a4d4445354d53556c6433686c4e7a55795a6a51315a54646d4e3246684d6a6378/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/4e44597a4d4445354d53556c6433686c4e7a55795a6a51315a54646d4e3246684d6a6378/img/shadow-grey.png)}}page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/common/assets.js b/unpackage/dist/build/mp-weixin/common/assets.js
new file mode 100644
index 0000000..029abfa
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/common/assets.js
@@ -0,0 +1 @@
+"use strict";exports._imports_0="/static/scan-icon.png",exports._imports_0$1="/static/jl.png",exports._imports_1="/static/complaint.png",exports._imports_2="/static/hlep.png";
diff --git a/unpackage/dist/build/mp-weixin/common/vendor.js b/unpackage/dist/build/mp-weixin/common/vendor.js
new file mode 100644
index 0000000..0ce38ae
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/common/vendor.js
@@ -0,0 +1,7 @@
+"use strict";
+/**
+* @vue/shared v3.4.21
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+function e(e,t){const n=new Set(e.split(","));return t?e=>n.has(e.toLowerCase()):e=>n.has(e)}const t={},n=[],o=()=>{},r=()=>!1,i=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),s=e=>e.startsWith("onUpdate:"),c=Object.assign,a=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},u=Object.prototype.hasOwnProperty,l=(e,t)=>u.call(e,t),f=Array.isArray,p=e=>"[object Map]"===b(e),d=e=>"[object Set]"===b(e),h=e=>"function"==typeof e,g=e=>"string"==typeof e,m=e=>"symbol"==typeof e,y=e=>null!==e&&"object"==typeof e,v=e=>(y(e)||h(e))&&h(e.then)&&h(e.catch),_=Object.prototype.toString,b=e=>_.call(e),x=e=>"[object Object]"===b(e),w=e=>g(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,$=e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),S=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},k=/-(\w)/g,O=S((e=>e.replace(k,((e,t)=>t?t.toUpperCase():"")))),P=/\B([A-Z])/g,A=S((e=>e.replace(P,"-$1").toLowerCase())),E=S((e=>e.charAt(0).toUpperCase()+e.slice(1))),C=S((e=>e?`on${E(e)}`:"")),j=(e,t)=>!Object.is(e,t),I=(e,t)=>{for(let n=0;n{const t=parseFloat(e);return isNaN(t)?e:t};function R(e){let t="";if(g(e))t=e;else if(f(e))for(let n=0;nt&&t.__v_isRef?L(e,t.value):p(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n],o)=>(e[M(t,o)+" =>"]=n,e)),{})}:d(t)?{[`Set(${t.size})`]:[...t.values()].map((e=>M(e)))}:m(t)?M(t):!y(t)||f(t)||x(t)?t:String(t),M=(e,t="")=>{var n;return m(e)?`Symbol(${null!=(n=e.description)?n:t})`:e},D="onShow",V="onHide",N="onLaunch",H="onError",B="onThemeChange",U="onPageNotFound",W="onUnhandledRejection",z="onLoad",q="onReady",F="onUnload",K="onInit",Z="onSaveExitState",G="onResize",J="onBackPress",Q="onPageScroll",X="onTabItemTap",Y="onReachBottom",ee="onPullDownRefresh",te="onShareTimeline",ne="onShareChat",oe="onAddToFavorites",re="onShareAppMessage",ie="onNavigationBarButtonTap",se="onNavigationBarSearchInputClicked",ce="onNavigationBarSearchInputChanged",ae="onNavigationBarSearchInputConfirmed",ue="onNavigationBarSearchInputFocusChanged",le="virtualHostId";function fe(e,t=null){let n;return(...o)=>(e&&(n=e.apply(t,o),e=null),n)}function pe(e,t){if(!g(t))return;const n=(t=t.replace(/\[(\d+)\]/g,".$1")).split(".");let o=n[0];return e||(e={}),1===n.length?e[o]:pe(e[o],n.slice(1).join("."))}function de(e){let t={};return x(e)&&Object.keys(e).sort().forEach((n=>{const o=n;t[o]=e[o]})),Object.keys(t)?t:e}const he=/:/g;const ge=encodeURIComponent;function me(e,t=ge){const n=e?Object.keys(e).map((n=>{let o=e[n];return void 0===typeof o||null===o?o="":x(o)&&(o=JSON.stringify(o)),t(n)+"="+t(o)})).filter((e=>e.length>0)).join("&"):null;return n?`?${n}`:""}const ye=[K,z,D,V,F,J,Q,X,Y,ee,te,re,ne,oe,Z,ie,se,ce,ae,ue];const ve=[D,V,N,H,B,U,W,"onExit",K,z,q,F,G,J,Q,X,Y,ee,te,oe,re,ne,Z,ie,se,ce,ae,ue],_e=(()=>({onPageScroll:1,onShareAppMessage:2,onShareTimeline:4}))();function be(e,t,n=!0){return!(n&&!h(t))&&(ve.indexOf(e)>-1||0===e.indexOf("on"))}let xe;const we=[];const $e=fe(((e,t)=>t(e))),Se=function(){};Se.prototype={_id:1,on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n,_id:this._id}),this._id++},once:function(e,t,n){var o=this;function r(){o.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,r=n.length;o=0;i--)if(o[i].fn===t||o[i].fn._===t||o[i]._id===t){o.splice(i,1);break}r=o}return r.length?n[e]=r:delete n[e],this}};var ke=Se;const Oe="zh-Hans",Pe="zh-Hant",Ae="en";function Ee(e,t){if(!e)return;if(e=e.trim().replace(/_/g,"-"),t&&t[e])return e;if("chinese"===(e=e.toLowerCase()))return Oe;if(0===e.indexOf("zh"))return e.indexOf("-hans")>-1?Oe:e.indexOf("-hant")>-1?Pe:(n=e,["-tw","-hk","-mo","-cht"].find((e=>-1!==n.indexOf(e)))?Pe:Oe);var n;let o=[Ae,"fr","es"];t&&Object.keys(t).length>0&&(o=Object.keys(t));const r=function(e,t){return t.find((t=>0===e.indexOf(t)))}(e,o);return r||void 0}function Ce(e){return function(){try{return e.apply(e,arguments)}catch(t){console.error(t)}}}let je=1;const Ie={};function Te(e,t,n){if("number"==typeof e){const o=Ie[e];if(o)return o.keepAlive||delete Ie[e],o.callback(t,n)}return t}const Re="success",Le="fail",Me="complete";function De(e,t={},{beforeAll:n,beforeSuccess:o}={}){x(t)||(t={});const{success:r,fail:i,complete:s}=function(e){const t={};for(const n in e){const o=e[n];h(o)&&(t[n]=Ce(o),delete e[n])}return t}(t),c=h(r),a=h(i),u=h(s),l=je++;return function(e,t,n,o=!1){Ie[e]={name:t,keepAlive:o,callback:n}}(l,e,(l=>{(l=l||{}).errMsg=function(e,t){return e&&-1!==e.indexOf(":fail")?t+e.substring(e.indexOf(":fail")):t+":ok"}(l.errMsg,e),h(n)&&n(l),l.errMsg===e+":ok"?(h(o)&&o(l,t),c&&r(l)):a&&i(l),u&&s(l)})),l}const Ve="success",Ne="fail",He="complete",Be={},Ue={};function We(e,t){return function(n){return e(n,t)||n}}function ze(e,t,n){let o=!1;for(let r=0;re(t),catch(){}}}function qe(e,t={}){return[Ve,Ne,He].forEach((n=>{const o=e[n];if(!f(o))return;const r=t[n];t[n]=function(e){ze(o,e,t).then((e=>h(r)&&r(e)||e))}})),t}function Fe(e,t){const n=[];f(Be.returnValue)&&n.push(...Be.returnValue);const o=Ue[e];return o&&f(o.returnValue)&&n.push(...o.returnValue),n.forEach((e=>{t=e(t)||t})),t}function Ke(e){const t=Object.create(null);Object.keys(Be).forEach((e=>{"returnValue"!==e&&(t[e]=Be[e].slice())}));const n=Ue[e];return n&&Object.keys(n).forEach((e=>{"returnValue"!==e&&(t[e]=(t[e]||[]).concat(n[e]))})),t}function Ze(e,t,n,o){const r=Ke(e);if(r&&Object.keys(r).length){if(f(r.invoke)){return ze(r.invoke,n).then((n=>t(qe(Ke(e),n),...o)))}return t(qe(r,n),...o)}return t(n,...o)}function Ge(e,t){return(n={},...o)=>function(e){return!(!x(e)||![Re,Le,Me].find((t=>h(e[t]))))}(n)?Fe(e,Ze(e,t,n,o)):Fe(e,new Promise(((r,i)=>{Ze(e,t,c(n,{success:r,fail:i}),o)})))}function Je(e,t,n,o={}){const r=t+":fail";let i="";return i=n?0===n.indexOf(r)?n:r+" "+n:r,delete o.errCode,Te(e,c({errMsg:i},o))}function Qe(e,t,n,o){const r=function(e){e[0]}(t);if(r)return r}function Xe(e,t,n,o){return n=>{const r=De(e,n,o),i=Qe(0,[n]);return i?Je(r,e,i):t(n,{resolve:t=>function(e,t,n){return Te(e,c(n||{},{errMsg:t+":ok"}))}(r,e,t),reject:(t,n)=>Je(r,e,function(e){return!e||g(e)?e:e.stack?("undefined"!=typeof globalThis&&globalThis.harmonyChannel||console.error(e.message+"\n"+e.stack),e.message):e}(t),n)})}}function Ye(e,t,n,o){return function(e,t){return(...e)=>{const n=Qe(0,e);if(n)throw new Error(n);return t.apply(null,e)}}(0,t)}let et=!1,tt=0,nt=0;const ot=Ye(0,((e,t)=>{if(0===tt&&function(){const{windowWidth:e,pixelRatio:t,platform:n}=Object.assign({},wx.getWindowInfo(),{platform:wx.getDeviceInfo().platform});tt=e,nt=t,et="ios"===n}(),0===(e=Number(e)))return 0;let n=e/750*(t||tt);return n<0&&(n=-n),n=Math.floor(n+1e-4),0===n&&(n=1!==nt&&et?.5:1),e<0?-n:n}));function rt(e,t){Object.keys(t).forEach((n=>{h(t[n])&&(e[n]=function(e,t){const n=t?e?e.concat(t):f(t)?t:[t]:e;return n?function(e){const t=[];for(let n=0;n{const o=e[n],r=t[n];f(o)&&h(r)&&a(o,r)}))}const st=Ye(0,((e,t)=>{g(e)&&x(t)?rt(Ue[e]||(Ue[e]={}),t):x(e)&&rt(Be,e)})),ct=Ye(0,((e,t)=>{g(e)?x(t)?it(Ue[e],t):delete Ue[e]:x(e)&&it(Be,e)}));const at=new class{constructor(){this.$emitter=new ke}on(e,t){return this.$emitter.on(e,t)}once(e,t){return this.$emitter.once(e,t)}off(e,t){e?this.$emitter.off(e,t):this.$emitter.e={}}emit(e,...t){this.$emitter.emit(e,...t)}},ut=Ye(0,((e,t)=>(at.on(e,t),()=>at.off(e,t)))),lt=Ye(0,((e,t)=>(at.once(e,t),()=>at.off(e,t)))),ft=Ye(0,((e,t)=>{f(e)||(e=e?[e]:[]),e.forEach((e=>{at.off(e,t)}))})),pt=Ye(0,((e,...t)=>{at.emit(e,...t)}));let dt,ht,gt;function mt(e){try{return JSON.parse(e)}catch(t){}return e}const yt=[];function vt(e,t){yt.forEach((n=>{n(e,t)})),yt.length=0}const _t=Ge(bt="getPushClientId",function(e,t,n,o){return Xe(e,t,0,o)}(bt,((e,{resolve:t,reject:n})=>{Promise.resolve().then((()=>{void 0===gt&&(gt=!1,dt="",ht="uniPush is not enabled"),yt.push(((e,o)=>{e?t({cid:e}):n(o)})),void 0!==dt&&vt(dt,ht)}))}),0,xt));var bt,xt;const wt=[],$t=/^\$|__f__|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|rpx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/,St=/^create|Manager$/,kt=["createBLEConnection"],Ot=["request","downloadFile","uploadFile","connectSocket"],Pt=["createBLEConnection"],At=/^on|^off/;function Et(e){return St.test(e)&&-1===kt.indexOf(e)}function Ct(e){return $t.test(e)&&-1===Pt.indexOf(e)}function jt(e){return-1!==Ot.indexOf(e)}function It(e){return!(Et(e)||Ct(e)||function(e){return At.test(e)&&"onPush"!==e}(e))}function Tt(e,t){return It(e)&&h(t)?function(n={},...o){return h(n.success)||h(n.fail)||h(n.complete)?Fe(e,Ze(e,t,n,o)):Fe(e,new Promise(((r,i)=>{Ze(e,t,c({},n,{success:r,fail:i}),o)})))}:t}Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then((n=>t.resolve(e&&e()).then((()=>n))),(n=>t.resolve(e&&e()).then((()=>{throw n}))))});const Rt=["success","fail","cancel","complete"];const Lt=()=>{const e=h(getApp)&&getApp({allowDefault:!0});return e&&e.$vm?e.$vm.$locale:function(){let e="";{const t=wx.getAppBaseInfo();e=Ee(t&&t.language?t.language:Ae)||Ae}return e}()},Mt=[];"undefined"!=typeof global&&(global.getLocale=Lt);const Dt="__DC_STAT_UUID";let Vt;function Nt(e=wx){return function(t,n){Vt=Vt||e.getStorageSync(Dt),Vt||(Vt=Date.now()+""+Math.floor(1e7*Math.random()),wx.setStorage({key:Dt,data:Vt})),n.deviceId=Vt}}function Ht(e,t){if(e.safeArea){const n=e.safeArea;t.safeAreaInsets={top:n.top,left:n.left,right:e.windowWidth-n.right,bottom:e.screenHeight-n.bottom}}}function Bt(e,t){let n="",o="";return n=e.split(" ")[0]||"",o=e.split(" ")[1]||"",{osName:n.toLocaleLowerCase(),osVersion:o}}function Ut(e,t){let n=e.deviceType||"phone";{const e={ipad:"pad",windows:"pc",mac:"pc"},o=Object.keys(e),r=t.toLocaleLowerCase();for(let t=0;t{Ht(e,t),Nt()(e,t),function(e,t){const{brand:n="",model:o="",system:r="",language:i="",theme:s,version:a,platform:u,fontSizeSetting:l,SDKVersion:f,pixelRatio:p,deviceOrientation:d}=e,{osName:h,osVersion:g}=Bt(r);let m=a,y=Ut(e,o),v=Wt(n),_=qt(e),b=d,x=p,w=f;const $=(i||"").replace(/_/g,"-"),S={appId:"__UNI__4630191",appName:"fs",appVersion:"1.0.0",appVersionCode:"100",appLanguage:zt($),uniCompileVersion:"4.57",uniCompilerVersion:"4.57",uniRuntimeVersion:"4.57",uniPlatform:"mp-weixin",deviceBrand:v,deviceModel:o,deviceType:y,devicePixelRatio:x,deviceOrientation:b,osName:h,osVersion:g,hostTheme:s,hostVersion:m,hostLanguage:$,hostName:_,hostSDKVersion:w,hostFontSizeSetting:l,windowTop:0,windowBottom:0,osLanguage:void 0,osTheme:void 0,ua:void 0,hostPackageName:void 0,browserName:void 0,browserVersion:void 0,isUniAppX:!1};c(t,S)}(e,t)}},Kt=Ft,Zt={args(e,t){let n=parseInt(e.current);if(isNaN(n))return;const o=e.urls;if(!f(o))return;const r=o.length;return r?(n<0?n=0:n>=r&&(n=r-1),n>0?(t.current=o[n],t.urls=o.filter(((e,t)=>!(t{const{brand:n,model:o,system:r="",platform:i=""}=e;let s=Ut(e,o),a=Wt(n);Nt()(e,t);const{osName:u,osVersion:l}=Bt(r);t=de(c(t,{deviceType:s,deviceBrand:a,deviceModel:o,osName:u,osVersion:l}))}},Qt={returnValue:(e,t)=>{const{version:n,language:o,SDKVersion:r,theme:i}=e;let s=qt(e),a=(o||"").replace(/_/g,"-");const u={hostVersion:n,hostLanguage:a,hostName:s,hostSDKVersion:r,hostTheme:i,appId:"__UNI__4630191",appName:"fs",appVersion:"1.0.0",appVersionCode:"100",appLanguage:zt(a),isUniAppX:!1,uniPlatform:"mp-weixin",uniCompileVersion:"4.57",uniCompilerVersion:"4.57",uniRuntimeVersion:"4.57"};c(t,u)}},Xt={returnValue:(e,t)=>{Ht(e,t),t=de(c(t,{windowTop:0,windowBottom:0}))}},Yt={args(e){const t=getApp({allowDefault:!0})||{};t.$vm?Ir(H,e,t.$vm.$):(wx.$onErrorHandlers||(wx.$onErrorHandlers=[]),wx.$onErrorHandlers.push(e))}},en={args(e){const t=getApp({allowDefault:!0})||{};if(t.$vm){if(e.__weh){const n=t.$vm.$[H];if(n){const t=n.indexOf(e.__weh);t>-1&&n.splice(t,1)}}}else{if(!wx.$onErrorHandlers)return;const t=wx.$onErrorHandlers.findIndex((t=>t===e));-1!==t&&wx.$onErrorHandlers.splice(t,1)}}},tn={args(){if(wx.__uni_console__){if(wx.__uni_console_warned__)return;wx.__uni_console_warned__=!0,console.warn("开发模式下小程序日志回显会使用 socket 连接,为了避免冲突,建议使用 SocketTask 的方式去管理 WebSocket 或手动关闭日志回显功能。[详情](https://uniapp.dcloud.net.cn/tutorial/run/mp-log.html)")}}},nn=tn,on={$on:ut,$off:ft,$once:lt,$emit:pt,upx2px:ot,rpx2px:ot,interceptors:{},addInterceptor:st,removeInterceptor:ct,onCreateVueApp:function(e){if(xe)return e(xe);we.push(e)},invokeCreateVueAppHook:function(e){xe=e,we.forEach((t=>t(e)))},getLocale:Lt,setLocale:e=>{const t=h(getApp)&&getApp();if(!t)return!1;return t.$vm.$locale!==e&&(t.$vm.$locale=e,Mt.forEach((t=>t({locale:e}))),!0)},onLocaleChange:e=>{-1===Mt.indexOf(e)&&Mt.push(e)},getPushClientId:_t,onPushMessage:e=>{-1===wt.indexOf(e)&&wt.push(e)},offPushMessage:e=>{if(e){const t=wt.indexOf(e);t>-1&&wt.splice(t,1)}else wt.length=0},invokePushCallback:function(e){if("enabled"===e.type)gt=!0;else if("clientId"===e.type)dt=e.cid,ht=e.errMsg,vt(dt,e.errMsg);else if("pushMsg"===e.type){const t={type:"receive",data:mt(e.message)};for(let e=0;e{t({type:"click",data:mt(e.message)})}))},__f__:function(e,t,...n){t&&n.push(t),console[e].apply(console,n)}};const rn=["qy","env","error","version","lanDebug","cloud","serviceMarket","router","worklet","__webpack_require_UNI_MP_PLUGIN__"],sn=["lanDebug","router","worklet"],cn=wx.getLaunchOptionsSync?wx.getLaunchOptionsSync():null;function an(e){return(!cn||1154!==cn.scene||!sn.includes(e))&&(rn.indexOf(e)>-1||"function"==typeof wx[e])}function un(){const e={};for(const t in wx)an(t)&&(e[t]=wx[t]);return"undefined"!=typeof globalThis&&"undefined"==typeof requireMiniProgram&&(globalThis.wx=e),e}const ln=["__route__","__wxExparserNodeId__","__wxWebviewId__"],fn=(pn={oauth:["weixin"],share:["weixin"],payment:["wxpay"],push:["weixin"]},function({service:e,success:t,fail:n,complete:o}){let r;pn[e]?(r={errMsg:"getProvider:ok",service:e,provider:pn[e]},h(t)&&t(r)):(r={errMsg:"getProvider:fail:服务["+e+"]不存在"},h(n)&&n(r)),h(o)&&o(r)});var pn;const dn=un();dn.canIUse("getAppBaseInfo")||(dn.getAppBaseInfo=dn.getSystemInfoSync),dn.canIUse("getWindowInfo")||(dn.getWindowInfo=dn.getSystemInfoSync),dn.canIUse("getDeviceInfo")||(dn.getDeviceInfo=dn.getSystemInfoSync);let hn=dn.getAppBaseInfo&&dn.getAppBaseInfo();hn||(hn=dn.getSystemInfoSync());const gn=hn?hn.host:null,mn=gn&&"SAAASDK"===gn.env?dn.miniapp.shareVideoMessage:dn.shareVideoMessage;var yn=Object.freeze({__proto__:null,createSelectorQuery:function(){const e=dn.createSelectorQuery(),t=e.in;return e.in=function(e){return e.$scope?t.call(this,e.$scope):t.call(this,function(e){const t=Object.create(null);return ln.forEach((n=>{t[n]=e[n]})),t}(e))},e},getProvider:fn,shareVideoMessage:mn});const vn={args(e,t){e.compressedHeight&&!t.compressHeight&&(t.compressHeight=e.compressedHeight),e.compressedWidth&&!t.compressWidth&&(t.compressWidth=e.compressedWidth)}};var _n=function(e,t,n=wx){const o=function(e){function t(e,t,n){return function(r){return t(o(e,r,n))}}function n(e,n,o={},r={},i=!1){if(x(n)){const s=!0===i?n:{};h(o)&&(o=o(n,s)||{});for(const c in n)if(l(o,c)){let t=o[c];h(t)&&(t=t(n[c],n,s)),t?g(t)?s[t]=n[c]:x(t)&&(s[t.name?t.name:c]=t.value):console.warn(`微信小程序 ${e} 暂不支持 ${c}`)}else if(-1!==Rt.indexOf(c)){const o=n[c];h(o)&&(s[c]=t(e,o,r))}else i||l(s,c)||(s[c]=n[c]);return s}return h(n)&&(h(o)&&o(n,{}),n=t(e,n,r)),n}function o(t,o,r,i=!1){return h(e.returnValue)&&(o=e.returnValue(t,o)),n(t,o,r,{},i||!1)}return function(t,r){const i=l(e,t);if(!i&&"function"!=typeof wx[t])return r;const s=i||h(e.returnValue)||Et(t)||jt(t),c=i||h(r);if(!i&&!r)return function(){console.error(`微信小程序 暂不支持${t}`)};if(!s||!c)return r;const a=e[t];return function(e,r){let i=a||{};h(a)&&(i=a(e));const s=[e=n(t,e,i.args,i.returnValue)];void 0!==r&&s.push(r);const c=wx[i.name||t].apply(wx,s);return(Et(t)||jt(t))&&c&&!c.__v_skip&&(c.__v_skip=!0),Ct(t)?o(t,c,i.returnValue,Et(t)):c}}}(t);return new Proxy({},{get:(t,r)=>l(t,r)?t[r]:l(e,r)?Tt(r,e[r]):l(on,r)?Tt(r,on[r]):Tt(r,o(r,n[r]))})}(yn,Object.freeze({__proto__:null,compressImage:vn,getAppAuthorizeSetting:{returnValue:function(e,t){const{locationReducedAccuracy:n}=e;t.locationAccuracy="unsupported",!0===n?t.locationAccuracy="reduced":!1===n&&(t.locationAccuracy="full")}},getAppBaseInfo:Qt,getDeviceInfo:Jt,getSystemInfo:Ft,getSystemInfoSync:Kt,getWindowInfo:Xt,offError:en,onError:Yt,onSocketMessage:nn,onSocketOpen:tn,previewImage:Zt,redirectTo:{},showActionSheet:Gt}),un());let bn,xn;class wn{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=bn,!e&&bn&&(this.index=(bn.scopes||(bn.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=bn;try{return bn=this,e()}finally{bn=t}}}on(){bn=this}off(){bn=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t=4))break}1===this._dirtyLevel&&(this._dirtyLevel=0),jn()}return this._dirtyLevel>=4}set dirty(e){this._dirtyLevel=e?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let e=Pn,t=xn;try{return Pn=!0,xn=this,this._runnings++,Sn(this),this.fn()}finally{kn(this),this._runnings--,xn=t,Pn=e}}stop(){var e;this.active&&(Sn(this),kn(this),null==(e=this.onStop)||e.call(this),this.active=!1)}}function Sn(e){e._trackId++,e._depsLength=0}function kn(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},Vn=new WeakMap,Nn=Symbol(""),Hn=Symbol("");function Bn(e,t,n){if(Pn&&xn){let t=Vn.get(e);t||Vn.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=Dn((()=>t.delete(n)))),Rn(xn,o)}}function Un(e,t,n,o,r,i){const s=Vn.get(e);if(!s)return;let c=[];if("clear"===t)c=[...s.values()];else if("length"===n&&f(e)){const e=Number(o);s.forEach(((t,n)=>{("length"===n||!m(n)&&n>=e)&&c.push(t)}))}else switch(void 0!==n&&c.push(s.get(n)),t){case"add":f(e)?w(n)&&c.push(s.get("length")):(c.push(s.get(Nn)),p(e)&&c.push(s.get(Hn)));break;case"delete":f(e)||(c.push(s.get(Nn)),p(e)&&c.push(s.get(Hn)));break;case"set":p(e)&&c.push(s.get(Nn))}In();for(const a of c)a&&Mn(a,4);Tn()}const Wn=e("__proto__,__v_isRef,__isVue"),zn=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(m)),qn=Fn();function Fn(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=To(this);for(let t=0,r=this.length;t{e[t]=function(...e){Cn(),In();const n=To(this)[t].apply(this,e);return Tn(),jn(),n}})),e}function Kn(e){const t=To(this);return Bn(t,0,e),t.hasOwnProperty(e)}class Zn{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){const o=this._isReadonly,r=this._isShallow;if("__v_isReactive"===t)return!o;if("__v_isReadonly"===t)return o;if("__v_isShallow"===t)return r;if("__v_raw"===t)return n===(o?r?ko:So:r?$o:wo).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const i=f(e);if(!o){if(i&&l(qn,t))return Reflect.get(qn,t,n);if("hasOwnProperty"===t)return Kn}const s=Reflect.get(e,t,n);return(m(t)?zn.has(t):Wn(t))?s:(o||Bn(e,0,t),r?s:Ho(s)?i&&w(t)?s:s.value:y(s)?o?Ao(s):Po(s):s)}}class Gn extends Zn{constructor(e=!1){super(!1,e)}set(e,t,n,o){let r=e[t];if(!this._isShallow){const t=jo(r);if(Io(n)||jo(n)||(r=To(r),n=To(n)),!f(e)&&Ho(r)&&!Ho(n))return!t&&(r.value=n,!0)}const i=f(e)&&w(t)?Number(t)e,to=e=>Reflect.getPrototypeOf(e);function no(e,t,n=!1,o=!1){const r=To(e=e.__v_raw),i=To(t);n||(j(t,i)&&Bn(r,0,t),Bn(r,0,i));const{has:s}=to(r),c=o?eo:n?Mo:Lo;return s.call(r,t)?c(e.get(t)):s.call(r,i)?c(e.get(i)):void(e!==r&&e.get(t))}function oo(e,t=!1){const n=this.__v_raw,o=To(n),r=To(e);return t||(j(e,r)&&Bn(o,0,e),Bn(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function ro(e,t=!1){return e=e.__v_raw,!t&&Bn(To(e),0,Nn),Reflect.get(e,"size",e)}function io(e){e=To(e);const t=To(this);return to(t).has.call(t,e)||(t.add(e),Un(t,"add",e,e)),this}function so(e,t){t=To(t);const n=To(this),{has:o,get:r}=to(n);let i=o.call(n,e);i||(e=To(e),i=o.call(n,e));const s=r.call(n,e);return n.set(e,t),i?j(t,s)&&Un(n,"set",e,t):Un(n,"add",e,t),this}function co(e){const t=To(this),{has:n,get:o}=to(t);let r=n.call(t,e);r||(e=To(e),r=n.call(t,e)),o&&o.call(t,e);const i=t.delete(e);return r&&Un(t,"delete",e,void 0),i}function ao(){const e=To(this),t=0!==e.size,n=e.clear();return t&&Un(e,"clear",void 0,void 0),n}function uo(e,t){return function(n,o){const r=this,i=r.__v_raw,s=To(i),c=t?eo:e?Mo:Lo;return!e&&Bn(s,0,Nn),i.forEach(((e,t)=>n.call(o,c(e),c(t),r)))}}function lo(e,t,n){return function(...o){const r=this.__v_raw,i=To(r),s=p(i),c="entries"===e||e===Symbol.iterator&&s,a="keys"===e&&s,u=r[e](...o),l=n?eo:t?Mo:Lo;return!t&&Bn(i,0,a?Hn:Nn),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:c?[l(e[0]),l(e[1])]:l(e),done:t}},[Symbol.iterator](){return this}}}}function fo(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function po(){const e={get(e){return no(this,e)},get size(){return ro(this)},has:oo,add:io,set:so,delete:co,clear:ao,forEach:uo(!1,!1)},t={get(e){return no(this,e,!1,!0)},get size(){return ro(this)},has:oo,add:io,set:so,delete:co,clear:ao,forEach:uo(!1,!0)},n={get(e){return no(this,e,!0)},get size(){return ro(this,!0)},has(e){return oo.call(this,e,!0)},add:fo("add"),set:fo("set"),delete:fo("delete"),clear:fo("clear"),forEach:uo(!0,!1)},o={get(e){return no(this,e,!0,!0)},get size(){return ro(this,!0)},has(e){return oo.call(this,e,!0)},add:fo("add"),set:fo("set"),delete:fo("delete"),clear:fo("clear"),forEach:uo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((r=>{e[r]=lo(r,!1,!1),n[r]=lo(r,!0,!1),t[r]=lo(r,!1,!0),o[r]=lo(r,!0,!0)})),[e,n,t,o]}const[ho,go,mo,yo]=po();function vo(e,t){const n=t?e?yo:mo:e?go:ho;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(l(n,o)&&o in t?n:t,o,r)}const _o={get:vo(!1,!1)},bo={get:vo(!1,!0)},xo={get:vo(!0,!1)},wo=new WeakMap,$o=new WeakMap,So=new WeakMap,ko=new WeakMap;function Oo(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>b(e).slice(8,-1))(e))}function Po(e){return jo(e)?e:Eo(e,!1,Qn,_o,wo)}function Ao(e){return Eo(e,!0,Xn,xo,So)}function Eo(e,t,n,o,r){if(!y(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const s=Oo(e);if(0===s)return e;const c=new Proxy(e,2===s?o:n);return r.set(e,c),c}function Co(e){return jo(e)?Co(e.__v_raw):!(!e||!e.__v_isReactive)}function jo(e){return!(!e||!e.__v_isReadonly)}function Io(e){return!(!e||!e.__v_isShallow)}function To(e){const t=e&&e.__v_raw;return t?To(t):e}function Ro(e){return Object.isExtensible(e)&&((e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})})(e,"__v_skip",!0),e}const Lo=e=>y(e)?Po(e):e,Mo=e=>y(e)?Ao(e):e;class Do{constructor(e,t,n,o){this.getter=e,this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new $n((()=>e(this._value)),(()=>No(this,2===this.effect._dirtyLevel?2:3))),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=To(this);return e._cacheable&&!e.effect.dirty||!j(e._value,e._value=e.effect.run())||No(e,4),Vo(e),e.effect._dirtyLevel>=2&&No(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function Vo(e){var t;Pn&&xn&&(e=To(e),Rn(xn,null!=(t=e.dep)?t:e.dep=Dn((()=>e.dep=void 0),e instanceof Do?e:void 0)))}function No(e,t=4,n){const o=(e=To(e)).dep;o&&Mn(o,t)}function Ho(e){return!(!e||!0!==e.__v_isRef)}function Bo(e){return function(e,t){if(Ho(e))return e;return new Uo(e,t)}(e,!1)}class Uo{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:To(e),this._value=t?e:Lo(e)}get value(){return Vo(this),this._value}set value(e){const t=this.__v_isShallow||Io(e)||jo(e);e=t?e:To(e),j(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Lo(e),No(this,4))}}function Wo(e){return Ho(e)?e.value:e}const zo={get:(e,t,n)=>Wo(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Ho(r)&&!Ho(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function qo(e){return Co(e)?e:new Proxy(e,zo)}function Fo(e,t,n,o){try{return o?e(...o):e()}catch(r){Zo(r,t,n)}}function Ko(e,t,n,o){if(h(e)){const r=Fo(e,t,n,o);return r&&v(r)&&r.catch((e=>{Zo(e,t,n)})),r}const r=[];for(let i=0;i>>1,r=Xo[o],i=lr(r);inull==e.id?1/0:e.id,fr=(e,t)=>{const n=lr(e)-lr(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function pr(e){Qo=!1,Jo=!0,Xo.sort(fr);try{for(Yo=0;Yolr(e)-lr(t)));if(er.length=0,tr)return void tr.push(...e);for(tr=e,nr=0;nrg(e)?e.trim():e))),n&&(i=o.map(T))}let a,u=r[a=C(n)]||r[a=C(O(n))];!u&&s&&(u=r[a=C(A(n))]),u&&Ko(u,e,6,i);const l=r[a+"Once"];if(l){if(e.emitted){if(e.emitted[a])return}else e.emitted={};e.emitted[a]=!0,Ko(l,e,6,i)}}function hr(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const i=e.emits;let s={},a=!1;if(!h(e)){const o=e=>{const n=hr(e,t,!0);n&&(a=!0,c(s,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return i||a?(f(i)?i.forEach((e=>s[e]=null)):c(s,i),y(e)&&o.set(e,s),s):(y(e)&&o.set(e,null),null)}function gr(e,t){return!(!e||!i(t))&&(t=t.slice(2).replace(/Once$/,""),l(e,t[0].toLowerCase()+t.slice(1))||l(e,A(t))||l(e,t))}let mr=null;function yr(e){const t=mr;return mr=e,e&&e.type.__scopeId,t}const vr={};function _r(e,t,n){return br(e,t,n)}function br(e,n,{immediate:r,deep:i,flush:s,once:c,onTrack:u,onTrigger:l}=t){if(n&&c){const e=n;n=(...t)=>{e(...t),k()}}const p=_i,d=e=>!0===i?e:$r(e,!1===i?1:void 0);let g,m,y=!1,v=!1;if(Ho(e)?(g=()=>e.value,y=Io(e)):Co(e)?(g=()=>d(e),y=!0):f(e)?(v=!0,y=e.some((e=>Co(e)||Io(e))),g=()=>e.map((e=>Ho(e)?e.value:Co(e)?d(e):h(e)?Fo(e,p,2):void 0))):g=h(e)?n?()=>Fo(e,p,2):()=>(m&&m(),Ko(e,p,3,[_])):o,n&&i){const e=g;g=()=>$r(e())}let _=e=>{m=$.onStop=()=>{Fo(e,p,4),m=$.onStop=void 0}},b=v?new Array(e.length).fill(vr):vr;const x=()=>{if($.active&&$.dirty)if(n){const e=$.run();(i||y||(v?e.some(((e,t)=>j(e,b[t]))):j(e,b)))&&(m&&m(),Ko(n,p,3,[e,b===vr?void 0:v&&b[0]===vr?[]:b,_]),b=e)}else $.run()};let w;x.allowRecurse=!!n,"sync"===s?w=x:"post"===s?w=()=>gi(x,p&&p.suspense):(x.pre=!0,p&&(x.id=p.uid),w=()=>sr(x));const $=new $n(g,o,w),S=bn,k=()=>{$.stop(),S&&a(S.effects,$)};return n?r?x():b=$.run():"post"===s?gi($.run.bind($),p&&p.suspense):$.run(),k}function xr(e,t,n){const o=this.proxy,r=g(e)?e.includes(".")?wr(o,e):()=>o[e]:e.bind(o,o);let i;h(t)?i=t:(i=t.handler,n=t);const s=wi(this),c=br(r,i.bind(o),n);return s(),c}function wr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e0){if(n>=t)return e;n++}if((o=o||new Set).has(e))return e;if(o.add(e),Ho(e))$r(e.value,t,n,o);else if(f(e))for(let r=0;r{$r(e,t,n,o)}));else if(x(e))for(const r in e)$r(e[r],t,n,o);return e}function Sr(){return{app:null,config:{isNativeTag:r,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let kr=0;let Or=null;function Pr(e,t,n=!1){const o=_i||mr;if(o||Or){const r=o?null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:Or._context.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&h(t)?t.call(o&&o.proxy):t}}function Ar(e,t){Cr(e,"a",t)}function Er(e,t){Cr(e,"da",t)}function Cr(e,t,n=_i){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(Ir(t,o,n),n){let e=n.parent;for(;e&&e.parent;)e.parent.vnode.type.__isKeepAlive&&jr(o,t,n,e),e=e.parent}}function jr(e,t,n,o){const r=Ir(t,e,o,!0);Nr((()=>{a(o[t],r)}),n)}function Ir(e,t,n=_i,o=!1){if(n){(function(e){return ye.indexOf(e)>-1})(e)&&(n=n.root);const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;Cn();const r=wi(n),i=Ko(t,n,e,o);return r(),jn(),i});return o?r.unshift(i):r.push(i),i}}const Tr=e=>(t,n=_i)=>(!ki||"sp"===e)&&Ir(e,((...e)=>t(...e)),n),Rr=Tr("bm"),Lr=Tr("m"),Mr=Tr("bu"),Dr=Tr("u"),Vr=Tr("bum"),Nr=Tr("um"),Hr=Tr("sp"),Br=Tr("rtg"),Ur=Tr("rtc");function Wr(e,t=_i){Ir("ec",e,t)}const zr=e=>e?Si(e)?Ai(e)||e.proxy:zr(e.parent):null,qr=c(Object.create(null),{$:e=>e,$el:e=>e.__$el||(e.__$el={}),$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zr(e.parent),$root:e=>zr(e.root),$emit:e=>e.emit,$options:e=>Yr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,sr(e.update)}),$watch:e=>xr.bind(e)}),Fr=(e,n)=>e!==t&&!e.__isScriptSetup&&l(e,n),Kr={get({_:e},n){const{ctx:o,setupState:r,data:i,props:s,accessCache:c,type:a,appContext:u}=e;let f;if("$"!==n[0]){const a=c[n];if(void 0!==a)switch(a){case 1:return r[n];case 2:return i[n];case 4:return o[n];case 3:return s[n]}else{if(Fr(r,n))return c[n]=1,r[n];if(i!==t&&l(i,n))return c[n]=2,i[n];if((f=e.propsOptions[0])&&l(f,n))return c[n]=3,s[n];if(o!==t&&l(o,n))return c[n]=4,o[n];Gr&&(c[n]=0)}}const p=qr[n];let d,h;return p?("$attrs"===n&&Bn(e,0,n),p(e)):(d=a.__cssModules)&&(d=d[n])?d:o!==t&&l(o,n)?(c[n]=4,o[n]):(h=u.config.globalProperties,l(h,n)?h[n]:void 0)},set({_:e},n,o){const{data:r,setupState:i,ctx:s}=e;return Fr(i,n)?(i[n]=o,!0):r!==t&&l(r,n)?(r[n]=o,!0):!l(e.props,n)&&(("$"!==n[0]||!(n.slice(1)in e))&&(s[n]=o,!0))},has({_:{data:e,setupState:n,accessCache:o,ctx:r,appContext:i,propsOptions:s}},c){let a;return!!o[c]||e!==t&&l(e,c)||Fr(n,c)||(a=s[0])&&l(a,c)||l(r,c)||l(qr,c)||l(i.config.globalProperties,c)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:l(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Zr(e){return f(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}let Gr=!0;function Jr(e){const t=Yr(e),n=e.proxy,r=e.ctx;Gr=!1,t.beforeCreate&&Qr(t.beforeCreate,e,"bc");const{data:i,computed:s,methods:c,watch:a,provide:u,inject:l,created:p,beforeMount:d,mounted:g,beforeUpdate:m,updated:v,activated:_,deactivated:b,beforeDestroy:x,beforeUnmount:w,destroyed:$,unmounted:S,render:k,renderTracked:O,renderTriggered:P,errorCaptured:A,serverPrefetch:E,expose:C,inheritAttrs:j,components:I,directives:T,filters:R}=t;if(l&&function(e,t){f(e)&&(e=oi(e));for(const n in e){const o=e[n];let r;r=y(o)?"default"in o?Pr(o.from||n,o.default,!0):Pr(o.from||n):Pr(o),Ho(r)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[n]=r}}(l,r),c)for(const o in c){const e=c[o];h(e)&&(r[o]=e.bind(n))}if(i){const t=i.call(n,n);y(t)&&(e.data=Po(t))}if(Gr=!0,s)for(const f in s){const e=s[f],t=h(e)?e.bind(n,n):h(e.get)?e.get.bind(n,n):o,i=!h(e)&&h(e.set)?e.set.bind(n):o,c=Ei({get:t,set:i});Object.defineProperty(r,f,{enumerable:!0,configurable:!0,get:()=>c.value,set:e=>c.value=e})}if(a)for(const o in a)Xr(a[o],r,n,o);function L(e,t){f(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(function(){if(u){const e=h(u)?u.call(n):u;Reflect.ownKeys(e).forEach((t=>{!function(e,t){if(_i){let n=_i.provides;const o=_i.parent&&_i.parent.provides;o===n&&(n=_i.provides=Object.create(o)),n[e]=t,"app"===_i.type.mpType&&_i.appContext.app.provide(e,t)}}(t,e[t])}))}}(),p&&Qr(p,e,"c"),L(Rr,d),L(Lr,g),L(Mr,m),L(Dr,v),L(Ar,_),L(Er,b),L(Wr,A),L(Ur,O),L(Br,P),L(Vr,w),L(Nr,S),L(Hr,E),f(C))if(C.length){const t=e.exposed||(e.exposed={});C.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});k&&e.render===o&&(e.render=k),null!=j&&(e.inheritAttrs=j),I&&(e.components=I),T&&(e.directives=T),e.ctx.$onApplyOptions&&e.ctx.$onApplyOptions(t,e,n)}function Qr(e,t,n){Ko(f(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Xr(e,t,n,o){const r=o.includes(".")?wr(n,o):()=>n[o];if(g(e)){const n=t[e];h(n)&&_r(r,n)}else if(h(e))_r(r,e.bind(n));else if(y(e))if(f(e))e.forEach((e=>Xr(e,t,n,o)));else{const o=h(e.handler)?e.handler.bind(n):t[e.handler];h(o)&&_r(r,o,e)}}function Yr(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:s}}=e.appContext,c=i.get(t);let a;return c?a=c:r.length||n||o?(a={},r.length&&r.forEach((e=>ei(a,e,s,!0))),ei(a,t,s)):a=t,y(t)&&i.set(t,a),a}function ei(e,t,n,o=!1){const{mixins:r,extends:i}=t;i&&ei(e,i,n,!0),r&&r.forEach((t=>ei(e,t,n,!0)));for(const s in t)if(o&&"expose"===s);else{const o=ti[s]||n&&n[s];e[s]=o?o(e[s],t[s]):t[s]}return e}const ti={data:ni,props:si,emits:si,methods:ii,computed:ii,beforeCreate:ri,created:ri,beforeMount:ri,mounted:ri,beforeUpdate:ri,updated:ri,beforeDestroy:ri,beforeUnmount:ri,destroyed:ri,unmounted:ri,activated:ri,deactivated:ri,errorCaptured:ri,serverPrefetch:ri,components:ii,directives:ii,watch:function(e,t){if(!e)return t;if(!t)return e;const n=c(Object.create(null),e);for(const o in t)n[o]=ri(e[o],t[o]);return n},provide:ni,inject:function(e,t){return ii(oi(e),oi(t))}};function ni(e,t){return t?e?function(){return c(h(e)?e.call(this,this):e,h(t)?t.call(this,this):t)}:t:e}function oi(e){if(f(e)){const t={};for(let n=0;n{d=!0;const[t,n]=li(e,o,!0);c(u,t),n&&p.push(...n)};!r&&o.mixins.length&&o.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!a&&!d)return y(e)&&i.set(e,n),n;if(f(a))for(let n=0;n-1,o[1]=n<0||t-1||l(o,"default"))&&p.push(e)}}}const g=[u,p];return y(e)&&i.set(e,g),g}function fi(e){return"$"!==e[0]&&!$(e)}function pi(e){if(null===e)return"null";if("function"==typeof e)return e.name||"";if("object"==typeof e){return e.constructor&&e.constructor.name||""}return""}function di(e,t){return pi(e)===pi(t)}function hi(e,t){return f(t)?t.findIndex((t=>di(t,e))):h(t)&&di(t,e)?0:-1}const gi=ar,mi=Sr();let yi=0;function vi(e,n,o){const r=e.type,i=(n?n.appContext:e.appContext)||mi,s={uid:yi++,vnode:e,type:r,parent:n,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,scope:new wn(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:n?n.provides:Object.create(i.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:li(r,i),emitsOptions:hr(r,i),emit:null,emitted:null,propsDefaults:t,inheritAttrs:r.inheritAttrs,ctx:t,data:t,props:t,attrs:t,slots:t,refs:t,setupState:t,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:o,suspenseId:o?o.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null,$uniElements:new Map,$templateUniElementRefs:[],$templateUniElementStyles:{},$eS:{},$eA:{}};return s.ctx={_:s},s.root=n?n.root:s,s.emit=dr.bind(null,s),e.ce&&e.ce(s),s}let _i=null;let bi,xi;bi=e=>{_i=e},xi=e=>{ki=e};const wi=e=>{const t=_i;return bi(e),e.scope.on(),()=>{e.scope.off(),bi(t)}},$i=()=>{_i&&_i.scope.off(),bi(null)};function Si(e){return 4&e.vnode.shapeFlag}let ki=!1;function Oi(e,t=!1){t&&xi(t);const{props:n}=e.vnode,o=Si(e);ci(e,n,o,t);const r=o?function(e){const t=e.type;e.accessCache=Object.create(null),e.proxy=Ro(new Proxy(e.ctx,Kr));const{setup:n}=t;if(n){const t=e.setupContext=n.length>1?function(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return function(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get:(t,n)=>(Bn(e,0,"$attrs"),t[n])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}(e):null,o=wi(e);Cn();const r=Fo(n,e,0,[e.props,t]);jn(),o(),v(r)?r.then($i,$i):function(e,t){h(t)?e.render=t:y(t)&&(e.setupState=qo(t));Pi(e)}(e,r)}else Pi(e)}(e):void 0;return t&&xi(!1),r}function Pi(e,t,n){const r=e.type;e.render||(e.render=r.render||o);{const t=wi(e);Cn();try{Jr(e)}finally{jn(),t()}}}function Ai(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(qo(Ro(e.exposed)),{get:(t,n)=>n in t?t[n]:e.proxy[n],has:(e,t)=>t in e||t in qr}))}const Ei=(e,t)=>{const n=function(e,t,n=!1){let r,i;const s=h(e);return s?(r=e,i=o):(r=e.get,i=e.set),new Do(r,i,s||!i,n)}(e,0,ki);return n},Ci="3.4.21";function ji(e){return Wo(e)}const Ii="[object Array]",Ti="[object Object]";function Ri(e,t){const n={};return Li(e,t),Mi(e,t,"",n),n}function Li(e,t){if((e=ji(e))===t)return;const n=b(e),o=b(t);if(n==Ti&&o==Ti)for(let r in t){const n=e[r];void 0===n?e[r]=null:Li(n,t[r])}else n==Ii&&o==Ii&&e.length>=t.length&&t.forEach(((t,n)=>{Li(e[n],t)}))}function Mi(e,t,n,o){if((e=ji(e))===t)return;const r=b(e),i=b(t);if(r==Ti)if(i!=Ti||Object.keys(e).length{Mi(e,i[t],(""==n?"":n+".")+s+"["+t+"]",o)}));else if(c==Ti)if(a!=Ti||Object.keys(r).length{Mi(e,t[r],n+"["+r+"]",o)})):Di(o,n,e)}function Di(e,t,n){e[t]=n}function Vi(e){const t=e.ctx.__next_tick_callbacks;if(t&&t.length){const e=t.slice(0);t.length=0;for(let t=0;t{t?Fo(t.bind(e.proxy),e,14):o&&o(e.proxy)})),new Promise((e=>{o=e}))}function Hi(e,t){const n=typeof(e=ji(e));if("object"===n&&null!==e){let n=t.get(e);if(void 0!==n)return n;if(f(e)){const o=e.length;n=new Array(o),t.set(e,n);for(let r=0;r{o[e]=n[e]})),o}(r,i));Object.keys(s).length?(o.__next_tick_pending=!0,r.setData(s,(()=>{o.__next_tick_pending=!1,Vi(e)})),ur()):Vi(e)}}function Wi(e,t,n){t.appContext.config.globalProperties.$applyOptions(e,t,n);const o=e.computed;if(o){const e=Object.keys(o);if(e.length){const n=t.ctx;n.$computedKeys||(n.$computedKeys=[]),n.$computedKeys.push(...e)}}delete t.ctx.$onApplyOptions}function zi(e,t=!1){const{setupState:n,$templateRefs:o,$templateUniElementRefs:r,ctx:{$scope:i,$mpPlatform:s}}=e;if("mp-alipay"===s)return;if(!i||!o&&!r)return;if(t)return o&&o.forEach((e=>qi(e,null,n))),void(r&&r.forEach((e=>qi(e,null,n))));const c="mp-baidu"===s||"mp-toutiao"===s,a=e=>{if(0===e.length)return[];const t=(i.selectAllComponents(".r")||[]).concat(i.selectAllComponents(".r-i-f")||[]);return e.filter((e=>{const o=function(e,t){const n=e.find((e=>e&&(e.properties||e.props).uI===t));if(n){const e=n.$vm;return e?Ai(e.$)||e:function(e){y(e)&&Ro(e);return e}(n)}return null}(t,e.i);return!(!c||null!==o)||(qi(e,o,n),!1)}))},u=()=>{if(o){const t=a(o);t.length&&e.proxy&&e.proxy.$scope&&e.proxy.$scope.setData({r1:1},(()=>{a(t)}))}};r&&r.length&&Ni(e,(()=>{r.forEach((e=>{f(e.v)?e.v.forEach((t=>{qi(e,t,n)})):qi(e,e.v,n)}))})),i._$setRef?i._$setRef(u):Ni(e,u)}function qi({r:e,f:t},n,o){if(h(e))e(n,{});else{const r=g(e),i=Ho(e);if(r||i)if(t){if(!i)return;f(e.value)||(e.value=[]);const t=e.value;if(-1===t.indexOf(n)){if(t.push(n),!n)return;n.$&&Vr((()=>a(t,n)),n.$)}}else r?l(o,e)&&(o[e]=n):Ho(e)&&(e.value=n)}}const Fi=ar;function Ki(e,t){const n=e.component=vi(e,t.parentComponent,null);return n.ctx.$onApplyOptions=Wi,n.ctx.$children=[],"app"===t.mpType&&(n.render=o),t.onBeforeSetup&&t.onBeforeSetup(n,t),Oi(n),t.parentComponent&&n.proxy&&t.parentComponent.ctx.$children.push(Ai(n)||n.proxy),function(e){const t=Xi.bind(e);e.$updateScopedSlots=()=>ir((()=>sr(t)));const n=()=>{if(e.isMounted){const{next:t,bu:n,u:o}=e;Yi(e,!1),Qi(),n&&I(n),Yi(e,!0),Ui(e,Gi(e)),o&&Fi(o)}else Vr((()=>{zi(e,!0)}),e),Ui(e,Gi(e))},r=e.effect=new $n(n,o,(()=>sr(i)),e.scope),i=e.update=()=>{r.dirty&&r.run()};i.id=e.uid,Yi(e,!0),i()}(n),n.proxy}const Zi=e=>{let t;for(const n in e)("class"===n||"style"===n||i(n))&&((t||(t={}))[n]=e[n]);return t};function Gi(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:i,propsOptions:[s],slots:c,attrs:a,emit:u,render:l,renderCache:f,data:p,setupState:d,ctx:h,uid:g,appContext:{app:{config:{globalProperties:{pruneComponentPropsCache:m}}}},inheritAttrs:y}=e;let v;e.$uniElementIds=new Map,e.$templateRefs=[],e.$templateUniElementRefs=[],e.$templateUniElementStyles={},e.$ei=0,m(g),e.__counter=0===e.__counter?1:0;const _=yr(e);try{if(4&n.shapeFlag){Ji(y,i,s,a);const e=r||o;v=l.call(e,e,f,i,d,p,h)}else{Ji(y,i,s,t.props?a:Zi(a));const e=t;v=e.length>1?e(i,{attrs:a,slots:c,emit:u}):e(i,null)}}catch(b){Zo(b,e,1),v=!1}return zi(e),yr(_),v}function Ji(e,t,n,o){if(t&&o&&!1!==e){const e=Object.keys(o).filter((e=>"class"!==e&&"style"!==e));if(!e.length)return;n&&e.some(s)?e.forEach((e=>{s(e)&&e.slice(9)in n||(t[e]=o[e])})):e.forEach((e=>t[e]=o[e]))}}const Qi=e=>{Cn(),ur(),jn()};function Xi(){const e=this.$scopedSlotsData;if(!e||0===e.length)return;const t=this.ctx.$scope,n=t.data,o=Object.create(null);e.forEach((({path:e,index:t,data:r})=>{const i=pe(n,e),s=g(t)?`${e}.${t}`:`${e}[${t}]`;if(void 0===i||void 0===i[t])o[s]=r;else{const e=Ri(r,i[t]);Object.keys(e).forEach((t=>{o[s+"."+t]=e[t]}))}})),e.length=0,Object.keys(o).length&&t.setData(o)}function Yi({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}const es=function(e,t=null){h(e)||(e=c({},e)),null==t||y(t)||(t=null);const n=Sr(),o=new WeakSet,r=n.app={_uid:kr++,_component:e,_props:t,_container:null,_context:n,_instance:null,version:Ci,get config(){return n.config},set config(e){},use:(e,...t)=>(o.has(e)||(e&&h(e.install)?(o.add(e),e.install(r,...t)):h(e)&&(o.add(e),e(r,...t))),r),mixin:e=>(n.mixins.includes(e)||n.mixins.push(e),r),component:(e,t)=>t?(n.components[e]=t,r):n.components[e],directive:(e,t)=>t?(n.directives[e]=t,r):n.directives[e],mount(){},unmount(){},provide:(e,t)=>(n.provides[e]=t,r),runWithContext(e){const t=Or;Or=r;try{return e()}finally{Or=t}}};return r};function ts(e,t=null){("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof my?my:void 0).__VUE__=!0;const n=es(e,t),r=n._context;r.config.globalProperties.$nextTick=function(e){return Ni(this.$,e)};const i=e=>(e.appContext=r,e.shapeFlag=6,e),s=function(e,t){return Ki(i(e),t)},c=function(e){return e&&function(e){const{bum:t,scope:n,update:o,um:r}=e;t&&I(t);{const t=e.parent;if(t){const n=t.ctx.$children,o=Ai(e)||e.proxy,r=n.indexOf(o);r>-1&&n.splice(r,1)}}n.stop(),o&&(o.active=!1),r&&Fi(r),Fi((()=>{e.isUnmounted=!0}))}(e.$)};return n.mount=function(){e.render=o;const t=Ki(i({type:e}),{mpType:"app",mpInstance:null,parentComponent:null,slots:[],props:null});return n._instance=t.$,t.$app=n,t.$createComponent=s,t.$destroyComponent=c,r.$appInstance=t,t},n.unmount=function(){},n}function ns(e,t,n,o){h(t)&&Ir(e,t.bind(n),o)}function os(e,t,n){!function(e,t,n){const o=e.mpType||n.$mpType;o&&"component"!==o&&Object.keys(e).forEach((o=>{if(be(o,e[o],!1)){const r=e[o];f(r)?r.forEach((e=>ns(o,e,n,t))):ns(o,r,n,t)}}))}(e,t,n)}function rs(e,t,n){return e[t]=n}function is(e,...t){const n=this[e];return n?n(...t):(console.error(`method ${e} not found`),null)}function ss(e){const t=e.config.errorHandler;return function(n,o,r){t&&t(n,o,r);const i=e._instance;if(!i||!i.proxy)throw n;i[H]?i.proxy.$callHook(H,n):Go(n,0,o&&o.$.vnode,!1)}}function cs(e,t){return e?[...new Set([].concat(e,t))]:t}let as;const us="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",ls=/^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;function fs(){const e=_n.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[],tokenExpired:0};let n;try{n=JSON.parse((o=t[1],decodeURIComponent(as(o).split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))))}catch(r){throw new Error("获取当前用户信息出错,详细错误信息为:"+r.message)}var o;return n.tokenExpired=1e3*n.exp,delete n.exp,delete n.iat,n}function ps(e){const t=e.config;var n;t.errorHandler=$e(e,ss),n=t.optionMergeStrategies,ve.forEach((e=>{n[e]=cs}));const o=t.globalProperties;!function(e){e.uniIDHasRole=function(e){const{role:t}=fs();return t.indexOf(e)>-1},e.uniIDHasPermission=function(e){const{permission:t}=fs();return this.uniIDHasRole("admin")||t.indexOf(e)>-1},e.uniIDTokenValid=function(){const{tokenExpired:e}=fs();return e>Date.now()}}(o),o.$set=rs,o.$applyOptions=os,o.$callMethod=is,_n.invokeCreateVueAppHook(e)}as="function"!=typeof atob?function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!ls.test(e))throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");var t;e+="==".slice(2-(3&e.length));for(var n,o,r="",i=0;i>16&255):64===o?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return r}:atob;const ds=Object.create(null);function hs(e){delete ds[e]}function gs(e){if(!e)return;const[t,n]=e.split(",");return ds[t]?ds[t][parseInt(n)]:void 0}var ms={install(e){ps(e),e.config.globalProperties.pruneComponentPropsCache=hs;const t=e.mount;e.mount=function(n){const o=t.call(e,n),r=function(){const e="createApp";if("undefined"!=typeof global&&void 0!==global[e])return global[e];if("undefined"!=typeof my)return my[e]}();return r?r(o):"undefined"!=typeof createMiniProgramApp&&createMiniProgramApp(o),o}}};function ys(e,t){const n=_i||mr,r=n.ctx,i=void 0===t||"mp-weixin"!==r.$mpPlatform&&"mp-qq"!==r.$mpPlatform&&"mp-xhs"!==r.$mpPlatform||!g(t)&&"number"!=typeof t?"":"_"+t,s="e"+n.$ei+++i,a=r.$scope;if(!e)return delete a[s],s;const u=a[s];return u?u.value=e:a[s]=function(e,t){const n=e=>{var r;(r=e).type&&r.target&&(r.preventDefault=o,r.stopPropagation=o,r.stopImmediatePropagation=o,l(r,"detail")||(r.detail={}),l(r,"markerId")&&(r.detail="object"==typeof r.detail?r.detail:{},r.detail.markerId=r.markerId),x(r.detail)&&l(r.detail,"checked")&&!l(r.detail,"value")&&(r.detail.value=r.detail.checked),x(r.detail)&&(r.target=c({},r.target,r.detail)));let i=[e];t&&t.ctx.$getTriggerEventDetail&&"number"==typeof e.detail&&(e.detail=t.ctx.$getTriggerEventDetail(e.detail)),e.detail&&e.detail.__args__&&(i=e.detail.__args__);const s=n.value,a=()=>Ko(function(e,t){if(f(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n&&n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,s),t,5,i),u=e.target,p=!!u&&(!!u.dataset&&"true"===String(u.dataset.eventsync));if(!vs.includes(e.type)||p){const t=a();if("input"===e.type&&(f(t)||v(t)))return;return t}setTimeout(a)};return n.value=e,n}(e,n),s}const vs=["tap","longpress","longtap","transitionend","animationstart","animationiteration","animationend","touchforcechange"];const _s=function(e,t=null){return e&&(e.mpType="app"),ts(e,t).use(ms)};const bs=["externalClasses"];const xs=/_(.*)_worklet_factory_/;function ws(e,t){const n=e.$children;for(let r=n.length-1;r>=0;r--){const e=n[r];if(e.$scope._$vueId===t)return e}let o;for(let r=n.length-1;r>=0;r--)if(o=ws(n[r],t),o)return o}const $s=["createSelectorQuery","createIntersectionObserver","selectAllComponents","selectComponent"];function Ss(e,t){const n=e.ctx;n.mpType=t.mpType,n.$mpType=t.mpType,n.$mpPlatform="mp-weixin",n.$scope=t.mpInstance,Object.defineProperties(n,{[le]:{get(){const e=this.$scope.data[le];return void 0===e?"":e}}}),n.$mp={},n._self={},e.slots={},f(t.slots)&&t.slots.length&&(t.slots.forEach((t=>{e.slots[t]=!0})),e.slots.d&&(e.slots.default=!0)),n.getOpenerEventChannel=function(){return t.mpInstance.getOpenerEventChannel()},n.$hasHook=ks,n.$callHook=Os,e.emit=function(e,t){return function(n,...o){const r=t.$scope;if(r&&n){const e={__args__:o};r.triggerEvent(n,e)}return e.apply(this,[n,...o])}}(e.emit,n)}function ks(e){const t=this.$[e];return!(!t||!t.length)}function Os(e,t){"mounted"===e&&(Os.call(this,"bm"),this.$.isMounted=!0,e="m");const n=this.$[e];return n&&((e,t)=>{let n;for(let o=0;o{be(n,e[n])&&t.add(n)}));{const{extends:n,mixins:o}=e;o&&o.forEach((e=>As(e,t))),n&&As(n,t)}}return t}function Es(e,t,n){-1!==n.indexOf(t)||l(e,t)||(e[t]=function(e){return this.$vm&&this.$vm.$callHook(t,e)})}const Cs=[q];function js(e,t,n=Cs){t.forEach((t=>Es(e,t,n)))}function Is(e,t,n=Cs){As(t).forEach((t=>Es(e,t,n)))}const Ts=fe((()=>{const e=[],t=h(getApp)&&getApp({allowDefault:!0});if(t&&t.$vm&&t.$vm.$){const n=t.$vm.$.appContext.mixins;if(f(n)){const t=Object.keys(_e);n.forEach((n=>{t.forEach((t=>{l(n,t)&&!e.includes(t)&&e.push(t)}))}))}}return e}));const Rs=[D,V,H,B,U,W];function Ls(e,t){const n=e.$,o={globalData:e.$options&&e.$options.globalData||{},$vm:e,onLaunch(t){this.$vm=e;const o=n.ctx;this.$vm&&o.$scope&&o.$callHook||(Ss(n,{mpType:"app",mpInstance:this,slots:[]}),o.globalData=this.globalData,e.$callHook(N,t))}},r=wx.$onErrorHandlers;r&&(r.forEach((e=>{Ir(H,e,n)})),r.length=0),function(e){const t=Bo(function(){let e="";{const t=wx.getAppBaseInfo();e=Ee(t&&t.language?t.language:Ae)||Ae}return e}());Object.defineProperty(e,"$locale",{get:()=>t.value,set(e){t.value=e}})}(e);const i=e.$.type;js(o,Rs),Is(o,i);{const e=i.methods;e&&c(o,e)}return o}function Ms(e,t){if(h(e.onLaunch)){const t=wx.getLaunchOptionsSync&&wx.getLaunchOptionsSync();e.onLaunch(t)}h(e.onShow)&&wx.onAppShow&&wx.onAppShow((e=>{t.$callHook("onShow",e)})),h(e.onHide)&&wx.onAppHide&&wx.onAppHide((e=>{t.$callHook("onHide",e)}))}const Ds=["eO","uR","uRIF","uI","uT","uP","uS"];function Vs(e){e.properties||(e.properties={}),c(e.properties,function(e,t=!1){const n={};if(!t){let e=function(e){const t=Object.create(null);e&&e.forEach((e=>{t[e]=!0})),this.setData({$slots:t})};Ds.forEach((e=>{n[e]={type:null,value:""}})),n.uS={type:null,value:[]},n.uS.observer=e}return e.behaviors&&e.behaviors.includes("wx://form-field")&&(e.properties&&e.properties.name||(n.name={type:null,value:""}),e.properties&&e.properties.value||(n.value={type:null,value:""})),n}(e),function(e){const t={};return e&&e.virtualHost&&(t.virtualHostStyle={type:null,value:""},t.virtualHostClass={type:null,value:""},t.virtualHostHidden={type:null,value:""},t[le]={type:null,value:""}),t}(e.options))}const Ns=[String,Number,Boolean,Object,Array,null];function Hs(e,t){const n=function(e){return f(e)&&1===e.length?e[0]:e}(e);return-1!==Ns.indexOf(n)?n:null}function Bs(e,t){return(t?function(e){const t={};x(e)&&Object.keys(e).forEach((n=>{-1===Ds.indexOf(n)&&(t[n]=e[n])}));return t}(e):gs(e.uP))||{}}function Us(e){const t=function(){const e=this.properties.uP;e&&(this.$vm?function(e,t){const n=To(t.props),o=gs(e)||{};Ws(n,o)&&(!function(e,t,n,o){const{props:r,attrs:i,vnode:{patchFlag:s}}=e,c=To(r),[a]=e.propsOptions;let u=!1;if(!(o||s>0)||16&s){let o;ai(e,t,r,i)&&(u=!0);for(const i in c)t&&(l(t,i)||(o=A(i))!==i&&l(t,o))||(a?!n||void 0===n[i]&&void 0===n[o]||(r[i]=ui(a,c,i,void 0,e,!0)):delete r[i]);if(i!==c)for(const e in i)t&&l(t,e)||(delete i[e],u=!0)}else if(8&s){const n=e.vnode.dynamicProps;for(let o=0;o-1&&function(e){const t=Xo.indexOf(e);t>Yo&&Xo.splice(t,1)}(t.update),t.update());var r}(e,this.$vm.$):"m"===this.properties.uT&&function(e,t){const n=t.properties,o=gs(e)||{};Ws(n,o,!1)&&t.setData(o)}(e,this))};e.observers||(e.observers={}),e.observers.uP=t}function Ws(e,t,n=!0){const o=Object.keys(t);if(n&&o.length!==Object.keys(e).length)return!0;for(let r=0;r{o.push(e.replace("uni://","wx://")),"uni://form-field"===e&&(f(n)?(n.push("name"),n.push("modelValue")):(n.name={type:String,default:""},n.modelValue={type:[String,Number,Boolean,Array,Object,Date],default:""}))})),o}(t)}function qs(e,{parse:t,mocks:n,isPage:o,isPageInProject:r,initRelation:i,handleLink:s,initLifetimes:a}){e=e.default||e;const u={multipleSlots:!0,addGlobalClass:!0,pureDataPattern:/^uP$/};f(e.mixins)&&e.mixins.forEach((e=>{y(e.options)&&c(u,e.options)})),e.options&&c(u,e.options);const p={options:u,lifetimes:a({mocks:n,isPage:o,initRelation:i,vueOptions:e}),pageLifetimes:{show(){this.$vm&&this.$vm.$callHook("onPageShow")},hide(){this.$vm&&this.$vm.$callHook("onPageHide")},resize(e){this.$vm&&this.$vm.$callHook("onPageResize",e)}},methods:{__l:s}};var d,h,g,m;return zs(p,e),Vs(p),Us(p),function(e,t){bs.forEach((n=>{l(t,n)&&(e[n]=t[n])}))}(p,e),d=p.methods,h=e.wxsCallMethods,f(h)&&h.forEach((e=>{d[e]=function(t){return this.$vm[e](t)}})),g=p.methods,(m=e.methods)&&Object.keys(m).forEach((e=>{const t=e.match(xs);if(t){const n=t[1];g[e]=m[e],g[n]=m[n]}})),t&&t(p,{handleLink:s}),p}let Fs,Ks;function Zs(){return getApp().$vm}function Gs(e,t){const{parse:n,mocks:o,isPage:r,initRelation:i,handleLink:s,initLifetimes:c}=t,a=qs(e,{mocks:o,isPage:r,isPageInProject:!0,initRelation:i,handleLink:s,initLifetimes:c});!function({properties:e},t){f(t)?t.forEach((t=>{e[t]={type:String,value:""}})):x(t)&&Object.keys(t).forEach((n=>{const o=t[n];if(x(o)){let t=o.default;h(t)&&(t=t());const r=o.type;o.type=Hs(r),e[n]={type:o.type,value:t}}else e[n]={type:Hs(o)}}))}(a,(e.default||e).props);const u=a.methods;return u.onLoad=function(e){var t;return this.options=e,this.$page={fullPath:(t=this.route+me(e),function(e){return 0===e.indexOf("/")}(t)?t:"/"+t)},this.$vm&&this.$vm.$callHook(z,e)},js(u,Ps),Is(u,e),function(e,t){if(!t)return;Object.keys(_e).forEach((n=>{t&_e[n]&&Es(e,n,[])}))}(u,e.__runtimeHooks),js(u,Ts()),n&&n(a,{handleLink:s}),a}const Js=Page,Qs=Component;function Xs(e){const t=e.triggerEvent,n=function(n,...o){return t.apply(e,[(r=n,O(r.replace(he,"-"))),...o]);var r};try{e.triggerEvent=n}catch(o){e._triggerEvent=n}}function Ys(e,t,n){const o=t[e];t[e]=o?function(...e){return Xs(this),o.apply(this,e)}:function(){Xs(this)}}Page=function(e){return Ys(z,e),Js(e)},Component=function(e){Ys("created",e);return e.properties&&e.properties.uP||(Vs(e),Us(e)),Qs(e)};var ec=Object.freeze({__proto__:null,handleLink:function(e){const t=e.detail||e.value,n=t.vuePid;let o;n&&(o=ws(this.$vm,n)),o||(o=this.$vm),t.parent=o},initLifetimes:function({mocks:e,isPage:t,initRelation:n,vueOptions:o}){return{attached(){let r=this.properties;!function(e,t){if(!e)return;const n=e.split(","),o=n.length;1===o?t._$vueId=n[0]:2===o&&(t._$vueId=n[0],t._$vuePid=n[1])}(r.uI,this);const i={vuePid:this._$vuePid};n(this,i);const s=this,c=t(s);let a=r;this.$vm=function(e,t){Fs||(Fs=Zs().$createComponent);const n=Fs(e,t);return Ai(n.$)||n}({type:o,props:Bs(a,c)},{mpType:c?"page":"component",mpInstance:s,slots:r.uS||{},parentComponent:i.parent&&i.parent.$,onBeforeSetup(t,n){!function(e,t){Object.defineProperty(e,"refs",{get(){const e={};return function(e,t,n){e.selectAllComponents(t).forEach((e=>{const t=e.properties.uR;n[t]=e.$vm||e}))}(t,".r",e),t.selectAllComponents(".r-i-f").forEach((t=>{const n=t.properties.uR;n&&(e[n]||(e[n]=[]),e[n].push(t.$vm||t))})),e}})}(t,s),function(e,t,n){const o=e.ctx;n.forEach((n=>{l(t,n)&&(e[n]=o[n]=t[n])}))}(t,s,e),function(e,t){Ss(e,t);const n=e.ctx;$s.forEach((e=>{n[e]=function(...t){const o=n.$scope;if(o&&o[e])return o[e].apply(o,t)}}))}(t,n)}}),c||function(e){const t=e.$options;f(t.behaviors)&&t.behaviors.includes("uni://form-field")&&e.$watch("modelValue",(()=>{e.$scope&&e.$scope.setData({name:e.name,value:e.modelValue})}),{immediate:!0})}(this.$vm)},ready(){this.$vm&&(this.$vm.$callHook("mounted"),this.$vm.$callHook(q))},detached(){var e;this.$vm&&(hs(this.$vm.$.uid),e=this.$vm,Ks||(Ks=Zs().$destroyComponent),Ks(e))}}},initRelation:function(e,t){e.triggerEvent("__l",t)},isPage:function(e){return!!e.route},mocks:["__route__","__wxExparserNodeId__","__wxWebviewId__"]});const tc=function(e){return App(Ls(e))},nc=(oc=ec,function(e){return Component(Gs(e,oc))});var oc;const rc=function(e){return function(t){return Component(qs(t,e))}}(ec),ic=function(e){Ms(Ls(e),e)},sc=function(e){const t=Ls(e),n=h(getApp)&&getApp({allowDefault:!0});if(!n)return;e.$.ctx.$scope=n;const o=n.globalData;o&&Object.keys(t.globalData).forEach((e=>{l(o,e)||(o[e]=t.globalData[e])})),Object.keys(t).forEach((e=>{l(n,e)||(n[e]=t[e])})),Ms(t,e)};function cc(e,t=new WeakMap){if(null===e||"object"!=typeof e)return e;if(t.has(e))return t.get(e);let n;if(e instanceof Date)n=new Date(e.getTime());else if(e instanceof RegExp)n=new RegExp(e);else if(e instanceof Map)n=new Map(Array.from(e,(([e,n])=>[e,cc(n,t)])));else if(e instanceof Set)n=new Set(Array.from(e,(e=>cc(e,t))));else if(Array.isArray(e))n=e.map((e=>cc(e,t)));else if("[object Object]"===Object.prototype.toString.call(e)){n=Object.create(Object.getPrototypeOf(e)),t.set(e,n);for(const[o,r]of Object.entries(e))n[o]=cc(r,t)}else n=Object.assign({},e);return t.set(e,n),n}function ac(e={},t={}){if("object"!=typeof(e=cc(e))||null===e||"object"!=typeof t||null===t)return e;const n=Array.isArray(e)?e.slice():Object.assign({},e);for(const o in t){if(!t.hasOwnProperty(o))continue;const e=t[o],r=n[o];e instanceof Date?n[o]=new Date(e):e instanceof RegExp?n[o]=new RegExp(e):e instanceof Map?n[o]=new Map(e):e instanceof Set?n[o]=new Set(e):n[o]="object"==typeof e&&null!==e?ac(r,e):e}return n}function uc(e){switch(typeof e){case"undefined":return!0;case"string":if(0==e.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,"").length)return!0;break;case"boolean":if(!e)return!0;break;case"number":if(0===e||isNaN(e))return!0;break;case"object":if(null===e||0===e.length)return!0;for(var t in e)return!1;return!0}return!1}wx.createApp=global.createApp=tc,wx.createPage=nc,wx.createComponent=rc,wx.createPluginApp=global.createPluginApp=ic,wx.createSubpackageApp=global.createSubpackageApp=sc;const lc={email:function(e){return/[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(e)},mobile:function(e){return/^1[3-9]\d{9}$/.test(e)},url:function(e){return/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/.test(e)},date:function(e){return!/Invalid|NaN/.test(new Date(e).toString())},dateISO:function(e){return/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(e)},number:function(e){return/^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(e)},digits:function(e){return/^\d+$/.test(e)},idCard:function(e){return/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(e)},carNo:function(e){const t=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/,n=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;return 7===e.length?n.test(e):8===e.length&&t.test(e)},amount:function(e){return/^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(e)},chinese:function(e){return/^[\u4e00-\u9fa5]+$/gi.test(e)},letter:function(e){return/^[a-zA-Z]*$/.test(e)},enOrNum:function(e){return/^[0-9a-zA-Z]*$/g.test(e)},contains:function(e,t){return e.indexOf(t)>=0},range:function(e,t){return e>=t[0]&&e<=t[1]},rangeLength:function(e,t){return e.length>=t[0]&&e.length<=t[1]},empty:uc,isEmpty:uc,jsonString:function(e){if("string"==typeof e)try{var t=JSON.parse(e);return!("object"!=typeof t||!t)}catch(n){return!1}return!1},landline:function(e){return/^\d{3,4}-\d{7,8}(-\d{3,4})?$/.test(e)},object:function(e){return"[object Object]"===Object.prototype.toString.call(e)},array:function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===Object.prototype.toString.call(e)},code:function(e,t=6){return new RegExp(`^\\d{${t}}$`).test(e)}};const fc=new class{setConfig(e){this.config=ac(this.config,e)}request(e={}){if(this.interceptor.request&&"function"==typeof this.interceptor.request){let t=this.interceptor.request(e);if(!1===t)return new Promise((()=>{}));this.options=t}return e.dataType=e.dataType||this.config.dataType,e.responseType=e.responseType||this.config.responseType,e.url=e.url||"",e.params=e.params||{},e.header=Object.assign({},this.config.header,e.header),e.method=e.method||this.config.method,new Promise(((t,n)=>{e.complete=e=>{if(_n.hideLoading(),clearTimeout(this.config.timer),this.config.timer=null,this.config.originalData)if(this.interceptor.response&&"function"==typeof this.interceptor.response){let o=this.interceptor.response(e);!1!==o?t(o):n(e)}else t(e);else if(200==e.statusCode)if(this.interceptor.response&&"function"==typeof this.interceptor.response){let o=this.interceptor.response(e.data);!1!==o?t(o):n(e.data)}else t(e.data);else n(e)},e.url=lc.url(e.url)?e.url:this.config.baseUrl+(0==e.url.indexOf("/")?e.url:"/"+e.url),this.config.showLoading&&!this.config.timer&&(this.config.timer=setTimeout((()=>{_n.showLoading({title:this.config.loadingText,mask:this.config.loadingMask}),this.config.timer=null}),this.config.loadingTime)),_n.request(e)}))}constructor(){this.config={baseUrl:"",header:{},method:"POST",dataType:"json",responseType:"text",showLoading:!0,loadingText:"请求中...",loadingTime:800,timer:null,originalData:!1,loadingMask:!0},this.interceptor={request:null,response:null},this.get=(e,t={},n={})=>this.request({method:"GET",url:e,header:n,data:t}),this.post=(e,t={},n={})=>this.request({url:e,method:"POST",header:n,data:t}),this.put=(e,t={},n={})=>this.request({url:e,method:"PUT",header:n,data:t}),this.delete=(e,t={},n={})=>this.request({url:e,method:"DELETE",header:n,data:t})}};const pc=(new class{constructor(){this.config={type:"navigateTo",url:"",delta:1,params:{},animationType:"pop-in",animationDuration:300,intercept:!1},this.route=this.route.bind(this)}addRootPath(e){return"/"===e[0]?e:`/${e}`}mixinParam(e,t){e=e&&this.addRootPath(e);let n="";return/.*\/.*\?.*=.*/.test(e)?(n=_n.$u.queryParams(t,!1),e+"&"+n):(n=_n.$u.queryParams(t),e+n)}async route(e={},t={}){let n={};if("string"==typeof e?(n.url=this.mixinParam(e,t),n.type="navigateTo"):(n=_n.$u.deepMerge(this.config,e),n.url=this.mixinParam(e.url,e.params)),t.intercept&&(this.config.intercept=t.intercept),n.params=t,n=_n.$u.deepMerge(this.config,n),"function"==typeof _n.$u.routeIntercept){await new Promise(((e,t)=>{_n.$u.routeIntercept(n,e)}))&&this.openPage(n)}else this.openPage(n)}openPage(e){const{url:t,type:n,delta:o,animationType:r,animationDuration:i}=e;"navigateTo"!=e.type&&"to"!=e.type||_n.navigateTo({url:t,animationType:r,animationDuration:i}),"redirectTo"!=e.type&&"redirect"!=e.type||_n.redirectTo({url:t}),"switchTab"!=e.type&&"tab"!=e.type||_n.switchTab({url:t}),"reLaunch"!=e.type&&"launch"!=e.type||_n.reLaunch({url:t}),"navigateBack"!=e.type&&"back"!=e.type||_n.navigateBack({delta:o})}}).route;function dc(e=null,t="yyyy-mm-dd"){e||(e=Number(new Date)),10==e.toString().length&&(e*=1e3);let n,o=new Date(e),r={"y+":o.getFullYear().toString(),"m+":(o.getMonth()+1).toString(),"d+":o.getDate().toString(),"h+":o.getHours().toString(),"M+":o.getMinutes().toString(),"s+":o.getSeconds().toString()};for(let i in r)n=new RegExp("("+i+")").exec(t),n&&(t=t.replace(n[1],1==n[1].length?r[i]:r[i].padStart(n[1].length,"0")));return t}function hc(e,t=!0){if((e=e.toLowerCase())&&/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(e)){if(4===e.length){let t="#";for(let n=1;n<4;n+=1)t+=e.slice(n,n+1).concat(e.slice(n,n+1));e=t}let n=[];for(let t=1;t<7;t+=2)n.push(parseInt("0x"+e.slice(t,t+2)));return t?`rgb(${n[0]},${n[1]},${n[2]})`:n}if(/^(rgb|RGB)/.test(e)){return e.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(",").map((e=>Number(e)))}return e}function gc(e){let t=e;if(/^(rgb|RGB)/.test(t)){let e=t.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(","),n="#";for(let t=0;t=e)return String(n);let o=e-n.length,r=Math.ceil(o/t.length);for(;r>>=1;)t+=t,1===r&&(t+=t);return t.slice(0,o)+n});const mc={colorGradient:function(e="rgb(0, 0, 0)",t="rgb(255, 255, 255)",n=10){let o=hc(e,!1),r=o[0],i=o[1],s=o[2],c=hc(t,!1),a=(c[0]-r)/n,u=(c[1]-i)/n,l=(c[2]-s)/n,f=[];for(let p=0;p=0))if(t.constructor===Array)switch(n){case"indices":for(let n=0;n{r.push(i+"[]="+e)}));break;case"repeat":t.forEach((e=>{r.push(i+"="+e)}));break;case"comma":let e="";t.forEach((t=>{e+=(e?",":"")+t})),r.push(i+"="+e)}else r.push(i+"="+t)}return r.length?o+r.join("&"):""},route:pc,timeFormat:dc,date:dc,timeFrom:function(e=null,t="yyyy-mm-dd"){e||(e=Number(new Date)),10==e.toString().length&&(e*=1e3);let n=+new Date(Number(e)),o=(Number(new Date)-n)/1e3,r="";switch(!0){case o<300:r="刚刚";break;case o>=300&&o<3600:r=parseInt(o/60)+"分钟前";break;case o>=3600&&o<86400:r=parseInt(o/3600)+"小时前";break;case o>=86400&&o<2592e3:r=parseInt(o/86400)+"天前";break;default:r=!1===t?o>=2592e3&&o<31536e3?parseInt(o/2592e3)+"个月前":parseInt(o/31536e3)+"年前":dc(n,t)}return r},colorGradient:mc.colorGradient,colorToRgba:mc.colorToRgba,guid:function(e=32,t=!0,n=null){let o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),r=[];if(n=n||o.length,e)for(let i=0;iMath.random()-.5))},wranning:function(e){},get:fc.get,post:fc.post,put:fc.put,delete:fc.delete,hexToRgb:mc.hexToRgb,rgbToHex:mc.rgbToHex,test:lc,random:function(e,t){if(e>=0&&t>0&&t>=e){let n=t-e+1;return Math.floor(Math.random()*n+e)}return 0},deepClone:cc,deepMerge:ac,getParent:function(e,t){let n=this.$parent;for(;n;){if(n.$options.name===e){let e={};if(Array.isArray(t))t.map((t=>{e[t]=n[t]?n[t]:""}));else for(let o in t)Array.isArray(t[o])?t[o].length?e[o]=t[o]:e[o]=n[o]:t[o].constructor===Object?Object.keys(t[o]).length?e[o]=t[o]:e[o]=n[o]:e[o]=t[o]||!1===t[o]?t[o]:n[o];return e}n=n.$parent}return{}},$parent:function(e=void 0){let t=this.$parent;for(;t;){if(!t.$options||t.$options.name===e)return t;t=t.$parent}return!1},addUnit:function(e="auto",t="rpx"){return e=String(e),lc.number(e)?`${e}${t}`:e},trim:function(e,t="both"){return"both"==t?e.replace(/^\s+|\s+$/g,""):"left"==t?e.replace(/^\s*/,""):"right"==t?e.replace(/(\s*$)/g,""):"all"==t?e.replace(/\s+/g,""):e},type:["primary","success","error","warning","info"],http:fc,toast:function(e,t=1500){_n.showToast({title:e,icon:"none",duration:t})},config:bc,zIndex:{toast:10090,noNetwork:10080,popup:10075,mask:10070,navbar:980,topTips:975,sticky:970,indexListSticky:965},debounce:function(e,t=500,n=!1){if(null!==vc&&clearTimeout(vc),n){var o=!vc;vc=setTimeout((function(){vc=null}),t),o&&"function"==typeof e&&e()}else vc=setTimeout((function(){"function"==typeof e&&e()}),t)},throttle:function(e,t=500,n=!0){n?yc||(yc=!0,"function"==typeof e&&e(),setTimeout((()=>{yc=!1}),t)):yc||(yc=!0,setTimeout((()=>{yc=!1,"function"==typeof e&&e()}),t))}};_n.$u=xc,exports._export_sfc=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},exports.createSSRApp=_s,exports.e=(e,...t)=>c(e,...t),exports.f=(e,t)=>function(e,t){let n;if(f(e)||g(e)){n=new Array(e.length);for(let o=0,r=e.length;ot(e,n,n)));else{const o=Object.keys(e);n=new Array(o.length);for(let r=0,i=o.length;rR(e),exports.o=(e,t)=>ys(e,t),exports.t=e=>(e=>g(e)?e:null==e?"":f(e)||y(e)&&(e.toString===_||!h(e.toString))?JSON.stringify(e,L,2):String(e))(e);
diff --git a/unpackage/dist/build/mp-weixin/config/http.js b/unpackage/dist/build/mp-weixin/config/http.js
new file mode 100644
index 0000000..6d9821f
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/config/http.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js"),o=require("./url.js");exports.request=a=>new Promise(((t,d)=>{console.log(`发起请求: ${a.method} ${o.URL+a.url}`,a.data),e.index.request({url:o.URL+a.url,method:a.method,data:a.data,header:{"Content-Type":"application/x-www-form-urlencoded",...a.headers,appid:o.appid,Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")},success:e=>(console.log(`请求响应: ${a.url}`,e),200!==e.statusCode?(console.error(`HTTP状态码错误: ${e.statusCode}`,e.data),e.data?void t(e.data):void d({msg:`请求失败,状态码:${e.statusCode}`})):e.data&&200!==e.data.code?(console.warn(`业务状态码错误: ${e.data.code}`,e.data),void t(e.data)):void t(e.data)),fail(e){console.error(`请求失败: ${a.url}`,e),d(e)}})}));
diff --git a/unpackage/dist/build/mp-weixin/config/url.js b/unpackage/dist/build/mp-weixin/config/url.js
new file mode 100644
index 0000000..fb6a965
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/config/url.js
@@ -0,0 +1 @@
+"use strict";exports.URL="https://unifans.gxfs123.com",exports.appid="wxe752f45e7f7aa271";
diff --git a/unpackage/dist/build/mp-weixin/config/user.js b/unpackage/dist/build/mp-weixin/config/user.js
new file mode 100644
index 0000000..88d1525
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/config/user.js
@@ -0,0 +1 @@
+"use strict";const e=require("./http.js");exports.confirmPaymentAndRent=r=>(console.log(`确认支付并弹出充电宝, orderId: ${r}`),e.request({url:`/app/device/confirmPaymentAndRent?orderId=${r}`,method:"post"})),exports.getDeviceInfo=r=>e.request({url:`/app/device/${r}`,method:"get"}),exports.getMyIndexInfo=r=>e.request({url:"/app/user/userInfo",method:"get",data:r}),exports.getOrderList=r=>e.request({url:"/app/order/list",method:"get",data:r,hideLoading:!0}),exports.login=r=>e.request({url:"/app/user/login",method:"get",data:r}),exports.queryById=r=>(console.log(`查询订单详情, orderId: ${r}`),e.request({url:`/app/order/${r}`,method:"get",hideLoading:!0})),exports.queryHasOrder=r=>e.request({url:`/app/order/list?deviceNo=${r}&orderStatus=in_used`,method:"get"}),exports.rentPowerBank=(r,t)=>e.request({url:"/app/device/rentPowerBank",method:"post",data:{deviceNo:r,phone:t}});
diff --git a/unpackage/dist/build/mp-weixin/constants/help.js b/unpackage/dist/build/mp-weixin/constants/help.js
new file mode 100644
index 0000000..0883091
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/constants/help.js
@@ -0,0 +1 @@
+"use strict";exports.HELP_CONTENT={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"}}};
diff --git a/unpackage/dist/build/mp-weixin/constants/orderStatus.js b/unpackage/dist/build/mp-weixin/constants/orderStatus.js
new file mode 100644
index 0000000..e673b1c
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/constants/orderStatus.js
@@ -0,0 +1 @@
+"use strict";exports.OrderStatusMap={waiting_for_payment:{text:"待支付",class:"status-waiting"},payment_in_progress:{text:"支付中",class:"status-progress"},payment_successful:{text:"支付成功",class:"status-success"},in_used:{text:"使用中",class:"status-using"},payment_failed:{text:"支付失败",class:"status-failed"},order_cancelled:{text:"已取消",class:"status-cancelled"},used_done:{text:"已完成",class:"status-finished"}},exports.OrderStatusTabs=[{text:"全部",status:[]},{text:"待支付",status:["waiting_for_payment","payment_in_progress"]},{text:"使用中",status:["payment_successful","in_used"]},{text:"已完成",status:["used_done","payment_failed","order_cancelled"]}];
diff --git a/unpackage/dist/build/mp-weixin/pages/deposit/index.js b/unpackage/dist/build/mp-weixin/pages/deposit/index.js
new file mode 100644
index 0000000..c2d925c
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/deposit/index.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../common/vendor.js"),e={data:()=>({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(){t.index.showModal({title:"确认提现",content:"押金将原路退回,预计0-7个工作日到账",success:e=>{e.confirm&&t.index.showToast({title:"提现申请已提交",icon:"success"})}})}}};const o=t._export_sfc(e,[["render",function(e,o,n,d,s,a){return{a:t.t(s.depositAmount),b:t.o(((...t)=>a.handleWithdraw&&a.handleWithdraw(...t))),c:t.f(s.records,((e,o,n)=>({a:t.t(e.type),b:t.t(e.time),c:t.t("退还"===e.type?"+":"-"),d:t.t(e.amount),e:t.n("退还"===e.type?"refund":""),f:o})))}}],["__scopeId","data-v-a3ef2e56"]]);wx.createPage(o);
diff --git a/unpackage/dist/build/mp-weixin/pages/deposit/index.json b/unpackage/dist/build/mp-weixin/pages/deposit/index.json
new file mode 100644
index 0000000..7ea70a9
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/deposit/index.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "押金管理",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/deposit/index.wxml b/unpackage/dist/build/mp-weixin/pages/deposit/index.wxml
new file mode 100644
index 0000000..fcf3759
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/deposit/index.wxml
@@ -0,0 +1 @@
+押金余额¥{{a}}提现说明1. 提现金额将原路退回支付账户2. 提现申请提交后预计0-7个工作日到账3. 如超时未收到,请联系客服处理押金记录{{item.a}}{{item.b}}{{item.c}}¥{{item.d}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/deposit/index.wxss b/unpackage/dist/build/mp-weixin/pages/deposit/index.wxss
new file mode 100644
index 0000000..0063c3f
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/deposit/index.wxss
@@ -0,0 +1 @@
+.deposit-container.data-v-a3ef2e56{min-height:100vh;background:#f8f8f8;padding:30rpx}.deposit-container .deposit-card.data-v-a3ef2e56{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,.2)}.deposit-container .deposit-card .title.data-v-a3ef2e56{font-size:28rpx;opacity:.9;margin-bottom:20rpx}.deposit-container .deposit-card .amount.data-v-a3ef2e56{font-size:72rpx;font-weight:700;margin-bottom:40rpx}.deposit-container .deposit-card .withdraw-btn.data-v-a3ef2e56{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-a3ef2e56:active{transform:scale(.98)}.deposit-container .notice-card.data-v-a3ef2e56{margin-top:30rpx;background:#fff;border-radius:20rpx;padding:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.deposit-container .notice-card .notice-title.data-v-a3ef2e56{display:flex;align-items:center;margin-bottom:20rpx}.deposit-container .notice-card .notice-title .dot.data-v-a3ef2e56{width:12rpx;height:12rpx;background:#1976d2;border-radius:50%;margin-right:10rpx}.deposit-container .notice-card .notice-title text.data-v-a3ef2e56{font-size:30rpx;font-weight:500;color:#333}.deposit-container .notice-card .notice-content .notice-item.data-v-a3ef2e56{font-size:26rpx;color:#666;line-height:1.8;padding-left:22rpx}.deposit-container .record-card.data-v-a3ef2e56{margin-top:30rpx;background:#fff;border-radius:20rpx;padding:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.deposit-container .record-card .record-title.data-v-a3ef2e56{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-a3ef2e56{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-a3ef2e56:last-child{border-bottom:none}.deposit-container .record-card .record-list .record-item .record-info .record-type.data-v-a3ef2e56{font-size:28rpx;color:#333;margin-bottom:6rpx;display:block}.deposit-container .record-card .record-list .record-item .record-info .record-time.data-v-a3ef2e56{font-size:24rpx;color:#999}.deposit-container .record-card .record-list .record-item .record-amount.data-v-a3ef2e56{font-size:32rpx;color:#333;font-weight:500}.deposit-container .record-card .record-list .record-item .record-amount.refund.data-v-a3ef2e56{color:#4caf50}
diff --git a/unpackage/dist/build/mp-weixin/pages/device/detail.js b/unpackage/dist/build/mp-weixin/pages/device/detail.js
new file mode 100644
index 0000000..11f4ee8
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/device/detail.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../config/user.js"),i={data:()=>({deviceInfo:{},deviceId:"",deviceLocation:"一号教学楼大厅",batteryLevel:95,hasActiveOrder:!1,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:!0,phoneNumber:""}),onLoad(e){this.deviceId=e.deviceNo,console.log(e.deviceNo),this.getDeviceInfo()},methods:{async getDeviceInfo(){const e=await t.getDeviceInfo(this.deviceId);200==e.code&&(this.deviceInfo=e.data)},showLoginTip(){e.index.showModal({title:"提示",content:"请先登录后再操作",confirmText:"去登录",success:t=>{t.confirm&&e.index.navigateTo({url:"/pages/login/index"})}})},selectPackage(e){this.selectedPackage=e},async checkOrderStatus(){try{(await this.$api.checkActiveOrder()).hasOrder&&e.index.redirectTo({url:`/pages/device/return?deviceId=${this.deviceId}`})}catch(t){e.index.showToast({title:"订单状态查询失败",icon:"none"})}},handleRent(){if(!this.isLoggedIn)return void this.showLoginTip();if(!this.phoneNumber)return void e.index.showToast({title:"请输入手机号码",icon:"none"});if(!/^1[3-9]\d{9}$/.test(this.phoneNumber))return void e.index.showToast({title:"请输入正确的手机号码",icon:"none"});const t=this.packages[this.selectedPackage];e.index.showModal({title:"确认租借",content:`确认支付押金¥99.00及${t.time}套餐费用¥${t.price}?`,success:e=>{e.confirm&&this.submitRentOrder()}})},async submitRentOrder(){try{e.index.showLoading({title:"处理中"});const i=this.packages[this.selectedPackage],c=await t.rentPowerBank(this.deviceId,this.phoneNumber);if(200!==c.code)throw new Error(c.msg||"设备租借失败");const n=c.data;e.index.hideLoading(),e.index.redirectTo({url:`/pages/order/payment?orderId=${n.orderId}&packageTime=${i.time}&packagePrice=${i.price}`})}catch(i){e.index.hideLoading(),e.index.showToast({title:i.message||"租借失败,请重试",icon:"none"})}}}};const c=e._export_sfc(i,[["render",function(t,i,c,n,a,r){return e.e({a:e.t(a.deviceId),b:e.t(a.deviceStatus.text),c:e.n(a.deviceStatus.class),d:e.t(a.deviceLocation),e:e.t(a.batteryLevel),f:!a.hasActiveOrder},a.hasActiveOrder?{}:{g:e.f(a.packages,((t,i,c)=>({a:e.t(t.time),b:e.t(t.price),c:e.t(t.unitPrice),d:i,e:a.selectedPackage===i?1:"",f:e.o((e=>r.selectPackage(i)),i)})))},{h:!a.hasActiveOrder},a.hasActiveOrder?{}:{i:a.phoneNumber,j:e.o((e=>a.phoneNumber=e.detail.value))},{k:!a.hasActiveOrder},(a.hasActiveOrder,{}),{l:e.t(a.hasActiveOrder?"归还设备":"立即租借"),m:e.n(a.hasActiveOrder?"return":"rent"),n:e.o(((...e)=>r.handleRent&&r.handleRent(...e)))})}],["__scopeId","data-v-b8e15e19"]]);wx.createPage(c);
diff --git a/unpackage/dist/build/mp-weixin/pages/device/detail.json b/unpackage/dist/build/mp-weixin/pages/device/detail.json
new file mode 100644
index 0000000..c908336
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/device/detail.json
@@ -0,0 +1,6 @@
+{
+ "navigationBarTitleText": "设备详情",
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/device/detail.wxml b/unpackage/dist/build/mp-weixin/pages/device/detail.wxml
new file mode 100644
index 0000000..db39782
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/device/detail.wxml
@@ -0,0 +1 @@
+设备位置{{d}}电池电量{{e}}%选择套餐{{pkg.a}}¥{{pkg.b}}约{{pkg.c}}元/小时联系方式使用说明请在使用前检查设备是否完好超出使用时间将自动按小时计费请在指定区域内使用设备押金:¥99
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/device/detail.wxss b/unpackage/dist/build/mp-weixin/pages/device/detail.wxss
new file mode 100644
index 0000000..6d8d234
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/device/detail.wxss
@@ -0,0 +1 @@
+.detail-container.data-v-b8e15e19{min-height:100vh;background:#f8f8f8;padding:30rpx 30rpx 180rpx;box-sizing:border-box}.detail-container .device-card.data-v-b8e15e19{background:#fff;border-radius:24rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.detail-container .device-card .device-header.data-v-b8e15e19{display:flex;justify-content:space-between;align-items:center;margin-bottom:30rpx}.detail-container .device-card .device-header .device-title .name.data-v-b8e15e19{font-size:36rpx;font-weight:600;color:#333;margin-right:20rpx}.detail-container .device-card .device-header .device-title .id.data-v-b8e15e19{font-size:24rpx;color:#999}.detail-container .device-card .device-header .status.data-v-b8e15e19{padding:8rpx 24rpx;border-radius:24rpx;font-size:24rpx}.detail-container .device-card .device-header .status.available.data-v-b8e15e19{background:#e8f5e9;color:#4caf50}.detail-container .device-card .device-header .status.in-use.data-v-b8e15e19{background:#e3f2fd;color:#1976d2}.detail-container .device-card .device-info .info-item.data-v-b8e15e19{display:flex;justify-content:space-between;margin-bottom:16rpx}.detail-container .device-card .device-info .info-item.data-v-b8e15e19:last-child{margin-bottom:0}.detail-container .device-card .device-info .info-item .label.data-v-b8e15e19{font-size:28rpx;color:#666}.detail-container .device-card .device-info .info-item .value.data-v-b8e15e19{font-size:28rpx;color:#333}.detail-container .package-section.data-v-b8e15e19{background:#fff;border-radius:24rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.detail-container .package-section .section-title.data-v-b8e15e19{font-size:32rpx;font-weight:600;color:#333;margin-bottom:24rpx}.detail-container .package-section .package-list.data-v-b8e15e19{display:flex;justify-content:space-between}.detail-container .package-section .package-list .package-item.data-v-b8e15e19{flex:1;margin:0 10rpx;padding:24rpx;background:#f5f5f5;border-radius:16rpx;text-align:center;transition:all .3s}.detail-container .package-section .package-list .package-item.data-v-b8e15e19:first-child{margin-left:0}.detail-container .package-section .package-list .package-item.data-v-b8e15e19:last-child{margin-right:0}.detail-container .package-section .package-list .package-item.active.data-v-b8e15e19{background:#e3f2fd;border:2rpx solid #1976D2}.detail-container .package-section .package-list .package-item.active .package-content .time.data-v-b8e15e19,.detail-container .package-section .package-list .package-item.active .package-content .price.data-v-b8e15e19{color:#1976d2}.detail-container .package-section .package-list .package-item .package-content.data-v-b8e15e19{margin-bottom:8rpx}.detail-container .package-section .package-list .package-item .package-content .time.data-v-b8e15e19{font-size:28rpx;color:#333;margin-bottom:8rpx;display:block}.detail-container .package-section .package-list .package-item .package-content .price.data-v-b8e15e19{font-size:36rpx;font-weight:600;color:#333}.detail-container .package-section .package-list .package-item .unit-price.data-v-b8e15e19{font-size:24rpx;color:#999}.detail-container .phone-section.data-v-b8e15e19{background:#fff;border-radius:24rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.detail-container .phone-section .section-title.data-v-b8e15e19{font-size:32rpx;font-weight:600;color:#333;margin-bottom:24rpx}.detail-container .phone-section .phone-input-wrap .phone-input.data-v-b8e15e19{width:100%;height:88rpx;background:#f5f5f5;border-radius:16rpx;padding:0 30rpx;font-size:28rpx;box-sizing:border-box}.detail-container .phone-section .phone-input-wrap .phone-input.data-v-b8e15e19::-webkit-input-placeholder{color:#999}.detail-container .phone-section .phone-input-wrap .phone-input.data-v-b8e15e19::placeholder{color:#999}.detail-container .notice-section.data-v-b8e15e19{background:#fff;border-radius:24rpx;padding:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.detail-container .notice-section .section-title.data-v-b8e15e19{font-size:32rpx;font-weight:600;color:#333;margin-bottom:24rpx}.detail-container .notice-section .notice-list .notice-item.data-v-b8e15e19{display:flex;align-items:center;margin-bottom:16rpx}.detail-container .notice-section .notice-list .notice-item.data-v-b8e15e19:last-child{margin-bottom:0}.detail-container .notice-section .notice-list .notice-item .dot.data-v-b8e15e19{width:12rpx;height:12rpx;background:#1976d2;border-radius:50%;margin-right:16rpx}.detail-container .notice-section .notice-list .notice-item text.data-v-b8e15e19{font-size:28rpx;color:#666;line-height:1.5}.detail-container .bottom-bar.data-v-b8e15e19{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,.04)}.detail-container .bottom-bar .price-info .deposit-text.data-v-b8e15e19{font-size:28rpx;color:#666}.detail-container .bottom-bar .price-info .deposit-amount.data-v-b8e15e19{font-size:36rpx;font-weight:600;color:#ff9800}.detail-container .bottom-bar .action-btn.data-v-b8e15e19{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-b8e15e19{background:linear-gradient(135deg,#1976d2,#42a5f5);color:#fff}.detail-container .bottom-bar .action-btn.return.data-v-b8e15e19{background:linear-gradient(135deg,#ff9800,#ffb74d);color:#fff}.detail-container .bottom-bar .action-btn.data-v-b8e15e19:active{transform:scale(.98)}
diff --git a/unpackage/dist/build/mp-weixin/pages/feedback/index.js b/unpackage/dist/build/mp-weixin/pages/feedback/index.js
new file mode 100644
index 0000000..6a5157f
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/feedback/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t={data:()=>({types:["设备故障","收费问题","使用建议","其他"],selectedType:-1,description:"",images:[],contact:""}),methods:{selectType(e){this.selectedType=e},chooseImage(){e.index.chooseImage({count:3-this.images.length,success:e=>{this.images=[...this.images,...e.tempFilePaths]}})},deleteImage(e){this.images.splice(e,1)},submitFeedback(){-1!==this.selectedType?this.description.trim()?this.contact?e.index.showToast({title:"提交成功",icon:"success"}):e.index.showToast({title:"请留下联系方式",icon:"none"}):e.index.showToast({title:"请描述您的问题",icon:"none"}):e.index.showToast({title:"请选择问题类型",icon:"none"})}}};const s=e._export_sfc(t,[["render",function(t,s,i,c,o,a){return e.e({a:e.f(o.types,((t,s,i)=>({a:e.t(t),b:s,c:o.selectedType===s?1:"",d:e.o((e=>a.selectType(s)),s)}))),b:o.description,c:e.o((e=>o.description=e.detail.value)),d:e.t(o.description.length),e:e.f(o.images,((t,s,i)=>({a:t,b:e.o((e=>a.deleteImage(s)),s),c:s}))),f:o.images.length<3},o.images.length<3?{g:e.o(((...e)=>a.chooseImage&&a.chooseImage(...e)))}:{},{h:o.contact,i:e.o((e=>o.contact=e.detail.value)),j:e.o(((...e)=>a.submitFeedback&&a.submitFeedback(...e)))})}],["__scopeId","data-v-229c69af"]]);wx.createPage(s);
diff --git a/unpackage/dist/build/mp-weixin/pages/feedback/index.json b/unpackage/dist/build/mp-weixin/pages/feedback/index.json
new file mode 100644
index 0000000..5f30bba
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/feedback/index.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "投诉与建议",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/feedback/index.wxml b/unpackage/dist/build/mp-weixin/pages/feedback/index.wxml
new file mode 100644
index 0000000..1fe3740
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/feedback/index.wxml
@@ -0,0 +1 @@
+问题类型{{type.a}}问题描述{{d}}/500图片上传(选填)×+上传图片联系方式
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/feedback/index.wxss b/unpackage/dist/build/mp-weixin/pages/feedback/index.wxss
new file mode 100644
index 0000000..ee8ce45
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/feedback/index.wxss
@@ -0,0 +1 @@
+.feedback-container.data-v-229c69af{min-height:100vh;background:#f8f8f8;padding:30rpx}.feedback-container .section-title.data-v-229c69af{font-size:30rpx;color:#333;font-weight:500;margin-bottom:20rpx}.feedback-container .type-section.data-v-229c69af{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:20rpx}.feedback-container .type-section .type-grid.data-v-229c69af{display:flex;flex-wrap:wrap;margin:0 -10rpx}.feedback-container .type-section .type-grid .type-item.data-v-229c69af{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 .3s}.feedback-container .type-section .type-grid .type-item.active.data-v-229c69af{background:#e3f2fd;color:#1976d2}.feedback-container .description-section.data-v-229c69af{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:20rpx}.feedback-container .description-section .description-input.data-v-229c69af{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-229c69af{text-align:right;font-size:24rpx;color:#999;margin-top:10rpx}.feedback-container .upload-section.data-v-229c69af{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:20rpx}.feedback-container .upload-section .upload-grid.data-v-229c69af{display:flex;flex-wrap:wrap}.feedback-container .upload-section .upload-grid .upload-item.data-v-229c69af{width:200rpx;height:200rpx;margin-right:20rpx;margin-bottom:20rpx;position:relative}.feedback-container .upload-section .upload-grid .upload-item image.data-v-229c69af{width:100%;height:100%;border-radius:10rpx}.feedback-container .upload-section .upload-grid .upload-item .delete-btn.data-v-229c69af{position:absolute;right:-10rpx;top:-10rpx;width:40rpx;height:40rpx;background:rgba(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-229c69af{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-229c69af{font-size:60rpx;line-height:1;margin-bottom:10rpx}.feedback-container .upload-section .upload-grid .upload-btn .tip.data-v-229c69af{font-size:24rpx}.feedback-container .contact-section.data-v-229c69af{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:40rpx}.feedback-container .contact-section .contact-input.data-v-229c69af{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-229c69af{padding:0 40rpx}.feedback-container .submit-section .submit-btn.data-v-229c69af{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-229c69af:active{transform:scale(.98)}
diff --git a/unpackage/dist/build/mp-weixin/pages/help/index.js b/unpackage/dist/build/mp-weixin/pages/help/index.js
new file mode 100644
index 0000000..6d87c34
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/help/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),T=require("../../constants/help.js"),E={data:()=>({HELP_CONTENT:T.HELP_CONTENT,faqList:T.HELP_CONTENT.FAQ_LIST.map((e=>({...e,isOpen:!1})))}),methods:{toggleFaq(e){this.faqList[e].isOpen=!this.faqList[e].isOpen},makePhoneCall(){e.index.makePhoneCall({phoneNumber:T.HELP_CONTENT.CONTACT.PHONE.VALUE})}}};const t=e._export_sfc(E,[["render",function(T,E,t,N,C,a){return{a:e.f(C.faqList,((T,E,t)=>({a:e.t(T.question),b:T.isOpen?1:"",c:e.t(T.answer),d:T.isOpen,e:E,f:e.o((e=>a.toggleFaq(E)),E)}))),b:e.t(C.HELP_CONTENT.CONTACT.TITLE),c:e.t(C.HELP_CONTENT.CONTACT.PHONE.LABEL),d:e.t(C.HELP_CONTENT.CONTACT.PHONE.VALUE),e:e.o(((...e)=>a.makePhoneCall&&a.makePhoneCall(...e))),f:e.t(C.HELP_CONTENT.CONTACT.SERVICE_TIME.LABEL),g:e.t(C.HELP_CONTENT.CONTACT.SERVICE_TIME.VALUE)}}],["__scopeId","data-v-8f1810be"]]);wx.createPage(t);
diff --git a/unpackage/dist/build/mp-weixin/pages/help/index.json b/unpackage/dist/build/mp-weixin/pages/help/index.json
new file mode 100644
index 0000000..ec73286
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/help/index.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "帮助中心",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/help/index.wxml b/unpackage/dist/build/mp-weixin/pages/help/index.wxml
new file mode 100644
index 0000000..2dd40ee
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/help/index.wxml
@@ -0,0 +1 @@
+{{item.c}}{{b}}{{c}}{{d}}{{f}}{{g}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/help/index.wxss b/unpackage/dist/build/mp-weixin/pages/help/index.wxss
new file mode 100644
index 0000000..90e82ed
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/help/index.wxss
@@ -0,0 +1 @@
+.help-container.data-v-8f1810be{min-height:100vh;background:#f8f8f8;padding:30rpx}.help-container .faq-list.data-v-8f1810be{background:#fff;border-radius:20rpx;padding:20rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.help-container .faq-list .faq-item.data-v-8f1810be{border-bottom:1rpx solid #f5f5f5}.help-container .faq-list .faq-item.data-v-8f1810be:last-child{border-bottom:none}.help-container .faq-list .faq-item .faq-header.data-v-8f1810be{display:flex;justify-content:space-between;align-items:center;padding:30rpx 20rpx}.help-container .faq-list .faq-item .faq-header .question.data-v-8f1810be{font-size:30rpx;color:#333;flex:1;padding-right:20rpx}.help-container .faq-list .faq-item .faq-header .arrow.data-v-8f1810be{width:16rpx;height:16rpx;border-right:4rpx solid #999;border-bottom:4rpx solid #999;transform:rotate(45deg);transition:all .3s}.help-container .faq-list .faq-item .faq-header .arrow.open.data-v-8f1810be{transform:rotate(-135deg)}.help-container .faq-list .faq-item .answer.data-v-8f1810be{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-8f1810be{background:#fff;border-radius:20rpx;padding:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.help-container .contact-card .contact-title.data-v-8f1810be{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-8f1810be{display:flex;justify-content:space-between;align-items:center;padding:20rpx 0}.help-container .contact-card .contact-content .contact-item .label.data-v-8f1810be{font-size:28rpx;color:#666}.help-container .contact-card .contact-content .contact-item .value.data-v-8f1810be{font-size:28rpx;color:#333;font-weight:500}.help-container .contact-card .contact-content .contact-item .value.data-v-8f1810be:active{opacity:.7}
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.js b/unpackage/dist/build/mp-weixin/pages/index/index.js
new file mode 100644
index 0000000..8b84cba
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),o=require("../../util/index.js"),t=require("../../config/url.js"),n=require("../../common/assets.js"),a={methods:{async handleScan(){try{const n=await new Promise(((o,t)=>{e.index.scanCode({success:o,fail:t})}));let a=o.getQueryString(n.path,"deviceNo");if(console.log("扫码路径:",n.path),console.log("解析到的设备号:",a),!a)return void e.index.showToast({title:"无效的设备二维码",icon:"none"});e.index.getStorageSync("token")||await o.wxLogin();const d=await e.index.request({url:`${t.URL||"http://127.0.0.1:8080"}/app/order/inUse`,method:"GET",header:{Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")}});if(console.log("使用中订单检查结果:",JSON.stringify(d)),200==d.statusCode&&200==d.data.code&&d.data.data){const o=d.data.data;return console.log("检测到使用中订单,准备跳转:",o),e.index.reLaunch({url:`/pages/return/index?orderId=${o.orderId}&deviceId=${a||o.deviceNo}`}),void console.log("已发起页面跳转")}const i=await e.index.request({url:`${t.URL||"http://127.0.0.1:8080"}/app/order/unpaid`,method:"GET",header:{Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")}});if(console.log("待支付订单检查结果:",JSON.stringify(i)),200==i.statusCode&&200==i.data.code&&i.data.data){const o=i.data.data;console.log("检测到待支付订单,准备跳转:",o),e.index.navigateTo({url:`/pages/order/payment?orderId=${o.orderId}`})}else console.log("无待支付订单,直接跳转到设备详情页面, deviceNo:",a),e.index.navigateTo({url:`/pages/device/detail?deviceNo=${a}`})}catch(n){console.error("扫码处理失败:",n),e.index.showToast({title:"扫码失败",icon:"none"})}}}};const d=e._export_sfc(a,[["render",function(o,t,a,d,i,r){return{a:n._imports_0,b:e.o(((...e)=>r.handleScan&&r.handleScan(...e)))}}],["__scopeId","data-v-8df762f3"]]);wx.createPage(d);
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.json b/unpackage/dist/build/mp-weixin/pages/index/index.json
new file mode 100644
index 0000000..6038722
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "共享风扇",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.wxml b/unpackage/dist/build/mp-weixin/pages/index/index.wxml
new file mode 100644
index 0000000..bd597b9
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.wxml
@@ -0,0 +1 @@
+共享风扇让清凉随身携带扫一扫扫描设备二维码使用或归还租借时间:每次最长可租借12小时押金说明:租借需支付99元押金,归还后自动退还收费标准:2元/小时,不足1小时按1小时计算爱护提示:请勿将设备带离指定区域,保持设备清洁
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.wxss b/unpackage/dist/build/mp-weixin/pages/index/index.wxss
new file mode 100644
index 0000000..8c18dd3
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.wxss
@@ -0,0 +1 @@
+.container.data-v-8df762f3{height:87.5vh;background:#f8f8f8;padding-bottom:40rpx}.container .banner.data-v-8df762f3{padding:30rpx}.container .banner .temp-banner.data-v-8df762f3{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,.2)}.container .banner .temp-banner .banner-text.data-v-8df762f3{font-size:56rpx;font-weight:700;margin-bottom:20rpx;position:relative;z-index:1;text-shadow:0 2rpx 4rpx rgba(0,0,0,.1)}.container .banner .temp-banner .banner-subtitle.data-v-8df762f3{font-size:32rpx;opacity:.95;position:relative;z-index:1;text-shadow:0 2rpx 4rpx rgba(0,0,0,.1)}.container .banner .temp-banner .banner-bg.data-v-8df762f3{position:absolute;right:-60rpx;bottom:-60rpx;width:300rpx;height:300rpx;background:rgba(255,255,255,.1);border-radius:50%;transform:rotate(-15deg)}.container .banner .temp-banner.data-v-8df762f3:after{content:"";position:absolute;left:-80rpx;top:-80rpx;width:240rpx;height:240rpx;background:rgba(255,255,255,.08);border-radius:50%}.container .scan-area.data-v-8df762f3{padding:20rpx 30rpx 40rpx;display:flex;justify-content:center}.container .scan-area .scan-btn.data-v-8df762f3{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,.2);transition:all .3s ease;position:relative;overflow:hidden}.container .scan-area .scan-btn.data-v-8df762f3:active{transform:scale(.98);box-shadow:0 4rpx 16rpx rgba(0,200,83,.15)}.container .scan-area .scan-btn.data-v-8df762f3:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(rgba(255,255,255,.1),transparent)}.container .scan-area .scan-btn .btn-content.data-v-8df762f3{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-8df762f3{width:48rpx;height:48rpx;margin-right:16rpx}.container .scan-area .scan-btn .btn-content .btn-text.data-v-8df762f3{font-size:42rpx;font-weight:600;color:#fff;text-shadow:0 2rpx 4rpx rgba(0,0,0,.1)}.container .scan-area .scan-btn .btn-desc.data-v-8df762f3{font-size:26rpx;color:rgba(255,255,255,.95);position:relative;z-index:1}.container .tips-section.data-v-8df762f3{margin:0 30rpx;background:#fff;border-radius:24rpx;box-shadow:0 8rpx 32rpx rgba(0,0,0,.05);overflow:hidden}.container .tips-section .tips-header.data-v-8df762f3{padding:30rpx;background:linear-gradient(to right,#f5f9ff,#fff);border-bottom:2rpx solid #f0f0f0}.container .tips-section .tips-header .tips-title.data-v-8df762f3{font-size:32rpx;font-weight:600;color:#333;position:relative;padding-left:24rpx}.container .tips-section .tips-header .tips-title.data-v-8df762f3: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-8df762f3{padding:20rpx 30rpx}.container .tips-section .tips-list .tip-item.data-v-8df762f3{display:flex;align-items:center;margin-bottom:24rpx;padding:0 10rpx}.container .tips-section .tips-list .tip-item.data-v-8df762f3:last-child{margin-bottom:0}.container .tips-section .tips-list .tip-item .tip-dot.data-v-8df762f3{width:12rpx;height:12rpx;background:#1976d2;border-radius:50%;margin-right:16rpx;flex-shrink:0;box-shadow:0 2rpx 6rpx rgba(25,118,210,.2)}.container .tips-section .tips-list .tip-item text.data-v-8df762f3{font-size:28rpx;color:#666;line-height:1.6}
diff --git a/unpackage/dist/build/mp-weixin/pages/my/index.js b/unpackage/dist/build/mp-weixin/pages/my/index.js
new file mode 100644
index 0000000..6d4ba52
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/my/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),o=require("../../util/index.js"),t=require("../../common/assets.js"),n={data:()=>({userInfo:{},deposit:"0.00",tempAvatar:"",tempNickname:"",show:!1}),onShow(){this.getInfo()},methods:{async getInfo(){try{if(!e.index.getStorageSync("token"))return await o.wxLogin(),void this.getInfo();const t=await o.getUserInfo();if(console.log(t),200===t.code){const o={nickName:t.data.nickname,phone:t.data.phone,avatar:t.data.iconUrl,isAdmin:t.data.isAdmin};this.userInfo=o,e.index.setStorageSync("userInfo",o),this.deposit=t.data.balanceAmount||"0.00"}}catch(t){console.error("获取用户信息失败:",t),e.index.showToast({title:"获取用户信息失败",icon:"none"})}},navigateTo(o){e.index.navigateTo({url:o})}}};const a=e._export_sfc(n,[["render",function(o,n,a,s,i,r){return e.e({a:i.userInfo.avatar||"/static/user.png",b:i.userInfo},i.userInfo?{c:e.t(i.userInfo.nickName),d:e.t(i.userInfo.phone||"")}:{},{e:e.o(((...e)=>o.showPopup&&o.showPopup(...e))),f:e.t(i.deposit),g:e.o((e=>r.navigateTo("/pages/deposit/index"))),h:t._imports_0$1,i:e.o((e=>r.navigateTo("/pages/order/index"))),j:t._imports_1,k:e.o((e=>r.navigateTo("/pages/feedback/index"))),l:t._imports_2,m:e.o((e=>r.navigateTo("/pages/help/index")))})}],["__scopeId","data-v-b106ba06"]]);wx.createPage(a);
diff --git a/unpackage/dist/build/mp-weixin/pages/my/index.json b/unpackage/dist/build/mp-weixin/pages/my/index.json
new file mode 100644
index 0000000..3fc5110
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/my/index.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "个人中心",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/my/index.wxml b/unpackage/dist/build/mp-weixin/pages/my/index.wxml
new file mode 100644
index 0000000..9c163e8
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/my/index.wxml
@@ -0,0 +1 @@
+{{c}}{{d}}点击登录登录后享受更多服务押金余额¥{{f}} 提现 租借记录投诉与建议帮助中心
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/my/index.wxss b/unpackage/dist/build/mp-weixin/pages/my/index.wxss
new file mode 100644
index 0000000..93c2d1c
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/my/index.wxss
@@ -0,0 +1 @@
+.my-container.data-v-b106ba06{min-height:87.5vh;background:#f8f8f8;padding-bottom:env(safe-area-inset-bottom)}.my-container .user-info.data-v-b106ba06{height:360rpx;background:linear-gradient(135deg,#1976d2,#42a5f5);position:relative;overflow:hidden}.my-container .user-info.data-v-b106ba06:before,.my-container .user-info.data-v-b106ba06:after{content:"";position:absolute;background-repeat:no-repeat;opacity:.1}.my-container .user-info.data-v-b106ba06: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-b106ba06:after{width:300rpx;height:300rpx;right:-60rpx;bottom:-60rpx;background:radial-gradient(circle at center,rgba(255,255,255,.2) 0%,rgba(255,255,255,.2) 30%,transparent 30.5%),radial-gradient(circle at center,rgba(255,255,255,.2) 0%,rgba(255,255,255,.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-b106ba06{position:absolute;width:100%;height:100%;top:0;left:0;pointer-events:none}.my-container .user-info .floating-dots.data-v-b106ba06:before,.my-container .user-info .floating-dots.data-v-b106ba06:after{content:"";position:absolute;width:12rpx;height:12rpx;border-radius:50%;background:rgba(255,255,255,.3);animation:float-b106ba06 3s infinite ease-in-out}.my-container .user-info .floating-dots.data-v-b106ba06:before{top:20%;right:10%;animation-delay:-2s}.my-container .user-info .floating-dots.data-v-b106ba06:after{top:50%;right:20%;width:8rpx;height:8rpx;animation-delay:-1s}.my-container .user-info .user-info-content.data-v-b106ba06{position:relative;z-index:2;padding:60rpx 40rpx;display:flex;align-items:center}.my-container .user-info .user-info-content .avatar-wrap.data-v-b106ba06{width:140rpx;height:140rpx;border-radius:70rpx;border:6rpx solid rgba(255,255,255,.3);overflow:hidden;box-shadow:0 4rpx 16rpx rgba(0,0,0,.1),0 0 0 6rpx rgba(255,255,255,.1);margin-right:40rpx;position:relative}.my-container .user-info .user-info-content .avatar-wrap.data-v-b106ba06:after{content:"";position:absolute;top:-10%;left:-10%;right:-10%;bottom:-10%;background:linear-gradient(45deg,transparent,rgba(255,255,255,.1),transparent);animation:shine-b106ba06 2s infinite}.my-container .user-info .user-info-content .avatar-wrap .avatar.data-v-b106ba06{width:100%;height:100%;background:#fff}.my-container .user-info .user-info-content .info-content.not-login .login-text.data-v-b106ba06{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-b106ba06{font-size:28rpx;color:rgba(255,255,255,.9);display:block}.my-container .user-info .user-info-content .info-content .text-group.data-v-b106ba06{display:flex;flex-direction:column;align-items:center;gap:16rpx}.my-container .user-info .user-info-content .info-content .text-group .nickname.data-v-b106ba06{font-size:42rpx;color:#fff;font-weight:600;text-shadow:0 2rpx 4rpx rgba(0,0,0,.1);letter-spacing:2rpx}.my-container .user-info .user-info-content .info-content .text-group .phone.data-v-b106ba06{font-size:30rpx;color:rgba(255,255,255,.85);font-weight:400;letter-spacing:1rpx;position:relative;padding:4rpx 24rpx;background:rgba(255,255,255,.15);border-radius:24rpx;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.my-container .user-info .wave-decoration.data-v-b106ba06{position:absolute;left:0;right:0;bottom:0;height:120rpx;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNDQwIDMyMCI+PHBhdGggZmlsbD0icmdiYSgyNTUsMjU1LDI1NSwwLjEpIiBkPSJNMCwyNjAuMjI3YzE3My42NjEsMCwzMjEuMTM3LDAsNDQyLjQyOCwwYzE4MS41MTcsMCwyODUuNjQ1LDAsMzk3LjU3MiwwQzk1Mi4zODksMjYwLjIyNywxMTQwLjI3MSwyNjAuMjI3LDE0NDAsMjYwLjIyN1YwSDBWMjYwLjIyN3oiLz48L3N2Zz4=) bottom/100% no-repeat;opacity:.8}@keyframes float-b106ba06{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-20rpx) scale(1.1)}}@keyframes shine-b106ba06{0%{transform:translate(-100%) rotate(45deg)}80%,to{transform:translate(100%) rotate(45deg)}}.my-container .balance-card.data-v-b106ba06{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,.1)}.my-container .balance-card .balance-content .label.data-v-b106ba06{font-size:28rpx;color:#666;margin-bottom:12rpx;display:block}.my-container .balance-card .balance-content .amount.data-v-b106ba06{font-size:52rpx;color:#1976d2;font-weight:700}.my-container .balance-card .withdraw-btn.data-v-b106ba06{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,.2)}.my-container .balance-card .withdraw-btn.data-v-b106ba06:active{transform:scale(.98)}.my-container .balance-card .withdraw-btn .arrow.data-v-b106ba06{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-b106ba06{margin:0 30rpx;background:#fff;border-radius:24rpx;padding:10rpx 20rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.my-container .function-list .function-item.data-v-b106ba06{display:flex;align-items:center;justify-content:space-between;padding:32rpx 20rpx;border-bottom:1rpx solid #f5f5f5;transition:all .3s}.my-container .function-list .function-item.data-v-b106ba06:active{background:#f9f9f9}.my-container .function-list .function-item.data-v-b106ba06:last-child{border-bottom:none}.my-container .function-list .function-item .item-left.data-v-b106ba06{display:flex;align-items:center}.my-container .function-list .function-item .item-left .icon-wrap.data-v-b106ba06{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-b106ba06{width:44rpx;height:44rpx}.my-container .function-list .function-item .item-left .title.data-v-b106ba06{font-size:32rpx;color:#333;font-weight:500}.my-container .function-list .function-item .arrow.data-v-b106ba06{width:16rpx;height:16rpx;border-top:3rpx solid #999;border-right:3rpx solid #999;transform:rotate(45deg)}.my-container .popup-content.data-v-b106ba06{background-color:#fff;border-radius:24rpx 24rpx 0 0;padding:40rpx 30rpx}.my-container .popup-content .popup-title.data-v-b106ba06{font-size:32rpx;font-weight:500;text-align:center;margin-bottom:40rpx}.my-container .popup-content .popup-body.data-v-b106ba06{display:flex;flex-direction:column;gap:30rpx}.my-container .popup-content .avatar-btn.data-v-b106ba06{height:88rpx;line-height:88rpx;background:#f5f5f5;border-radius:44rpx;font-size:28rpx;color:#333}.my-container .popup-content .avatar-btn.data-v-b106ba06:after{border:none}.my-container .popup-content .avatar-btn.data-v-b106ba06:active{opacity:.8}.my-container .popup-content .nickname-input.data-v-b106ba06{height:88rpx;background:#f5f5f5;border-radius:44rpx;padding:0 30rpx;font-size:28rpx}.my-container .popup-content .submit-btn.data-v-b106ba06{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-b106ba06:active{opacity:.9}
diff --git a/unpackage/dist/build/mp-weixin/pages/order/index.js b/unpackage/dist/build/mp-weixin/pages/order/index.js
new file mode 100644
index 0000000..05b99a4
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/index.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../common/vendor.js"),e=require("../../config/user.js"),r=require("../../constants/orderStatus.js"),s={data:()=>({currentTab:0,OrderStatusMap:r.OrderStatusMap,OrderStatusTabs:r.OrderStatusTabs,orderList:[]}),async onLoad(t){if(t&&t.orderId)try{const r=await e.queryById(t.orderId);if(200===r.code&&r.data){const t=r.data;console.log("特定订单数据:",JSON.stringify(t)),console.log("特定订单的开始时间:",t.startTime),console.log("特定订单的创建时间:",t.createTime);const e=t.startTime||t.createTime||"";console.log("特定订单最终显示的开始时间:",e);const s={orderNo:t.orderId,status:t.orderStatus,deviceId:t.deviceNo,startTime:e,endTime:t.endTime||"",amount:t.payAmount||t.actualDeviceAmount||"0.00"};this.orderList=[s,...this.orderList];const o=this.OrderStatusTabs.findIndex((e=>e.status.includes(t.orderStatus)));-1!==o&&this.switchTab(o)}}catch(r){console.error("获取订单详情失败:",r)}await this.getOrderList()},methods:{async getOrderList(r=[]){try{const t=await e.getOrderList(r);200===t.code&&t.data&&t.data.records&&(console.log("API返回的订单列表数据:",JSON.stringify(t.data.records)),this.orderList=t.data.records.map((t=>{console.log(`订单 ${t.orderId} 的开始时间:`,t.startTime),console.log(`订单 ${t.orderId} 的创建时间:`,t.createTime);const e=t.startTime||t.createTime||"";return console.log(`订单 ${t.orderId} 最终显示的开始时间:`,e),{orderNo:t.orderId,status:t.orderStatus,deviceId:t.deviceNo,startTime:e,endTime:t.endTime||"",amount:t.payAmount||t.actualDeviceAmount||"0.00"}})))}catch(s){console.error("获取订单列表失败:",s),t.index.showToast({title:"获取订单列表失败",icon:"none"})}},async switchTab(t){this.currentTab=t;const e=this.OrderStatusTabs[t].status;await this.getOrderList(e)}}};const o=t._export_sfc(s,[["render",function(e,r,s,o,a,d){return t.e({a:t.f(a.OrderStatusTabs,((e,r,s)=>({a:t.t(e.text),b:r,c:a.currentTab===r?1:"",d:t.o((t=>d.switchTab(r)),r)}))),b:t.f(a.orderList,((e,r,s)=>{var o,d;return t.e({a:t.t(e.orderNo),b:t.t(null==(o=a.OrderStatusMap[e.status])?void 0:o.text),c:t.n(null==(d=a.OrderStatusMap[e.status])?void 0:d.class),d:1===e.status},1===e.status?{e:`/pages/return/index?deviceId=${e.deviceId}&orderId=${e.orderNo}`}:{},{f:t.t(e.deviceId),g:t.t(e.startTime),h:t.t(e.endTime||"-"),i:t.t(e.amount),j:r})})),c:0===a.orderList.length},(a.orderList.length,{}))}],["__scopeId","data-v-d5ec5c8e"]]);wx.createPage(o);
diff --git a/unpackage/dist/build/mp-weixin/pages/order/index.json b/unpackage/dist/build/mp-weixin/pages/order/index.json
new file mode 100644
index 0000000..639d1d2
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/index.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "租借记录",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/index.wxml b/unpackage/dist/build/mp-weixin/pages/order/index.wxml
new file mode 100644
index 0000000..d54abac
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/index.wxml
@@ -0,0 +1 @@
+{{tab.a}}共享风扇设备号:{{order.f}}开始时间:{{order.g}}结束时间:{{order.h}}¥{{order.i}}暂无订单记录
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/index.wxss b/unpackage/dist/build/mp-weixin/pages/order/index.wxss
new file mode 100644
index 0000000..fb957e3
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/index.wxss
@@ -0,0 +1 @@
+.order-container.data-v-d5ec5c8e{min-height:100vh;background:#f8f8f8}.order-container .tab-bar.data-v-d5ec5c8e{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,.05)}.order-container .tab-bar .tab-item.data-v-d5ec5c8e{flex:1;text-align:center;font-size:28rpx;color:#666;position:relative;padding:20rpx 0}.order-container .tab-bar .tab-item.active.data-v-d5ec5c8e{color:#1976d2;font-weight:500}.order-container .tab-bar .tab-item.active.data-v-d5ec5c8e:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:40rpx;height:4rpx;background:#1976d2;border-radius:2rpx}.order-container .order-list.data-v-d5ec5c8e{padding:20rpx}.order-container .order-list .order-item.data-v-d5ec5c8e{background:#fff;border-radius:20rpx;margin-bottom:20rpx;padding:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.order-container .order-list .order-item .order-header.data-v-d5ec5c8e{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-d5ec5c8e{font-size:26rpx;color:#666}.order-container .order-list .order-item .order-header .order-status.data-v-d5ec5c8e{font-size:26rpx}.order-container .order-list .order-item .order-header .order-status.status-waiting.data-v-d5ec5c8e{color:#ff9800}.order-container .order-list .order-item .order-header .order-status.status-progress.data-v-d5ec5c8e{color:#2196f3}.order-container .order-list .order-item .order-header .order-status.status-success.data-v-d5ec5c8e{color:#4caf50}.order-container .order-list .order-item .order-header .order-status.status-using.data-v-d5ec5c8e{color:#1976d2}.order-container .order-list .order-item .order-header .order-status.status-failed.data-v-d5ec5c8e{color:#f44336}.order-container .order-list .order-item .order-header .order-status.status-cancelled.data-v-d5ec5c8e{color:#9e9e9e}.order-container .order-list .order-item .order-header .order-status.status-finished.data-v-d5ec5c8e{color:#4caf50}.order-container .order-list .order-item .order-content.data-v-d5ec5c8e{padding-top:20rpx}.order-container .order-list .order-item .order-content .device-info.data-v-d5ec5c8e{margin-bottom:20rpx}.order-container .order-list .order-item .order-content .device-info .device-name.data-v-d5ec5c8e{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-d5ec5c8e{font-size:26rpx;color:#999}.order-container .order-list .order-item .order-content .time-info .time-item.data-v-d5ec5c8e{font-size:26rpx;color:#666;margin-bottom:10rpx}.order-container .order-list .order-item .order-content .time-info .time-item .label.data-v-d5ec5c8e{color:#999}.order-container .order-list .order-item .order-content .price-info.data-v-d5ec5c8e{text-align:right;margin-top:20rpx}.order-container .order-list .order-item .order-content .price-info .amount.data-v-d5ec5c8e{font-size:36rpx;color:#ff9800;font-weight:500}.order-container .empty-tip.data-v-d5ec5c8e{padding:100rpx 0;text-align:center;color:#999;font-size:28rpx}.order-container .empty-tip .empty-icon.data-v-d5ec5c8e{width:200rpx;height:200rpx;margin:0 auto 20rpx;background:#f0f0f0;border-radius:50%}
diff --git a/unpackage/dist/build/mp-weixin/pages/order/payment.js b/unpackage/dist/build/mp-weixin/pages/order/payment.js
new file mode 100644
index 0000000..efc49df
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/payment.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../config/user.js"),o=require("../../config/url.js"),r={data:()=>({orderId:null,orderInfo:{},packageInfo:{time:"",price:"0.00"},orderStatus:{text:"等待支付",desc:"请在15分钟内完成支付",class:"waiting"},paymentMethods:[{name:"微信支付",icon:"wechat"},{name:"支付宝",icon:"alipay"}],selectedMethod:0}),computed:{totalAmount(){return(parseFloat(this.orderInfo.deposit||99)+parseFloat(this.orderInfo.amount||this.packageInfo.price||0)).toFixed(2)}},onLoad(t){t&&t.orderId?(this.orderId=t.orderId,t.packageTime&&t.packagePrice&&(this.packageInfo={time:t.packageTime,price:t.packagePrice}),this.loadOrderInfo()):(e.index.showToast({title:"订单信息不存在",icon:"none"}),setTimeout((()=>{e.index.redirectTo({url:"/pages/index/index"})}),1500))},methods:{async loadOrderInfo(){try{e.index.showLoading({title:"加载中"});const o=await t.queryById(this.orderId);if(200!==o.code||!o.data)throw new Error("获取订单信息失败");{const e=o.data;this.orderInfo={orderNo:e.orderNo||e.orderId,deviceNo:e.deviceNo,createTime:this.formatTime(new Date(e.createTime)),phone:e.phone,deposit:"99.00",amount:e.amount||this.packageInfo.price||"0.00"},!e.packageTime&&this.packageInfo.time&&(this.orderInfo.packageTime=this.packageInfo.time,this.orderInfo.packagePrice=this.packageInfo.price)}e.index.hideLoading()}catch(o){e.index.hideLoading(),e.index.showToast({title:o.message||"获取订单信息失败",icon:"none"})}},selectMethod(e){this.selectedMethod=e},async handlePayment(){try{e.index.showLoading({title:"处理中"});const t=await e.index.request({url:`${o.URL||"http://127.0.0.1:8080"}/app/wx-payment/create/${this.orderInfo.orderNo}`,method:"GET",header:{Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")}});if(200!==t.statusCode||200!==t.data.code)throw new Error(t.data.msg||"创建支付订单失败");{const o=t.data.data;await e.index.requestPayment({...o,success:()=>{this.pollOrderStatus()},fail:e=>{throw console.error("支付失败:",e),new Error("支付失败,请重试")}})}}catch(t){e.index.hideLoading(),e.index.showToast({title:t.message||"支付失败",icon:"none"})}},async sendRentCommand(){try{e.index.showLoading({title:"处理中"});const t=await this.sendRentRequest();if(200!==t.code)throw new Error(t.msg||"租借失败");e.index.hideLoading(),e.index.showToast({title:"租借成功",icon:"success"}),setTimeout((()=>{e.index.redirectTo({url:`/pages/order/index?orderId=${this.orderId}`})}),1500)}catch(t){e.index.hideLoading(),e.index.showToast({title:t.message||"租借失败",icon:"none"})}},sendRentRequest(){return new Promise(((t,r)=>{e.index.request({url:`${o.URL}/app/device/sendRentCommand`,method:"POST",data:{orderId:this.orderId},header:{"Content-Type":"application/x-www-form-urlencoded",Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")},success(e){200===e.statusCode?t(e.data):r(new Error("请求失败"))},fail(e){r(e)}})}))},formatTime:e=>`${e.getFullYear()}-${(e.getMonth()+1).toString().padStart(2,"0")}-${e.getDate().toString().padStart(2,"0")} ${e.getHours().toString().padStart(2,"0")}:${e.getMinutes().toString().padStart(2,"0")}`,async pollOrderStatus(){let t=0;const r=async()=>{try{const a=await e.index.request({url:`${o.URL||"http://127.0.0.1:8080"}/app/wx-payment/status/${this.orderInfo.orderNo}`,method:"GET",header:{Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")}});if(200===a.statusCode&&200===a.data.code){if("in_used"===a.data.data.orderStatus)return e.index.showToast({title:"支付成功",icon:"success"}),void setTimeout((()=>{e.index.redirectTo({url:`/pages/order/index?orderId=${this.orderId}`})}),1500)}if(!(t<10))throw new Error("订单状态查询超时");t++,setTimeout(r,1e3)}catch(a){e.index.showToast({title:a.message||"查询订单状态失败",icon:"none"})}};r()}}};const a=e._export_sfc(r,[["render",function(t,o,r,a,n,d){return{a:e.n(n.orderStatus.class),b:e.t(n.orderStatus.text),c:e.t(n.orderStatus.desc),d:e.t(n.orderInfo.orderNo||"-"),e:e.t(n.orderInfo.deviceNo||"-"),f:e.t(n.orderInfo.createTime||"-"),g:e.t(n.orderInfo.phone||"-"),h:e.t(n.orderInfo.deposit||"99.00"),i:e.t(n.packageInfo.time),j:e.t(n.packageInfo.price),k:e.t(n.orderInfo.amount||n.packageInfo.price),l:e.t(d.totalAmount),m:e.f(n.paymentMethods,((t,o,r)=>({a:e.n(t.icon),b:e.t(t.name),c:o,d:n.selectedMethod===o?1:"",e:e.o((e=>d.selectMethod(o)),o)}))),n:e.t(d.totalAmount),o:e.o(((...e)=>d.handlePayment&&d.handlePayment(...e)))}}],["__scopeId","data-v-a18b4e4b"]]);wx.createPage(a);
diff --git a/unpackage/dist/build/mp-weixin/pages/order/payment.json b/unpackage/dist/build/mp-weixin/pages/order/payment.json
new file mode 100644
index 0000000..26bc4c5
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/payment.json
@@ -0,0 +1,6 @@
+{
+ "navigationBarTitleText": "订单支付",
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/payment.wxml b/unpackage/dist/build/mp-weixin/pages/order/payment.wxml
new file mode 100644
index 0000000..44270c6
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/payment.wxml
@@ -0,0 +1 @@
+{{b}}{{c}}订单信息订单号{{d}}设备号{{e}}创建时间{{f}}联系电话{{g}}费用信息押金¥{{h}}套餐{{i}} (¥{{j}})租借费用¥{{k}}合计¥{{l}}支付方式{{method.b}}合计:¥{{n}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/payment.wxss b/unpackage/dist/build/mp-weixin/pages/order/payment.wxss
new file mode 100644
index 0000000..d5585c6
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/payment.wxss
@@ -0,0 +1 @@
+.payment-container.data-v-a18b4e4b{min-height:100vh;background:#f8f8f8;padding:30rpx 30rpx 180rpx;box-sizing:border-box}.payment-container .status-card.data-v-a18b4e4b{background:#fff;border-radius:24rpx;padding:40rpx 30rpx;margin-bottom:30rpx;display:flex;flex-direction:column;align-items:center;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.payment-container .status-card .status-icon.data-v-a18b4e4b{width:120rpx;height:120rpx;border-radius:50%;background:#f5f5f5;margin-bottom:20rpx}.payment-container .status-card .status-icon.waiting.data-v-a18b4e4b{background:#fff9c4}.payment-container .status-card .status-icon.success.data-v-a18b4e4b{background:#e8f5e9}.payment-container .status-card .status-icon.failed.data-v-a18b4e4b{background:#ffebee}.payment-container .status-card .status-text.data-v-a18b4e4b{font-size:36rpx;font-weight:600;color:#333;margin-bottom:10rpx}.payment-container .status-card .status-desc.data-v-a18b4e4b{font-size:28rpx;color:#999}.payment-container .order-card.data-v-a18b4e4b,.payment-container .price-card.data-v-a18b4e4b{background:#fff;border-radius:24rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.payment-container .order-card .card-title.data-v-a18b4e4b,.payment-container .price-card .card-title.data-v-a18b4e4b{font-size:32rpx;font-weight:600;color:#333;margin-bottom:20rpx;position:relative;padding-left:20rpx}.payment-container .order-card .card-title.data-v-a18b4e4b:before,.payment-container .price-card .card-title.data-v-a18b4e4b:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:8rpx;height:32rpx;background:#1976d2;border-radius:4rpx}.payment-container .order-card .info-item.data-v-a18b4e4b,.payment-container .order-card .price-item.data-v-a18b4e4b,.payment-container .price-card .info-item.data-v-a18b4e4b,.payment-container .price-card .price-item.data-v-a18b4e4b{display:flex;justify-content:space-between;align-items:center;padding:20rpx 0;border-bottom:1px solid #f5f5f5}.payment-container .order-card .info-item.data-v-a18b4e4b:last-child,.payment-container .order-card .price-item.data-v-a18b4e4b:last-child,.payment-container .price-card .info-item.data-v-a18b4e4b:last-child,.payment-container .price-card .price-item.data-v-a18b4e4b:last-child{border-bottom:none}.payment-container .order-card .info-item .label.data-v-a18b4e4b,.payment-container .order-card .price-item .label.data-v-a18b4e4b,.payment-container .price-card .info-item .label.data-v-a18b4e4b,.payment-container .price-card .price-item .label.data-v-a18b4e4b{font-size:28rpx;color:#666}.payment-container .order-card .info-item .value.data-v-a18b4e4b,.payment-container .order-card .price-item .value.data-v-a18b4e4b,.payment-container .price-card .info-item .value.data-v-a18b4e4b,.payment-container .price-card .price-item .value.data-v-a18b4e4b{font-size:28rpx;color:#333}.payment-container .order-card .info-item.total.data-v-a18b4e4b,.payment-container .order-card .price-item.total.data-v-a18b4e4b,.payment-container .price-card .info-item.total.data-v-a18b4e4b,.payment-container .price-card .price-item.total.data-v-a18b4e4b{margin-top:10rpx;padding-top:30rpx;border-top:1px solid #f5f5f5}.payment-container .order-card .info-item.total .label.data-v-a18b4e4b,.payment-container .order-card .info-item.total .value.data-v-a18b4e4b,.payment-container .order-card .price-item.total .label.data-v-a18b4e4b,.payment-container .order-card .price-item.total .value.data-v-a18b4e4b,.payment-container .price-card .info-item.total .label.data-v-a18b4e4b,.payment-container .price-card .info-item.total .value.data-v-a18b4e4b,.payment-container .price-card .price-item.total .label.data-v-a18b4e4b,.payment-container .price-card .price-item.total .value.data-v-a18b4e4b{font-size:32rpx;font-weight:600;color:#333}.payment-container .order-card .info-item.total .value.data-v-a18b4e4b,.payment-container .order-card .price-item.total .value.data-v-a18b4e4b,.payment-container .price-card .info-item.total .value.data-v-a18b4e4b,.payment-container .price-card .price-item.total .value.data-v-a18b4e4b{color:#ff5722}.payment-container .payment-methods.data-v-a18b4e4b{background:#fff;border-radius:24rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.payment-container .payment-methods .method-item.data-v-a18b4e4b{display:flex;align-items:center;padding:30rpx 20rpx;border-bottom:1px solid #f5f5f5;position:relative}.payment-container .payment-methods .method-item.data-v-a18b4e4b:last-child{border-bottom:none}.payment-container .payment-methods .method-item.active.data-v-a18b4e4b{background:#f5f5f5}.payment-container .payment-methods .method-item.active .method-check.data-v-a18b4e4b{background:#1976d2}.payment-container .payment-methods .method-item.active .method-check.data-v-a18b4e4b:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:12rpx;height:12rpx;background:#fff;border-radius:50%}.payment-container .payment-methods .method-item .method-icon.data-v-a18b4e4b{width:48rpx;height:48rpx;margin-right:20rpx}.payment-container .payment-methods .method-item .method-icon.wechat.data-v-a18b4e4b{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iIzA3QzE2MCIgZD0iTTkuODI3MjcyNzMsMjQgQzkuODI3MjcyNzMsMjQgOS44MjcyNzI3MywyNCA5LjgyNzI3MjczLDI0IEw5LjgyNzI3MjczLDI0IEM3LjQxNzczMTYzLDI0IDQuOTUzMTgxODIsMjMuNTMxODE4MiA0Ljk1MzE4MTgyLDIzLjUzMTgxODIgQzQuOTUzMTgxODIsMjMuNTMxODE4MiAzLDIzLjExMzYzNjQgMS41LDIyLjIyNzI3MjcgQzEuNSwyMi4yMjcyNzI3IDAuOTU0NTQ1NDU1LDIyLjA4NjM2MzYgMS4wNDMxODE4MiwyMS41NDU0NTQ1IEMxLjEzMTgxODE4LDIxLjAwNDU0NTUgMS4zNjM2MzYzNiwyMC4yNSAxLjM2MzYzNjM2LDIwLjI1IEwyLjI1LDE3LjcyNzI3MjcgQzAuNDA5MDkwOTA5LDE2LjAyMjcyNzMgMCwxNC4wNDU0NTQ1IDAsMTIuODE4MTgxOCBDMCw4LjQ1NDU0NTQ1IDQuOTA5MDkwOTEsNC45MDkwOTA5MSA5LjgyNzI3MjczLDQuOTA5MDkwOTEgQzEzLjc0NTQ1NDUsNC45MDkwOTA5MSAxNy4xODE4MTgyLDcuMTA0NTQ1NDUgMTguNTQ1NDU0NSwxMC4yMjcyNzI3IEMxOS4wOTA5MDkxLDEwLjEzMTgxODIgMTkuNjM2MzYzNiwxMC4wOTA5MDkxIDIwLjE4MTgxODIsMTAuMDkwOTA5MSBDMjQuNTQ1NDU0NSwxMC4wOTA5MDkxIDI4LjA5MDkwOTEsMTMuMTgxODE4MiAyOC4wOTA5MDkxLDE2LjkwOTA5MDkgQzI4LjA5MDkwOTEsMTguODE4MTgxOCAyNi43MjcyNzI3LDIwLjU5MDkwOTEgMjQuNzI3MjcyNywyMS43MjcyNzI3IEwyNS4zNjM2MzY0LDIzLjU5MDkwOTEgQzI1LjM2MzYzNjQsMjMuNTkwOTA5MSAyNS41LDI0LjA0NTQ1NDUgMjUuNTkwOTA5MSwyNC40MDkwOTA5IEMyNS42ODE4MTgyLDI0Ljc3MjcyNzMgMjUuMzYzNjM2NCwyNC45NTQ1NDU1IDI1LjM2MzYzNjQsMjQuOTU0NTQ1NSBDMjQuMjcyNzI3MywyNS42MzYzNjM2IDIyLjcyNzI3MjcsMjYuMDQ1NDU0NSAyMi43MjcyNzI3LDI2LjA0NTQ1NDUgQzIyLjcyNzI3MjcsMjYuMDQ1NDU0NSAyMC43MjcyNzI3LDI2LjQ1NDU0NTUgMTguNzI3MjcyNywyNi40NTQ1NDU1IEMxNi43MjcyNzI3LDI2LjQ1NDU0NTUgMTQuNzI3MjcyNywyNi4wNDU0NTQ1IDE0LjcyNzI3MjcsMjYuMDQ1NDU0NSBDMTMuNjM2MzYzNiwyNS43NzI3MjczIDEyLjU0NTQ1NDUsMjUuNDA5MDkwOSAxMS41NDU0NTQ1LDI0Ljk1NDU0NTUgQzEwLjkwOTA5MDksMjQuNjgxODE4MiAxMC4zNjM2MzY0LDI0LjM2MzYzNjQgOS44MjcyNzI3MywyNCBaIE02LjEzNjM2MzY0LDExLjMxODE4MTggQzUuMDQ1NDU0NTUsMTEuMzE4MTgxOCA0LjE4MTgxODE4LDEyLjE4MTgxODIgNC4xODE4MTgxOCwxMy4yNzI3MjczIEM0LjE4MTgxODE4LDE0LjM2MzYzNjQgNS4wNDU0NTQ1NSwxNS4yMjcyNzI3IDYuMTM2MzYzNjQsMTUuMjI3MjcyNyBDNy4yMjcyNzI3MywxNS4yMjcyNzI3IDguMDkwOTA5MDksMTQuMzYzNjM2NCA4LjA5MDkwOTA5LDEzLjI3MjcyNzMgQzguMDkwOTA5MDksMTIuMTgxODE4MiA3LjIyNzI3MjczLDExLjMxODE4MTggNi4xMzYzNjM2NCwxMS4zMTgxODE4IFogTTEzLjUsMTEuMzE4MTgxOCBDMTIuNDA5MDkwOSwxMS4zMTgxODE4IDExLjU0NTQ1NDUsMTIuMTgxODE4MiAxMS41NDU0NTQ1LDEzLjI3MjcyNzMgQzExLjU0NTQ1NDUsMTQuMzYzNjM2NCAxMi40MDkwOTA5LDE1LjIyNzI3MjcgMTMuNSwxNS4yMjcyNzI3IEMxNC41OTA5MDkxLDE1LjIyNzI3MjcgMTUuNDU0NTQ1NSwxNC4zNjM2MzY0IDE1LjQ1NDU0NTUsMTMuMjcyNzI3MyBDMTUuNDU0NTQ1NSwxMi4xODE4MTgyIDE0LjU5MDkwOTEsMTEuMzE4MTgxOCAxMy41LDExLjMxODE4MTggWiBNMjAuMTgxODE4MiwxNi41IEMxOS4wOTA5MDkxLDE2LjUgMTguMjI3MjcyNywxNy4zNjM2MzY0IDE4LjIyNzI3MjcsMTguNDU0NTQ1NSBDMTguMjI3MjcyNywxOS41NDU0NTQ1IDE5LjA5MDkwOTEsMjAuNDA5MDkwOSAyMC4xODE4MTgyLDIwLjQwOTA5MDkgQzIxLjI3MjcyNzMsMjAuNDA5MDkwOSAyMi4xMzYzNjM2LDE5LjU0NTQ1NDUgMjIuMTM2MzYzNiwxOC40NTQ1NDU1IEMyMi4xMzYzNjM2LDE3LjM2MzYzNjQgMjEuMjcyNzI3MywxNi41IDIwLjE4MTgxODIsMTYuNSBaIE0yNS41LDE2LjUgQzI0LjQwOTA5MDksMTYuNSAyMy41NDU0NTQ1LDE3LjM2MzYzNjQgMjMuNTQ1NDU0NSwxOC40NTQ1NDU1IEMyMy41NDU0NTQ1LDE5LjU0NTQ1NDUgMjQuNDA5MDkwOSwyMC40MDkwOTA5IDI1LjUsMjAuNDA5MDkwOSBDMjYuNTkwOTA5MSwyMC40MDkwOTA5IDI3LjQ1NDU0NTUsMTkuNTQ1NDU0NSAyNy40NTQ1NDU1LDE4LjQ1NDU0NTUgQzI3LjQ1NDU0NTUsMTcuMzYzNjM2NCAyNi41OTA5MDkxLDE2LjUgMjUuNSwxNi41IFoiLz48L3N2Zz4=) no-repeat center/contain}.payment-container .payment-methods .method-item .method-icon.alipay.data-v-a18b4e4b{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iIzE2NzdGRiIgZD0iTTIzLjg1MzU1MzQsMTUuMTQ2NDQ2NiBDMjQuMDQ4ODE1NSwxNS4zNDE3MDg4IDI0LjA0ODgxNTUsMTUuNjU4MjkxMiAyMy44NTM1NTM0LDE1Ljg1MzU1MzQgTDE1Ljg1MzU1MzQsMjMuODUzNTUzNCBDMTUuNjU4MjkxMiwyNC4wNDg4MTU1IDE1LjM0MTcwODgsMjQuMDQ4ODE1NSAxNS4xNDY0NDY2LDIzLjg1MzU1MzQgTDAuMTQ2NDQ2NjA5LDguODUzNTUzMzkgQy0wLjA0ODgxNTUzNjUsOC42NTgyOTEyNCAtMC4wNDg4MTU1MzY1LDguMzQxNzA4NzYgMC4xNDY0NDY2MDksOC4xNDY0NDY2MSBMOC4xNDY0NDY2MSwwLjE0NjQ0NjYwOSBDOC4zNDE3MDg3NiwtMC4wNDg4MTU1MzY1IDguNjU4MjkxMjQsLTAuMDQ4ODE1NTM2NSA4Ljg1MzU1MzM5LDAuMTQ2NDQ2NjA5IEwyMy44NTM1NTM0LDE1LjE0NjQ0NjYgWiBNMTcuMDM1NTMzOSwxNy4wMzU1MzM5IEwxOS4wMzU1MzM5LDE1LjAzNTUzMzkgTDE1LjAzNTUzMzksMTEuMDM1NTMzOSBMMTMuMDM1NTMzOSwxMy4wMzU1MzM5IEwxNy4wMzU1MzM5LDE3LjAzNTUzMzkgWiBNMTEuMDM1NTMzOSwxNS4wMzU1MzM5IEwxMy4wMzU1MzM5LDE3LjAzNTUzMzkgTDkuMDM1NTMzOTEsMjEuMDM1NTMzOSBMNy4wMzU1MzM5MSwxOS4wMzU1MzM5IEwxMS4wMzU1MzM5LDE1LjAzNTUzMzkgWiBNOS4wMzU1MzM5MSw5LjAzNTUzMzkxIEwxMS4wMzU1MzM5LDExLjAzNTUzMzkgTDcuMDM1NTMzOTEsMTUuMDM1NTMzOSBMNS4wMzU1MzM5MSwxMy4wMzU1MzM5IEw5LjAzNTUzMzkxLDkuMDM1NTMzOTEgWiBNMy4wMzU1MzM5MSwxMS4wMzU1MzM5IEw1LjAzNTUzMzkxLDEzLjAzNTUzMzkgTDMuMDM1NTMzOTEsMTUuMDM1NTMzOSBMMS4wMzU1MzM5MSwxMy4wMzU1MzM5IEwzLjAzNTUzMzkxLDExLjAzNTUzMzkgWiBNMTMuMDM1NTMzOSw3LjAzNTUzMzkxIEwxNS4wMzU1MzM5LDkuMDM1NTMzOTEgTDExLjAzNTUzMzksMTMuMDM1NTMzOSBMOS4wMzU1MzM5MSwxMS4wMzU1MzM5IEwxMy4wMzU1MzM5LDcuMDM1NTMzOTEgWiBNMTcuMDM1NTMzOSwzLjAzNTUzMzkxIEwxOS4wMzU1MzM5LDUuMDM1NTMzOTEgTDE1LjAzNTUzMzksOS4wMzU1MzM5MSBMMTMuMDM1NTMzOSw3LjAzNTUzMzkxIEwxNy4wMzU1MzM5LDMuMDM1NTMzOTEgWiBNMjEuMDM1NTMzOSw3LjAzNTUzMzkxIEwyMy4wMzU1MzM5LDkuMDM1NTMzOTEgTDE5LjAzNTUzMzksMTMuMDM1NTMzOSBMMTcuMDM1NTMzOSwxMS4wMzU1MzM5IEwyMS4wMzU1MzM5LDcuMDM1NTMzOTEgWiIvPjwvc3ZnPg==) no-repeat center/contain}.payment-container .payment-methods .method-item .method-name.data-v-a18b4e4b{flex:1;font-size:28rpx;color:#333}.payment-container .payment-methods .method-item .method-check.data-v-a18b4e4b{width:32rpx;height:32rpx;border-radius:50%;border:2rpx solid #ddd;position:relative}.payment-container .bottom-bar.data-v-a18b4e4b{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,.04)}.payment-container .bottom-bar .total-amount.data-v-a18b4e4b{font-size:28rpx;color:#666}.payment-container .bottom-bar .total-amount .amount.data-v-a18b4e4b{font-size:36rpx;font-weight:600;color:#ff5722;margin-left:10rpx}.payment-container .bottom-bar .pay-btn.data-v-a18b4e4b{background:#1976d2;color:#fff;font-size:32rpx;font-weight:600;padding:20rpx 60rpx;border-radius:100rpx;border:none}.payment-container .bottom-bar .pay-btn.data-v-a18b4e4b:active{opacity:.9}
diff --git a/unpackage/dist/build/mp-weixin/pages/order/return-success.js b/unpackage/dist/build/mp-weixin/pages/order/return-success.js
new file mode 100644
index 0000000..2e20c94
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/return-success.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../config/user.js"),r=require("../../config/url.js"),o={data:()=>({orderId:"",orderInfo:{orderNo:"",deviceNo:"",usedTime:"",currentFee:"0.00",deposit:"99.00",refundAmount:"99.00",endTime:"",withdrawStatus:"waiting",isWithdrawn:!1}}),onLoad(t){t&&t.orderId?(this.orderId=t.orderId,this.loadOrderInfo()):(e.index.showToast({title:"订单ID不能为空",icon:"none"}),setTimeout((()=>{this.goToHome()}),1500))},methods:{getWithdrawStatusText(){return{waiting:"待申请",processing:"处理中",success:"已退款",failed:"退款失败"}[this.orderInfo.withdrawStatus]||"待申请"},async loadOrderInfo(){try{e.index.showLoading({title:"加载中"});const o=await t.queryById(this.orderId);if(200!==o.code||!o.data)throw new Error(o.msg||"获取订单信息失败");{const e=o.data;let t=60,d=0,n=0,i="0.00",a="0.00";if(e.remark)try{const r=e.remark,o=r.match(/使用时长:(\d+)分钟/);o&&o[1]&&(n=parseInt(o[1]));const s=r.match(/套餐时长:(\d+)分钟/);s&&s[1]&&(t=parseInt(s[1]));const c=r.match(/超出时长:(\d+)分钟/);c&&c[1]&&(d=parseInt(c[1]));const h=r.match(/套餐费用:([\d.]+)元/);h&&h[1]&&(i=h[1]);const u=r.match(/超时费用:([\d.]+)元/);u&&u[1]&&(a=u[1]),console.log("从remark解析到的信息:",{usedMinutes:n,packageMinutes:t,extraMinutes:d,packagePrice:i,extraFee:a})}catch(r){console.error("解析remark字段失败:",r)}this.orderInfo={orderNo:e.orderNo||"",deviceNo:e.deviceNo||"",usedTime:n+"分钟",packageTime:t+"分钟",extraTime:d+"分钟",packagePrice:i,extraFee:a,currentFee:e.actualDeviceAmount||"0.00",deposit:e.depositAmount||"99.00",refundAmount:e.residueAmount||"99.00",endTime:e.endTime||"",withdrawStatus:e.withdrawStatus||"waiting",isWithdrawn:"success"===e.withdrawStatus}}}catch(o){console.error("加载订单信息错误:",o),e.index.showToast({title:o.message||"获取订单信息失败",icon:"none"})}finally{e.index.hideLoading()}},async handleWithdraw(){try{e.index.showLoading({title:"处理中"});const t=await e.index.request({url:`${r.URL||"http://127.0.0.1:8080"}/app/withdraw/add/${this.orderInfo.orderNo}`,method:"GET",header:{"Content-Type":"application/json",Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")}});if(200!==t.statusCode||200!==t.data.code)throw new Error(t.data.msg||"退款申请失败");e.index.showToast({title:"退款申请成功",icon:"success"}),this.orderInfo.withdrawStatus="processing",this.orderInfo.isWithdrawn=!0,setTimeout((()=>{this.loadOrderInfo()}),1500)}catch(t){console.error("退款申请错误:",t),e.index.showToast({title:t.message||"退款申请失败",icon:"none"})}finally{e.index.hideLoading()}},goToHome(){e.index.reLaunch({url:"/pages/index/index"})}}};const d=e._export_sfc(o,[["render",function(t,r,o,d,n,i){return e.e({a:e.t(n.orderInfo.orderNo||"-"),b:e.t(n.orderInfo.deviceNo||"-"),c:e.t(n.orderInfo.usedTime||"-"),d:e.t(n.orderInfo.packageTime||"1小时"),e:e.t(n.orderInfo.extraTime||"0分钟"),f:e.t(n.orderInfo.endTime||"-"),g:e.t(n.orderInfo.packagePrice||"0.00"),h:e.t(n.orderInfo.extraFee||"0.00"),i:e.t(n.orderInfo.currentFee||"0.00"),j:e.t(n.orderInfo.deposit||"99.00"),k:e.t(n.orderInfo.refundAmount||"99.00"),l:e.t(i.getWithdrawStatusText()),m:e.n(n.orderInfo.withdrawStatus||"waiting"),n:!n.orderInfo.isWithdrawn},n.orderInfo.isWithdrawn?{}:{o:e.o(((...e)=>i.handleWithdraw&&i.handleWithdraw(...e)))},{p:e.o(((...e)=>i.goToHome&&i.goToHome(...e)))})}],["__scopeId","data-v-845b5869"]]);wx.createPage(d);
diff --git a/unpackage/dist/build/mp-weixin/pages/order/return-success.json b/unpackage/dist/build/mp-weixin/pages/order/return-success.json
new file mode 100644
index 0000000..0bd5924
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/return-success.json
@@ -0,0 +1,6 @@
+{
+ "navigationBarTitleText": "归还成功",
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/return-success.wxml b/unpackage/dist/build/mp-weixin/pages/order/return-success.wxml
new file mode 100644
index 0000000..d25344d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/return-success.wxml
@@ -0,0 +1 @@
+归还成功您的充电宝已归还,费用已从押金中扣除订单信息订单号{{a}}设备号{{b}}使用时长{{c}}套餐时长{{d}}超出时长{{e}}归还时间{{f}}费用信息套餐费用¥{{g}}超时费用¥{{h}}总费用¥{{i}}押金¥{{j}}退还金额¥{{k}}退还状态{{l}}退款说明1. 押金剩余金额需要您手动申请提现2. 提现申请提交后将在1-3个工作日内退还到原支付账户3. 如有疑问,请联系客服
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/return-success.wxss b/unpackage/dist/build/mp-weixin/pages/order/return-success.wxss
new file mode 100644
index 0000000..c69a0a1
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/return-success.wxss
@@ -0,0 +1 @@
+.success-container.data-v-845b5869{padding:20px;background-color:#f8f8f8;min-height:100vh}.status-card.data-v-845b5869{background-color:#fff;border-radius:12px;padding:30px;text-align:center;margin-bottom:20px;box-shadow:0 2px 8px rgba(0,0,0,.04)}.status-card .status-icon.data-v-845b5869{width:60px;height:60px;margin:0 auto 16px}.status-card .status-icon.success.data-v-845b5869{background-color:#07c160;border-radius:50%;position:relative}.status-card .status-icon.success.data-v-845b5869:after{content:"";position:absolute;left:50%;top:50%;width:30px;height:20px;border:3px solid #fff;border-top:none;border-right:none;transform-origin:center;transform:translate(-50%,-70%) rotate(-45deg)}.status-card .status-text.data-v-845b5869{font-size:24px;font-weight:700;color:#07c160;margin-bottom:8px}.status-card .status-desc.data-v-845b5869{font-size:14px;color:#666}.order-card.data-v-845b5869,.refund-card.data-v-845b5869{background-color:#fff;border-radius:12px;padding:20px;margin-bottom:20px;box-shadow:0 2px 8px rgba(0,0,0,.04)}.order-card .card-title.data-v-845b5869,.refund-card .card-title.data-v-845b5869{font-size:16px;font-weight:700;margin-bottom:16px;color:#333;border-bottom:1px solid #f0f0f0;padding-bottom:10px}.order-card .info-item.data-v-845b5869,.refund-card .info-item.data-v-845b5869{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.order-card .info-item.data-v-845b5869:last-child,.refund-card .info-item.data-v-845b5869:last-child{margin-bottom:0}.order-card .info-item .label.data-v-845b5869,.refund-card .info-item .label.data-v-845b5869{color:#666;font-size:14px}.order-card .info-item .value.data-v-845b5869,.refund-card .info-item .value.data-v-845b5869{color:#333;font-size:14px}.order-card .info-item .value.highlight.data-v-845b5869,.refund-card .info-item .value.highlight.data-v-845b5869{color:#ff6b00;font-weight:700;font-size:16px}.order-card .info-item .value.success.data-v-845b5869,.refund-card .info-item .value.success.data-v-845b5869{color:#07c160}.button-group.data-v-845b5869{margin-top:40rpx;display:flex;justify-content:space-between;gap:20rpx}.button-group .primary-btn.data-v-845b5869,.button-group .secondary-btn.data-v-845b5869{flex:1;height:88rpx;line-height:88rpx;border-radius:44rpx;text-align:center;font-size:32rpx}.button-group .primary-btn.data-v-845b5869{background:#07c160;color:#fff}.button-group .primary-btn.data-v-845b5869:active{opacity:.8}.button-group .secondary-btn.data-v-845b5869{background:#f0f0f0;color:#333}.button-group .secondary-btn.data-v-845b5869:active{opacity:.8}.notice-card.data-v-845b5869{background-color:#fff;border-radius:12px;padding:20px;margin-bottom:20px;box-shadow:0 2px 8px rgba(0,0,0,.04)}.notice-card .card-title.data-v-845b5869{font-size:16px;font-weight:700;margin-bottom:16px;color:#333;border-bottom:1px solid #f0f0f0;padding-bottom:10px}.notice-card .notice-content.data-v-845b5869{text-align:left;color:#666;font-size:14px}.waiting.data-v-845b5869{color:#fa0;font-weight:700}
diff --git a/unpackage/dist/build/mp-weixin/pages/order/success.js b/unpackage/dist/build/mp-weixin/pages/order/success.js
new file mode 100644
index 0000000..538dad0
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/success.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),o=require("../../config/user.js"),r={data:()=>({orderId:"",orderInfo:{},isLoading:!0,deviceMessage:"正在准备您的设备,请稍候...",hasTriggeredDevice:!1}),onLoad(o){o&&o.orderId?(this.orderId=o.orderId,this.loadOrderInfo(),e.index.$once("orderSuccess:"+this.orderId,(()=>{console.log("已经触发过弹出逻辑,不再重复触发"),this.hasTriggeredDevice=!0}))):(e.index.showToast({title:"订单信息不存在",icon:"none"}),setTimeout((()=>{this.goToHome()}),1500))},methods:{async loadOrderInfo(){try{e.index.showLoading({title:"加载中"});const r=await o.queryById(this.orderId);if(200!==r.code||!r.data)throw new Error("获取订单信息失败");{const o=r.data;this.orderInfo={orderNo:o.orderNo||o.orderId,deviceNo:o.deviceNo,amount:o.payAmount||o.amount,payTime:o.payTime||this.formatTime(new Date)},"IN_USED"===o.orderStatus?(this.deviceMessage="设备已弹出,请取走您的充电宝",this.isLoading=!1,this.hasTriggeredDevice||(e.index.$emit("orderSuccess:"+this.orderId),this.hasTriggeredDevice=!0)):this.triggerDeviceEject()}e.index.hideLoading()}catch(r){e.index.hideLoading(),e.index.showToast({title:r.message||"获取订单信息失败",icon:"none"})}},async triggerDeviceEject(){if(this.hasTriggeredDevice)console.log("已经触发过弹出充电宝,不重复触发");else{this.hasTriggeredDevice=!0,e.index.$emit("orderSuccess:"+this.orderId),this.isLoading=!0,this.deviceMessage="正在准备您的设备,请稍候...";try{console.log(`准备触发弹出充电宝,orderId: ${this.orderId}`);const r=await o.confirmPaymentAndRent(this.orderId);if(console.log("确认支付并弹出充电宝结果:",JSON.stringify(r)),!r||200!==r.code)throw new Error(r&&r.msg||"弹出充电宝失败");this.deviceMessage="设备已弹出,请取走您的充电宝",e.index.showToast({title:"充电宝已弹出",icon:"success"})}catch(r){console.error("弹出充电宝错误:",r),this.deviceMessage="弹出设备失败,请联系客服",e.index.showToast({title:r.message||"弹出充电宝失败,请联系客服",icon:"none"})}finally{this.isLoading=!1}}},formatTime:e=>`${e.getFullYear()}-${(e.getMonth()+1).toString().padStart(2,"0")}-${e.getDate().toString().padStart(2,"0")} ${e.getHours().toString().padStart(2,"0")}:${e.getMinutes().toString().padStart(2,"0")}:${e.getSeconds().toString().padStart(2,"0")}`,goToHome(){e.index.switchTab({url:"/pages/index/index"})},goToOrderList(){e.index.redirectTo({url:"/pages/order/index"})}}};const i=e._export_sfc(r,[["render",function(o,r,i,t,d,s){return e.e({a:e.t(d.orderInfo.orderNo||"-"),b:e.t(d.orderInfo.deviceNo||"-"),c:e.t(d.orderInfo.amount||"0.00"),d:e.t(d.orderInfo.payTime||"-"),e:e.t(d.deviceMessage),f:d.isLoading},(d.isLoading,{}),{g:e.o(((...e)=>s.goToHome&&s.goToHome(...e))),h:e.o(((...e)=>s.goToOrderList&&s.goToOrderList(...e)))})}],["__scopeId","data-v-174f45e8"]]);wx.createPage(i);
diff --git a/unpackage/dist/build/mp-weixin/pages/order/success.json b/unpackage/dist/build/mp-weixin/pages/order/success.json
new file mode 100644
index 0000000..0fafd7e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/success.json
@@ -0,0 +1,6 @@
+{
+ "navigationBarTitleText": "支付成功",
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/success.wxml b/unpackage/dist/build/mp-weixin/pages/order/success.wxml
new file mode 100644
index 0000000..d4d0f99
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/success.wxml
@@ -0,0 +1 @@
+支付成功您的订单已支付成功订单信息订单号{{a}}设备号{{b}}支付金额¥{{c}}支付时间{{d}}{{e}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/order/success.wxss b/unpackage/dist/build/mp-weixin/pages/order/success.wxss
new file mode 100644
index 0000000..c38226b
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/order/success.wxss
@@ -0,0 +1 @@
+.success-container.data-v-174f45e8{padding:20px;background-color:#f5f5f5;min-height:100vh}.status-card.data-v-174f45e8{background-color:#fff;border-radius:12px;padding:30px;text-align:center;margin-bottom:20px}.status-card .status-icon.data-v-174f45e8{width:60px;height:60px;margin:0 auto 16px;background-color:#07c160;border-radius:50%;position:relative}.status-card .status-icon.data-v-174f45e8:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:30px;height:20px;border:3px solid #fff;border-top:none;border-right:none;transform-origin:center;transform:translate(-50%,-70%) rotate(-45deg)}.status-card .status-text.data-v-174f45e8{font-size:24px;font-weight:700;color:#07c160;margin-bottom:8px}.status-card .status-desc.data-v-174f45e8{font-size:14px;color:#666}.order-card.data-v-174f45e8{background-color:#fff;border-radius:12px;padding:20px;margin-bottom:20px}.order-card .card-title.data-v-174f45e8{font-size:16px;font-weight:700;margin-bottom:16px;color:#333}.order-card .info-item.data-v-174f45e8{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.order-card .info-item .label.data-v-174f45e8{color:#666;font-size:14px}.order-card .info-item .value.data-v-174f45e8{color:#333;font-size:14px}.device-status.data-v-174f45e8{background-color:#fff;border-radius:12px;padding:20px;margin-bottom:20px;text-align:center}.device-status .status-message.data-v-174f45e8{font-size:16px;color:#333;margin-bottom:12px}.device-status .loading-animation.data-v-174f45e8{display:flex;justify-content:center;align-items:center;height:40px}.device-status .loading-animation .loading-circle.data-v-174f45e8{width:30px;height:30px;border-radius:50%;border:3px solid #f0f0f0;border-top-color:#07c160;animation:spin-174f45e8 1s linear infinite}@keyframes spin-174f45e8{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.button-group.data-v-174f45e8{margin-top:30px;display:flex;flex-direction:column;gap:16px}.button-group .primary-btn.data-v-174f45e8{background-color:#07c160;color:#fff;border:none;border-radius:24px;padding:12px;font-size:16px}.button-group .primary-btn.data-v-174f45e8:active{opacity:.8}.button-group .secondary-btn.data-v-174f45e8{background-color:#fff;color:#07c160;border:1px solid #07c160;border-radius:24px;padding:12px;font-size:16px}.button-group .secondary-btn.data-v-174f45e8:active{background-color:#f5f5f5}
diff --git a/unpackage/dist/build/mp-weixin/pages/return/index.js b/unpackage/dist/build/mp-weixin/pages/return/index.js
new file mode 100644
index 0000000..d91430e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/return/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../config/user.js"),r=require("../../config/url.js"),o={data:()=>({deviceId:"",orderInfo:{orderId:"",startTime:"",_rawStartTime:"",usedTime:"0分钟",currentFee:"0.00",orderStatus:"in_used"},timer:null,statusCheckTimer:null,maxStatusChecks:30,currentStatusChecks:0,statusCheckInterval:5e3}),onLoad(t){if(console.log("Return page loaded with options:",JSON.stringify(t)),this.orderInfo.orderId=t.orderId||"",this.deviceId=t.deviceNo||t.deviceId||"",console.log(`初始化参数: orderId=${this.orderInfo.orderId}, deviceId=${this.deviceId}`),!this.orderInfo.orderId&&this.deviceId)this.getOrderByDevice();else if(this.orderInfo.orderId){this.getOrderDetails(),this.startTimer(),this.startStatusCheckTimer(),e.index.setStorageSync("activeOrderId",this.orderInfo.orderId);try{this.$orderMonitor?(this.$orderMonitor.addOrder({orderId:this.orderInfo.orderId}),console.log("订单已添加到监控队列:",this.orderInfo.orderId)):console.warn("$orderMonitor 未定义,无法添加订单到监控队列")}catch(r){console.error("添加订单到监控队列失败:",r)}}else e.index.showToast({title:"缺少订单信息",icon:"none"}),setTimeout((()=>{this.goToHome()}),1500);e.index.$on("orderCompleted",this.handleOrderCompleted)},onUnload(){this.clearTimer(),this.clearStatusCheckTimer(),e.index.$off("orderCompleted",this.handleOrderCompleted)},methods:{handleOrderCompleted(e){console.log("收到订单完成事件:",e),e.orderId!==this.orderInfo.orderId&&e.orderNo!==this.orderInfo.orderNo||this.showReturnSuccessModal(e)},showReturnSuccessModal(t){this.clearTimer(),this.clearStatusCheckTimer(),e.index.showModal({title:"归还成功",content:"充电宝已归还成功,剩余押金将退还到您的账户",confirmText:"查看详情",success:r=>{r.confirm?e.index.redirectTo({url:`/pages/order/return-success?orderId=${t.orderId||this.orderInfo.orderId}`}):e.index.reLaunch({url:"/pages/index/index"})}})},getOrderStatusText(){return{waiting_for_payment:"待支付",payment_in_progress:"支付中",payment_successful:"支付成功",in_used:"使用中",payment_failed:"支付失败",order_cancelled:"订单取消",used_done:"订单完成",used_down:"订单完成"}[this.orderInfo.orderStatus]||"使用中"},async getOrderDetails(){try{if(e.index.showLoading({title:"加载中"}),!this.orderInfo.orderId)throw new Error("订单ID不能为空");console.log("请求订单详情, orderId:",this.orderInfo.orderId);const r=await t.queryById(this.orderInfo.orderId);if(console.log("订单详情结果:",JSON.stringify(r)),200!==r.code||!r.data)throw new Error(r.msg||"获取订单详情失败");{const t=r.data;if(console.log("订单原始数据:",t),console.log("开始时间字段:",t.startTime,typeof t.startTime),t.orderStatus&&(this.orderInfo.orderStatus=t.orderStatus),t.orderStatus&&("used_done"===t.orderStatus||"used_down"===t.orderStatus))return e.index.$emit("orderCompleted",t),void this.showReturnSuccessModal(t);this.updateOrderInfo(t),console.log("更新后的开始时间:",this.orderInfo.startTime)}}catch(r){console.error("获取订单详情错误:",r),e.index.showToast({title:r.message||"获取订单信息失败",icon:"none"}),setTimeout((()=>{this.goToHome()}),1500)}finally{e.index.hideLoading()}},formatTime:e=>`${e.getFullYear()}-${(e.getMonth()+1).toString().padStart(2,"0")}-${e.getDate().toString().padStart(2,"0")} ${e.getHours().toString().padStart(2,"0")}:${e.getMinutes().toString().padStart(2,"0")}`,updateOrderInfo(e){if(console.log("更新订单信息:",JSON.stringify(e)),this.orderInfo.usedTime=e.usedTime||"0分钟",this.orderInfo.currentFee=e.currentFee||e.actualDeviceAmount||e.payAmount||"0.00",e.orderStatus&&(this.orderInfo.orderStatus=e.orderStatus),this.orderInfo._rawStartTime=e.startTime,e.startTime)try{console.log("API返回的开始时间:",e.startTime),this.orderInfo.startTime=e.startTime}catch(t){console.error("更新开始时间错误:",t),this.orderInfo.startTime="未知"}else console.warn("API返回的订单数据中没有startTime字段"),e.createTime?(console.log("使用createTime作为备选:",e.createTime),this.orderInfo.startTime=e.createTime):this.orderInfo.startTime="未知";e.deviceNo&&!this.deviceId&&(this.deviceId=e.deviceNo)},startTimer(){this.timer=setInterval((()=>{this.getOrderDetails()}),6e4)},clearTimer(){this.timer&&(clearInterval(this.timer),this.timer=null)},clearStatusCheckTimer(){this.statusCheckTimer&&(clearInterval(this.statusCheckTimer),this.statusCheckTimer=null)},startStatusCheckTimer(){this.currentStatusChecks=0,this.clearStatusCheckTimer(),this.statusCheckTimer=setInterval((()=>{this.currentStatusChecks++,this.checkReturnStatus(),this.currentStatusChecks>=this.maxStatusChecks&&(this.clearStatusCheckTimer(),e.index.showToast({title:"请手动刷新查看归还状态",icon:"none",duration:3e3}))}),this.statusCheckInterval)},async getOrderByDevice(){try{if(e.index.showLoading({title:"加载中"}),!this.deviceId)throw new Error("设备号不能为空");const t=await e.index.request({url:`${r.URL||"http://127.0.0.1:8080"}/app/order/inUse`,method:"GET",header:{Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")}});if(console.log("通过设备号查询订单结果:",JSON.stringify(t)),200!==t.statusCode||200!==t.data.code||!t.data.data)throw new Error("未找到使用中的订单");{const e=t.data.data;console.log("使用中的订单:",e),this.orderInfo.orderId=e.orderId,e.orderStatus&&(this.orderInfo.orderStatus=e.orderStatus),e.startTime&&(console.log("inUse API返回的开始时间:",e.startTime),this.orderInfo.startTime=e.startTime),this.getOrderDetails(),this.startTimer(),this.startStatusCheckTimer()}}catch(t){console.error("通过设备号查询订单失败:",t),e.index.showToast({title:t.message||"获取订单信息失败",icon:"none"}),setTimeout((()=>{this.goToHome()}),1500)}finally{e.index.hideLoading()}},async checkReturnStatus(){try{await this.getOrderDetails()}catch(e){console.error("检查归还状态失败:",e)}},goToHome(){e.index.reLaunch({url:"/pages/index/index"})}}};const s=e._export_sfc(o,[["render",function(t,r,o,s,i,d){return e.e({a:e.t(d.getOrderStatusText()),b:e.t(i.orderInfo.orderId),c:e.t(i.deviceId),d:e.t(i.orderInfo.startTime),e:e.t(i.orderInfo.usedTime),f:e.t(i.orderInfo.currentFee)},{},{j:e.o(((...e)=>d.checkReturnStatus&&d.checkReturnStatus(...e))),k:e.o(((...e)=>d.goToHome&&d.goToHome(...e)))})}],["__scopeId","data-v-44a2261b"]]);wx.createPage(s);
diff --git a/unpackage/dist/build/mp-weixin/pages/return/index.json b/unpackage/dist/build/mp-weixin/pages/return/index.json
new file mode 100644
index 0000000..91c1ef2
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/return/index.json
@@ -0,0 +1,6 @@
+{
+ "navigationBarTitleText": "归还设备",
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/return/index.wxml b/unpackage/dist/build/mp-weixin/pages/return/index.wxml
new file mode 100644
index 0000000..8808f6d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/return/index.wxml
@@ -0,0 +1 @@
+共享风扇设备号:{{c}}开始时间{{d}}已使用时长{{e}}当前费用¥{{f}}调试信息原始开始时间: {{g}}处理后开始时间: {{h}}订单状态: {{i}}归还说明请确保设备完好无损将充电宝插入原位置或空闲插口系统将自动检测归还并处理退款归还成功后将自动跳转到成功页面
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/return/index.wxss b/unpackage/dist/build/mp-weixin/pages/return/index.wxss
new file mode 100644
index 0000000..6a6ae6e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/return/index.wxss
@@ -0,0 +1 @@
+.return-container.data-v-44a2261b{min-height:100vh;background:#f8f8f8;padding:30rpx 30rpx 180rpx;box-sizing:border-box}.return-container .order-card.data-v-44a2261b{background:#fff;border-radius:24rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.return-container .order-card .order-header.data-v-44a2261b{display:flex;justify-content:space-between;align-items:center;margin-bottom:30rpx}.return-container .order-card .order-header .title.data-v-44a2261b{font-size:32rpx;font-weight:700;color:#333}.return-container .order-card .order-header .order-no.data-v-44a2261b{font-size:24rpx;color:#999}.return-container .order-card .device-info.data-v-44a2261b{margin-bottom:30rpx}.return-container .order-card .device-info .device-name.data-v-44a2261b{font-size:28rpx;color:#333;display:block;margin-bottom:10rpx}.return-container .order-card .device-info .device-id.data-v-44a2261b{font-size:24rpx;color:#666}.return-container .order-card .time-info.data-v-44a2261b{background:#f9f9f9;border-radius:16rpx;padding:20rpx}.return-container .order-card .time-info .time-item.data-v-44a2261b{display:flex;justify-content:space-between;align-items:center;margin-bottom:16rpx}.return-container .order-card .time-info .time-item.data-v-44a2261b:last-child{margin-bottom:0}.return-container .order-card .time-info .time-item .label.data-v-44a2261b{font-size:26rpx;color:#666}.return-container .order-card .time-info .time-item .value.data-v-44a2261b{font-size:26rpx;color:#333}.return-container .order-card .time-info .time-item .value.highlight.data-v-44a2261b{color:#ff6b00;font-weight:700}.return-container .notice-card.data-v-44a2261b{background:#fff;border-radius:24rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 16rpx rgba(0,0,0,.04)}.return-container .notice-card .notice-title.data-v-44a2261b{font-size:28rpx;font-weight:700;color:#333;margin-bottom:20rpx}.return-container .notice-card .notice-list .notice-item.data-v-44a2261b{display:flex;align-items:flex-start;margin-bottom:16rpx}.return-container .notice-card .notice-list .notice-item.data-v-44a2261b:last-child{margin-bottom:0}.return-container .notice-card .notice-list .notice-item .dot.data-v-44a2261b{width:12rpx;height:12rpx;background:#07c160;border-radius:50%;margin-top:10rpx;margin-right:16rpx;flex-shrink:0}.return-container .notice-card .notice-list .notice-item text.data-v-44a2261b{font-size:26rpx;color:#666;line-height:1.5}.return-container .bottom-bar.data-v-44a2261b{position:fixed;left:0;right:0;bottom:0;padding:30rpx;background:#fff;box-shadow:0 -4rpx 16rpx rgba(0,0,0,.04);z-index:10;display:flex;justify-content:space-between;gap:20rpx}.return-container .bottom-bar .primary-btn.data-v-44a2261b,.return-container .bottom-bar .secondary-btn.data-v-44a2261b{height:88rpx;line-height:88rpx;font-size:32rpx;border-radius:44rpx;text-align:center;flex:1}.return-container .bottom-bar .primary-btn.data-v-44a2261b{background:#07c160;color:#fff}.return-container .bottom-bar .primary-btn.data-v-44a2261b:active{opacity:.8}.return-container .bottom-bar .secondary-btn.data-v-44a2261b{background:#f0f0f0;color:#333}.return-container .bottom-bar .secondary-btn.data-v-44a2261b:active{opacity:.8}
diff --git a/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.js b/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.js
new file mode 100644
index 0000000..9a76f29
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../common/vendor.js"),i=require("../../../util/index.js"),o=require("../../../config/user.js"),d={data:()=>({}),async onLoad(d){try{if(e.index.showLoading({title:"加载中..."}),e.index.getStorageSync("token")||await i.wxLogin(),!d.deviceNo)return e.index.hideLoading(),void e.index.showToast({title:"设备编号不能为空",icon:"none"});const n=await o.queryHasOrder(d.deviceNo);e.index.hideLoading(),n.data&&n.data.data&&n.data.data.length>0?e.index.redirectTo({url:`/pages/device/return?deviceNo=${d.deviceNo}`}):e.index.redirectTo({url:`/pages/device/detail?deviceNo=${d.deviceNo}`})}catch(n){e.index.hideLoading(),e.index.showToast({title:"页面加载失败,请重试",icon:"none"}),console.error("bagCheck onLoad error:",n)}},methods:{}};const n=e._export_sfc(d,[["render",function(e,i,o,d,n,t){return{}}]]);wx.createPage(n);
diff --git a/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.json b/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.json
new file mode 100644
index 0000000..6038722
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "共享风扇",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.wxml b/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.wxml
new file mode 100644
index 0000000..8dcff42
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.wxss b/unpackage/dist/build/mp-weixin/pages/serve/bagCheck/index.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/unpackage/dist/build/mp-weixin/project.config.json b/unpackage/dist/build/mp-weixin/project.config.json
new file mode 100644
index 0000000..3d5d05e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/project.config.json
@@ -0,0 +1,36 @@
+{
+ "description": "项目配置文件。",
+ "packOptions": {
+ "ignore": []
+ },
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "postcss": false,
+ "minified": false,
+ "newFeature": true,
+ "bigPackageSizeSupport": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "",
+ "appid": "wxe752f45e7f7aa271",
+ "projectname": "fs",
+ "condition": {
+ "search": {
+ "current": -1,
+ "list": []
+ },
+ "conversation": {
+ "current": -1,
+ "list": []
+ },
+ "game": {
+ "current": -1,
+ "list": []
+ },
+ "miniprogram": {
+ "current": -1,
+ "list": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/static/complaint.png b/unpackage/dist/build/mp-weixin/static/complaint.png
new file mode 100644
index 0000000..b4343a9
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/complaint.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/head.png b/unpackage/dist/build/mp-weixin/static/head.png
new file mode 100644
index 0000000..4ebeb16
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/head.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/hlep.png b/unpackage/dist/build/mp-weixin/static/hlep.png
new file mode 100644
index 0000000..4d9475a
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/hlep.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/home-active.png b/unpackage/dist/build/mp-weixin/static/home-active.png
new file mode 100644
index 0000000..2b9c61a
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/home-active.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/home.png b/unpackage/dist/build/mp-weixin/static/home.png
new file mode 100644
index 0000000..1cf632f
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/home.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/images/alipay.svg b/unpackage/dist/build/mp-weixin/static/images/alipay.svg
new file mode 100644
index 0000000..efe8ea0
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/static/images/alipay.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/static/images/wechat.svg b/unpackage/dist/build/mp-weixin/static/images/wechat.svg
new file mode 100644
index 0000000..3f623e1
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/static/images/wechat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/static/jl.png b/unpackage/dist/build/mp-weixin/static/jl.png
new file mode 100644
index 0000000..f6083bb
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/jl.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/logo.png b/unpackage/dist/build/mp-weixin/static/logo.png
new file mode 100644
index 0000000..b5771e2
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/logo.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/scan-icon.png b/unpackage/dist/build/mp-weixin/static/scan-icon.png
new file mode 100644
index 0000000..7fb452d
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/scan-icon.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/user-active.png b/unpackage/dist/build/mp-weixin/static/user-active.png
new file mode 100644
index 0000000..892cea3
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/user-active.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/user.png b/unpackage/dist/build/mp-weixin/static/user.png
new file mode 100644
index 0000000..1054ecf
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/user.png differ
diff --git a/unpackage/dist/build/mp-weixin/util/index.js b/unpackage/dist/build/mp-weixin/util/index.js
new file mode 100644
index 0000000..0611271
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/util/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js"),n=require("../config/user.js");exports.getQueryString=function(e,n){var o=new RegExp("(^|&|/?)"+n+"=([^&|/?]*)(&|/?|$)","i"),i=e.substr(1).match(o);return null!=i?i[2]:null},exports.getUserInfo=()=>new Promise((async(e,o)=>{e(await n.getMyIndexInfo({isHide:!1}))})),exports.wxLogin=()=>new Promise(((o,i)=>{e.index.login({provider:"weixin",success:async t=>{try{if(!t.code)throw new Error("获取微信登录凭证失败");{const i=await n.login({code:t.code,appid:"wxe752f45e7f7aa271"});if(200!==i.code)throw new Error(i.message||"登录失败");e.index.setStorageSync("token",i.data.LoginWxVo.access_token),e.index.setStorageSync("client_id",i.data.LoginWxVo.client_id),o(i.data)}}catch(s){e.index.showToast({title:s.message||"登录失败",icon:"none"}),i(s)}},fail:n=>{e.index.showToast({title:"微信登录失败",icon:"none"}),i(n)}})}));
diff --git a/unpackage/dist/build/mp-weixin/utils/orderMonitor.js b/unpackage/dist/build/mp-weixin/utils/orderMonitor.js
new file mode 100644
index 0000000..9726257
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/utils/orderMonitor.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js"),s=require("../config/user.js");const r=new class{constructor(){this.activeOrders=new Map,this.timer=null,this.checkInterval=1e4,this.isRunning=!1}addOrder(e){e&&e.orderId?(console.log("添加订单到监控队列:",e.orderId),this.activeOrders.set(e.orderId,e),this.isRunning||this.start()):console.error("添加订单监控失败:无效的订单数据")}removeOrder(e){this.activeOrders.has(e)&&(console.log("从监控队列移除订单:",e),this.activeOrders.delete(e),0===this.activeOrders.size&&this.stop())}start(){this.isRunning||(console.log("启动订单监控服务"),this.isRunning=!0,this.checkOrders(),this.timer=setInterval((()=>{this.checkOrders()}),this.checkInterval))}stop(){this.isRunning&&(console.log("停止订单监控服务"),this.isRunning=!1,this.timer&&(clearInterval(this.timer),this.timer=null))}async checkOrders(){if(0!==this.activeOrders.size){console.log(`检查 ${this.activeOrders.size} 个活跃订单状态`);for(const[s,r]of this.activeOrders.entries())try{await this.checkOrderStatus(s)}catch(e){console.error(`检查订单状态失败: ${s}`,e)}}}async checkOrderStatus(r){try{console.log(`检查订单 ${r} 的状态`);const t=await s.queryById(r);if(200===t.code&&t.data){const s=t.data;if(this.activeOrders.set(r,s),"used_done"===s.orderStatus||"used_down"===s.orderStatus){console.log(`订单 ${r} 已完成!`),e.index.$emit("orderCompleted",s),e.index.showToast({title:"充电宝归还成功",icon:"success",duration:2e3});const t=e.index.createInnerAudioContext();t.src="/static/audio/return_success.mp3",t.play(),this.removeOrder(r),setTimeout((()=>{e.index.showModal({title:"归还成功",content:"充电宝已归还成功,剩余押金将退还到您的账户",confirmText:"查看详情",success:s=>{s.confirm&&e.index.redirectTo({url:`/pages/order/return-success?orderId=${r}`})}})}),500)}}}catch(t){console.error(`检查订单 ${r} 状态出错:`,t)}}};(()=>{const s=e.index.getStorageSync("activeOrderId");if(s){const e={orderId:s};r.addOrder(e)}})(),exports.orderMonitor=r;
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/app.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/app.js.map
new file mode 100644
index 0000000..a0ba8d4
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/app.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_sfc_main","onLaunch","common_vendor","index","__f__","onShow","_onShow","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","wrap","_callee$","_context","prev","next","autoLogin","stop","apply","arguments","onHide","methods","_callee2","loginResult","_callee2$","_context2","util_index","wxLogin","sent","t0"],"sources":["App.vue"],"sourcesContent":["\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAOC,IAAKA,SAAA,GAAU;EACdC,QAAA,EAAU,SAAVA,SAAA,EAAqB;IACpBC,aAAA,CAAAC,KAAA,CAAAC,KAAA,yBAAY,YAAY;EAExB;EACDC,MAAA;IAAA,IAAAC,OAAA,GAAAC,kBAAA,eAAAC,oBAAA,GAAAC,IAAA,CAAQ,SAAAC,QAAA;MAAA,OAAAF,oBAAA,GAAAG,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YACPb,aAAA,CAAAC,KAAA,CAAYC,KAAA,mCAAU;YAAAS,QAAA,CAAAE,IAAA;YAAA,OAChB,KAAKC,SAAA,EAAU;UAAA;UAAA;YAAA,OAAAH,QAAA,CAAAI,IAAA;QAAA;MAAA,GAAAP,OAAA;IAAA,CAErB;IAAA,SAJDL,OAAA;MAAA,OAAAC,OAAA,CAAAY,KAAA,OAAAC,SAAA;IAAA;IAAA,OAAAd,MAAA;EAAA,GAIC;EACDe,MAAA,EAAQ,SAARA,OAAA,EAAmB;IAClBlB,aAAA,CAAAC,KAAA,CAAYC,KAAA,mCAAU;EACtB;EAIDiB,OAAA,EAAS;IACFL,SAAA,WAAAA,UAAA,EAAY;MAAA,OAAAT,kBAAA,eAAAC,oBAAA,GAAAC,IAAA,UAAAa,SAAA;QAAA,IAAAC,WAAA;QAAA,OAAAf,oBAAA,GAAAG,IAAA,UAAAa,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAX,IAAA,GAAAW,SAAA,CAAAV,IAAA;YAAA;cAAAU,SAAA,CAAAX,IAAA;cAAAW,SAAA,CAAAV,IAAA;cAAA,OAEUW,UAAA,CAAAC,OAAA,EAAQ;YAAA;cAA5BJ,WAAA,GAAAE,SAAA,CAAAG,IAAA;cACN1B,aAAA,CAAAC,KAAA,CAAYC,KAAA,oCAAWmB,WAAW;cAAAE,SAAA,CAAAV,IAAA;cAAA;YAAA;cAAAU,SAAA,CAAAX,IAAA;cAAAW,SAAA,CAAAI,EAAA,GAAAJ,SAAA;cAGlCvB,aAAA,CAAAC,KAAA,CAAAC,KAAA,2BAAc,WAAAqB,SAAA,CAAAI,EAAA,CAAgB;YAAA;YAAA;cAAA,OAAAJ,SAAA,CAAAR,IAAA;UAAA;QAAA,GAAAK,QAAA;MAAA;IAIhC;EACD;AACD","ignoreList":[]}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map
index cc34b16..b0ab1c3 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map
@@ -1 +1 @@
-{"version":3,"file":"app.js","sources":["App.vue"],"sourcesContent":["\r\n\r\n"],"names":["uni","wxLogin"],"mappings":";;;;;;;;;;;;;;;;;;AAOC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,iBAAY,YAAY;AAAA,EAExB;AAAA,EACD,QAAQ,iBAAiB;AACxBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AACtB,UAAM,KAAK,UAAU;AAAA,EAErB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACtB;AAAA,EAID,SAAS;AAAA,IACR,MAAM,YAAY;AACjB,UAAI;AACH,cAAM,cAAc,MAAMC,mBAAQ;AAClCD,sBAAAA,MAAY,MAAA,OAAA,iBAAA,WAAW,WAAW;AAAA,MAEjC,SAAO,OAAO;AACfA,sBAAAA,sCAAc,WAAW,KAAK;AAAA,MAG/B;AAAA,IACD;AAAA,EACD;AACD;;;;;;;;;"}
\ No newline at end of file
+{"version":3,"file":"app.js","sources":["App.vue"],"sourcesContent":["\r\n\r\n"],"names":["uni","wxLogin"],"mappings":";;;;;;;;;;;;;;;;;;;AAOC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,iBAAY,YAAY;AAAA,EAExB;AAAA,EACD,QAAQ,iBAAiB;AACxBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AACtB,UAAM,KAAK,UAAU;AAAA,EAErB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACtB;AAAA,EAID,SAAS;AAAA,IACR,MAAM,YAAY;AACjB,UAAI;AACH,cAAM,cAAc,MAAMC,mBAAQ;AAClCD,sBAAAA,MAAY,MAAA,OAAA,iBAAA,WAAW,WAAW;AAAA,MAEjC,SAAO,OAAO;AACfA,sBAAAA,sCAAc,WAAW,KAAK;AAAA,MAG/B;AAAA,IACD;AAAA,EACD;AACD;;;;;;;;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/config/url.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/config/url.js.map
index 3dc94f6..92e8668 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/config/url.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/config/url.js.map
@@ -1 +1 @@
-{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["// export const URL = \"https://notify.gxfs123.com\"\r\nexport const URL = \"http://127.0.0.1:8080\"\r\n\r\nexport const appid = \"wx3ae63fb09936b379\""],"names":[],"mappings":";AACY,MAAC,MAAM;AAEP,MAAC,QAAQ;;;"}
\ No newline at end of file
+{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["// export const URL = \"https://unifans.gxfs123.com\"\r\nexport const URL = \"http://127.0.0.1:8080\"\r\n\r\nexport const appid = \"wxe752f45e7f7aa271\" "],"names":[],"mappings":";AACY,MAAC,MAAM;AAEP,MAAC,QAAQ;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map
index 2ffc8c6..d6f3549 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map
@@ -1 +1 @@
-{"version":3,"file":"user.js","sources":["config/user.js"],"sourcesContent":["import request from './http'\n\n\nexport const login = (data) => {\n return request({\n url: '/app/user/login',\n method: 'get',\n data\n })\n}\n\n\nexport const getMyIndexInfo = (data) => {\n return request({\n url: '/app/user/userInfo',\n method: 'get',\n data,\n })\n}\n\n//获取所有全部订单\nexport const getOrderList = (data) => {\n return request({\n url: '/app/order/list',\n method: 'get',\n data,\n hideLoading:true\n })\n}\n\n//查询是否有订单\nexport const queryHasOrder = (deviceNo) => {\n return request({\n url: `/app/order/list?deviceNo=${deviceNo}&orderStatus=in_used`,\n method: 'get',\n })\n}\n\n//设备查询\nexport const getDeviceInfo = (deviceNo) => {\n return request({\n url: `/app/device/${deviceNo}`,\n method: 'get',\n })\n}\n\n\n//创建订单\nexport const createOrder = (data) => {\n return request({\n url: '/app/order/add',\n method: 'post',\n data,\n })\n}\n\n//查询订单\nexport const queryById = (id) => {\n console.log(`查询订单详情, orderId: ${id}`)\n return request({\n url: `/app/order/${id}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n\n//取消订单\nexport const cancelOrder = (data) => {\n return request({\n url: '/orderInfo/cancelOrder',\n method: 'get',\n data,\n })\n}\n\n\n//结束订单\nexport const overOrderById = (orderId) => {\n console.log(`调用结束订单API, orderId: ${orderId}`)\n return request({\n url: `/app/order/close/${orderId}`,\n method: 'get',\n })\n}\n\n//立即租借\nexport const rentPowerBank = (deviceNo, phone) => {\n return request({\n url: '/app/device/rentPowerBank',\n method: 'post',\n data: { deviceNo, phone }\n })\n}\n\n//确认支付并弹出充电宝\nexport const confirmPaymentAndRent = (orderId) => {\n console.log(`确认支付并弹出充电宝, orderId: ${orderId}`)\n return request({\n url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`,\n method: 'post'\n })\n}\n\n//备用方法:直接发送租借指令\nexport const sendRentCommand = (orderId) => {\n console.log(`直接发送租借指令, orderId: ${orderId}`)\n return request({\n url: `/app/device/sendRentCommand?orderId=${orderId}`,\n method: 'post'\n })\n}\n\n//投诉反馈\nexport const addUserFeedback = (data) => {\n return request({\n url: '/app/feedback/add',\n method: 'post',\n data,\n })\n}\n\n//强制打开空格子\nexport const forcefOpenEmptyGrid = (deviceNo) => {\n console.log(`强制打开空格子, deviceNo: ${deviceNo}`)\n return request({\n url: `/app/device/forcef/${deviceNo}`,\n method: 'post'\n })\n}\n"],"names":["request","uni"],"mappings":";;;AAGY,MAAC,QAAQ,CAAC,SAAS;AAC3B,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,iBAAiB,CAAC,SAAS;AACpC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,eAAe,CAAC,SAAS;AAClC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,aAAY;AAAA,EACpB,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,aAAa;AACvC,SAAOA,oBAAQ;AAAA,IACX,KAAK,4BAA4B,QAAQ;AAAA,IACzC,QAAQ;AAAA,EAChB,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,aAAa;AACvC,SAAOA,oBAAQ;AAAA,IACX,KAAK,eAAe,QAAQ;AAAA,IAC5B,QAAQ;AAAA,EAChB,CAAK;AACL;AAaY,MAAC,YAAY,CAAC,OAAO;AAC7BC,gBAAA,MAAA,MAAA,OAAA,wBAAY,oBAAoB,EAAE,EAAE;AACpC,SAAOD,oBAAQ;AAAA,IACX,KAAK,cAAc,EAAE;AAAA,IACrB,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;AAuBY,MAAC,gBAAgB,CAAC,UAAU,UAAU;AAC9C,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM,EAAE,UAAU,MAAO;AAAA,EACjC,CAAK;AACL;AAGY,MAAC,wBAAwB,CAAC,YAAY;AAC9CC,gBAAY,MAAA,MAAA,OAAA,wBAAA,wBAAwB,OAAO,EAAE;AAC7C,SAAOD,oBAAQ;AAAA,IACX,KAAK,6CAA6C,OAAO;AAAA,IACzD,QAAQ;AAAA,EAChB,CAAK;AACL;AAGY,MAAC,kBAAkB,CAAC,YAAY;AACxCC,gBAAA,MAAA,MAAA,OAAA,yBAAY,sBAAsB,OAAO,EAAE;AAC3C,SAAOD,oBAAQ;AAAA,IACX,KAAK,uCAAuC,OAAO;AAAA,IACnD,QAAQ;AAAA,EAChB,CAAK;AACL;;;;;;;;;;"}
\ No newline at end of file
+{"version":3,"file":"user.js","sources":["config/user.js"],"sourcesContent":["import request from './http'\n\n\nexport const login = (data) => {\n return request({\n url: '/app/user/login',\n method: 'get',\n data\n })\n}\n\n\nexport const getMyIndexInfo = (data) => {\n return request({\n url: '/app/user/userInfo',\n method: 'get',\n data,\n })\n}\n\n// 添加押金提现API\nexport const withdrawDeposit = (orderId) => {\n console.log('调用提现API,订单ID:', orderId)\n return request({\n url: `/app/withdraw/add/${orderId}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n//获取所有全部订单\nexport const getOrderList = (data) => {\n return request({\n url: '/app/order/list',\n method: 'get',\n data,\n hideLoading:true\n })\n}\n\n//查询是否有订单\nexport const queryHasOrder = (deviceNo) => {\n return request({\n url: `/app/order/list?deviceNo=${deviceNo}&orderStatus=in_used`,\n method: 'get',\n })\n}\n\n//设备查询\nexport const getDeviceInfo = (deviceNo) => {\n return request({\n url: `/app/device/${deviceNo}`,\n method: 'get',\n })\n}\n\n\n//创建订单\nexport const createOrder = (data) => {\n return request({\n url: '/app/order/add',\n method: 'post',\n data,\n })\n}\n\n//查询订单\nexport const queryById = (id) => {\n console.log(`查询订单详情, orderId: ${id}`)\n return request({\n url: `/app/order/${id}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n\n//取消订单\nexport const cancelOrder = (data) => {\n return request({\n url: '/orderInfo/cancelOrder',\n method: 'get',\n data,\n })\n}\n\n\n//结束订单\nexport const overOrderById = (orderId) => {\n console.log(`调用结束订单API, orderId: ${orderId}`)\n return request({\n url: `/app/order/close/${orderId}`,\n method: 'get',\n })\n}\n\n//立即租借\nexport const rentPowerBank = (deviceNo, phone) => {\n return request({\n url: '/app/device/rentPowerBank',\n method: 'post',\n data: { deviceNo, phone }\n })\n}\n\n//确认支付并弹出充电宝\nexport const confirmPaymentAndRent = (orderId) => {\n console.log(`确认支付并弹出充电宝, orderId: ${orderId}`)\n return request({\n url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`,\n method: 'post'\n })\n}\n\n\n\n//投诉反馈\nexport const addUserFeedback = (data) => {\n return request({\n url: '/app/feedback/add',\n method: 'post',\n data,\n })\n}\n\n//强制打开空格子\nexport const forcefOpenEmptyGrid = (deviceNo) => {\n console.log(`强制打开空格子, deviceNo: ${deviceNo}`)\n return request({\n url: `/app/device/forcef/${deviceNo}`,\n method: 'post'\n })\n}\n"],"names":["request","uni"],"mappings":";;;AAGY,MAAC,QAAQ,CAAC,SAAS;AAC3B,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,iBAAiB,CAAC,SAAS;AACpC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,kBAAkB,CAAC,YAAY;AACxCC,gBAAAA,MAAA,MAAA,OAAA,wBAAY,iBAAiB,OAAO;AACpC,SAAOD,oBAAQ;AAAA,IACX,KAAK,qBAAqB,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;AAGY,MAAC,eAAe,CAAC,SAAS;AAClC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,aAAY;AAAA,EACpB,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,aAAa;AACvC,SAAOA,oBAAQ;AAAA,IACX,KAAK,4BAA4B,QAAQ;AAAA,IACzC,QAAQ;AAAA,EAChB,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,aAAa;AACvC,SAAOA,oBAAQ;AAAA,IACX,KAAK,eAAe,QAAQ;AAAA,IAC5B,QAAQ;AAAA,EAChB,CAAK;AACL;AAaY,MAAC,YAAY,CAAC,OAAO;AAC7BC,gBAAA,MAAA,MAAA,OAAA,wBAAY,oBAAoB,EAAE,EAAE;AACpC,SAAOD,oBAAQ;AAAA,IACX,KAAK,cAAc,EAAE;AAAA,IACrB,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;AAuBY,MAAC,gBAAgB,CAAC,UAAU,UAAU;AAC9C,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM,EAAE,UAAU,MAAO;AAAA,EACjC,CAAK;AACL;AAGY,MAAC,wBAAwB,CAAC,YAAY;AAC9CC,gBAAY,MAAA,MAAA,OAAA,yBAAA,wBAAwB,OAAO,EAAE;AAC7C,SAAOD,oBAAQ;AAAA,IACX,KAAK,6CAA6C,OAAO;AAAA,IACzD,QAAQ;AAAA,EAChB,CAAK;AACL;;;;;;;;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/deposit/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/deposit/index.js.map
index 5aa058e..f580960 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/deposit/index.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/deposit/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvZGVwb3NpdC9pbmRleC52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/deposit/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvZGVwb3NpdC9pbmRleC52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/deposit/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
index 02bfb02..d3f33f4 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvaW5kZXgvaW5kZXgudnVl"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvaW5kZXgvaW5kZXgudnVl"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map
index a3aca58..2f2fad0 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map
@@ -1 +1 @@
-{"version":3,"file":"payment.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvcGF5bWVudC52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/payment.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
+{"version":3,"file":"payment.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvcGF5bWVudC52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/payment.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/return-success.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/return-success.js.map
index 72cf303..b2640d9 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/return-success.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/return-success.js.map
@@ -1 +1 @@
-{"version":3,"file":"return-success.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvcmV0dXJuLXN1Y2Nlc3MudnVl"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/return-success.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
+{"version":3,"file":"return-success.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvcmV0dXJuLXN1Y2Nlc3MudnVl"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/return-success.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/success.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/success.js.map
index 1adb22a..0fd5323 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/success.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/success.js.map
@@ -1 +1 @@
-{"version":3,"file":"success.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvc3VjY2Vzcy52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/success.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
+{"version":3,"file":"success.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvc3VjY2Vzcy52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/success.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map
index 1bf9be4..c59aa25 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcmV0dXJuL2luZGV4LnZ1ZQ"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/return/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcmV0dXJuL2luZGV4LnZ1ZQ"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/return/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/util/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/util/index.js.map
index 11eecf4..121a63f 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/util/index.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/util/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["util/index.js"],"sourcesContent":["import {\r\n\tlogin,\r\n\tgetMyIndexInfo\r\n} from \"../config/user\"\r\n\r\n// 微信登录方法\r\nexport const wxLogin = () => {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t// 1. 获取微信登录凭证\r\n\t\tuni.login({\r\n\t\t\tprovider: 'weixin',\r\n\t\t\tsuccess: async (loginRes) => {\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (loginRes.code) {\r\n\t\t\t\t\t\t// 2. 发送 code 到后端换取 token\r\n\t\t\t\t\t\tconst result = await login({\r\n\t\t\t\t\t\t\tcode: loginRes.code,\r\n\t\t\t\t\t\t\tappid: \"wx3ae63fb09936b379\"\r\n\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\tif (result.code === 200) {\r\n\t\t\t\t\t\t\t// 3. 保存token和用户信息\r\n\r\n\t\t\t\t\t\t\tuni.setStorageSync('token', result.data.LoginWxVo.access_token)\r\n\t\t\t\t\t\t\tuni.setStorageSync('client_id', result.data.LoginWxVo.client_id)\r\n\r\n\t\t\t\t\t\t\tresolve(result.data)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthrow new Error(result.message || '登录失败')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new Error('获取微信登录凭证失败')\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (error) {\r\n\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: error.message || '登录失败',\r\n\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t})\r\n\t\t\t\t\treject(error)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfail: (error) => {\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '微信登录失败',\r\n\t\t\t\t\ticon: 'none'\r\n\t\t\t\t})\r\n\t\t\t\treject(error)\r\n\t\t\t}\r\n\t\t})\r\n\t})\r\n}\r\n\r\n// 检查登录状态\r\n// export const checkLogin = () => {\r\n// const token = uni.getStorageSync('token')\r\n// return !!token\r\n// }\r\n\r\n// 获取用户信息\r\nexport const getUserInfo = () => {\r\n\r\n\r\n\r\n\treturn new Promise(async (res, rej) => {\r\n\r\n\t\tconst result = await getMyIndexInfo({\r\n\t\t\tisHide: false,\r\n\t\t})\r\n\t\tres(result)\r\n\t})\r\n}\r\n\r\n\r\n\r\nexport const getQueryString = function (url, name) {\r\n var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')\r\n var r = url.substr(1).match(reg)\r\n if (r != null) {\r\n return r[2]\r\n }\r\n return null;\r\n}"],"names":["uni","login","getMyIndexInfo"],"mappings":";;;AAMY,MAAC,UAAU,MAAM;AAC5B,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAEvCA,kBAAAA,MAAI,MAAM;AAAA,MACT,UAAU;AAAA,MACV,SAAS,OAAO,aAAa;AAE5B,YAAI;AACH,cAAI,SAAS,MAAM;AAElB,kBAAM,SAAS,MAAMC,kBAAM;AAAA,cAC1B,MAAM,SAAS;AAAA,cACf,OAAO;AAAA,YACd,CAAO;AAED,gBAAI,OAAO,SAAS,KAAK;AAGxBD,4BAAG,MAAC,eAAe,SAAS,OAAO,KAAK,UAAU,YAAY;AAC9DA,4BAAG,MAAC,eAAe,aAAa,OAAO,KAAK,UAAU,SAAS;AAE/D,sBAAQ,OAAO,IAAI;AAAA,YAC1B,OAAa;AACN,oBAAM,IAAI,MAAM,OAAO,WAAW,MAAM;AAAA,YACxC;AAAA,UACP,OAAY;AACN,kBAAM,IAAI,MAAM,YAAY;AAAA,UAC5B;AAAA,QACD,SAAQ,OAAO;AAEfA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAO,MAAM,WAAW;AAAA,YACxB,MAAM;AAAA,UACZ,CAAM;AACD,iBAAO,KAAK;AAAA,QACZ;AAAA,MACD;AAAA,MACD,MAAM,CAAC,UAAU;AAChBA,sBAAAA,MAAI,UAAU;AAAA,UACb,OAAO;AAAA,UACP,MAAM;AAAA,QACX,CAAK;AACD,eAAO,KAAK;AAAA,MACZ;AAAA,IACJ,CAAG;AAAA,EACH,CAAE;AACF;AASY,MAAC,cAAc,MAAM;AAIhC,SAAO,IAAI,QAAQ,OAAO,KAAK,QAAQ;AAEtC,UAAM,SAAS,MAAME,2BAAe;AAAA,MACnC,QAAQ;AAAA,IACX,CAAG;AACD,QAAI,MAAM;AAAA,EACZ,CAAE;AACF;AAIY,MAAC,iBAAiB,SAAU,KAAK,MAAM;AAC/C,MAAI,MAAM,IAAI,OAAO,aAAa,OAAO,uBAAuB,GAAG;AACnE,MAAI,IAAI,IAAI,OAAO,CAAC,EAAE,MAAM,GAAG;AAC/B,MAAI,KAAK,MAAM;AACX,WAAO,EAAE,CAAC;AAAA,EACb;AACD,SAAO;AACX;;;;"}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["util/index.js"],"sourcesContent":["import {\r\n\tlogin,\r\n\tgetMyIndexInfo\r\n} from \"../config/user\"\r\n\r\n// 微信登录方法\r\nexport const wxLogin = () => {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t// 1. 获取微信登录凭证\r\n\t\tuni.login({\r\n\t\t\tprovider: 'weixin',\r\n\t\t\tsuccess: async (loginRes) => {\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (loginRes.code) {\r\n\t\t\t\t\t\t// 2. 发送 code 到后端换取 token\r\n\t\t\t\t\t\tconst result = await login({\r\n\t\t\t\t\t\t\tcode: loginRes.code,\r\n\t\t\t\t\t\t\tappid: \"wxe752f45e7f7aa271\"\r\n\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\tif (result.code === 200) {\r\n\t\t\t\t\t\t\t// 3. 保存token和用户信息\r\n\r\n\t\t\t\t\t\t\tuni.setStorageSync('token', result.data.LoginWxVo.access_token)\r\n\t\t\t\t\t\t\tuni.setStorageSync('client_id', result.data.LoginWxVo.client_id)\r\n\r\n\t\t\t\t\t\t\tresolve(result.data)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthrow new Error(result.message || '登录失败')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new Error('获取微信登录凭证失败')\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (error) {\r\n\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: error.message || '登录失败',\r\n\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t})\r\n\t\t\t\t\treject(error)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfail: (error) => {\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '微信登录失败',\r\n\t\t\t\t\ticon: 'none'\r\n\t\t\t\t})\r\n\t\t\t\treject(error)\r\n\t\t\t}\r\n\t\t})\r\n\t})\r\n}\r\n\r\n// 检查登录状态\r\n// export const checkLogin = () => {\r\n// const token = uni.getStorageSync('token')\r\n// return !!token\r\n// }\r\n\r\n// 获取用户信息\r\nexport const getUserInfo = () => {\r\n\r\n\r\n\r\n\treturn new Promise(async (res, rej) => {\r\n\r\n\t\tconst result = await getMyIndexInfo({\r\n\t\t\tisHide: false,\r\n\t\t})\r\n\t\tres(result)\r\n\t})\r\n}\r\n\r\n\r\n\r\nexport const getQueryString = function (url, name) {\r\n var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')\r\n var r = url.substr(1).match(reg)\r\n if (r != null) {\r\n return r[2]\r\n }\r\n return null;\r\n}"],"names":["uni","login","getMyIndexInfo"],"mappings":";;;AAMY,MAAC,UAAU,MAAM;AAC5B,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAEvCA,kBAAAA,MAAI,MAAM;AAAA,MACT,UAAU;AAAA,MACV,SAAS,OAAO,aAAa;AAE5B,YAAI;AACH,cAAI,SAAS,MAAM;AAElB,kBAAM,SAAS,MAAMC,kBAAM;AAAA,cAC1B,MAAM,SAAS;AAAA,cACf,OAAO;AAAA,YACd,CAAO;AAED,gBAAI,OAAO,SAAS,KAAK;AAGxBD,4BAAG,MAAC,eAAe,SAAS,OAAO,KAAK,UAAU,YAAY;AAC9DA,4BAAG,MAAC,eAAe,aAAa,OAAO,KAAK,UAAU,SAAS;AAE/D,sBAAQ,OAAO,IAAI;AAAA,YAC1B,OAAa;AACN,oBAAM,IAAI,MAAM,OAAO,WAAW,MAAM;AAAA,YACxC;AAAA,UACP,OAAY;AACN,kBAAM,IAAI,MAAM,YAAY;AAAA,UAC5B;AAAA,QACD,SAAQ,OAAO;AAEfA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAO,MAAM,WAAW;AAAA,YACxB,MAAM;AAAA,UACZ,CAAM;AACD,iBAAO,KAAK;AAAA,QACZ;AAAA,MACD;AAAA,MACD,MAAM,CAAC,UAAU;AAChBA,sBAAAA,MAAI,UAAU;AAAA,UACb,OAAO;AAAA,UACP,MAAM;AAAA,QACX,CAAK;AACD,eAAO,KAAK;AAAA,MACZ;AAAA,IACJ,CAAG;AAAA,EACH,CAAE;AACF;AASY,MAAC,cAAc,MAAM;AAIhC,SAAO,IAAI,QAAQ,OAAO,KAAK,QAAQ;AAEtC,UAAM,SAAS,MAAME,2BAAe;AAAA,MACnC,QAAQ;AAAA,IACX,CAAG;AACD,QAAI,MAAM;AAAA,EACZ,CAAE;AACF;AAIY,MAAC,iBAAiB,SAAU,KAAK,MAAM;AAC/C,MAAI,MAAM,IAAI,OAAO,aAAa,OAAO,uBAAuB,GAAG;AACnE,MAAI,IAAI,IAAI,OAAO,CAAC,EAAE,MAAM,GAAG;AAC/B,MAAI,KAAK,MAAM;AACX,WAAO,EAAE,CAAC;AAAA,EACb;AACD,SAAO;AACX;;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/utils/orderMonitor.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/orderMonitor.js.map
new file mode 100644
index 0000000..30bb43f
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/orderMonitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"orderMonitor.js","sources":["utils/orderMonitor.js"],"sourcesContent":["import { queryById } from '@/config/user.js'\r\n\r\n/**\r\n * 订单监控服务\r\n * 用于在后台监控订单状态变化,特别是归还完成状态\r\n */\r\nclass OrderMonitor {\r\n constructor() {\r\n this.activeOrders = new Map() // 存储活跃订单 Map\r\n this.timer = null\r\n this.checkInterval = 10000 // 10秒检查一次\r\n this.isRunning = false\r\n }\r\n \r\n /**\r\n * 添加订单到监控队列\r\n * @param {Object} orderData 订单数据对象,必须包含orderId字段\r\n */\r\n addOrder(orderData) {\r\n if (!orderData || !orderData.orderId) {\r\n console.error('添加订单监控失败:无效的订单数据')\r\n return\r\n }\r\n \r\n console.log('添加订单到监控队列:', orderData.orderId)\r\n this.activeOrders.set(orderData.orderId, orderData)\r\n \r\n // 如果监控服务尚未启动,则启动\r\n if (!this.isRunning) {\r\n this.start()\r\n }\r\n }\r\n \r\n /**\r\n * 移除订单的监控\r\n * @param {String} orderId 订单ID\r\n */\r\n removeOrder(orderId) {\r\n if (this.activeOrders.has(orderId)) {\r\n console.log('从监控队列移除订单:', orderId)\r\n this.activeOrders.delete(orderId)\r\n \r\n // 如果没有订单需要监控了,停止服务\r\n if (this.activeOrders.size === 0) {\r\n this.stop()\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * 启动监控服务\r\n */\r\n start() {\r\n if (this.isRunning) return\r\n \r\n console.log('启动订单监控服务')\r\n this.isRunning = true\r\n this.checkOrders()\r\n \r\n this.timer = setInterval(() => {\r\n this.checkOrders()\r\n }, this.checkInterval)\r\n }\r\n \r\n /**\r\n * 停止监控服务\r\n */\r\n stop() {\r\n if (!this.isRunning) return\r\n \r\n console.log('停止订单监控服务')\r\n this.isRunning = false\r\n \r\n if (this.timer) {\r\n clearInterval(this.timer)\r\n this.timer = null\r\n }\r\n }\r\n \r\n /**\r\n * 检查所有活跃订单的状态\r\n */\r\n async checkOrders() {\r\n if (this.activeOrders.size === 0) return\r\n \r\n console.log(`检查 ${this.activeOrders.size} 个活跃订单状态`)\r\n \r\n for (const [orderId, orderData] of this.activeOrders.entries()) {\r\n try {\r\n await this.checkOrderStatus(orderId)\r\n } catch (error) {\r\n console.error(`检查订单状态失败: ${orderId}`, error)\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * 检查单个订单的状态\r\n * @param {String} orderId 订单ID\r\n */\r\n async checkOrderStatus(orderId) {\r\n try {\r\n console.log(`检查订单 ${orderId} 的状态`)\r\n const result = await queryById(orderId)\r\n \r\n if (result.code === 200 && result.data) {\r\n const orderData = result.data\r\n \r\n // 更新本地存储的订单数据\r\n this.activeOrders.set(orderId, orderData)\r\n \r\n // 检查订单是否已完成\r\n if (orderData.orderStatus === 'used_done' || orderData.orderStatus === 'used_down') {\r\n console.log(`订单 ${orderId} 已完成!`)\r\n \r\n // 触发全局事件\r\n uni.$emit('orderCompleted', orderData)\r\n \r\n // 显示全局通知\r\n uni.showToast({\r\n title: '充电宝归还成功',\r\n icon: 'success',\r\n duration: 2000\r\n })\r\n \r\n // 播放通知声音(如果需要)\r\n const innerAudioContext = uni.createInnerAudioContext()\r\n innerAudioContext.src = '/static/audio/return_success.mp3'\r\n innerAudioContext.play()\r\n \r\n // 完成的订单不再需要监控\r\n this.removeOrder(orderId)\r\n \r\n // 如果用户不在归还页面,则显示归还成功弹窗\r\n setTimeout(() => {\r\n uni.showModal({\r\n title: '归还成功',\r\n content: '充电宝已归还成功,剩余押金将退还到您的账户',\r\n confirmText: '查看详情',\r\n success: (res) => {\r\n if (res.confirm) {\r\n // 跳转到归还成功页面查看详情\r\n uni.redirectTo({\r\n url: `/pages/order/return-success?orderId=${orderId}`\r\n })\r\n }\r\n }\r\n })\r\n }, 500)\r\n }\r\n }\r\n } catch (error) {\r\n console.error(`检查订单 ${orderId} 状态出错:`, error)\r\n }\r\n }\r\n}\r\n\r\n// 导出单例实例\r\nexport const orderMonitor = new OrderMonitor()\r\n\r\n// 页面加载时自动恢复监控上次的活跃订单(如果有)\r\nconst initOrderMonitor = () => {\r\n const lastActiveOrderId = uni.getStorageSync('activeOrderId')\r\n if (lastActiveOrderId) {\r\n const lastOrderData = { orderId: lastActiveOrderId }\r\n orderMonitor.addOrder(lastOrderData)\r\n }\r\n}\r\n\r\n// 初始化\r\ninitOrderMonitor() "],"names":["uni","queryById"],"mappings":";;;AAMA,MAAM,aAAa;AAAA,EACjB,cAAc;AACZ,SAAK,eAAe,oBAAI,IAAK;AAC7B,SAAK,QAAQ;AACb,SAAK,gBAAgB;AACrB,SAAK,YAAY;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS,WAAW;AAClB,QAAI,CAAC,aAAa,CAAC,UAAU,SAAS;AACpCA,oBAAAA,oDAAc,kBAAkB;AAChC;AAAA,IACD;AAEDA,kBAAY,MAAA,MAAA,OAAA,+BAAA,cAAc,UAAU,OAAO;AAC3C,SAAK,aAAa,IAAI,UAAU,SAAS,SAAS;AAGlD,QAAI,CAAC,KAAK,WAAW;AACnB,WAAK,MAAO;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,YAAY,SAAS;AACnB,QAAI,KAAK,aAAa,IAAI,OAAO,GAAG;AAClCA,oBAAAA,MAAA,MAAA,OAAA,+BAAY,cAAc,OAAO;AACjC,WAAK,aAAa,OAAO,OAAO;AAGhC,UAAI,KAAK,aAAa,SAAS,GAAG;AAChC,aAAK,KAAM;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ;AACN,QAAI,KAAK;AAAW;AAEpBA,kBAAAA,MAAA,MAAA,OAAA,+BAAY,UAAU;AACtB,SAAK,YAAY;AACjB,SAAK,YAAa;AAElB,SAAK,QAAQ,YAAY,MAAM;AAC7B,WAAK,YAAa;AAAA,IACxB,GAAO,KAAK,aAAa;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO;AACL,QAAI,CAAC,KAAK;AAAW;AAErBA,kBAAAA,MAAA,MAAA,OAAA,+BAAY,UAAU;AACtB,SAAK,YAAY;AAEjB,QAAI,KAAK,OAAO;AACd,oBAAc,KAAK,KAAK;AACxB,WAAK,QAAQ;AAAA,IACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKD,MAAM,cAAc;AAClB,QAAI,KAAK,aAAa,SAAS;AAAG;AAElCA,oEAAY,MAAM,KAAK,aAAa,IAAI,UAAU;AAElD,eAAW,CAAC,SAAS,SAAS,KAAK,KAAK,aAAa,WAAW;AAC9D,UAAI;AACF,cAAM,KAAK,iBAAiB,OAAO;AAAA,MACpC,SAAQ,OAAO;AACdA,4BAAA,MAAA,SAAA,+BAAc,aAAa,OAAO,IAAI,KAAK;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,MAAM,iBAAiB,SAAS;AAC9B,QAAI;AACFA,oBAAA,MAAA,MAAA,OAAA,gCAAY,QAAQ,OAAO,MAAM;AACjC,YAAM,SAAS,MAAMC,YAAS,UAAC,OAAO;AAEtC,UAAI,OAAO,SAAS,OAAO,OAAO,MAAM;AACtC,cAAM,YAAY,OAAO;AAGzB,aAAK,aAAa,IAAI,SAAS,SAAS;AAGxC,YAAI,UAAU,gBAAgB,eAAe,UAAU,gBAAgB,aAAa;AAClFD,wBAAA,MAAA,MAAA,OAAA,gCAAY,MAAM,OAAO,OAAO;AAGhCA,8BAAI,MAAM,kBAAkB,SAAS;AAGrCA,wBAAAA,MAAI,UAAU;AAAA,YACZ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,UAAU;AAAA,UACtB,CAAW;AAGD,gBAAM,oBAAoBA,cAAG,MAAC,wBAAyB;AACvD,4BAAkB,MAAM;AACxB,4BAAkB,KAAM;AAGxB,eAAK,YAAY,OAAO;AAGxB,qBAAW,MAAM;AACfA,0BAAAA,MAAI,UAAU;AAAA,cACZ,OAAO;AAAA,cACP,SAAS;AAAA,cACT,aAAa;AAAA,cACb,SAAS,CAAC,QAAQ;AAChB,oBAAI,IAAI,SAAS;AAEfA,gCAAAA,MAAI,WAAW;AAAA,oBACb,KAAK,uCAAuC,OAAO;AAAA,kBACvE,CAAmB;AAAA,gBACF;AAAA,cACF;AAAA,YACf,CAAa;AAAA,UACF,GAAE,GAAG;AAAA,QACP;AAAA,MACF;AAAA,IACF,SAAQ,OAAO;AACdA,yEAAc,QAAQ,OAAO,UAAU,KAAK;AAAA,IAC7C;AAAA,EACF;AACH;AAGY,MAAC,eAAe,IAAI,aAAc;AAG9C,MAAM,mBAAmB,MAAM;AAC7B,QAAM,oBAAoBA,cAAAA,MAAI,eAAe,eAAe;AAC5D,MAAI,mBAAmB;AACrB,UAAM,gBAAgB,EAAE,SAAS,kBAAmB;AACpD,iBAAa,SAAS,aAAa;AAAA,EACpC;AACH;AAGA,iBAAgB;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/app.js b/unpackage/dist/dev/mp-weixin/app.js
index 904a26c..9428930 100644
--- a/unpackage/dist/dev/mp-weixin/app.js
+++ b/unpackage/dist/dev/mp-weixin/app.js
@@ -2,6 +2,7 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const common_vendor = require("./common/vendor.js");
const util_index = require("./util/index.js");
+const utils_orderMonitor = require("./utils/orderMonitor.js");
if (!Math) {
"./pages/index/index.js";
"./pages/my/index.js";
@@ -40,6 +41,7 @@ const _sfc_main = {
};
function createApp() {
const app = common_vendor.createSSRApp(_sfc_main);
+ app.config.globalProperties.$orderMonitor = utils_orderMonitor.orderMonitor;
return {
app
};
diff --git a/unpackage/dist/dev/mp-weixin/common/vendor.js b/unpackage/dist/dev/mp-weixin/common/vendor.js
index 0485fac..22844b9 100644
--- a/unpackage/dist/dev/mp-weixin/common/vendor.js
+++ b/unpackage/dist/dev/mp-weixin/common/vendor.js
@@ -6009,7 +6009,7 @@ function populateParameters(fromRes, toRes) {
let _SDKVersion = SDKVersion;
const hostLanguage = (language || "").replace(/_/g, "-");
const parameters = {
- appId: "__UNI__66470C9",
+ appId: "__UNI__4630191",
appName: "fs",
appVersion: "1.0.0",
appVersionCode: "100",
@@ -6158,7 +6158,7 @@ const getAppBaseInfo = {
hostName: _hostName,
hostSDKVersion: SDKVersion,
hostTheme: theme,
- appId: "__UNI__66470C9",
+ appId: "__UNI__4630191",
appName: "fs",
appVersion: "1.0.0",
appVersionCode: "100",
@@ -6874,9 +6874,9 @@ function initOnError() {
};
}
function initRuntimeSocketService() {
- const hosts = "192.168.1.15,127.0.0.1";
+ const hosts = "10.8.0.5,192.168.1.15,127.0.0.1";
const port = "8090";
- const id = "mp-weixin_JcUW_t";
+ const id = "mp-weixin_hczUPf";
const lazy = typeof swan !== "undefined";
let restoreError = lazy ? () => {
} : initOnError();
diff --git a/unpackage/dist/dev/mp-weixin/config/url.js b/unpackage/dist/dev/mp-weixin/config/url.js
index bf2bf6e..e3cead6 100644
--- a/unpackage/dist/dev/mp-weixin/config/url.js
+++ b/unpackage/dist/dev/mp-weixin/config/url.js
@@ -1,6 +1,6 @@
"use strict";
const URL = "http://127.0.0.1:8080";
-const appid = "wx3ae63fb09936b379";
+const appid = "wxe752f45e7f7aa271";
exports.URL = URL;
exports.appid = appid;
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/url.js.map
diff --git a/unpackage/dist/dev/mp-weixin/config/user.js b/unpackage/dist/dev/mp-weixin/config/user.js
index 0bad267..a35132b 100644
--- a/unpackage/dist/dev/mp-weixin/config/user.js
+++ b/unpackage/dist/dev/mp-weixin/config/user.js
@@ -15,6 +15,14 @@ const getMyIndexInfo = (data) => {
data
});
};
+const withdrawDeposit = (orderId) => {
+ common_vendor.index.__f__("log", "at config/user.js:23", "调用提现API,订单ID:", orderId);
+ return config_http.request({
+ url: `/app/withdraw/add/${orderId}`,
+ method: "get",
+ hideLoading: true
+ });
+};
const getOrderList = (data) => {
return config_http.request({
url: "/app/order/list",
@@ -36,7 +44,7 @@ const getDeviceInfo = (deviceNo) => {
});
};
const queryById = (id) => {
- common_vendor.index.__f__("log", "at config/user.js:59", `查询订单详情, orderId: ${id}`);
+ common_vendor.index.__f__("log", "at config/user.js:69", `查询订单详情, orderId: ${id}`);
return config_http.request({
url: `/app/order/${id}`,
method: "get",
@@ -51,19 +59,12 @@ const rentPowerBank = (deviceNo, phone) => {
});
};
const confirmPaymentAndRent = (orderId) => {
- common_vendor.index.__f__("log", "at config/user.js:98", `确认支付并弹出充电宝, orderId: ${orderId}`);
+ common_vendor.index.__f__("log", "at config/user.js:108", `确认支付并弹出充电宝, orderId: ${orderId}`);
return config_http.request({
url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`,
method: "post"
});
};
-const sendRentCommand = (orderId) => {
- common_vendor.index.__f__("log", "at config/user.js:107", `直接发送租借指令, orderId: ${orderId}`);
- return config_http.request({
- url: `/app/device/sendRentCommand?orderId=${orderId}`,
- method: "post"
- });
-};
exports.confirmPaymentAndRent = confirmPaymentAndRent;
exports.getDeviceInfo = getDeviceInfo;
exports.getMyIndexInfo = getMyIndexInfo;
@@ -72,5 +73,5 @@ exports.login = login;
exports.queryById = queryById;
exports.queryHasOrder = queryHasOrder;
exports.rentPowerBank = rentPowerBank;
-exports.sendRentCommand = sendRentCommand;
+exports.withdrawDeposit = withdrawDeposit;
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/user.js.map
diff --git a/unpackage/dist/dev/mp-weixin/pages/deposit/index.js b/unpackage/dist/dev/mp-weixin/pages/deposit/index.js
index 8906d94..a0fb0a0 100644
--- a/unpackage/dist/dev/mp-weixin/pages/deposit/index.js
+++ b/unpackage/dist/dev/mp-weixin/pages/deposit/index.js
@@ -1,37 +1,143 @@
"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 {
- depositAmount: "99.00",
- records: [
- { type: "支付", time: "2024-03-20 15:30", amount: "99.00" },
- { type: "退还", time: "2024-03-19 12:00", amount: "99.00" }
- ]
+ depositAmount: "0.00",
+ orderNo: "",
+ records: [],
+ orderId: "",
+ isLoading: false
};
},
+ onLoad() {
+ },
+ onShow() {
+ this.loadUserInfo();
+ },
methods: {
- handleWithdraw() {
+ async loadUserInfo() {
+ try {
+ this.isLoading = true;
+ const res = await util_index.getUserInfo();
+ common_vendor.index.__f__("log", "at pages/deposit/index.vue:66", "loadUserInfo", res);
+ if (res.code === 200) {
+ this.depositAmount = res.data.balanceAmount || "0.00";
+ this.orderNo = res.data.latestOrderNo || "";
+ this.orderId = res.data.latestOrderId || "";
+ if (parseFloat(this.depositAmount) > 0 && !this.orderId) {
+ common_vendor.index.__f__("log", "at pages/deposit/index.vue:74", "没有latestOrderId但有余额,尝试查询订单列表");
+ const orderRes = await config_user.getOrderList({ pageNum: 1, pageSize: 10 });
+ if (orderRes.code === 200 && orderRes.data && orderRes.data.records && orderRes.data.records.length > 0) {
+ const depositOrder = orderRes.data.records.find(
+ (order) => order.depositAmount && parseFloat(order.depositAmount) > 0
+ );
+ if (depositOrder) {
+ common_vendor.index.__f__("log", "at pages/deposit/index.vue:83", "找到押金订单:", depositOrder);
+ this.orderId = depositOrder.orderId;
+ this.orderNo = depositOrder.orderNo;
+ }
+ }
+ }
+ if (parseFloat(this.depositAmount) > 0) {
+ this.records = [
+ {
+ type: "支付",
+ time: this.formatDate(/* @__PURE__ */ new Date()),
+ amount: this.depositAmount
+ }
+ ];
+ } else {
+ this.records = [];
+ }
+ }
+ } catch (error) {
+ common_vendor.index.__f__("error", "at pages/deposit/index.vue:104", "获取用户信息失败:", error);
+ common_vendor.index.showToast({
+ title: "获取用户信息失败",
+ icon: "none"
+ });
+ } finally {
+ this.isLoading = false;
+ }
+ },
+ async handleWithdraw() {
+ if (parseFloat(this.depositAmount) <= 0) {
+ common_vendor.index.showToast({
+ title: "无可提现余额",
+ icon: "none"
+ });
+ return;
+ }
+ if (!this.orderId) {
+ common_vendor.index.showToast({
+ title: "无法找到押金订单",
+ icon: "none"
+ });
+ return;
+ }
common_vendor.index.showModal({
title: "确认提现",
content: "押金将原路退回,预计0-7个工作日到账",
- success: (res) => {
+ success: async (res) => {
if (res.confirm) {
- common_vendor.index.showToast({
- title: "提现申请已提交",
- icon: "success"
+ common_vendor.index.showLoading({
+ title: "提现中..."
});
+ try {
+ common_vendor.index.__f__("log", "at pages/deposit/index.vue:140", "发起提现请求,订单ID:", this.orderId);
+ const result = await config_user.withdrawDeposit(this.orderId);
+ common_vendor.index.__f__("log", "at pages/deposit/index.vue:142", "提现响应:", result);
+ if (result.code === 200) {
+ common_vendor.index.hideLoading();
+ common_vendor.index.showToast({
+ title: "提现申请已提交",
+ icon: "success"
+ });
+ this.depositAmount = "0.00";
+ this.records.push({
+ type: "退还",
+ time: this.formatDate(/* @__PURE__ */ new Date()),
+ amount: this.depositAmount
+ });
+ setTimeout(() => {
+ this.loadUserInfo();
+ }, 1500);
+ } else {
+ throw new Error(result.msg || "提现失败");
+ }
+ } catch (error) {
+ common_vendor.index.__f__("error", "at pages/deposit/index.vue:167", "提现失败:", error);
+ common_vendor.index.hideLoading();
+ common_vendor.index.showToast({
+ title: error.message || "提现失败,请稍后再试",
+ icon: "none"
+ });
+ }
}
}
});
+ },
+ formatDate(date) {
+ const year = date.getFullYear();
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
+ const day = date.getDate().toString().padStart(2, "0");
+ const hours = date.getHours().toString().padStart(2, "0");
+ const minutes = date.getMinutes().toString().padStart(2, "0");
+ return `${year}-${month}-${day} ${hours}:${minutes}`;
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
- return {
+ return common_vendor.e({
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) => {
+ c: $data.depositAmount <= 0,
+ d: $data.records.length > 0
+ }, $data.records.length > 0 ? {
+ e: common_vendor.f($data.records, (item, index, i0) => {
return {
a: common_vendor.t(item.type),
b: common_vendor.t(item.time),
@@ -41,7 +147,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
f: index
};
})
- };
+ } : {});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-c7792057"]]);
wx.createPage(MiniProgramPage);
diff --git a/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxml b/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxml
index 08b9343..5bbf90a 100644
--- a/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxml
+++ b/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxml
@@ -1 +1 @@
-押金余额¥{{a}}提现说明1. 提现金额将原路退回支付账户2. 提现申请提交后预计0-7个工作日到账3. 如超时未收到,请联系客服处理押金记录{{item.a}}{{item.b}}{{item.c}}¥{{item.d}}
\ No newline at end of file
+押金余额¥{{a}}提现说明1. 提现金额将原路退回支付账户2. 提现申请提交后预计0-7个工作日到账3. 如超时未收到,请联系客服处理押金记录{{item.a}}{{item.b}}{{item.c}}¥{{item.d}}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxss b/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxss
index cb44d4e..e603fc1 100644
--- a/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxss
+++ b/unpackage/dist/dev/mp-weixin/pages/deposit/index.wxss
@@ -60,6 +60,10 @@
.deposit-container .deposit-card .withdraw-btn.data-v-c7792057:active {
transform: scale(0.98);
}
+.deposit-container .deposit-card .withdraw-btn[disabled].data-v-c7792057 {
+ background: rgba(255, 255, 255, 0.6);
+ color: rgba(25, 118, 210, 0.5);
+}
.deposit-container .notice-card.data-v-c7792057 {
margin-top: 30rpx;
background: #fff;
diff --git a/unpackage/dist/dev/mp-weixin/pages/index/index.js b/unpackage/dist/dev/mp-weixin/pages/index/index.js
index 8ed3da1..17b875c 100644
--- a/unpackage/dist/dev/mp-weixin/pages/index/index.js
+++ b/unpackage/dist/dev/mp-weixin/pages/index/index.js
@@ -1,6 +1,7 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const util_index = require("../../util/index.js");
+const config_url = require("../../config/url.js");
const common_assets = require("../../common/assets.js");
const _sfc_main = {
methods: {
@@ -13,8 +14,8 @@ const _sfc_main = {
});
});
let deviceNo = util_index.getQueryString(scanResult.path, "deviceNo");
- common_vendor.index.__f__("log", "at pages/index/index.vue:64", "扫码路径:", scanResult.path);
- common_vendor.index.__f__("log", "at pages/index/index.vue:65", "解析到的设备号:", deviceNo);
+ common_vendor.index.__f__("log", "at pages/index/index.vue:67", "扫码路径:", scanResult.path);
+ common_vendor.index.__f__("log", "at pages/index/index.vue:68", "解析到的设备号:", deviceNo);
if (!deviceNo) {
common_vendor.index.showToast({
title: "无效的设备二维码",
@@ -26,46 +27,46 @@ const _sfc_main = {
await util_index.wxLogin();
}
const inUseRes = await common_vendor.index.request({
- url: `${common_vendor.index.getStorageSync("baseUrl") || "http://127.0.0.1:8080"}/app/order/inUse`,
+ url: `${config_url.URL || "http://127.0.0.1:8080"}/app/order/inUse`,
method: "GET",
header: {
"Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
"Clientid": common_vendor.index.getStorageSync("client_id")
}
});
- common_vendor.index.__f__("log", "at pages/index/index.vue:90", "使用中订单检查结果:", JSON.stringify(inUseRes));
- if (inUseRes.statusCode === 200 && inUseRes.data.code === 200 && inUseRes.data.data) {
+ common_vendor.index.__f__("log", "at pages/index/index.vue:93", "使用中订单检查结果:", JSON.stringify(inUseRes));
+ if (inUseRes.statusCode == 200 && inUseRes.data.code == 200 && inUseRes.data.data) {
const inUseOrder = inUseRes.data.data;
- common_vendor.index.__f__("log", "at pages/index/index.vue:95", "检测到使用中订单,准备跳转:", inUseOrder);
+ common_vendor.index.__f__("log", "at pages/index/index.vue:98", "检测到使用中订单,准备跳转:", inUseOrder);
common_vendor.index.reLaunch({
url: `/pages/return/index?orderId=${inUseOrder.orderId}&deviceId=${deviceNo || inUseOrder.deviceNo}`
});
- common_vendor.index.__f__("log", "at pages/index/index.vue:101", "已发起页面跳转");
+ common_vendor.index.__f__("log", "at pages/index/index.vue:104", "已发起页面跳转");
return;
}
const orderRes = await common_vendor.index.request({
- url: `${common_vendor.index.getStorageSync("baseUrl") || "http://127.0.0.1:8080"}/app/order/unpaid`,
+ url: `${config_url.URL || "http://127.0.0.1:8080"}/app/order/unpaid`,
method: "GET",
header: {
"Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
"Clientid": common_vendor.index.getStorageSync("client_id")
}
});
- common_vendor.index.__f__("log", "at pages/index/index.vue:115", "待支付订单检查结果:", JSON.stringify(orderRes));
- if (orderRes.statusCode === 200 && orderRes.data.code === 200 && orderRes.data.data) {
+ common_vendor.index.__f__("log", "at pages/index/index.vue:118", "待支付订单检查结果:", JSON.stringify(orderRes));
+ if (orderRes.statusCode == 200 && orderRes.data.code == 200 && orderRes.data.data) {
const unpaidOrder = orderRes.data.data;
- common_vendor.index.__f__("log", "at pages/index/index.vue:120", "检测到待支付订单,准备跳转:", unpaidOrder);
+ common_vendor.index.__f__("log", "at pages/index/index.vue:123", "检测到待支付订单,准备跳转:", unpaidOrder);
common_vendor.index.navigateTo({
url: `/pages/order/payment?orderId=${unpaidOrder.orderId}`
});
} else {
- common_vendor.index.__f__("log", "at pages/index/index.vue:126", "无待支付订单,直接跳转到设备详情页面, deviceNo:", deviceNo);
+ common_vendor.index.__f__("log", "at pages/index/index.vue:129", "无待支付订单,直接跳转到设备详情页面, deviceNo:", deviceNo);
common_vendor.index.navigateTo({
url: `/pages/device/detail?deviceNo=${deviceNo}`
});
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/index/index.vue:132", "扫码处理失败:", error);
+ common_vendor.index.__f__("error", "at pages/index/index.vue:135", "扫码处理失败:", error);
common_vendor.index.showToast({
title: "扫码失败",
icon: "none"
diff --git a/unpackage/dist/dev/mp-weixin/pages/order/payment.js b/unpackage/dist/dev/mp-weixin/pages/order/payment.js
index 4c9ab8c..b0f92cb 100644
--- a/unpackage/dist/dev/mp-weixin/pages/order/payment.js
+++ b/unpackage/dist/dev/mp-weixin/pages/order/payment.js
@@ -1,6 +1,7 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const config_user = require("../../config/user.js");
+const config_url = require("../../config/url.js");
const _sfc_main = {
data() {
return {
@@ -14,18 +15,7 @@ const _sfc_main = {
text: "等待支付",
desc: "请在15分钟内完成支付",
class: "waiting"
- },
- paymentMethods: [
- {
- name: "微信支付",
- icon: "wechat"
- },
- {
- name: "支付宝",
- icon: "alipay"
- }
- ],
- selectedMethod: 0
+ }
};
},
computed: {
@@ -67,10 +57,21 @@ const _sfc_main = {
const res = await config_user.queryById(this.orderId);
if (res.code === 200 && res.data) {
const orderData = res.data;
+ let formattedTime;
+ try {
+ if (orderData.createTime) {
+ formattedTime = this.formatTime(new Date(orderData.createTime));
+ } else {
+ formattedTime = this.formatTime(/* @__PURE__ */ new Date());
+ }
+ } catch (e) {
+ common_vendor.index.__f__("error", "at pages/order/payment.vue:143", "时间格式化错误:", e);
+ formattedTime = this.formatTime(/* @__PURE__ */ new Date());
+ }
this.orderInfo = {
orderNo: orderData.orderNo || orderData.orderId,
deviceNo: orderData.deviceNo,
- createTime: orderData.createTime,
+ createTime: formattedTime,
phone: orderData.phone,
deposit: "99.00",
// 假设押金固定为99元
@@ -92,68 +93,36 @@ const _sfc_main = {
});
}
},
- // 选择支付方式
- selectMethod(index) {
- this.selectedMethod = index;
- },
// 处理支付
async handlePayment() {
- var _a;
try {
common_vendor.index.showLoading({
title: "处理中"
});
- common_vendor.index.__f__("log", "at pages/order/payment.vue:206", "开始处理支付,订单号:", this.orderId);
const res = await common_vendor.index.request({
- url: `${common_vendor.index.getStorageSync("baseUrl") || "http://127.0.0.1:8080"}/app/payment/${this.orderInfo.orderNo}`,
+ url: `${config_url.URL || "http://127.0.0.1:8080"}/app/wx-payment/create/${this.orderInfo.orderNo}`,
method: "GET",
header: {
"Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
"Clientid": common_vendor.index.getStorageSync("client_id")
}
});
- common_vendor.index.__f__("log", "at pages/order/payment.vue:218", "支付API返回结果:", res.data);
if (res.statusCode === 200 && res.data.code === 200) {
const payParams = res.data.data;
- common_vendor.index.__f__("log", "at pages/order/payment.vue:224", "准备调用微信支付,参数:", payParams);
- if (!payParams.timeStamp || !payParams.nonceStr || !payParams.packageValue || !payParams.paySign) {
- common_vendor.index.__f__("error", "at pages/order/payment.vue:229", "支付参数不完整:", payParams);
- throw new Error("支付参数不完整,请联系客服");
- }
- common_vendor.index.requestPayment({
- provider: "wxpay",
- timeStamp: payParams.timeStamp,
- nonceStr: payParams.nonceStr,
- package: payParams.packageValue,
- // 后端返回的是packageValue字段
- signType: payParams.signType || "MD5",
- paySign: payParams.paySign,
- success: (payRes) => {
- common_vendor.index.__f__("log", "at pages/order/payment.vue:242", "支付成功:", payRes);
- common_vendor.index.hideLoading();
+ await common_vendor.index.requestPayment({
+ ...payParams,
+ success: () => {
this.pollOrderStatus();
},
fail: (err) => {
- common_vendor.index.__f__("error", "at pages/order/payment.vue:248", "支付失败:", err);
- common_vendor.index.hideLoading();
- if (err.errMsg === "requestPayment:fail cancel") {
- common_vendor.index.__f__("log", "at pages/order/payment.vue:252", "用户取消了支付");
- return;
- }
- common_vendor.index.showToast({
- title: err.errMsg || "支付失败",
- icon: "none"
- });
- },
- complete: () => {
- common_vendor.index.__f__("log", "at pages/order/payment.vue:261", "支付流程结束");
+ common_vendor.index.__f__("error", "at pages/order/payment.vue:203", "支付失败:", err);
+ throw new Error("支付失败,请重试");
}
});
} else {
- throw new Error(((_a = res.data) == null ? void 0 : _a.msg) || "支付请求失败");
+ throw new Error(res.data.msg || "创建支付订单失败");
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/order/payment.vue:268", "支付处理错误:", error);
common_vendor.index.hideLoading();
common_vendor.index.showToast({
title: error.message || "支付失败",
@@ -161,27 +130,96 @@ const _sfc_main = {
});
}
},
+ // 发送租借指令
+ async sendRentCommand() {
+ try {
+ common_vendor.index.showLoading({
+ title: "处理中"
+ });
+ const res = await this.sendRentRequest();
+ if (res.code === 200) {
+ common_vendor.index.hideLoading();
+ common_vendor.index.showToast({
+ title: "租借成功",
+ icon: "success"
+ });
+ setTimeout(() => {
+ common_vendor.index.redirectTo({
+ url: `/pages/order/index?orderId=${this.orderId}`
+ });
+ }, 1500);
+ } else {
+ throw new Error(res.msg || "租借失败");
+ }
+ } catch (error) {
+ common_vendor.index.hideLoading();
+ common_vendor.index.showToast({
+ title: error.message || "租借失败",
+ icon: "none"
+ });
+ }
+ },
+ // 发送租借请求
+ sendRentRequest() {
+ return new Promise((resolve, reject) => {
+ common_vendor.index.request({
+ url: `${config_url.URL}/app/device/sendRentCommand`,
+ method: "POST",
+ data: {
+ orderId: this.orderId
+ },
+ header: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ "Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
+ "Clientid": common_vendor.index.getStorageSync("client_id")
+ },
+ success(res) {
+ if (res.statusCode === 200) {
+ resolve(res.data);
+ } else {
+ reject(new Error("请求失败"));
+ }
+ },
+ fail(err) {
+ reject(err);
+ }
+ });
+ });
+ },
+ // 格式化时间
+ formatTime(date) {
+ const year = date.getFullYear();
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
+ const day = date.getDate().toString().padStart(2, "0");
+ const hour = date.getHours().toString().padStart(2, "0");
+ const minute = date.getMinutes().toString().padStart(2, "0");
+ return `${year}-${month}-${day} ${hour}:${minute}`;
+ },
// 轮询订单状态
async pollOrderStatus() {
let retryCount = 0;
- const maxRetries = 30;
- const interval = 2e3;
+ const maxRetries = 10;
+ const interval = 1e3;
const checkStatus = async () => {
try {
- const res = await config_user.queryById(this.orderId);
- common_vendor.index.__f__("log", "at pages/order/payment.vue:287", "轮询订单状态结果:", res);
- if (res.code === 200 && res.data) {
- const orderData = res.data;
- if (orderData.orderStatus === "IN_USED" || orderData.orderStatus === "PAYMENT_SUCCESSFUL") {
- common_vendor.index.__f__("log", "at pages/order/payment.vue:294", "支付成功,订单状态:", orderData.orderStatus);
+ const res = await common_vendor.index.request({
+ url: `${config_url.URL || "http://127.0.0.1:8080"}/app/wx-payment/status/${this.orderInfo.orderNo}`,
+ method: "GET",
+ header: {
+ "Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
+ "Clientid": common_vendor.index.getStorageSync("client_id")
+ }
+ });
+ if (res.statusCode === 200 && res.data.code === 200) {
+ const orderData = res.data.data;
+ if (orderData.orderStatus === "in_used") {
common_vendor.index.showToast({
- title: "支付成功,充电宝已弹出",
- icon: "success",
- duration: 2e3
+ title: "支付成功",
+ icon: "success"
});
setTimeout(() => {
common_vendor.index.redirectTo({
- url: `/pages/order/success?orderId=${this.orderId}`
+ url: `/pages/order/index?orderId=${this.orderId}`
});
}, 1500);
return;
@@ -189,34 +227,15 @@ const _sfc_main = {
}
if (retryCount < maxRetries) {
retryCount++;
- common_vendor.index.__f__("log", "at pages/order/payment.vue:314", `第${retryCount}次轮询,等待订单状态更新...`);
setTimeout(checkStatus, interval);
} else {
- common_vendor.index.__f__("error", "at pages/order/payment.vue:317", "轮询订单状态超时");
- common_vendor.index.showModal({
- title: "提示",
- content: '订单状态查询超时,请在"我的订单"中查看订单状态',
- showCancel: false,
- success: function(res2) {
- if (res2.confirm) {
- common_vendor.index.redirectTo({
- url: "/pages/order/index"
- });
- }
- }
- });
+ throw new Error("订单状态查询超时");
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/order/payment.vue:332", "查询订单状态失败:", error);
- if (retryCount < maxRetries) {
- retryCount++;
- setTimeout(checkStatus, interval);
- } else {
- common_vendor.index.showToast({
- title: "查询订单状态失败",
- icon: "none"
- });
- }
+ common_vendor.index.showToast({
+ title: error.message || "查询订单状态失败",
+ icon: "none"
+ });
}
};
checkStatus();
@@ -237,18 +256,8 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
j: common_vendor.t($data.packageInfo.price),
k: common_vendor.t($data.orderInfo.amount || $data.packageInfo.price),
l: common_vendor.t($options.totalAmount),
- m: common_vendor.f($data.paymentMethods, (method, index, i0) => {
- return {
- a: common_vendor.n(method.icon),
- b: common_vendor.t(method.name),
- c: index,
- d: $data.selectedMethod === index ? 1 : "",
- e: common_vendor.o(($event) => $options.selectMethod(index), index)
- };
- }),
- n: common_vendor.t($options.totalAmount),
- o: common_vendor.o((...args) => $options.handlePayment && $options.handlePayment(...args)),
- p: common_vendor.o((...args) => _ctx.navigateBack && _ctx.navigateBack(...args))
+ m: common_vendor.t($options.totalAmount),
+ n: common_vendor.o((...args) => $options.handlePayment && $options.handlePayment(...args))
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-13c3fb22"]]);
diff --git a/unpackage/dist/dev/mp-weixin/pages/order/payment.wxml b/unpackage/dist/dev/mp-weixin/pages/order/payment.wxml
index e182bb4..ce14095 100644
--- a/unpackage/dist/dev/mp-weixin/pages/order/payment.wxml
+++ b/unpackage/dist/dev/mp-weixin/pages/order/payment.wxml
@@ -1 +1 @@
-{{b}}{{c}}订单信息订单号{{d}}设备号{{e}}创建时间{{f}}联系电话{{g}}费用信息押金¥{{h}}套餐{{i}} (¥{{j}})租借费用¥{{k}}合计¥{{l}}支付方式{{method.b}}合计:¥{{n}}返回设备详情 methods: { navigateBack() { uni.redirectTo({ url: `/pages/device/detail?deviceId=${this.deviceId}` }) } }
\ No newline at end of file
+{{b}}{{c}}订单信息订单号{{d}}设备号{{e}}创建时间{{f}}联系电话{{g}}费用信息押金¥{{h}}套餐{{i}} (¥{{j}})租借费用¥{{k}}合计¥{{l}}合计:¥{{m}}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/pages/order/payment.wxss b/unpackage/dist/dev/mp-weixin/pages/order/payment.wxss
index de36a59..ff7d13b 100644
--- a/unpackage/dist/dev/mp-weixin/pages/order/payment.wxss
+++ b/unpackage/dist/dev/mp-weixin/pages/order/payment.wxss
@@ -123,62 +123,27 @@
.payment-container .order-card .info-item.total .value.data-v-13c3fb22, .payment-container .order-card .price-item.total .value.data-v-13c3fb22, .payment-container .price-card .info-item.total .value.data-v-13c3fb22, .payment-container .price-card .price-item.total .value.data-v-13c3fb22 {
color: #FF5722;
}
-.payment-container .payment-methods.data-v-13c3fb22 {
+.payment-container .wechat-tip.data-v-13c3fb22 {
background: #fff;
border-radius: 24rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
-}
-.payment-container .payment-methods .method-item.data-v-13c3fb22 {
display: flex;
align-items: center;
- padding: 30rpx 20rpx;
- border-bottom: 1px solid #f5f5f5;
- position: relative;
}
-.payment-container .payment-methods .method-item.data-v-13c3fb22:last-child {
- border-bottom: none;
-}
-.payment-container .payment-methods .method-item.active.data-v-13c3fb22 {
- background: #F5F5F5;
-}
-.payment-container .payment-methods .method-item.active .method-check.data-v-13c3fb22 {
- background: #1976D2;
-}
-.payment-container .payment-methods .method-item.active .method-check.data-v-13c3fb22::after {
- content: "";
- position: absolute;
- left: 50%;
- top: 50%;
- transform: translate(-50%, -50%);
- width: 12rpx;
- height: 12rpx;
- background: #fff;
- border-radius: 50%;
-}
-.payment-container .payment-methods .method-item .method-icon.data-v-13c3fb22 {
+.payment-container .wechat-tip .method-icon.data-v-13c3fb22 {
width: 48rpx;
height: 48rpx;
margin-right: 20rpx;
}
-.payment-container .payment-methods .method-item .method-icon.wechat.data-v-13c3fb22 {
+.payment-container .wechat-tip .method-icon.wechat.data-v-13c3fb22 {
background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iIzA3QzE2MCIgZD0iTTkuODI3MjcyNzMsMjQgQzkuODI3MjcyNzMsMjQgOS44MjcyNzI3MywyNCA5LjgyNzI3MjczLDI0IEw5LjgyNzI3MjczLDI0IEM3LjQxNzczMTYzLDI0IDQuOTUzMTgxODIsMjMuNTMxODE4MiA0Ljk1MzE4MTgyLDIzLjUzMTgxODIgQzQuOTUzMTgxODIsMjMuNTMxODE4MiAzLDIzLjExMzYzNjQgMS41LDIyLjIyNzI3MjcgQzEuNSwyMi4yMjcyNzI3IDAuOTU0NTQ1NDU1LDIyLjA4NjM2MzYgMS4wNDMxODE4MiwyMS41NDU0NTQ1IEMxLjEzMTgxODE4LDIxLjAwNDU0NTUgMS4zNjM2MzYzNiwyMC4yNSAxLjM2MzYzNjM2LDIwLjI1IEwyLjI1LDE3LjcyNzI3MjcgQzAuNDA5MDkwOTA5LDE2LjAyMjcyNzMgMCwxNC4wNDU0NTQ1IDAsMTIuODE4MTgxOCBDMCw4LjQ1NDU0NTQ1IDQuOTA5MDkwOTEsNC45MDkwOTA5MSA5LjgyNzI3MjczLDQuOTA5MDkwOTEgQzEzLjc0NTQ1NDUsNC45MDkwOTA5MSAxNy4xODE4MTgyLDcuMTA0NTQ1NDUgMTguNTQ1NDU0NSwxMC4yMjcyNzI3IEMxOS4wOTA5MDkxLDEwLjEzMTgxODIgMTkuNjM2MzYzNiwxMC4wOTA5MDkxIDIwLjE4MTgxODIsMTAuMDkwOTA5MSBDMjQuNTQ1NDU0NSwxMC4wOTA5MDkxIDI4LjA5MDkwOTEsMTMuMTgxODE4MiAyOC4wOTA5MDkxLDE2LjkwOTA5MDkgQzI4LjA5MDkwOTEsMTguODE4MTgxOCAyNi43MjcyNzI3LDIwLjU5MDkwOTEgMjQuNzI3MjcyNywyMS43MjcyNzI3IEwyNS4zNjM2MzY0LDIzLjU5MDkwOTEgQzI1LjM2MzYzNjQsMjMuNTkwOTA5MSAyNS41LDI0LjA0NTQ1NDUgMjUuNTkwOTA5MSwyNC40MDkwOTA5IEMyNS42ODE4MTgyLDI0Ljc3MjcyNzMgMjUuMzYzNjM2NCwyNC45NTQ1NDU1IDI1LjM2MzYzNjQsMjQuOTU0NTQ1NSBDMjQuMjcyNzI3MywyNS42MzYzNjM2IDIyLjcyNzI3MjcsMjYuMDQ1NDU0NSAyMi43MjcyNzI3LDI2LjA0NTQ1NDUgQzIyLjcyNzI3MjcsMjYuMDQ1NDU0NSAyMC43MjcyNzI3LDI2LjQ1NDU0NTUgMTguNzI3MjcyNywyNi40NTQ1NDU1IEMxNi43MjcyNzI3LDI2LjQ1NDU0NTUgMTQuNzI3MjcyNywyNi4wNDU0NTQ1IDE0LjcyNzI3MjcsMjYuMDQ1NDU0NSBDMTMuNjM2MzYzNiwyNS43NzI3MjczIDEyLjU0NTQ1NDUsMjUuNDA5MDkwOSAxMS41NDU0NTQ1LDI0Ljk1NDU0NTUgQzEwLjkwOTA5MDksMjQuNjgxODE4MiAxMC4zNjM2MzY0LDI0LjM2MzYzNjQgOS44MjcyNzI3MywyNCBaIE02LjEzNjM2MzY0LDExLjMxODE4MTggQzUuMDQ1NDU0NTUsMTEuMzE4MTgxOCA0LjE4MTgxODE4LDEyLjE4MTgxODIgNC4xODE4MTgxOCwxMy4yNzI3MjczIEM0LjE4MTgxODE4LDE0LjM2MzYzNjQgNS4wNDU0NTQ1NSwxNS4yMjcyNzI3IDYuMTM2MzYzNjQsMTUuMjI3MjcyNyBDNy4yMjcyNzI3MywxNS4yMjcyNzI3IDguMDkwOTA5MDksMTQuMzYzNjM2NCA4LjA5MDkwOTA5LDEzLjI3MjcyNzMgQzguMDkwOTA5MDksMTIuMTgxODE4MiA3LjIyNzI3MjczLDExLjMxODE4MTggNi4xMzYzNjM2NCwxMS4zMTgxODE4IFogTTEzLjUsMTEuMzE4MTgxOCBDMTIuNDA5MDkwOSwxMS4zMTgxODE4IDExLjU0NTQ1NDUsMTIuMTgxODE4MiAxMS41NDU0NTQ1LDEzLjI3MjcyNzMgQzExLjU0NTQ1NDUsMTQuMzYzNjM2NCAxMi40MDkwOTA5LDE1LjIyNzI3MjcgMTMuNSwxNS4yMjcyNzI3IEMxNC41OTA5MDkxLDE1LjIyNzI3MjcgMTUuNDU0NTQ1NSwxNC4zNjM2MzY0IDE1LjQ1NDU0NTUsMTMuMjcyNzI3MyBDMTUuNDU0NTQ1NSwxMi4xODE4MTgyIDE0LjU5MDkwOTEsMTEuMzE4MTgxOCAxMy41LDExLjMxODE4MTggWiBNMjAuMTgxODE4MiwxNi41IEMxOS4wOTA5MDkxLDE2LjUgMTguMjI3MjcyNywxNy4zNjM2MzY0IDE4LjIyNzI3MjcsMTguNDU0NTQ1NSBDMTguMjI3MjcyNywxOS41NDU0NTQ1IDE5LjA5MDkwOTEsMjAuNDA5MDkwOSAyMC4xODE4MTgyLDIwLjQwOTA5MDkgQzIxLjI3MjcyNzMsMjAuNDA5MDkwOSAyMi4xMzYzNjM2LDE5LjU0NTQ1NDUgMjIuMTM2MzYzNiwxOC40NTQ1NDU1IEMyMi4xMzYzNjM2LDE3LjM2MzYzNjQgMjEuMjcyNzI3MywxNi41IDIwLjE4MTgxODIsMTYuNSBaIE0yNS41LDE2LjUgQzI0LjQwOTA5MDksMTYuNSAyMy41NDU0NTQ1LDE3LjM2MzYzNjQgMjMuNTQ1NDU0NSwxOC40NTQ1NDU1IEMyMy41NDU0NTQ1LDE5LjU0NTQ1NDUgMjQuNDA5MDkwOSwyMC40MDkwOTA5IDI1LjUsMjAuNDA5MDkwOSBDMjYuNTkwOTA5MSwyMC40MDkwOTA5IDI3LjQ1NDU0NTUsMTkuNTQ1NDU0NSAyNy40NTQ1NDU1LDE4LjQ1NDU0NTUgQzI3LjQ1NDU0NTUsMTcuMzYzNjM2NCAyNi41OTA5MDkxLDE2LjUgMjUuNSwxNi41IFoiLz48L3N2Zz4=") no-repeat center/contain;
}
-.payment-container .payment-methods .method-item .method-icon.alipay.data-v-13c3fb22 {
- background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iIzE2NzdGRiIgZD0iTTIzLjg1MzU1MzQsMTUuMTQ2NDQ2NiBDMjQuMDQ4ODE1NSwxNS4zNDE3MDg4IDI0LjA0ODgxNTUsMTUuNjU4MjkxMiAyMy44NTM1NTM0LDE1Ljg1MzU1MzQgTDE1Ljg1MzU1MzQsMjMuODUzNTUzNCBDMTUuNjU4MjkxMiwyNC4wNDg4MTU1IDE1LjM0MTcwODgsMjQuMDQ4ODE1NSAxNS4xNDY0NDY2LDIzLjg1MzU1MzQgTDAuMTQ2NDQ2NjA5LDguODUzNTUzMzkgQy0wLjA0ODgxNTUzNjUsOC42NTgyOTEyNCAtMC4wNDg4MTU1MzY1LDguMzQxNzA4NzYgMC4xNDY0NDY2MDksOC4xNDY0NDY2MSBMOC4xNDY0NDY2MSwwLjE0NjQ0NjYwOSBDOC4zNDE3MDg3NiwtMC4wNDg4MTU1MzY1IDguNjU4MjkxMjQsLTAuMDQ4ODE1NTM2NSA4Ljg1MzU1MzM5LDAuMTQ2NDQ2NjA5IEwyMy44NTM1NTM0LDE1LjE0NjQ0NjYgWiBNMTcuMDM1NTMzOSwxNy4wMzU1MzM5IEwxOS4wMzU1MzM5LDE1LjAzNTUzMzkgTDE1LjAzNTUzMzksMTEuMDM1NTMzOSBMMTMuMDM1NTMzOSwxMy4wMzU1MzM5IEwxNy4wMzU1MzM5LDE3LjAzNTUzMzkgWiBNMTEuMDM1NTMzOSwxNS4wMzU1MzM5IEwxMy4wMzU1MzM5LDE3LjAzNTUzMzkgTDkuMDM1NTMzOTEsMjEuMDM1NTMzOSBMNy4wMzU1MzM5MSwxOS4wMzU1MzM5IEwxMS4wMzU1MzM5LDE1LjAzNTUzMzkgWiBNOS4wMzU1MzM5MSw5LjAzNTUzMzkxIEwxMS4wMzU1MzM5LDExLjAzNTUzMzkgTDcuMDM1NTMzOTEsMTUuMDM1NTMzOSBMNS4wMzU1MzM5MSwxMy4wMzU1MzM5IEw5LjAzNTUzMzkxLDkuMDM1NTMzOTEgWiBNMy4wMzU1MzM5MSwxMS4wMzU1MzM5IEw1LjAzNTUzMzkxLDEzLjAzNTUzMzkgTDMuMDM1NTMzOTEsMTUuMDM1NTMzOSBMMS4wMzU1MzM5MSwxMy4wMzU1MzM5IEwzLjAzNTUzMzkxLDExLjAzNTUzMzkgWiBNMTMuMDM1NTMzOSw3LjAzNTUzMzkxIEwxNS4wMzU1MzM5LDkuMDM1NTMzOTEgTDExLjAzNTUzMzksMTMuMDM1NTMzOSBMOS4wMzU1MzM5MSwxMS4wMzU1MzM5IEwxMy4wMzU1MzM5LDcuMDM1NTMzOTEgWiBNMTcuMDM1NTMzOSwzLjAzNTUzMzkxIEwxOS4wMzU1MzM5LDUuMDM1NTMzOTEgTDE1LjAzNTUzMzksOS4wMzU1MzM5MSBMMTMuMDM1NTMzOSw3LjAzNTUzMzkxIEwxNy4wMzU1MzM5LDMuMDM1NTMzOTEgWiBNMjEuMDM1NTMzOSw3LjAzNTUzMzkxIEwyMy4wMzU1MzM5LDkuMDM1NTMzOTEgTDE5LjAzNTUzMzksMTMuMDM1NTMzOSBMMTcuMDM1NTMzOSwxMS4wMzU1MzM5IEwyMS4wMzU1MzM5LDcuMDM1NTMzOTEgWiIvPjwvc3ZnPg==") no-repeat center/contain;
-}
-.payment-container .payment-methods .method-item .method-name.data-v-13c3fb22 {
- flex: 1;
+.payment-container .wechat-tip .method-text.data-v-13c3fb22 {
font-size: 28rpx;
color: #333;
-}
-.payment-container .payment-methods .method-item .method-check.data-v-13c3fb22 {
- width: 32rpx;
- height: 32rpx;
- border-radius: 50%;
- border: 2rpx solid #ddd;
- position: relative;
+ font-weight: 500;
}
.payment-container .bottom-bar.data-v-13c3fb22 {
position: fixed;
diff --git a/unpackage/dist/dev/mp-weixin/pages/order/return-success.js b/unpackage/dist/dev/mp-weixin/pages/order/return-success.js
index 0dbe3f9..3ee6555 100644
--- a/unpackage/dist/dev/mp-weixin/pages/order/return-success.js
+++ b/unpackage/dist/dev/mp-weixin/pages/order/return-success.js
@@ -1,6 +1,7 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const config_user = require("../../config/user.js");
+const config_url = require("../../config/url.js");
const _sfc_main = {
data() {
return {
@@ -8,12 +9,13 @@ const _sfc_main = {
orderInfo: {
orderNo: "",
deviceNo: "",
- startTime: "",
usedTime: "",
currentFee: "0.00",
deposit: "99.00",
refundAmount: "99.00",
- endTime: ""
+ endTime: "",
+ withdrawStatus: "waiting",
+ isWithdrawn: false
}
};
},
@@ -23,7 +25,7 @@ const _sfc_main = {
this.loadOrderInfo();
} else {
common_vendor.index.showToast({
- title: "订单信息不存在",
+ title: "订单ID不能为空",
icon: "none"
});
setTimeout(() => {
@@ -32,76 +34,155 @@ const _sfc_main = {
}
},
methods: {
+ // 获取退款状态文本
+ getWithdrawStatusText() {
+ const statusMap = {
+ "waiting": "待申请",
+ "processing": "处理中",
+ "success": "已退款",
+ "failed": "退款失败"
+ };
+ return statusMap[this.orderInfo.withdrawStatus] || "待申请";
+ },
+ // 加载订单信息
async loadOrderInfo() {
try {
- common_vendor.index.showLoading({
- title: "加载中"
- });
- const res = await config_user.queryById(this.orderId);
- common_vendor.index.__f__("log", "at pages/order/return-success.vue:101", "归还成功页面获取的订单数据:", JSON.stringify(res.data));
- if (res.code === 200 && res.data) {
- const orderData = res.data;
- common_vendor.index.__f__("log", "at pages/order/return-success.vue:105", "订单的开始时间:", orderData.startTime);
- common_vendor.index.__f__("log", "at pages/order/return-success.vue:106", "订单的创建时间:", orderData.createTime);
- const deposit = 99;
- const fee = parseFloat(orderData.currentFee || orderData.actualDeviceAmount || orderData.payAmount || "0");
- const refundAmount = (deposit - fee).toFixed(2);
+ common_vendor.index.showLoading({ title: "加载中" });
+ const result = await config_user.queryById(this.orderId);
+ if (result.code === 200 && result.data) {
+ const orderData = result.data;
+ let packageMinutes = 60;
+ let extraMinutes = 0;
+ let usedMinutes = 0;
+ let packagePrice = "0.00";
+ let extraFee = "0.00";
+ if (orderData.remark) {
+ try {
+ const remarkInfo = orderData.remark;
+ const usedTimeMatch = remarkInfo.match(/使用时长:(\d+)分钟/);
+ if (usedTimeMatch && usedTimeMatch[1]) {
+ usedMinutes = parseInt(usedTimeMatch[1]);
+ }
+ const packageTimeMatch = remarkInfo.match(/套餐时长:(\d+)分钟/);
+ if (packageTimeMatch && packageTimeMatch[1]) {
+ packageMinutes = parseInt(packageTimeMatch[1]);
+ }
+ const extraTimeMatch = remarkInfo.match(/超出时长:(\d+)分钟/);
+ if (extraTimeMatch && extraTimeMatch[1]) {
+ extraMinutes = parseInt(extraTimeMatch[1]);
+ }
+ const packagePriceMatch = remarkInfo.match(/套餐费用:([\d.]+)元/);
+ if (packagePriceMatch && packagePriceMatch[1]) {
+ packagePrice = packagePriceMatch[1];
+ }
+ const extraFeeMatch = remarkInfo.match(/超时费用:([\d.]+)元/);
+ if (extraFeeMatch && extraFeeMatch[1]) {
+ extraFee = extraFeeMatch[1];
+ }
+ common_vendor.index.__f__("log", "at pages/order/return-success.vue:186", "从remark解析到的信息:", {
+ usedMinutes,
+ packageMinutes,
+ extraMinutes,
+ packagePrice,
+ extraFee
+ });
+ } catch (e) {
+ common_vendor.index.__f__("error", "at pages/order/return-success.vue:194", "解析remark字段失败:", e);
+ }
+ }
this.orderInfo = {
- orderNo: orderData.orderNo || orderData.orderId,
- deviceNo: orderData.deviceNo,
- startTime: orderData.startTime || orderData.createTime || "-",
- usedTime: orderData.usedTime || "-",
- currentFee: orderData.currentFee || orderData.actualDeviceAmount || orderData.payAmount || "0.00",
- deposit: deposit.toFixed(2),
- refundAmount,
- endTime: orderData.endTime || this.formatTime(/* @__PURE__ */ new Date())
+ orderNo: orderData.orderNo || "",
+ deviceNo: orderData.deviceNo || "",
+ usedTime: usedMinutes + "分钟",
+ packageTime: packageMinutes + "分钟",
+ extraTime: extraMinutes + "分钟",
+ packagePrice,
+ extraFee,
+ currentFee: orderData.actualDeviceAmount || "0.00",
+ deposit: orderData.depositAmount || "99.00",
+ refundAmount: orderData.residueAmount || "99.00",
+ endTime: orderData.endTime || "",
+ withdrawStatus: orderData.withdrawStatus || "waiting",
+ isWithdrawn: orderData.withdrawStatus === "success"
};
- common_vendor.index.__f__("log", "at pages/order/return-success.vue:124", "处理后的订单信息:", JSON.stringify(this.orderInfo));
} else {
- throw new Error("获取订单信息失败");
+ throw new Error(result.msg || "获取订单信息失败");
}
- common_vendor.index.hideLoading();
} catch (error) {
- common_vendor.index.hideLoading();
+ common_vendor.index.__f__("error", "at pages/order/return-success.vue:217", "加载订单信息错误:", error);
common_vendor.index.showToast({
title: error.message || "获取订单信息失败",
icon: "none"
});
+ } finally {
+ common_vendor.index.hideLoading();
}
},
- formatTime(date) {
- const year = date.getFullYear();
- const month = (date.getMonth() + 1).toString().padStart(2, "0");
- const day = date.getDate().toString().padStart(2, "0");
- const hour = date.getHours().toString().padStart(2, "0");
- const minute = date.getMinutes().toString().padStart(2, "0");
- const second = date.getSeconds().toString().padStart(2, "0");
- return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+ // 申请退款
+ async handleWithdraw() {
+ try {
+ common_vendor.index.showLoading({ title: "处理中" });
+ const res = await common_vendor.index.request({
+ url: `${config_url.URL || "http://127.0.0.1:8080"}/app/withdraw/add/${this.orderInfo.orderNo}`,
+ method: "GET",
+ header: {
+ "Content-Type": "application/json",
+ "Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
+ "Clientid": common_vendor.index.getStorageSync("client_id")
+ }
+ });
+ if (res.statusCode === 200 && res.data.code === 200) {
+ common_vendor.index.showToast({
+ title: "退款申请成功",
+ icon: "success"
+ });
+ this.orderInfo.withdrawStatus = "processing";
+ this.orderInfo.isWithdrawn = true;
+ setTimeout(() => {
+ this.loadOrderInfo();
+ }, 1500);
+ } else {
+ throw new Error(res.data.msg || "退款申请失败");
+ }
+ } catch (error) {
+ common_vendor.index.__f__("error", "at pages/order/return-success.vue:260", "退款申请错误:", error);
+ common_vendor.index.showToast({
+ title: error.message || "退款申请失败",
+ icon: "none"
+ });
+ } finally {
+ common_vendor.index.hideLoading();
+ }
},
+ // 返回首页
goToHome() {
- common_vendor.index.switchTab({
+ common_vendor.index.reLaunch({
url: "/pages/index/index"
});
- },
- goToOrderList() {
- common_vendor.index.redirectTo({
- url: "/pages/order/index"
- });
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
- return {
+ return common_vendor.e({
a: common_vendor.t($data.orderInfo.orderNo || "-"),
b: common_vendor.t($data.orderInfo.deviceNo || "-"),
c: common_vendor.t($data.orderInfo.usedTime || "-"),
- d: common_vendor.t($data.orderInfo.currentFee || "0.00"),
- e: common_vendor.t($data.orderInfo.endTime || "-"),
- f: common_vendor.t($data.orderInfo.deposit || "99.00"),
- g: common_vendor.t($data.orderInfo.refundAmount || "99.00"),
- h: common_vendor.o((...args) => $options.goToHome && $options.goToHome(...args)),
- i: common_vendor.o((...args) => $options.goToOrderList && $options.goToOrderList(...args))
- };
+ d: common_vendor.t($data.orderInfo.packageTime || "1小时"),
+ e: common_vendor.t($data.orderInfo.extraTime || "0分钟"),
+ f: common_vendor.t($data.orderInfo.endTime || "-"),
+ g: common_vendor.t($data.orderInfo.packagePrice || "0.00"),
+ h: common_vendor.t($data.orderInfo.extraFee || "0.00"),
+ i: common_vendor.t($data.orderInfo.currentFee || "0.00"),
+ j: common_vendor.t($data.orderInfo.deposit || "99.00"),
+ k: common_vendor.t($data.orderInfo.refundAmount || "99.00"),
+ l: common_vendor.t($options.getWithdrawStatusText()),
+ m: common_vendor.n($data.orderInfo.withdrawStatus || "waiting"),
+ n: !$data.orderInfo.isWithdrawn && $data.orderInfo.refundAmount > 0
+ }, !$data.orderInfo.isWithdrawn && $data.orderInfo.refundAmount > 0 ? {
+ o: common_vendor.o((...args) => $options.handleWithdraw && $options.handleWithdraw(...args))
+ } : {}, {
+ p: common_vendor.o((...args) => $options.goToHome && $options.goToHome(...args))
+ });
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-eb1f1ee2"]]);
wx.createPage(MiniProgramPage);
diff --git a/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxml b/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxml
index b7f5cdf..c466aab 100644
--- a/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxml
+++ b/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxml
@@ -1 +1 @@
-归还成功您的充电宝已归还,押金已退回订单信息订单号{{a}}设备号{{b}}使用时长{{c}}费用¥{{d}}归还时间{{e}}退还信息押金¥{{f}}退还金额¥{{g}}退还状态已退还
\ No newline at end of file
+归还成功您的充电宝已归还,费用已从押金中扣除订单信息订单号{{a}}设备号{{b}}使用时长{{c}}套餐时长{{d}}超出时长{{e}}归还时间{{f}}费用信息套餐费用¥{{g}}超时费用¥{{h}}总费用¥{{i}}押金¥{{j}}退还金额¥{{k}}退还状态{{l}}退款说明1. 押金剩余金额需要您手动申请提现2. 提现申请提交后将在1-3个工作日内退还到原支付账户3. 如有疑问,请联系客服
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxss b/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxss
index a7fc30c..ed9afe4 100644
--- a/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxss
+++ b/unpackage/dist/dev/mp-weixin/pages/order/return-success.wxss
@@ -110,30 +110,54 @@
color: #07c160;
}
.button-group.data-v-eb1f1ee2 {
- margin-top: 30px;
+ margin-top: 40rpx;
display: flex;
- flex-direction: column;
- gap: 16px;
+ justify-content: center;
+ gap: 20rpx;
+}
+.button-group .primary-btn.data-v-eb1f1ee2, .button-group .secondary-btn.data-v-eb1f1ee2 {
+ width: 50%;
+ height: 88rpx;
+ line-height: 88rpx;
+ border-radius: 44rpx;
+ text-align: center;
+ font-size: 32rpx;
}
.button-group .primary-btn.data-v-eb1f1ee2 {
- background-color: #07c160;
+ background: #07c160;
color: #fff;
- border: none;
- border-radius: 24px;
- padding: 12px;
- font-size: 16px;
}
.button-group .primary-btn.data-v-eb1f1ee2:active {
opacity: 0.8;
}
.button-group .secondary-btn.data-v-eb1f1ee2 {
- background-color: #fff;
- color: #07c160;
- border: 1px solid #07c160;
- border-radius: 24px;
- padding: 12px;
- font-size: 16px;
+ background: #f0f0f0;
+ color: #333;
}
.button-group .secondary-btn.data-v-eb1f1ee2:active {
- background-color: #f5f5f5;
+ opacity: 0.8;
+}
+.notice-card.data-v-eb1f1ee2 {
+ background-color: #fff;
+ border-radius: 12px;
+ padding: 20px;
+ margin-bottom: 20px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
+}
+.notice-card .card-title.data-v-eb1f1ee2 {
+ font-size: 16px;
+ font-weight: bold;
+ margin-bottom: 16px;
+ color: #333;
+ border-bottom: 1px solid #f0f0f0;
+ padding-bottom: 10px;
+}
+.notice-card .notice-content.data-v-eb1f1ee2 {
+ text-align: left;
+ color: #666;
+ font-size: 14px;
+}
+.waiting.data-v-eb1f1ee2 {
+ color: #ffaa00;
+ font-weight: bold;
}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/pages/order/success.js b/unpackage/dist/dev/mp-weixin/pages/order/success.js
index f05e875..cb0e74a 100644
--- a/unpackage/dist/dev/mp-weixin/pages/order/success.js
+++ b/unpackage/dist/dev/mp-weixin/pages/order/success.js
@@ -78,15 +78,8 @@ const _sfc_main = {
this.deviceMessage = "正在准备您的设备,请稍候...";
try {
common_vendor.index.__f__("log", "at pages/order/success.vue:139", `准备触发弹出充电宝,orderId: ${this.orderId}`);
- let result;
- try {
- result = await config_user.confirmPaymentAndRent(this.orderId);
- common_vendor.index.__f__("log", "at pages/order/success.vue:145", "确认支付并弹出充电宝结果:", JSON.stringify(result));
- } catch (error) {
- common_vendor.index.__f__("error", "at pages/order/success.vue:147", "确认支付并弹出失败,尝试备用方法:", error);
- result = await config_user.sendRentCommand(this.orderId);
- common_vendor.index.__f__("log", "at pages/order/success.vue:150", "发送租借指令结果:", JSON.stringify(result));
- }
+ const result = await config_user.confirmPaymentAndRent(this.orderId);
+ common_vendor.index.__f__("log", "at pages/order/success.vue:143", "确认支付并弹出充电宝结果:", JSON.stringify(result));
if (result && result.code === 200) {
this.deviceMessage = "设备已弹出,请取走您的充电宝";
common_vendor.index.showToast({
@@ -97,7 +90,7 @@ const _sfc_main = {
throw new Error(result && result.msg || "弹出充电宝失败");
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/order/success.vue:163", "弹出充电宝错误:", error);
+ common_vendor.index.__f__("error", "at pages/order/success.vue:155", "弹出充电宝错误:", error);
this.deviceMessage = "弹出设备失败,请联系客服";
common_vendor.index.showToast({
title: error.message || "弹出充电宝失败,请联系客服",
diff --git a/unpackage/dist/dev/mp-weixin/pages/return/index.js b/unpackage/dist/dev/mp-weixin/pages/return/index.js
index c634427..797bc24 100644
--- a/unpackage/dist/dev/mp-weixin/pages/return/index.js
+++ b/unpackage/dist/dev/mp-weixin/pages/return/index.js
@@ -1,6 +1,7 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const config_user = require("../../config/user.js");
+const config_url = require("../../config/url.js");
const _sfc_main = {
data() {
return {
@@ -25,16 +26,27 @@ const _sfc_main = {
};
},
onLoad(options) {
- common_vendor.index.__f__("log", "at pages/return/index.vue:93", "Return page loaded with options:", JSON.stringify(options));
+ common_vendor.index.__f__("log", "at pages/return/index.vue:96", "Return page loaded with options:", JSON.stringify(options));
this.orderInfo.orderId = options.orderId || "";
this.deviceId = options.deviceNo || options.deviceId || "";
- common_vendor.index.__f__("log", "at pages/return/index.vue:99", `初始化参数: orderId=${this.orderInfo.orderId}, deviceId=${this.deviceId}`);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:102", `初始化参数: orderId=${this.orderInfo.orderId}, deviceId=${this.deviceId}`);
if (!this.orderInfo.orderId && this.deviceId) {
this.getOrderByDevice();
} else if (this.orderInfo.orderId) {
this.getOrderDetails();
this.startTimer();
this.startStatusCheckTimer();
+ common_vendor.index.setStorageSync("activeOrderId", this.orderInfo.orderId);
+ try {
+ if (this.$orderMonitor) {
+ this.$orderMonitor.addOrder({ orderId: this.orderInfo.orderId });
+ common_vendor.index.__f__("log", "at pages/return/index.vue:122", "订单已添加到监控队列:", this.orderInfo.orderId);
+ } else {
+ common_vendor.index.__f__("warn", "at pages/return/index.vue:124", "$orderMonitor 未定义,无法添加订单到监控队列");
+ }
+ } catch (error) {
+ common_vendor.index.__f__("error", "at pages/return/index.vue:127", "添加订单到监控队列失败:", error);
+ }
} else {
common_vendor.index.showToast({
title: "缺少订单信息",
@@ -44,12 +56,42 @@ const _sfc_main = {
this.goToHome();
}, 1500);
}
+ common_vendor.index.$on("orderCompleted", this.handleOrderCompleted);
},
onUnload() {
this.clearTimer();
this.clearStatusCheckTimer();
+ common_vendor.index.$off("orderCompleted", this.handleOrderCompleted);
},
methods: {
+ // 处理订单完成事件(可由任何地方触发)
+ handleOrderCompleted(orderData) {
+ common_vendor.index.__f__("log", "at pages/return/index.vue:155", "收到订单完成事件:", orderData);
+ if (orderData.orderId === this.orderInfo.orderId || orderData.orderNo === this.orderInfo.orderNo) {
+ this.showReturnSuccessModal(orderData);
+ }
+ },
+ // 显示归还成功弹窗
+ showReturnSuccessModal(orderData) {
+ this.clearTimer();
+ this.clearStatusCheckTimer();
+ common_vendor.index.showModal({
+ title: "归还成功",
+ content: "充电宝已归还成功,剩余押金将退还到您的账户",
+ confirmText: "查看详情",
+ success: (res) => {
+ if (res.confirm) {
+ common_vendor.index.redirectTo({
+ url: `/pages/order/return-success?orderId=${orderData.orderId || this.orderInfo.orderId}`
+ });
+ } else {
+ common_vendor.index.reLaunch({
+ url: "/pages/index/index"
+ });
+ }
+ }
+ });
+ },
// 根据订单状态获取对应的文字显示
getOrderStatusText() {
const statusMap = {
@@ -71,32 +113,28 @@ const _sfc_main = {
if (!this.orderInfo.orderId) {
throw new Error("订单ID不能为空");
}
- common_vendor.index.__f__("log", "at pages/return/index.vue:155", "请求订单详情, orderId:", this.orderInfo.orderId);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:216", "请求订单详情, orderId:", this.orderInfo.orderId);
const result = await config_user.queryById(this.orderInfo.orderId);
- common_vendor.index.__f__("log", "at pages/return/index.vue:157", "订单详情结果:", JSON.stringify(result));
+ common_vendor.index.__f__("log", "at pages/return/index.vue:218", "订单详情结果:", JSON.stringify(result));
if (result.code === 200 && result.data) {
const orderData = result.data;
- common_vendor.index.__f__("log", "at pages/return/index.vue:161", "订单原始数据:", orderData);
- common_vendor.index.__f__("log", "at pages/return/index.vue:162", "开始时间字段:", orderData.startTime, typeof orderData.startTime);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:222", "订单原始数据:", orderData);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:223", "开始时间字段:", orderData.startTime, typeof orderData.startTime);
if (orderData.orderStatus) {
this.orderInfo.orderStatus = orderData.orderStatus;
}
- if (orderData.orderStatus && orderData.orderStatus === "used_down") {
- this.clearTimer();
- this.clearStatusCheckTimer();
- common_vendor.index.__f__("log", "at pages/return/index.vue:176", "订单已完成,准备跳转到归还成功页面");
- common_vendor.index.redirectTo({
- url: `/pages/order/return-success?orderId=${this.orderInfo.orderId}`
- });
+ if (orderData.orderStatus && (orderData.orderStatus === "used_done" || orderData.orderStatus === "used_down")) {
+ common_vendor.index.$emit("orderCompleted", orderData);
+ this.showReturnSuccessModal(orderData);
return;
}
this.updateOrderInfo(orderData);
- common_vendor.index.__f__("log", "at pages/return/index.vue:187", "更新后的开始时间:", this.orderInfo.startTime);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:245", "更新后的开始时间:", this.orderInfo.startTime);
} else {
throw new Error(result.msg || "获取订单详情失败");
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/return/index.vue:192", "获取订单详情错误:", error);
+ common_vendor.index.__f__("error", "at pages/return/index.vue:250", "获取订单详情错误:", error);
common_vendor.index.showToast({
title: error.message || "获取订单信息失败",
icon: "none"
@@ -119,7 +157,7 @@ const _sfc_main = {
},
// 使用后端返回的使用时长和费用数据
updateOrderInfo(orderData) {
- common_vendor.index.__f__("log", "at pages/return/index.vue:220", "更新订单信息:", JSON.stringify(orderData));
+ common_vendor.index.__f__("log", "at pages/return/index.vue:278", "更新订单信息:", JSON.stringify(orderData));
this.orderInfo.usedTime = orderData.usedTime || "0分钟";
this.orderInfo.currentFee = orderData.currentFee || orderData.actualDeviceAmount || orderData.payAmount || "0.00";
if (orderData.orderStatus) {
@@ -128,16 +166,16 @@ const _sfc_main = {
this.orderInfo._rawStartTime = orderData.startTime;
if (orderData.startTime) {
try {
- common_vendor.index.__f__("log", "at pages/return/index.vue:239", "API返回的开始时间:", orderData.startTime);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:297", "API返回的开始时间:", orderData.startTime);
this.orderInfo.startTime = orderData.startTime;
} catch (e) {
- common_vendor.index.__f__("error", "at pages/return/index.vue:243", "更新开始时间错误:", e);
+ common_vendor.index.__f__("error", "at pages/return/index.vue:301", "更新开始时间错误:", e);
this.orderInfo.startTime = "未知";
}
} else {
- common_vendor.index.__f__("warn", "at pages/return/index.vue:247", "API返回的订单数据中没有startTime字段");
+ common_vendor.index.__f__("warn", "at pages/return/index.vue:305", "API返回的订单数据中没有startTime字段");
if (orderData.createTime) {
- common_vendor.index.__f__("log", "at pages/return/index.vue:250", "使用createTime作为备选:", orderData.createTime);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:308", "使用createTime作为备选:", orderData.createTime);
this.orderInfo.startTime = orderData.createTime;
} else {
this.orderInfo.startTime = "未知";
@@ -192,23 +230,23 @@ const _sfc_main = {
throw new Error("设备号不能为空");
}
const inUseRes = await common_vendor.index.request({
- url: `${common_vendor.index.getStorageSync("baseUrl") || "http://127.0.0.1:8080"}/app/order/inUse`,
+ url: `${config_url.URL || "http://127.0.0.1:8080"}/app/order/inUse`,
method: "GET",
header: {
"Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
"Clientid": common_vendor.index.getStorageSync("client_id")
}
});
- common_vendor.index.__f__("log", "at pages/return/index.vue:329", "通过设备号查询订单结果:", JSON.stringify(inUseRes));
+ common_vendor.index.__f__("log", "at pages/return/index.vue:387", "通过设备号查询订单结果:", JSON.stringify(inUseRes));
if (inUseRes.statusCode === 200 && inUseRes.data.code === 200 && inUseRes.data.data) {
const inUseOrder = inUseRes.data.data;
- common_vendor.index.__f__("log", "at pages/return/index.vue:333", "使用中的订单:", inUseOrder);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:391", "使用中的订单:", inUseOrder);
this.orderInfo.orderId = inUseOrder.orderId;
if (inUseOrder.orderStatus) {
this.orderInfo.orderStatus = inUseOrder.orderStatus;
}
if (inUseOrder.startTime) {
- common_vendor.index.__f__("log", "at pages/return/index.vue:345", "inUse API返回的开始时间:", inUseOrder.startTime);
+ common_vendor.index.__f__("log", "at pages/return/index.vue:403", "inUse API返回的开始时间:", inUseOrder.startTime);
this.orderInfo.startTime = inUseOrder.startTime;
}
this.getOrderDetails();
@@ -218,7 +256,7 @@ const _sfc_main = {
throw new Error("未找到使用中的订单");
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/return/index.vue:359", "通过设备号查询订单失败:", error);
+ common_vendor.index.__f__("error", "at pages/return/index.vue:417", "通过设备号查询订单失败:", error);
common_vendor.index.showToast({
title: error.message || "获取订单信息失败",
icon: "none"
@@ -235,7 +273,7 @@ const _sfc_main = {
try {
await this.getOrderDetails();
} catch (error) {
- common_vendor.index.__f__("error", "at pages/return/index.vue:379", "检查归还状态失败:", error);
+ common_vendor.index.__f__("error", "at pages/return/index.vue:437", "检查归还状态失败:", error);
}
},
// 返回首页
diff --git a/unpackage/dist/dev/mp-weixin/project.config.json b/unpackage/dist/dev/mp-weixin/project.config.json
index de802a9..25d8be2 100644
--- a/unpackage/dist/dev/mp-weixin/project.config.json
+++ b/unpackage/dist/dev/mp-weixin/project.config.json
@@ -19,7 +19,7 @@
},
"compileType": "miniprogram",
"libVersion": "3.8.0",
- "appid": "wx3ae63fb09936b379",
+ "appid": "wxe752f45e7f7aa271",
"projectname": "fs",
"condition": {},
"editorSetting": {
diff --git a/unpackage/dist/dev/mp-weixin/util/index.js b/unpackage/dist/dev/mp-weixin/util/index.js
index 0b9228b..3fa62c4 100644
--- a/unpackage/dist/dev/mp-weixin/util/index.js
+++ b/unpackage/dist/dev/mp-weixin/util/index.js
@@ -10,7 +10,7 @@ const wxLogin = () => {
if (loginRes.code) {
const result = await config_user.login({
code: loginRes.code,
- appid: "wx3ae63fb09936b379"
+ appid: "wxe752f45e7f7aa271"
});
if (result.code === 200) {
common_vendor.index.setStorageSync("token", result.data.LoginWxVo.access_token);
diff --git a/unpackage/dist/dev/mp-weixin/utils/orderMonitor.js b/unpackage/dist/dev/mp-weixin/utils/orderMonitor.js
new file mode 100644
index 0000000..c2d2eef
--- /dev/null
+++ b/unpackage/dist/dev/mp-weixin/utils/orderMonitor.js
@@ -0,0 +1,134 @@
+"use strict";
+const common_vendor = require("../common/vendor.js");
+const config_user = require("../config/user.js");
+class OrderMonitor {
+ constructor() {
+ this.activeOrders = /* @__PURE__ */ new Map();
+ this.timer = null;
+ this.checkInterval = 1e4;
+ this.isRunning = false;
+ }
+ /**
+ * 添加订单到监控队列
+ * @param {Object} orderData 订单数据对象,必须包含orderId字段
+ */
+ addOrder(orderData) {
+ if (!orderData || !orderData.orderId) {
+ common_vendor.index.__f__("error", "at utils/orderMonitor.js:21", "添加订单监控失败:无效的订单数据");
+ return;
+ }
+ common_vendor.index.__f__("log", "at utils/orderMonitor.js:25", "添加订单到监控队列:", orderData.orderId);
+ this.activeOrders.set(orderData.orderId, orderData);
+ if (!this.isRunning) {
+ this.start();
+ }
+ }
+ /**
+ * 移除订单的监控
+ * @param {String} orderId 订单ID
+ */
+ removeOrder(orderId) {
+ if (this.activeOrders.has(orderId)) {
+ common_vendor.index.__f__("log", "at utils/orderMonitor.js:40", "从监控队列移除订单:", orderId);
+ this.activeOrders.delete(orderId);
+ if (this.activeOrders.size === 0) {
+ this.stop();
+ }
+ }
+ }
+ /**
+ * 启动监控服务
+ */
+ start() {
+ if (this.isRunning)
+ return;
+ common_vendor.index.__f__("log", "at utils/orderMonitor.js:56", "启动订单监控服务");
+ this.isRunning = true;
+ this.checkOrders();
+ this.timer = setInterval(() => {
+ this.checkOrders();
+ }, this.checkInterval);
+ }
+ /**
+ * 停止监控服务
+ */
+ stop() {
+ if (!this.isRunning)
+ return;
+ common_vendor.index.__f__("log", "at utils/orderMonitor.js:71", "停止订单监控服务");
+ this.isRunning = false;
+ if (this.timer) {
+ clearInterval(this.timer);
+ this.timer = null;
+ }
+ }
+ /**
+ * 检查所有活跃订单的状态
+ */
+ async checkOrders() {
+ if (this.activeOrders.size === 0)
+ return;
+ common_vendor.index.__f__("log", "at utils/orderMonitor.js:86", `检查 ${this.activeOrders.size} 个活跃订单状态`);
+ for (const [orderId, orderData] of this.activeOrders.entries()) {
+ try {
+ await this.checkOrderStatus(orderId);
+ } catch (error) {
+ common_vendor.index.__f__("error", "at utils/orderMonitor.js:92", `检查订单状态失败: ${orderId}`, error);
+ }
+ }
+ }
+ /**
+ * 检查单个订单的状态
+ * @param {String} orderId 订单ID
+ */
+ async checkOrderStatus(orderId) {
+ try {
+ common_vendor.index.__f__("log", "at utils/orderMonitor.js:103", `检查订单 ${orderId} 的状态`);
+ const result = await config_user.queryById(orderId);
+ if (result.code === 200 && result.data) {
+ const orderData = result.data;
+ this.activeOrders.set(orderId, orderData);
+ if (orderData.orderStatus === "used_done" || orderData.orderStatus === "used_down") {
+ common_vendor.index.__f__("log", "at utils/orderMonitor.js:114", `订单 ${orderId} 已完成!`);
+ common_vendor.index.$emit("orderCompleted", orderData);
+ common_vendor.index.showToast({
+ title: "充电宝归还成功",
+ icon: "success",
+ duration: 2e3
+ });
+ const innerAudioContext = common_vendor.index.createInnerAudioContext();
+ innerAudioContext.src = "/static/audio/return_success.mp3";
+ innerAudioContext.play();
+ this.removeOrder(orderId);
+ setTimeout(() => {
+ common_vendor.index.showModal({
+ title: "归还成功",
+ content: "充电宝已归还成功,剩余押金将退还到您的账户",
+ confirmText: "查看详情",
+ success: (res) => {
+ if (res.confirm) {
+ common_vendor.index.redirectTo({
+ url: `/pages/order/return-success?orderId=${orderId}`
+ });
+ }
+ }
+ });
+ }, 500);
+ }
+ }
+ } catch (error) {
+ common_vendor.index.__f__("error", "at utils/orderMonitor.js:153", `检查订单 ${orderId} 状态出错:`, error);
+ }
+ }
+}
+const orderMonitor = new OrderMonitor();
+const initOrderMonitor = () => {
+ const lastActiveOrderId = common_vendor.index.getStorageSync("activeOrderId");
+ if (lastActiveOrderId) {
+ const lastOrderData = { orderId: lastActiveOrderId };
+ orderMonitor.addOrder(lastOrderData);
+ }
+};
+initOrderMonitor();
+exports.orderMonitor = orderMonitor;
+//# sourceMappingURL=../../.sourcemap/mp-weixin/utils/orderMonitor.js.map
diff --git a/util/index.js b/util/index.js
index 69ac646..02c1f67 100644
--- a/util/index.js
+++ b/util/index.js
@@ -16,7 +16,7 @@ export const wxLogin = () => {
// 2. 发送 code 到后端换取 token
const result = await login({
code: loginRes.code,
- appid: "wx3ae63fb09936b379"
+ appid: "wxe752f45e7f7aa271"
})
if (result.code === 200) {
diff --git a/utils/orderMonitor.js b/utils/orderMonitor.js
new file mode 100644
index 0000000..a8c993b
--- /dev/null
+++ b/utils/orderMonitor.js
@@ -0,0 +1,171 @@
+import { queryById } from '@/config/user.js'
+
+/**
+ * 订单监控服务
+ * 用于在后台监控订单状态变化,特别是归还完成状态
+ */
+class OrderMonitor {
+ constructor() {
+ this.activeOrders = new Map() // 存储活跃订单 Map
+ this.timer = null
+ this.checkInterval = 10000 // 10秒检查一次
+ this.isRunning = false
+ }
+
+ /**
+ * 添加订单到监控队列
+ * @param {Object} orderData 订单数据对象,必须包含orderId字段
+ */
+ addOrder(orderData) {
+ if (!orderData || !orderData.orderId) {
+ console.error('添加订单监控失败:无效的订单数据')
+ return
+ }
+
+ console.log('添加订单到监控队列:', orderData.orderId)
+ this.activeOrders.set(orderData.orderId, orderData)
+
+ // 如果监控服务尚未启动,则启动
+ if (!this.isRunning) {
+ this.start()
+ }
+ }
+
+ /**
+ * 移除订单的监控
+ * @param {String} orderId 订单ID
+ */
+ removeOrder(orderId) {
+ if (this.activeOrders.has(orderId)) {
+ console.log('从监控队列移除订单:', orderId)
+ this.activeOrders.delete(orderId)
+
+ // 如果没有订单需要监控了,停止服务
+ if (this.activeOrders.size === 0) {
+ this.stop()
+ }
+ }
+ }
+
+ /**
+ * 启动监控服务
+ */
+ start() {
+ if (this.isRunning) return
+
+ console.log('启动订单监控服务')
+ this.isRunning = true
+ this.checkOrders()
+
+ this.timer = setInterval(() => {
+ this.checkOrders()
+ }, this.checkInterval)
+ }
+
+ /**
+ * 停止监控服务
+ */
+ stop() {
+ if (!this.isRunning) return
+
+ console.log('停止订单监控服务')
+ this.isRunning = false
+
+ if (this.timer) {
+ clearInterval(this.timer)
+ this.timer = null
+ }
+ }
+
+ /**
+ * 检查所有活跃订单的状态
+ */
+ async checkOrders() {
+ if (this.activeOrders.size === 0) return
+
+ console.log(`检查 ${this.activeOrders.size} 个活跃订单状态`)
+
+ for (const [orderId, orderData] of this.activeOrders.entries()) {
+ try {
+ await this.checkOrderStatus(orderId)
+ } catch (error) {
+ console.error(`检查订单状态失败: ${orderId}`, error)
+ }
+ }
+ }
+
+ /**
+ * 检查单个订单的状态
+ * @param {String} orderId 订单ID
+ */
+ async checkOrderStatus(orderId) {
+ try {
+ console.log(`检查订单 ${orderId} 的状态`)
+ const result = await queryById(orderId)
+
+ if (result.code === 200 && result.data) {
+ const orderData = result.data
+
+ // 更新本地存储的订单数据
+ this.activeOrders.set(orderId, orderData)
+
+ // 检查订单是否已完成
+ if (orderData.orderStatus === 'used_done' || orderData.orderStatus === 'used_down') {
+ console.log(`订单 ${orderId} 已完成!`)
+
+ // 触发全局事件
+ uni.$emit('orderCompleted', orderData)
+
+ // 显示全局通知
+ uni.showToast({
+ title: '充电宝归还成功',
+ icon: 'success',
+ duration: 2000
+ })
+
+ // 播放通知声音(如果需要)
+ const innerAudioContext = uni.createInnerAudioContext()
+ innerAudioContext.src = '/static/audio/return_success.mp3'
+ innerAudioContext.play()
+
+ // 完成的订单不再需要监控
+ this.removeOrder(orderId)
+
+ // 如果用户不在归还页面,则显示归还成功弹窗
+ setTimeout(() => {
+ uni.showModal({
+ title: '归还成功',
+ content: '充电宝已归还成功,剩余押金将退还到您的账户',
+ confirmText: '查看详情',
+ success: (res) => {
+ if (res.confirm) {
+ // 跳转到归还成功页面查看详情
+ uni.redirectTo({
+ url: `/pages/order/return-success?orderId=${orderId}`
+ })
+ }
+ }
+ })
+ }, 500)
+ }
+ }
+ } catch (error) {
+ console.error(`检查订单 ${orderId} 状态出错:`, error)
+ }
+ }
+}
+
+// 导出单例实例
+export const orderMonitor = new OrderMonitor()
+
+// 页面加载时自动恢复监控上次的活跃订单(如果有)
+const initOrderMonitor = () => {
+ const lastActiveOrderId = uni.getStorageSync('activeOrderId')
+ if (lastActiveOrderId) {
+ const lastOrderData = { orderId: lastActiveOrderId }
+ orderMonitor.addOrder(lastOrderData)
+ }
+}
+
+// 初始化
+initOrderMonitor()
\ No newline at end of file