diff --git a/config/url.js b/config/url.js
index 64212cb..6bbc572 100644
--- a/config/url.js
+++ b/config/url.js
@@ -1,5 +1,5 @@
// export const URL = "https://my.gxfs123.com/api" //正式服务器
export const URL = "https://unifans.gxfs123.com/api" //测试服务器
-// export const URL = "http://192.168.10.70:8080" //本地调试
+// export const URL = "http://192.168.10.3:8080" //本地调试
export const appid = "wx2165f0be356ae7a9" //小程序appid
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index 9173d92..3b03061 100644
--- a/manifest.json
+++ b/manifest.json
@@ -54,7 +54,13 @@
"setting" : {
"urlCheck" : false
},
- "usingComponents" : true
+ "usingComponents" : true,
+ // "requiredPrivateInfos" : [ "getPhoneNumber" ],
+ "permission" : {
+ "scope.getPhoneNumber" : {
+ "desc" : "您的手机号将用于登录和订单服务"
+ }
+ }
},
"mp-alipay" : {
"usingComponents" : true
diff --git a/pages/device/detail.vue b/pages/device/detail.vue
index 8da0bb4..b62955c 100644
--- a/pages/device/detail.vue
+++ b/pages/device/detail.vue
@@ -126,6 +126,27 @@
@click="handleRent('wx-pay')">
无法免押点这里>
+
+
+
@@ -151,7 +172,9 @@
URL
} from "@/config/url.js"
import {
- initiateWeChatScorePayment
+ initiateWeChatScorePayment,
+ getUserInfo,
+ getUserPhoneNumber
} from '@/util/index.js'
// 响应式状态
@@ -166,7 +189,8 @@
})
const isLoggedIn = ref(true)
const phoneNumber = ref('')
-
+ const showPhoneAuthPopup = ref(false)
+
// 生命周期 onLoad 钩子
onLoad((options) => {
deviceId.value = options.deviceNo
@@ -174,6 +198,116 @@
console.log(options.deviceNo)
fetchDeviceInfo()
})
+
+ onMounted(()=>{
+ checkUserPhone()
+ })
+
+ const checkUserPhone = async () => {
+ try {
+ const userInfoRes = await getUserInfo()
+ console.log(userInfoRes.data.phone, 'getUserInfoPhone')
+
+ if (userInfoRes.code == 200 && userInfoRes.data && userInfoRes.data.phone) {
+ phoneNumber.value = userInfoRes.data.phone
+ } else {
+ // 如果没有手机号,显示授权弹窗
+ showPhoneAuthPopup.value = true
+ }
+ } catch (error) {
+ console.error('获取用户信息失败:', error)
+ }
+ }
+
+ // 处理获取手机号
+ const onGetPhoneNumber = (e) => {
+ console.log('getPhoneNumber event:', e.detail)
+
+ // 用户拒绝授权的情况
+ if (e.detail.errMsg && e.detail.errMsg.includes('deny')) {
+ uni.showToast({
+ title: '需要授权手机号才能使用设备',
+ icon: 'none'
+ })
+ return
+ }
+
+ // 获取到授权code
+ if (e.detail.code) {
+ uni.showLoading({
+ title: '获取中...'
+ })
+
+ console.log('获取到的授权code:', e.detail.code)
+
+ // 添加 try-catch 以捕获任何 Promise 外部的错误
+ try {
+ getUserPhoneNumber(e.detail.code)
+ .then(res => {
+ console.log('获取手机号API响应原始数据:', JSON.stringify(res))
+ uni.hideLoading()
+
+ // 不立即抛出错误,而是记录问题并继续处理
+ if (!res) {
+ console.error('API返回数据为空')
+ uni.showModal({
+ title: '数据异常',
+ content: 'API返回为空',
+ showCancel: false
+ })
+ return
+ }
+
+ // 检查响应格式
+ console.log('响应code:', res.code, '响应类型:', typeof res.code)
+ console.log('是否有data:', !!res.data, '是否有phone:', res.data && !!res.data.phone)
+
+ if (res.code == 200 && res.data && res.data.phoneNumber) {
+ phoneNumber.value = res.data.phoneNumber
+ showPhoneAuthPopup.value = false
+
+ uni.showToast({
+ title: '手机号获取成功',
+ icon: 'success'
+ })
+ } else {
+ // 记录详细信息,不抛出错误
+ console.warn('获取手机号响应异常:', res.msg || '未知错误')
+ uni.showModal({
+ title: '获取手机号异常',
+ content: `状态码: ${res.code}, 消息: ${res.msg || '无'}`,
+ showCancel: false
+ })
+ }
+ })
+ .catch(err => {
+ uni.hideLoading()
+ console.error('获取手机号码失败(catch):', err)
+
+ // 显示更详细的错误信息
+ let errMsg = err.message || err.toString()
+ uni.showModal({
+ title: '获取手机号失败',
+ content: '错误信息: ' + errMsg,
+ showCancel: false
+ })
+ })
+ } catch (outerError) {
+ uni.hideLoading()
+ console.error('获取手机号外部错误:', outerError)
+ uni.showModal({
+ title: '意外错误',
+ content: '处理过程发生异常: ' + (outerError.message || outerError),
+ showCancel: false
+ })
+ }
+ } else {
+ uni.showToast({
+ title: '获取授权码失败',
+ icon: 'none'
+ })
+ }
+ }
// 检查登录状态和订单
const fetchDeviceInfo = async () => {
@@ -253,9 +387,15 @@
showLoginTip()
return
}
+
+ // 检查是否有手机号,如果没有则提示授权
+ if (!phoneNumber.value) {
+ showPhoneAuthPopup.value = true
+ return
+ }
- // 直接提交订单,不显示确认对话框
- submitRentOrder(payWay);
+ // 提交订单
+ submitRentOrder(payWay)
}
const selectedPkg = reactive({
@@ -761,4 +901,106 @@
}
}
}
+
+ /* 手机号授权弹窗样式 */
+ .phone-auth-popup {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 1000;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: rgba(0, 0, 0, 0.5);
+ }
+
+ .popup-mask {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ .popup-content {
+ background-color: #fff;
+ border-radius: 24rpx;
+ box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.15);
+ width: 90%;
+ max-width: 500rpx;
+ padding: 40rpx 30rpx;
+ position: relative;
+ z-index: 1001;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .popup-header {
+ margin-bottom: 30rpx;
+ text-align: center;
+ }
+
+ .popup-title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+ }
+
+ .popup-body {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 30rpx;
+ }
+
+ .auth-desc {
+ font-size: 28rpx;
+ color: #666;
+ text-align: center;
+ margin-bottom: 30rpx;
+ line-height: 1.6;
+ }
+
+ .auth-btn {
+ width: 100%;
+ height: 92rpx;
+ border-radius: 46rpx;
+ background: linear-gradient(135deg, #07c160, #10d673);
+ color: #fff;
+ font-size: 32rpx;
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: none;
+ margin-bottom: 20rpx;
+
+ &:active {
+ transform: scale(0.98);
+ opacity: 0.9;
+ }
+ }
+
+ .auth-cancel {
+ width: 100%;
+ height: 92rpx;
+ border-radius: 46rpx;
+ background-color: #f5f7fa;
+ color: #333;
+ font-size: 32rpx;
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: none;
+
+ &:active {
+ transform: scale(0.98);
+ opacity: 0.9;
+ }
+ }
\ No newline at end of file
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 1e5a9b0..a65d749 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -104,6 +104,27 @@
+
+
+
@@ -131,8 +152,6 @@
console.log(scanResult.path);
let deviceNo = getQueryString(scanResult.path, 'deviceNo')
- console.log('扫码路径:', scanResult.path)
- console.log('解析到的设备号:', deviceNo)
if (!deviceNo) {
uni.showToast({
@@ -144,7 +163,7 @@
// 直接在当前页面查询是否有使用中的订单,避免跳转到中间页面
if (!uni.getStorageSync('token')) {
- await wxLogin()
+ await wxLogin()
}
// 检查是否有使用中的订单
@@ -157,13 +176,10 @@
}
})
- console.log('使用中订单检查结果:', JSON.stringify(inUseRes))
-
if (inUseRes.statusCode == 200 && inUseRes.data.code == 200 && inUseRes.data.data) {
// 存在使用中的订单,跳转到归还页面
const inUseOrder = inUseRes.data.data
- console.log('检测到使用中订单,准备跳转:', inUseOrder)
-
+
// 直接使用reLaunch而不是navigateTo以确保页面跳转
uni.reLaunch({
url: `/pages/return/index?orderId=${inUseOrder.orderId}&deviceId=${deviceNo || inUseOrder.deviceNo}`
@@ -187,14 +203,10 @@
if (orderRes.statusCode == 200 && orderRes.data.code == 200 && orderRes.data.data) {
// 存在待支付订单,跳转到支付页面
const unpaidOrder = orderRes.data.data
- console.log('检测到待支付订单,准备跳转:', unpaidOrder)
uni.navigateTo({
url: `/pages/order/payment?orderId=${unpaidOrder.orderId}`
})
} else {
- // 修改:直接获取设备信息,而不是跳转到详情页面
- console.log('无待支付订单,获取设备信息, deviceNo:', deviceNo)
-
try {
// 获取设备信息
const deviceInfoRes = await getDeviceInfo(deviceNo)
diff --git a/unpackage/dist/build/mp-weixin/app.json b/unpackage/dist/build/mp-weixin/app.json
index 9888174..a54a622 100644
--- a/unpackage/dist/build/mp-weixin/app.json
+++ b/unpackage/dist/build/mp-weixin/app.json
@@ -39,5 +39,10 @@
}
]
},
+ "permission": {
+ "scope.getPhoneNumber": {
+ "desc": "您的手机号将用于登录和订单服务"
+ }
+ },
"usingComponents": {}
}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/device/detail.js b/unpackage/dist/build/mp-weixin/pages/device/detail.js
index 6272934..11c27c9 100644
--- a/unpackage/dist/build/mp-weixin/pages/device/detail.js
+++ b/unpackage/dist/build/mp-weixin/pages/device/detail.js
@@ -1 +1 @@
-"use strict";const e=require("../../common/vendor.js"),a=require("../../common/assets.js"),t=require("../../config/user.js"),o=require("../../util/index.js"),i={__name:"detail",setup(i){const r=e.ref({}),n=e.ref(""),d=e.ref("一号教学楼大厅"),s=e.ref(95),c=e.ref(!1),l=e.reactive({text:"可使用",class:"available"}),u=e.ref(!0),v=e.ref("");e.onLoad((e=>{n.value=e.deviceNo,g(),console.log(e.deviceNo),p()}));const p=async()=>{const e=await t.getDeviceInfo(n.value);200==e.code&&(r.value=e.data.device||{},r.value.deviceLocation?d.value=r.value.deviceLocation:e.data.position&&e.data.position.name&&(d.value=e.data.position.name),r.value.status&&("online"===r.value.status?(l.text="可使用",l.class="available"):"offline"===r.value.status&&(l.text="离线",l.class="offline")))},g=async()=>{try{const a=await e.index.$api.checkActiveOrder();if(a.hasOrder){const t=a.order;"waiting_for_payment"===t.status?e.index.redirectTo({url:`/pages/order/payment?orderId=${t.orderId}&deviceId=${n.value}`}):"in_used"===t.status&&e.index.redirectTo({url:`/pages/device/return?deviceId=${n.value}`})}}catch(a){e.index.showToast({title:"订单状态查询失败",icon:"none"})}},m=a=>{u.value?w(a):e.index.showModal({title:"提示",content:"请先登录后再操作",confirmText:"去登录",success:a=>{a.confirm&&e.index.navigateTo({url:"/pages/login/index"})}})},x=e.reactive({time:"1小时",price:"5.00"}),f=e.ref("99.00"),w=async a=>{try{e.index.showLoading({title:"处理中"});const s=await t.rentPowerBank(n.value,v.value);if(200!==s.code)throw new Error(s.msg||"设备租借失败");const c=s.data;if("wx-pay"==a){e.index.hideLoading();const a=await t.getOrderByOrderNo(c.orderNo);console.log(a);try{let e=0;e=x.time.includes("小时")?60*parseInt(x.time):x.time.includes("分钟")?parseInt(x.time):60*parseInt(x.time);const a=await t.updateOrderPackage({orderId:c.orderId,packageTime:e,packagePrice:parseFloat(x.price)});200!==a.code?console.warn("更新订单套餐信息失败:",a.msg):console.log("订单套餐信息已提前更新")}catch(i){console.error("更新订单套餐信息时出错:",i)}const o=parseFloat(r.value.depositAmount),n=(o+parseFloat(x.price)).toFixed(2);e.index.hideLoading(),e.index.redirectTo({url:`/pages/order/payment?orderId=${c.orderId}&packageTimeHours=${x.time.replace("小时","")}&packagePrice=${x.price}&totalAmount=${n}&depositAmount=${f.value}${r.value&&r.value.feeConfig?"&feeConfig="+encodeURIComponent(r.value.feeConfig):""}`})}else if("wx-score-pay"==a){e.index.hideLoading();const a=await t.getOrderByOrderNoScore(c.orderNo);if(e.index.hideLoading(),a&&200===a.code)try{if("0"==(await o.initiateWeChatScorePayment(a)).errCode){const a=await t.getOrderByOrderNoScorePayStatus(c.orderNo);console.log(a.data.orderStatus),"in_used"==a.data.orderStatus?(e.index.showToast({title:"设备租借成功",icon:"success"}),setTimeout((()=>{e.index.redirectTo({url:"/pages/order/index"})}),1500)):"waiting_for_payment"==a.data.orderStatus&&(e.index.showToast({title:"设备租借失败,订单已取消",icon:"error"}),await t.cancelOrder({orderId:c.orderNo}),setTimeout((()=>{e.index.switchTab({url:"/pages/index/index"})}),1500))}}catch(d){e.index.showToast({title:"支付分调用失败,请重试",icon:"none"})}else e.index.showToast({title:(null==a?void 0:a.msg)||"获取支付参数失败",icon:"none"})}}catch(s){e.index.hideLoading(),e.index.showToast({title:s.message||"租借失败,请重试",icon:"none"})}};return(t,o)=>({a:e.t(l.text),b:e.n(l.class),c:e.t(n.value),d:a._imports_0$3,e:e.t(d.value),f:a._imports_1$2,g:s.value<20?1:"",h:e.t(s.value),i:a._imports_0$2,j:e.t(c.value?"归还设备":"免押金租借"),k:c.value?1:"",l:e.o((e=>m("wx-score-pay"))),m:e.o((e=>m("wx-pay")))})}},r=e._export_sfc(i,[["__scopeId","data-v-2faa63bb"]]);wx.createPage(r);
+"use strict";const e=require("../../common/vendor.js"),o=require("../../common/assets.js"),t=require("../../config/user.js"),a=require("../../util/index.js"),n={__name:"detail",setup(n){const i=e.ref({}),r=e.ref(""),d=e.ref("一号教学楼大厅"),s=e.ref(95),c=e.ref(!1),l=e.reactive({text:"可使用",class:"available"}),u=e.ref(!0),g=e.ref(""),v=e.ref(!1);e.onLoad((e=>{r.value=e.deviceNo,m(),console.log(e.deviceNo),x()})),e.onMounted((()=>{h()}));const h=async()=>{try{const e=await a.getUserInfo();console.log(e.data.phone,"getUserInfoPhone"),200==e.code&&e.data&&e.data.phone?g.value=e.data.phone:v.value=!0}catch(e){console.error("获取用户信息失败:",e)}},p=o=>{if(console.log("getPhoneNumber event:",o.detail),o.detail.errMsg&&o.detail.errMsg.includes("deny"))e.index.showToast({title:"需要授权手机号才能使用设备",icon:"none"});else if(o.detail.code){e.index.showLoading({title:"获取中..."}),console.log("获取到的授权code:",o.detail.code);try{a.getUserPhoneNumber(o.detail.code).then((o=>{if(console.log("获取手机号API响应原始数据:",JSON.stringify(o)),e.index.hideLoading(),!o)return console.error("API返回数据为空"),void e.index.showModal({title:"数据异常",content:"API返回为空",showCancel:!1});console.log("响应code:",o.code,"响应类型:",typeof o.code),console.log("是否有data:",!!o.data,"是否有phone:",o.data&&!!o.data.phone),200==o.code&&o.data&&o.data.phoneNumber?(g.value=o.data.phoneNumber,v.value=!1,e.index.showToast({title:"手机号获取成功",icon:"success"})):(console.warn("获取手机号响应异常:",o.msg||"未知错误"),e.index.showModal({title:"获取手机号异常",content:`状态码: ${o.code}, 消息: ${o.msg||"无"}`,showCancel:!1}))})).catch((o=>{e.index.hideLoading(),console.error("获取手机号码失败(catch):",o);let t=o.message||o.toString();e.index.showModal({title:"获取手机号失败",content:"错误信息: "+t,showCancel:!1})}))}catch(t){e.index.hideLoading(),console.error("获取手机号外部错误:",t),e.index.showModal({title:"意外错误",content:"处理过程发生异常: "+(t.message||t),showCancel:!1})}}else e.index.showToast({title:"获取授权码失败",icon:"none"})},x=async()=>{const e=await t.getDeviceInfo(r.value);200==e.code&&(i.value=e.data.device||{},i.value.deviceLocation?d.value=i.value.deviceLocation:e.data.position&&e.data.position.name&&(d.value=e.data.position.name),i.value.status&&("online"===i.value.status?(l.text="可使用",l.class="available"):"offline"===i.value.status&&(l.text="离线",l.class="offline")))},m=async()=>{try{const o=await e.index.$api.checkActiveOrder();if(o.hasOrder){const t=o.order;"waiting_for_payment"===t.status?e.index.redirectTo({url:`/pages/order/payment?orderId=${t.orderId}&deviceId=${r.value}`}):"in_used"===t.status&&e.index.redirectTo({url:`/pages/device/return?deviceId=${r.value}`})}}catch(o){e.index.showToast({title:"订单状态查询失败",icon:"none"})}},w=o=>{u.value?g.value?I(o):v.value=!0:e.index.showModal({title:"提示",content:"请先登录后再操作",confirmText:"去登录",success:o=>{o.confirm&&e.index.navigateTo({url:"/pages/login/index"})}})},f=e.reactive({time:"1小时",price:"5.00"}),y=e.ref("99.00"),I=async o=>{try{e.index.showLoading({title:"处理中"});const s=await t.rentPowerBank(r.value,g.value);if(200!==s.code)throw new Error(s.msg||"设备租借失败");const c=s.data;if("wx-pay"==o){e.index.hideLoading();const o=await t.getOrderByOrderNo(c.orderNo);console.log(o);try{let e=0;e=f.time.includes("小时")?60*parseInt(f.time):f.time.includes("分钟")?parseInt(f.time):60*parseInt(f.time);const o=await t.updateOrderPackage({orderId:c.orderId,packageTime:e,packagePrice:parseFloat(f.price)});200!==o.code?console.warn("更新订单套餐信息失败:",o.msg):console.log("订单套餐信息已提前更新")}catch(n){console.error("更新订单套餐信息时出错:",n)}const a=parseFloat(i.value.depositAmount),r=(a+parseFloat(f.price)).toFixed(2);e.index.hideLoading(),e.index.redirectTo({url:`/pages/order/payment?orderId=${c.orderId}&packageTimeHours=${f.time.replace("小时","")}&packagePrice=${f.price}&totalAmount=${r}&depositAmount=${y.value}${i.value&&i.value.feeConfig?"&feeConfig="+encodeURIComponent(i.value.feeConfig):""}`})}else if("wx-score-pay"==o){e.index.hideLoading();const o=await t.getOrderByOrderNoScore(c.orderNo);if(e.index.hideLoading(),o&&200===o.code)try{if("0"==(await a.initiateWeChatScorePayment(o)).errCode){const o=await t.getOrderByOrderNoScorePayStatus(c.orderNo);console.log(o.data.orderStatus),"in_used"==o.data.orderStatus?(e.index.showToast({title:"设备租借成功",icon:"success"}),setTimeout((()=>{e.index.redirectTo({url:"/pages/order/index"})}),1500)):"waiting_for_payment"==o.data.orderStatus&&(e.index.showToast({title:"设备租借失败,订单已取消",icon:"error"}),await t.cancelOrder({orderId:c.orderNo}),setTimeout((()=>{e.index.switchTab({url:"/pages/index/index"})}),1500))}}catch(d){e.index.showToast({title:"支付分调用失败,请重试",icon:"none"})}else e.index.showToast({title:(null==o?void 0:o.msg)||"获取支付参数失败",icon:"none"})}}catch(s){e.index.hideLoading(),e.index.showToast({title:s.message||"租借失败,请重试",icon:"none"})}};return(t,a)=>e.e({a:e.t(l.text),b:e.n(l.class),c:e.t(r.value),d:o._imports_0$3,e:e.t(d.value),f:o._imports_1$2,g:s.value<20?1:"",h:e.t(s.value),i:o._imports_0$2,j:e.t(c.value?"归还设备":"免押金租借"),k:c.value?1:"",l:e.o((e=>w("wx-score-pay"))),m:e.o((e=>w("wx-pay"))),n:v.value},v.value?{o:e.o((()=>{})),p:e.o(p),q:e.o((e=>v.value=!1))}:{})}},i=e._export_sfc(n,[["__scopeId","data-v-981f4200"]]);wx.createPage(i);
diff --git a/unpackage/dist/build/mp-weixin/pages/device/detail.wxml b/unpackage/dist/build/mp-weixin/pages/device/detail.wxml
index 4e189f7..bdaf5eb 100644
--- a/unpackage/dist/build/mp-weixin/pages/device/detail.wxml
+++ b/unpackage/dist/build/mp-weixin/pages/device/detail.wxml
@@ -1 +1 @@
-当前位置{{e}}电池电量{{h}}%¥5.00/小时封顶 ¥99前15分钟内归还免费不足60分钟按60分钟计费持续计费至99元视为买断请在使用前检查设备是否完好请在指定区域内使用设备归还时请确保设备完好,避免损坏
\ No newline at end of file
+当前位置{{e}}电池电量{{h}}%¥5.00/小时封顶 ¥99前15分钟内归还免费不足60分钟按60分钟计费持续计费至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
index f503517..5b286f1 100644
--- a/unpackage/dist/build/mp-weixin/pages/device/detail.wxss
+++ b/unpackage/dist/build/mp-weixin/pages/device/detail.wxss
@@ -1 +1 @@
-.container.data-v-2faa63bb{min-height:100vh;background-color:#f5f7fa;padding:30rpx 30rpx 300rpx;box-sizing:border-box}.device-header.data-v-2faa63bb{display:flex;flex-direction:column;margin-bottom:30rpx}.device-header .device-status-card.data-v-2faa63bb{display:flex;align-items:center;margin-bottom:20rpx}.device-header .device-status-card .status-indicator.data-v-2faa63bb{width:20rpx;height:20rpx;border-radius:50%;margin-right:10rpx}.device-header .device-status-card.available .status-indicator.data-v-2faa63bb{background-color:#10c469;box-shadow:0 0 10rpx rgba(16,196,105,.5)}.device-header .device-status-card.available .status-text.data-v-2faa63bb{color:#10c469}.device-header .device-status-card.offline .status-indicator.data-v-2faa63bb{background-color:#9a9a9a}.device-header .device-status-card.offline .status-text.data-v-2faa63bb{color:#9a9a9a}.device-header .device-status-card .status-text.data-v-2faa63bb{font-size:28rpx;font-weight:500}.device-header .device-title .name.data-v-2faa63bb{font-size:48rpx;font-weight:700;color:#333}.device-header .device-title .device-meta.data-v-2faa63bb{margin-top:10rpx;display:flex;align-items:center}.device-header .device-title .device-meta .id-label.data-v-2faa63bb{font-size:26rpx;color:#999}.device-header .device-title .device-meta .id-value.data-v-2faa63bb{font-size:26rpx;color:#666}.card.data-v-2faa63bb{background-color:#fff;border-radius:24rpx;box-shadow:0 4rpx 24rpx rgba(0,0,0,.03);padding:30rpx;margin-bottom:30rpx}.card .card-header.data-v-2faa63bb{display:flex;align-items:center;justify-content:space-between;margin-bottom:24rpx}.card .card-header .card-title.data-v-2faa63bb{font-size:32rpx;font-weight:600;color:#333}.device-info-card .card-row.data-v-2faa63bb{display:flex;justify-content:space-between}.device-info-card .card-item.data-v-2faa63bb{display:flex;align-items:center;flex:1}.device-info-card .card-item .item-icon.data-v-2faa63bb{width:60rpx;height:60rpx;border-radius:12rpx;margin-right:20rpx;display:flex;align-items:center;justify-content:center;font-size:30rpx;color:#fff}.device-info-card .card-item .item-icon.location-icon.data-v-2faa63bb{background:linear-gradient(135deg,#40c9ff,#32a5ff)}.device-info-card .card-item .item-icon.battery-icon.data-v-2faa63bb{background:linear-gradient(135deg,#33db92,#10c469)}.device-info-card .card-item .item-icon.battery-icon.battery-low.data-v-2faa63bb{background:linear-gradient(135deg,#ff7676,#f54f4f)}.device-info-card .card-item .item-content.data-v-2faa63bb{display:flex;flex-direction:column}.device-info-card .card-item .item-content .item-label.data-v-2faa63bb{font-size:26rpx;color:#999;margin-bottom:4rpx}.device-info-card .card-item .item-content .item-value.data-v-2faa63bb{font-size:30rpx;color:#333;font-weight:500}.pricing-card .pricing-banner.data-v-2faa63bb{background:linear-gradient(to right,#f8f9ff,#e8f0ff);border-radius:16rpx;padding:30rpx;margin-bottom:30rpx;display:flex;flex-direction:column;align-items:center}.pricing-card .pricing-banner .pricing-main.data-v-2faa63bb{display:flex;align-items:flex-end}.pricing-card .pricing-banner .pricing-main .price.data-v-2faa63bb{font-size:60rpx;font-weight:700;color:#ff6b6b}.pricing-card .pricing-banner .pricing-main .unit.data-v-2faa63bb{font-size:28rpx;color:#999;margin-left:4rpx;margin-bottom:10rpx}.pricing-card .pricing-banner .cap-price.data-v-2faa63bb{margin-top:10rpx;font-size:26rpx;color:#666;background-color:rgba(255,107,107,.1);padding:6rpx 20rpx;border-radius:20rpx}.pricing-card .pricing-rules .rule-item.data-v-2faa63bb{display:flex;align-items:center;margin-bottom:16rpx}.pricing-card .pricing-rules .rule-item.data-v-2faa63bb:last-child{margin-bottom:0}.pricing-card .pricing-rules .rule-item .rule-dot.data-v-2faa63bb{width:10rpx;height:10rpx;border-radius:50%;background-color:#ff6b6b;margin-right:16rpx}.pricing-card .pricing-rules .rule-item .rule-text.data-v-2faa63bb{font-size:28rpx;color:#666}.pricing-card .pricing-rules .rule-item .rule-text .highlight.data-v-2faa63bb{color:#ff6b6b;font-weight:700}.phone-card .phone-input-container .input-wrapper.data-v-2faa63bb{display:flex;align-items:center;height:88rpx;background-color:#f5f7fa;border-radius:16rpx;padding:0 24rpx}.phone-card .phone-input-container .input-wrapper .prefix.data-v-2faa63bb{font-size:28rpx;color:#666;margin-right:16rpx;padding-right:16rpx;border-right:1px solid #e0e0e0}.phone-card .phone-input-container .input-wrapper .phone-input.data-v-2faa63bb{flex:1;height:88rpx;font-size:28rpx;color:#333;padding-left:10rpx}.phone-card .phone-input-container .phone-tip.data-v-2faa63bb{font-size:24rpx;color:#999;margin-top:16rpx;display:block}.notice-card .notice-items .notice-item.data-v-2faa63bb{display:flex;align-items:flex-start;margin-bottom:20rpx}.notice-card .notice-items .notice-item.data-v-2faa63bb:last-child{margin-bottom:0}.notice-card .notice-items .notice-item .notice-dot.data-v-2faa63bb{width:10rpx;height:10rpx;border-radius:50%;background-color:#32a5ff;margin-right:16rpx;margin-top:12rpx}.notice-card .notice-items .notice-item .notice-text.data-v-2faa63bb{font-size:28rpx;color:#666;line-height:1.6}.footer.data-v-2faa63bb{position:fixed;bottom:0;left:0;right:0;background-color:#fff;padding:20rpx 30rpx;padding-bottom:calc(20rpx + env(safe-area-inset-bottom));box-shadow:0 -2rpx 20rpx rgba(0,0,0,.05);z-index:100;display:flex;flex-direction:column;--footer-height: 180rpx}.footer .wechat-credit.data-v-2faa63bb{display:flex;align-items:center;justify-content:center;margin-bottom:20rpx}.footer .wechat-credit .wx-icon.data-v-2faa63bb{width:50rpx;height:40rpx;margin-right:10rpx}.footer .wechat-credit .credit-text.data-v-2faa63bb{font-size:24rpx;color:#07c160;display:flex;align-items:center}.footer .wechat-credit .credit-text .credit-divider.data-v-2faa63bb{margin:0 10rpx}.footer .wechat-credit .credit-text .credit-score.data-v-2faa63bb{font-weight:500}.footer .rent-button.data-v-2faa63bb{height:92rpx;border-radius:46rpx;background:linear-gradient(135deg,#07c160,#10d673);color:#fff;font-size:32rpx;font-weight:600;display:flex;align-items:center;justify-content:center;border:none;width:90%}.footer .rent-button.return-button.data-v-2faa63bb{background:linear-gradient(135deg,#ff9800,#ffb74d)}.footer .rent-button.data-v-2faa63bb:active{transform:scale(.98);opacity:.9}
+.container.data-v-981f4200{min-height:100vh;background-color:#f5f7fa;padding:30rpx 30rpx 300rpx;box-sizing:border-box}.device-header.data-v-981f4200{display:flex;flex-direction:column;margin-bottom:30rpx}.device-header .device-status-card.data-v-981f4200{display:flex;align-items:center;margin-bottom:20rpx}.device-header .device-status-card .status-indicator.data-v-981f4200{width:20rpx;height:20rpx;border-radius:50%;margin-right:10rpx}.device-header .device-status-card.available .status-indicator.data-v-981f4200{background-color:#10c469;box-shadow:0 0 10rpx rgba(16,196,105,.5)}.device-header .device-status-card.available .status-text.data-v-981f4200{color:#10c469}.device-header .device-status-card.offline .status-indicator.data-v-981f4200{background-color:#9a9a9a}.device-header .device-status-card.offline .status-text.data-v-981f4200{color:#9a9a9a}.device-header .device-status-card .status-text.data-v-981f4200{font-size:28rpx;font-weight:500}.device-header .device-title .name.data-v-981f4200{font-size:48rpx;font-weight:700;color:#333}.device-header .device-title .device-meta.data-v-981f4200{margin-top:10rpx;display:flex;align-items:center}.device-header .device-title .device-meta .id-label.data-v-981f4200{font-size:26rpx;color:#999}.device-header .device-title .device-meta .id-value.data-v-981f4200{font-size:26rpx;color:#666}.card.data-v-981f4200{background-color:#fff;border-radius:24rpx;box-shadow:0 4rpx 24rpx rgba(0,0,0,.03);padding:30rpx;margin-bottom:30rpx}.card .card-header.data-v-981f4200{display:flex;align-items:center;justify-content:space-between;margin-bottom:24rpx}.card .card-header .card-title.data-v-981f4200{font-size:32rpx;font-weight:600;color:#333}.device-info-card .card-row.data-v-981f4200{display:flex;justify-content:space-between}.device-info-card .card-item.data-v-981f4200{display:flex;align-items:center;flex:1}.device-info-card .card-item .item-icon.data-v-981f4200{width:60rpx;height:60rpx;border-radius:12rpx;margin-right:20rpx;display:flex;align-items:center;justify-content:center;font-size:30rpx;color:#fff}.device-info-card .card-item .item-icon.location-icon.data-v-981f4200{background:linear-gradient(135deg,#40c9ff,#32a5ff)}.device-info-card .card-item .item-icon.battery-icon.data-v-981f4200{background:linear-gradient(135deg,#33db92,#10c469)}.device-info-card .card-item .item-icon.battery-icon.battery-low.data-v-981f4200{background:linear-gradient(135deg,#ff7676,#f54f4f)}.device-info-card .card-item .item-content.data-v-981f4200{display:flex;flex-direction:column}.device-info-card .card-item .item-content .item-label.data-v-981f4200{font-size:26rpx;color:#999;margin-bottom:4rpx}.device-info-card .card-item .item-content .item-value.data-v-981f4200{font-size:30rpx;color:#333;font-weight:500}.pricing-card .pricing-banner.data-v-981f4200{background:linear-gradient(to right,#f8f9ff,#e8f0ff);border-radius:16rpx;padding:30rpx;margin-bottom:30rpx;display:flex;flex-direction:column;align-items:center}.pricing-card .pricing-banner .pricing-main.data-v-981f4200{display:flex;align-items:flex-end}.pricing-card .pricing-banner .pricing-main .price.data-v-981f4200{font-size:60rpx;font-weight:700;color:#ff6b6b}.pricing-card .pricing-banner .pricing-main .unit.data-v-981f4200{font-size:28rpx;color:#999;margin-left:4rpx;margin-bottom:10rpx}.pricing-card .pricing-banner .cap-price.data-v-981f4200{margin-top:10rpx;font-size:26rpx;color:#666;background-color:rgba(255,107,107,.1);padding:6rpx 20rpx;border-radius:20rpx}.pricing-card .pricing-rules .rule-item.data-v-981f4200{display:flex;align-items:center;margin-bottom:16rpx}.pricing-card .pricing-rules .rule-item.data-v-981f4200:last-child{margin-bottom:0}.pricing-card .pricing-rules .rule-item .rule-dot.data-v-981f4200{width:10rpx;height:10rpx;border-radius:50%;background-color:#ff6b6b;margin-right:16rpx}.pricing-card .pricing-rules .rule-item .rule-text.data-v-981f4200{font-size:28rpx;color:#666}.pricing-card .pricing-rules .rule-item .rule-text .highlight.data-v-981f4200{color:#ff6b6b;font-weight:700}.phone-card .phone-input-container .input-wrapper.data-v-981f4200{display:flex;align-items:center;height:88rpx;background-color:#f5f7fa;border-radius:16rpx;padding:0 24rpx}.phone-card .phone-input-container .input-wrapper .prefix.data-v-981f4200{font-size:28rpx;color:#666;margin-right:16rpx;padding-right:16rpx;border-right:1px solid #e0e0e0}.phone-card .phone-input-container .input-wrapper .phone-input.data-v-981f4200{flex:1;height:88rpx;font-size:28rpx;color:#333;padding-left:10rpx}.phone-card .phone-input-container .phone-tip.data-v-981f4200{font-size:24rpx;color:#999;margin-top:16rpx;display:block}.notice-card .notice-items .notice-item.data-v-981f4200{display:flex;align-items:flex-start;margin-bottom:20rpx}.notice-card .notice-items .notice-item.data-v-981f4200:last-child{margin-bottom:0}.notice-card .notice-items .notice-item .notice-dot.data-v-981f4200{width:10rpx;height:10rpx;border-radius:50%;background-color:#32a5ff;margin-right:16rpx;margin-top:12rpx}.notice-card .notice-items .notice-item .notice-text.data-v-981f4200{font-size:28rpx;color:#666;line-height:1.6}.footer.data-v-981f4200{position:fixed;bottom:0;left:0;right:0;background-color:#fff;padding:20rpx 30rpx;padding-bottom:calc(20rpx + env(safe-area-inset-bottom));box-shadow:0 -2rpx 20rpx rgba(0,0,0,.05);z-index:100;display:flex;flex-direction:column;--footer-height: 180rpx}.footer .wechat-credit.data-v-981f4200{display:flex;align-items:center;justify-content:center;margin-bottom:20rpx}.footer .wechat-credit .wx-icon.data-v-981f4200{width:50rpx;height:40rpx;margin-right:10rpx}.footer .wechat-credit .credit-text.data-v-981f4200{font-size:24rpx;color:#07c160;display:flex;align-items:center}.footer .wechat-credit .credit-text .credit-divider.data-v-981f4200{margin:0 10rpx}.footer .wechat-credit .credit-text .credit-score.data-v-981f4200{font-weight:500}.footer .rent-button.data-v-981f4200{height:92rpx;border-radius:46rpx;background:linear-gradient(135deg,#07c160,#10d673);color:#fff;font-size:32rpx;font-weight:600;display:flex;align-items:center;justify-content:center;border:none;width:90%}.footer .rent-button.return-button.data-v-981f4200{background:linear-gradient(135deg,#ff9800,#ffb74d)}.footer .rent-button.data-v-981f4200:active{transform:scale(.98);opacity:.9}.phone-auth-popup.data-v-981f4200{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000;display:flex;align-items:center;justify-content:center;background-color:rgba(0,0,0,.5)}.popup-mask.data-v-981f4200{position:absolute;top:0;left:0;right:0;bottom:0}.popup-content.data-v-981f4200{background-color:#fff;border-radius:24rpx;box-shadow:0 8rpx 32rpx rgba(0,0,0,.15);width:90%;max-width:500rpx;padding:40rpx 30rpx;position:relative;z-index:1001;display:flex;flex-direction:column;align-items:center}.popup-header.data-v-981f4200{margin-bottom:30rpx;text-align:center}.popup-title.data-v-981f4200{font-size:36rpx;font-weight:700;color:#333}.popup-body.data-v-981f4200{width:100%;display:flex;flex-direction:column;align-items:center;margin-bottom:30rpx}.auth-desc.data-v-981f4200{font-size:28rpx;color:#666;text-align:center;margin-bottom:30rpx;line-height:1.6}.auth-btn.data-v-981f4200{width:100%;height:92rpx;border-radius:46rpx;background:linear-gradient(135deg,#07c160,#10d673);color:#fff;font-size:32rpx;font-weight:600;display:flex;align-items:center;justify-content:center;border:none;margin-bottom:20rpx}.auth-btn.data-v-981f4200:active{transform:scale(.98);opacity:.9}.auth-cancel.data-v-981f4200{width:100%;height:92rpx;border-radius:46rpx;background-color:#f5f7fa;color:#333;font-size:32rpx;font-weight:600;display:flex;align-items:center;justify-content:center;border:none}.auth-cancel.data-v-981f4200:active{transform:scale(.98);opacity:.9}
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.js b/unpackage/dist/build/mp-weixin/pages/index/index.js
index adf92ab..2469922 100644
--- a/unpackage/dist/build/mp-weixin/pages/index/index.js
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.js
@@ -1 +1 @@
-"use strict";const e=require("../../common/vendor.js"),o=require("../../util/index.js"),n=require("../../config/url.js"),t=require("../../config/user.js"),i=require("../../common/assets.js"),a={methods:{async handleScan(){try{const d=await new Promise(((o,n)=>{e.index.scanCode({success:o,fail:n})}));console.log(d.path);let r=o.getQueryString(d.path,"deviceNo");if(console.log("扫码路径:",d.path),console.log("解析到的设备号:",r),!r)return void e.index.showToast({title:"无效的设备二维码",icon:"none"});e.index.getStorageSync("token")||await o.wxLogin();const c=await e.index.request({url:`${n.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(c)),200==c.statusCode&&200==c.data.code&&c.data.data){const o=c.data.data;return console.log("检测到使用中订单,准备跳转:",o),e.index.reLaunch({url:`/pages/return/index?orderId=${o.orderId}&deviceId=${r||o.deviceNo}`}),void console.log("已发起页面跳转")}const s=await e.index.request({url:`${n.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(s)),200==s.statusCode&&200==s.data.code&&s.data.data){const o=s.data.data;console.log("检测到待支付订单,准备跳转:",o),e.index.navigateTo({url:`/pages/order/payment?orderId=${o.orderId}`})}else{console.log("无待支付订单,获取设备信息, deviceNo:",r);try{const o=await t.getDeviceInfo(r);if(200==o.code&&o.data&&o.data.device){const n=o.data.device;if(n.feeConfig){console.log("获取到设备feeConfig信息:",n.feeConfig);try{JSON.parse(n.feeConfig);e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}&feeConfig=${encodeURIComponent(n.feeConfig)}`})}catch(i){console.error("解析feeConfig失败:",i),e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}}else e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}else console.error("获取设备信息失败:",o.msg||"未知错误"),e.index.showToast({title:"获取设备信息失败",icon:"none"}),e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}catch(a){console.error("获取设备信息异常:",a),e.index.showToast({title:"获取设备信息失败",icon:"none"}),e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}}}catch(a){console.error("扫码处理失败:",a),e.index.showToast({title:"扫码失败",icon:"none"})}}}};const d=e._export_sfc(a,[["render",function(o,n,t,a,d,r){return{a:i._imports_0,b:i._imports_1,c:e.o(((...e)=>r.handleScan&&r.handleScan(...e)))}}],["__scopeId","data-v-764894e1"]]);wx.createPage(d);
+"use strict";const e=require("../../common/vendor.js"),o=require("../../util/index.js"),t=require("../../config/url.js"),n=require("../../config/user.js"),i=require("../../common/assets.js"),a={methods:{async handleScan(){try{const d=await new Promise(((o,t)=>{e.index.scanCode({success:o,fail:t})}));console.log(d.path);let r=o.getQueryString(d.path,"deviceNo");if(!r)return void e.index.showToast({title:"无效的设备二维码",icon:"none"});e.index.getStorageSync("token")||await o.wxLogin();const c=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(200==c.statusCode&&200==c.data.code&&c.data.data){const o=c.data.data;return e.index.reLaunch({url:`/pages/return/index?orderId=${o.orderId}&deviceId=${r||o.deviceNo}`}),void console.log("已发起页面跳转")}const s=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(s)),200==s.statusCode&&200==s.data.code&&s.data.data){const o=s.data.data;e.index.navigateTo({url:`/pages/order/payment?orderId=${o.orderId}`})}else try{const o=await n.getDeviceInfo(r);if(200==o.code&&o.data&&o.data.device){const t=o.data.device;if(t.feeConfig){console.log("获取到设备feeConfig信息:",t.feeConfig);try{JSON.parse(t.feeConfig);e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}&feeConfig=${encodeURIComponent(t.feeConfig)}`})}catch(i){console.error("解析feeConfig失败:",i),e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}}else e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}else console.error("获取设备信息失败:",o.msg||"未知错误"),e.index.showToast({title:"获取设备信息失败",icon:"none"}),e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}catch(a){console.error("获取设备信息异常:",a),e.index.showToast({title:"获取设备信息失败",icon:"none"}),e.index.navigateTo({url:`/pages/device/detail?deviceNo=${r}`})}}catch(a){console.error("扫码处理失败:",a),e.index.showToast({title:"扫码失败",icon:"none"})}}}};const d=e._export_sfc(a,[["render",function(o,t,n,a,d,r){return e.e({a:i._imports_0,b:i._imports_1,c:e.o(((...e)=>r.handleScan&&r.handleScan(...e))),d:o.showPhoneAuthPopup},o.showPhoneAuthPopup?{e:e.o((e=>o.showPhoneAuthPopup=!1)),f:e.o(((...e)=>o.onGetPhoneNumber&&o.onGetPhoneNumber(...e))),g:e.o((e=>o.showPhoneAuthPopup=!1))}:{})}],["__scopeId","data-v-527ff3b8"]]);wx.createPage(d);
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.wxml b/unpackage/dist/build/mp-weixin/pages/index/index.wxml
index 0b28732..572bc11 100644
--- a/unpackage/dist/build/mp-weixin/pages/index/index.wxml
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.wxml
@@ -1 +1 @@
-扫码使用扫描设备二维码即可使用或归还5.0元/小时15分钟内归还免费不足1小时按1小时计费封顶99元,计费达99元视为买断1扫码弹出2使用风扇3插入归还4结束订单
\ No newline at end of file
+扫码使用扫描设备二维码即可使用或归还5.0元/小时15分钟内归还免费不足1小时按1小时计费封顶99元,计费达99元视为买断1扫码弹出2使用风扇3插入归还4结束订单
\ 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
index 548fde0..e6df4b8 100644
--- a/unpackage/dist/build/mp-weixin/pages/index/index.wxss
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.wxss
@@ -1 +1 @@
-.container.data-v-764894e1{min-height:100vh;background-color:#f6f7fb;padding-bottom:40rpx}.header.data-v-764894e1{height:300rpx;background:linear-gradient(135deg,#1e88e5,#29b6f6);position:relative;overflow:hidden}.header .header-bg.data-v-764894e1{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.header .header-bg .circle-decoration.data-v-764894e1{position:absolute;border-radius:50%;background:rgba(255,255,255,.1)}.header .header-bg .circle-1.data-v-764894e1{width:240rpx;height:240rpx;right:-60rpx;top:-90rpx}.header .header-bg .circle-2.data-v-764894e1{width:160rpx;height:160rpx;left:-40rpx;bottom:30rpx;background:rgba(255,255,255,.08)}.header .header-bg .wave-decoration.data-v-764894e1{position:absolute;left:0;bottom:0;width:100%;height:40rpx;background-size:auto 100%;opacity:.6}.header .header-content.data-v-764894e1{position:relative;z-index:2;padding:40rpx 40rpx 0;height:100%;display:flex;flex-direction:column;justify-content:space-between}.header .header-content .brand-area.data-v-764894e1{display:flex;align-items:center}.header .header-content .brand-area .brand-logo.data-v-764894e1{width:90rpx;height:90rpx;margin-right:20rpx}.header .header-content .brand-area .brand-text.data-v-764894e1{display:flex;flex-direction:column}.header .header-content .brand-area .brand-text .title.data-v-764894e1{font-size:48rpx;color:#fff;font-weight:700;line-height:1.2;text-shadow:0 2rpx 4rpx rgba(0,0,0,.1)}.header .header-content .brand-area .brand-text .subtitle.data-v-764894e1{font-size:28rpx;color:rgba(255,255,255,.9)}.header .header-content .header-info.data-v-764894e1{display:flex;flex-wrap:wrap;gap:20rpx;margin-bottom:30rpx}.header .header-content .header-info .service-tag.data-v-764894e1{display:flex;align-items:center;background:rgba(255,255,255,.2);border-radius:40rpx;padding:10rpx 20rpx}.header .header-content .header-info .service-tag text.data-v-764894e1{font-size:24rpx;color:#fff}.header .header-content .header-info .service-tag .dot.data-v-764894e1{margin:0 8rpx;font-weight:700}.scan-section.data-v-764894e1{padding:0 30rpx}.scan-section .scan-card.data-v-764894e1{background:#fff;border-radius:16rpx;box-shadow:0 10rpx 30rpx rgba(0,0,0,.05);padding:36rpx 0;display:flex;flex-direction:column;align-items:center}.scan-section .scan-card .scan-btn.data-v-764894e1{width:220rpx;height:220rpx;background:linear-gradient(135deg,#00b0ff,#0091ea);border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:24rpx;box-shadow:0 10rpx 20rpx rgba(0,176,255,.2);position:relative;transition:all .2s ease}.scan-section .scan-card .scan-btn.data-v-764894e1:active{transform:scale(.96)}.scan-section .scan-card .scan-btn .scan-icon.data-v-764894e1{width:80rpx;height:80rpx;margin-bottom:12rpx}.scan-section .scan-card .scan-btn .scan-text.data-v-764894e1{font-size:36rpx;color:#fff;font-weight:500}.scan-section .scan-card .scan-desc.data-v-764894e1{font-size:28rpx;color:#666}.price-card.data-v-764894e1{margin:30rpx;background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 6rpx 20rpx rgba(0,0,0,.04)}.price-card .card-header.data-v-764894e1{padding:24rpx 30rpx;background:linear-gradient(to right,#f5f9ff,#fff);border-bottom:2rpx solid #f0f0f0}.price-card .card-header .card-title.data-v-764894e1{font-size:32rpx;font-weight:600;color:#333;position:relative;padding-left:20rpx}.price-card .card-header .card-title.data-v-764894e1:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:6rpx;height:28rpx;background:#2196f3;border-radius:3rpx}.price-card .deposit-free.data-v-764894e1{margin:20rpx 30rpx 0;padding:12rpx 16rpx;background:#f0f9ff;border-radius:8rpx;border-left:4rpx solid #03A9F4;display:flex;align-items:center}.price-card .deposit-free .deposit-icon.data-v-764894e1{width:40rpx;height:40rpx;margin-right:16rpx}.price-card .deposit-free .deposit-text.data-v-764894e1{font-size:26rpx;color:#03a9f4;font-weight:500}.price-card .price-rules.data-v-764894e1{padding:20rpx 30rpx 30rpx}.price-card .price-rules .price-item.data-v-764894e1{display:flex;flex-direction:column;align-items:center;margin-bottom:20rpx}.price-card .price-rules .price-item .price-tag.data-v-764894e1{font-size:60rpx;color:#ff6e00;font-weight:700;line-height:1}.price-card .price-rules .price-item .price-tag .unit.data-v-764894e1{font-size:32rpx;font-weight:400;margin-left:4rpx}.price-card .price-rules .price-item .price-desc.data-v-764894e1{font-size:28rpx;color:#666;margin-top:10rpx}.price-card .price-rules .divider.data-v-764894e1{height:2rpx;background-color:#f0f0f0;margin:20rpx 0 30rpx}.price-card .price-rules .rule-list .rule-item.data-v-764894e1{display:flex;align-items:flex-start;margin-bottom:20rpx}.price-card .price-rules .rule-list .rule-item.data-v-764894e1:last-child{margin-bottom:0}.price-card .price-rules .rule-list .rule-item .rule-dot.data-v-764894e1{width:12rpx;height:12rpx;background:#2196f3;border-radius:50%;margin:12rpx 16rpx 0 0;flex-shrink:0}.price-card .price-rules .rule-list .rule-item text.data-v-764894e1{font-size:28rpx;color:#666;line-height:1.5}.usage-steps.data-v-764894e1{margin:0 30rpx;background:#fff;border-radius:16rpx;box-shadow:0 6rpx 20rpx rgba(0,0,0,.04);overflow:hidden}.usage-steps .steps-header.data-v-764894e1{padding:24rpx 30rpx;background:linear-gradient(to right,#f5f9ff,#fff);border-bottom:2rpx solid #f0f0f0}.usage-steps .steps-header .steps-title.data-v-764894e1{font-size:32rpx;font-weight:600;color:#333;position:relative;padding-left:20rpx}.usage-steps .steps-header .steps-title.data-v-764894e1:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:6rpx;height:28rpx;background:#2196f3;border-radius:3rpx}.usage-steps .steps-container.data-v-764894e1{padding:40rpx 30rpx;display:flex;align-items:center;justify-content:space-between}.usage-steps .steps-container .step-item.data-v-764894e1{display:flex;flex-direction:column;align-items:center;flex:1}.usage-steps .steps-container .step-item .step-icon.data-v-764894e1{width:80rpx;height:80rpx;background:#f0f9ff;border:2rpx solid #e1f5fe;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:16rpx}.usage-steps .steps-container .step-item .step-icon .step-number.data-v-764894e1{font-size:36rpx;color:#2196f3;font-weight:600}.usage-steps .steps-container .step-item .step-text.data-v-764894e1{font-size:26rpx;color:#666}.usage-steps .steps-container .step-arrow.data-v-764894e1{width:40rpx;height:4rpx;background:#e1f5fe;position:relative}.usage-steps .steps-container .step-arrow.data-v-764894e1:after{content:"";position:absolute;right:0;top:50%;margin-top:-8rpx;border-left:12rpx solid #e1f5fe;border-top:8rpx solid transparent;border-bottom:8rpx solid transparent}
+.container.data-v-527ff3b8{min-height:100vh;background-color:#f6f7fb;padding-bottom:40rpx}.header.data-v-527ff3b8{height:300rpx;background:linear-gradient(135deg,#1e88e5,#29b6f6);position:relative;overflow:hidden}.header .header-bg.data-v-527ff3b8{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.header .header-bg .circle-decoration.data-v-527ff3b8{position:absolute;border-radius:50%;background:rgba(255,255,255,.1)}.header .header-bg .circle-1.data-v-527ff3b8{width:240rpx;height:240rpx;right:-60rpx;top:-90rpx}.header .header-bg .circle-2.data-v-527ff3b8{width:160rpx;height:160rpx;left:-40rpx;bottom:30rpx;background:rgba(255,255,255,.08)}.header .header-bg .wave-decoration.data-v-527ff3b8{position:absolute;left:0;bottom:0;width:100%;height:40rpx;background-size:auto 100%;opacity:.6}.header .header-content.data-v-527ff3b8{position:relative;z-index:2;padding:40rpx 40rpx 0;height:100%;display:flex;flex-direction:column;justify-content:space-between}.header .header-content .brand-area.data-v-527ff3b8{display:flex;align-items:center}.header .header-content .brand-area .brand-logo.data-v-527ff3b8{width:90rpx;height:90rpx;margin-right:20rpx}.header .header-content .brand-area .brand-text.data-v-527ff3b8{display:flex;flex-direction:column}.header .header-content .brand-area .brand-text .title.data-v-527ff3b8{font-size:48rpx;color:#fff;font-weight:700;line-height:1.2;text-shadow:0 2rpx 4rpx rgba(0,0,0,.1)}.header .header-content .brand-area .brand-text .subtitle.data-v-527ff3b8{font-size:28rpx;color:rgba(255,255,255,.9)}.header .header-content .header-info.data-v-527ff3b8{display:flex;flex-wrap:wrap;gap:20rpx;margin-bottom:30rpx}.header .header-content .header-info .service-tag.data-v-527ff3b8{display:flex;align-items:center;background:rgba(255,255,255,.2);border-radius:40rpx;padding:10rpx 20rpx}.header .header-content .header-info .service-tag text.data-v-527ff3b8{font-size:24rpx;color:#fff}.header .header-content .header-info .service-tag .dot.data-v-527ff3b8{margin:0 8rpx;font-weight:700}.scan-section.data-v-527ff3b8{padding:0 30rpx}.scan-section .scan-card.data-v-527ff3b8{background:#fff;border-radius:16rpx;box-shadow:0 10rpx 30rpx rgba(0,0,0,.05);padding:36rpx 0;display:flex;flex-direction:column;align-items:center}.scan-section .scan-card .scan-btn.data-v-527ff3b8{width:220rpx;height:220rpx;background:linear-gradient(135deg,#00b0ff,#0091ea);border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:24rpx;box-shadow:0 10rpx 20rpx rgba(0,176,255,.2);position:relative;transition:all .2s ease}.scan-section .scan-card .scan-btn.data-v-527ff3b8:active{transform:scale(.96)}.scan-section .scan-card .scan-btn .scan-icon.data-v-527ff3b8{width:80rpx;height:80rpx;margin-bottom:12rpx}.scan-section .scan-card .scan-btn .scan-text.data-v-527ff3b8{font-size:36rpx;color:#fff;font-weight:500}.scan-section .scan-card .scan-desc.data-v-527ff3b8{font-size:28rpx;color:#666}.price-card.data-v-527ff3b8{margin:30rpx;background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 6rpx 20rpx rgba(0,0,0,.04)}.price-card .card-header.data-v-527ff3b8{padding:24rpx 30rpx;background:linear-gradient(to right,#f5f9ff,#fff);border-bottom:2rpx solid #f0f0f0}.price-card .card-header .card-title.data-v-527ff3b8{font-size:32rpx;font-weight:600;color:#333;position:relative;padding-left:20rpx}.price-card .card-header .card-title.data-v-527ff3b8:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:6rpx;height:28rpx;background:#2196f3;border-radius:3rpx}.price-card .deposit-free.data-v-527ff3b8{margin:20rpx 30rpx 0;padding:12rpx 16rpx;background:#f0f9ff;border-radius:8rpx;border-left:4rpx solid #03A9F4;display:flex;align-items:center}.price-card .deposit-free .deposit-icon.data-v-527ff3b8{width:40rpx;height:40rpx;margin-right:16rpx}.price-card .deposit-free .deposit-text.data-v-527ff3b8{font-size:26rpx;color:#03a9f4;font-weight:500}.price-card .price-rules.data-v-527ff3b8{padding:20rpx 30rpx 30rpx}.price-card .price-rules .price-item.data-v-527ff3b8{display:flex;flex-direction:column;align-items:center;margin-bottom:20rpx}.price-card .price-rules .price-item .price-tag.data-v-527ff3b8{font-size:60rpx;color:#ff6e00;font-weight:700;line-height:1}.price-card .price-rules .price-item .price-tag .unit.data-v-527ff3b8{font-size:32rpx;font-weight:400;margin-left:4rpx}.price-card .price-rules .price-item .price-desc.data-v-527ff3b8{font-size:28rpx;color:#666;margin-top:10rpx}.price-card .price-rules .divider.data-v-527ff3b8{height:2rpx;background-color:#f0f0f0;margin:20rpx 0 30rpx}.price-card .price-rules .rule-list .rule-item.data-v-527ff3b8{display:flex;align-items:flex-start;margin-bottom:20rpx}.price-card .price-rules .rule-list .rule-item.data-v-527ff3b8:last-child{margin-bottom:0}.price-card .price-rules .rule-list .rule-item .rule-dot.data-v-527ff3b8{width:12rpx;height:12rpx;background:#2196f3;border-radius:50%;margin:12rpx 16rpx 0 0;flex-shrink:0}.price-card .price-rules .rule-list .rule-item text.data-v-527ff3b8{font-size:28rpx;color:#666;line-height:1.5}.usage-steps.data-v-527ff3b8{margin:0 30rpx;background:#fff;border-radius:16rpx;box-shadow:0 6rpx 20rpx rgba(0,0,0,.04);overflow:hidden}.usage-steps .steps-header.data-v-527ff3b8{padding:24rpx 30rpx;background:linear-gradient(to right,#f5f9ff,#fff);border-bottom:2rpx solid #f0f0f0}.usage-steps .steps-header .steps-title.data-v-527ff3b8{font-size:32rpx;font-weight:600;color:#333;position:relative;padding-left:20rpx}.usage-steps .steps-header .steps-title.data-v-527ff3b8:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:6rpx;height:28rpx;background:#2196f3;border-radius:3rpx}.usage-steps .steps-container.data-v-527ff3b8{padding:40rpx 30rpx;display:flex;align-items:center;justify-content:space-between}.usage-steps .steps-container .step-item.data-v-527ff3b8{display:flex;flex-direction:column;align-items:center;flex:1}.usage-steps .steps-container .step-item .step-icon.data-v-527ff3b8{width:80rpx;height:80rpx;background:#f0f9ff;border:2rpx solid #e1f5fe;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:16rpx}.usage-steps .steps-container .step-item .step-icon .step-number.data-v-527ff3b8{font-size:36rpx;color:#2196f3;font-weight:600}.usage-steps .steps-container .step-item .step-text.data-v-527ff3b8{font-size:26rpx;color:#666}.usage-steps .steps-container .step-arrow.data-v-527ff3b8{width:40rpx;height:4rpx;background:#e1f5fe;position:relative}.usage-steps .steps-container .step-arrow.data-v-527ff3b8:after{content:"";position:absolute;right:0;top:50%;margin-top:-8rpx;border-left:12rpx solid #e1f5fe;border-top:8rpx solid transparent;border-bottom:8rpx solid transparent}
diff --git a/unpackage/dist/build/mp-weixin/util/index.js b/unpackage/dist/build/mp-weixin/util/index.js
index b8e519d..d4a6c6b 100644
--- a/unpackage/dist/build/mp-weixin/util/index.js
+++ b/unpackage/dist/build/mp-weixin/util/index.js
@@ -1 +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.initiateWeChatScorePayment=n=>new Promise(((o,i)=>{n&&n.data&&n.data.package?e.wx$1.openBusinessView({businessType:"wxpayScoreUse",extraData:{mch_id:n.data.mch_id,package:n.data.package},success:e=>{"openBusinessView:ok"===e.errMsg?o(e):i(new Error("支付流程未完成"))},fail:n=>{console.error("微信支付分小程序调用失败",n),e.index.showToast({title:n.errMsg||"支付分接口调用失败",icon:"none"}),i(n)}}):i(new Error("支付参数不完整"))})),exports.wxLogin=()=>new Promise(((o,i)=>{e.index.login({provider:"weixin",success:async s=>{try{if(!s.code)throw new Error("获取微信登录凭证失败");{const i=await n.login({code:s.code,appid:"wx2165f0be356ae7a9"});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(t){e.index.showToast({title:t.message||"登录失败",icon:"none"}),i(t)}},fail:n=>{e.index.showToast({title:"微信登录失败",icon:"none"}),i(n)}})}));
+"use strict";const e=require("../common/vendor.js"),r=require("../config/user.js"),o=require("../config/url.js");exports.getQueryString=function(e,r){var o=new RegExp("(^|&|/?)"+r+"=([^&|/?]*)(&|/?|$)","i"),n=e.substr(1).match(o);return null!=n?n[2]:null},exports.getUserInfo=()=>new Promise((async(e,o)=>{e(await r.getMyIndexInfo({isHide:!1}))})),exports.getUserPhoneNumber=r=>new Promise((async(n,t)=>{try{const s=e.index.getStorageSync("token");if(!s)return void t(new Error("用户未登录"));console.log("开始请求获取手机号,code=",r,"请求地址=",o.URL+"/app/user/getPhoneNumber"),e.index.request({url:o.URL+"/app/user/getPhoneNumber",method:"POST",header:{Authorization:"Bearer "+s,clientId:e.index.getStorageSync("client_id"),"Content-Type":"application/json"},data:{code:r,appid:o.appid},success:e=>{console.log("请求获取手机号接口成功,原始响应:",JSON.stringify(e)),200===e.statusCode?e.data?n(e.data):t(new Error("服务器返回空数据")):t(new Error(`HTTP错误: ${e.statusCode}`))},fail:e=>{console.error("请求获取手机号接口网络错误:",e),t(new Error("请求获取手机号接口失败: "+(e.errMsg||JSON.stringify(e))))}})}catch(s){console.error("获取手机号过程中出现异常:",s),t(new Error("获取手机号异常: "+(s.message||JSON.stringify(s))))}})),exports.initiateWeChatScorePayment=r=>new Promise(((o,n)=>{r&&r.data&&r.data.package?e.wx$1.openBusinessView({businessType:"wxpayScoreUse",extraData:{mch_id:r.data.mch_id,package:r.data.package},success:e=>{"openBusinessView:ok"===e.errMsg?o(e):n(new Error("支付流程未完成"))},fail:r=>{console.error("微信支付分小程序调用失败",r),e.index.showToast({title:r.errMsg||"支付分接口调用失败",icon:"none"}),n(r)}}):n(new Error("支付参数不完整"))})),exports.wxLogin=()=>new Promise(((o,n)=>{e.index.login({provider:"weixin",success:async t=>{try{if(!t.code)throw new Error("获取微信登录凭证失败");{const n=await r.login({code:t.code,appid:"wx2165f0be356ae7a9"});if(200!==n.code)throw new Error(n.message||"登录失败");e.index.setStorageSync("token",n.data.LoginWxVo.access_token),e.index.setStorageSync("client_id",n.data.LoginWxVo.client_id),o(n.data)}}catch(s){e.index.showToast({title:s.message||"登录失败",icon:"none"}),n(s)}},fail:r=>{e.index.showToast({title:"微信登录失败",icon:"none"}),n(r)}})}));
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 b15fffa..4b21571 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://my.gxfs123.com/api\" //正式服务器\r\nexport const URL = \"https://unifans.gxfs123.com/api\" //测试服务器\r\n// export const URL = \"http://192.168.10.70:8080\" \t\t//本地调试\r\n\r\nexport const appid = \"wx2165f0be356ae7a9\" //小程序appid"],"names":[],"mappings":";AACY,MAAC,MAAM;AAGP,MAAC,QAAQ;;;"}
\ No newline at end of file
+{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["// export const URL = \"https://my.gxfs123.com/api\" //正式服务器\r\nexport const URL = \"https://unifans.gxfs123.com/api\" //测试服务器\r\n// export const URL = \"http://192.168.10.3:8080\" \t\t//本地调试\r\n\r\nexport const appid = \"wx2165f0be356ae7a9\" //小程序appid"],"names":[],"mappings":";AACY,MAAC,MAAM;AAGP,MAAC,QAAQ;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/device/detail.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/device/detail.js.map
index 132dce2..afa96d8 100644
--- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/device/detail.js.map
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/device/detail.js.map
@@ -1 +1 @@
-{"version":3,"file":"detail.js","sources":["pages/device/detail.vue","E:/HBuilderX.4.24.2024072208/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvZGV2aWNlL2RldGFpbC52dWU"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t当前位置\r\n\t\t\t\t\t\t{{ deviceLocation }}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t电池电量\r\n\t\t\t\t\t\t{{ batteryLevel }}%\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t¥5.00\r\n\t\t\t\t\t/小时\r\n\t\t\t\t\r\n\t\t\t\t封顶 ¥99\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t前15分钟内归还免费\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t不足60分钟按60分钟计费\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t持续计费至99元视为买断\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t请在使用前检查设备是否完好\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t请在指定区域内使用设备\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t归还时请确保设备完好,避免损坏\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/uni-fans-score/pages/device/detail.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","reactive","onLoad","uni","getDeviceInfo","rentPowerBank","getOrderByOrderNo","updateOrderPackage","getOrderByOrderNoScore","initiateWeChatScorePayment","res","getOrderByOrderNoScorePayStatus","cancelOrder"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"detail.js","sources":["pages/device/detail.vue","E:/HBuilderX.4.24.2024072208/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvZGV2aWNlL2RldGFpbC52dWU"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t当前位置\r\n\t\t\t\t\t\t{{ deviceLocation }}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t电池电量\r\n\t\t\t\t\t\t{{ batteryLevel }}%\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t¥5.00\r\n\t\t\t\t\t/小时\r\n\t\t\t\t\r\n\t\t\t\t封顶 ¥99\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t前15分钟内归还免费\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t不足60分钟按60分钟计费\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t持续计费至99元视为买断\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t请在使用前检查设备是否完好\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t请在指定区域内使用设备\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t归还时请确保设备完好,避免损坏\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/uni-fans-score/pages/device/detail.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","reactive","onLoad","uni","onMounted","getUserInfo","getUserPhoneNumber","getDeviceInfo","rentPowerBank","getOrderByOrderNo","updateOrderPackage","getOrderByOrderNoScore","initiateWeChatScorePayment","res","getOrderByOrderNoScorePayStatus","cancelOrder"],"mappings":"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"}
\ 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 1669345..b93383a 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":["pages/index/index.vue","E:/HBuilderX.4.24.2024072208/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvaW5kZXgvaW5kZXgudnVl"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t扫码使用\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t扫描设备二维码即可使用或归还\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t5.0元/小时\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t15分钟内归还免费\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t不足1小时按1小时计费\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t封顶99元,计费达99元视为买断\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t1\r\n\t\t\t\t\t\r\n\t\t\t\t\t扫码弹出\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t2\r\n\t\t\t\t\t\r\n\t\t\t\t\t使用风扇\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t3\r\n\t\t\t\t\t\r\n\t\t\t\t\t插入归还\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t4\r\n\t\t\t\t\t\r\n\t\t\t\t\t结束订单\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/uni-fans-score/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni","getQueryString","wxLogin","URL","getDeviceInfo"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["pages/index/index.vue","E:/HBuilderX.4.24.2024072208/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvaW5kZXgvaW5kZXgudnVl"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t扫码使用\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t扫描设备二维码即可使用或归还\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t5.0元/小时\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t15分钟内归还免费\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t不足1小时按1小时计费\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t封顶99元,计费达99元视为买断\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t1\r\n\t\t\t\t\t\r\n\t\t\t\t\t扫码弹出\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t2\r\n\t\t\t\t\t\r\n\t\t\t\t\t使用风扇\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t3\r\n\t\t\t\t\t\r\n\t\t\t\t\t插入归还\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t4\r\n\t\t\t\t\t\r\n\t\t\t\t\t结束订单\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/uni-fans-score/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni","getQueryString","wxLogin","URL","getDeviceInfo"],"mappings":"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"}
\ 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 f90c75c..7068d51 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: \"wx2165f0be356ae7a9\"\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\nexport const initiateWeChatScorePayment = (paymentData) => {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t// 确保paymentData包含所需数据\r\n\t\tif (!paymentData || !paymentData.data || !paymentData.data.package) {\r\n\t\t\treject(new Error('支付参数不完整'));\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// 使用wx.openBusinessView打开微信支付分小程序\r\n\t\twx.openBusinessView({\r\n\t\t\tbusinessType: 'wxpayScoreUse',\r\n\t\t\textraData: {\r\n\t\t\t\tmch_id: paymentData.data.mch_id,\r\n\t\t\t\tpackage: paymentData.data.package\r\n\t\t\t},\r\n\t\t\tsuccess: (businessRes) => {\r\n\t\t\t\t// 根据返回结果判断是否完成支付\r\n\t\t\t\tif (businessRes.errMsg === 'openBusinessView:ok') {\r\n\t\t\t\t\tresolve(businessRes);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(new Error('支付流程未完成'));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfail: (error) => {\r\n\t\t\t\tconsole.error('微信支付分小程序调用失败', error);\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: error.errMsg || '支付分接口调用失败',\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\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","wx"],"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;AAGY,MAAC,6BAA6B,CAAC,gBAAgB;AAC1D,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAEvC,QAAI,CAAC,eAAe,CAAC,YAAY,QAAQ,CAAC,YAAY,KAAK,SAAS;AACnE,aAAO,IAAI,MAAM,SAAS,CAAC;AAC3B;AAAA,IACA;AAGDC,kBAAAA,KAAG,iBAAiB;AAAA,MACnB,cAAc;AAAA,MACd,WAAW;AAAA,QACV,QAAQ,YAAY,KAAK;AAAA,QACzB,SAAS,YAAY,KAAK;AAAA,MAC1B;AAAA,MACD,SAAS,CAAC,gBAAgB;AAEzB,YAAI,YAAY,WAAW,uBAAuB;AACjD,kBAAQ,WAAW;AAAA,QACxB,OAAW;AACN,iBAAO,IAAI,MAAM,SAAS,CAAC;AAAA,QAC3B;AAAA,MACD;AAAA,MACD,MAAM,CAAC,UAAU;AAChBH,sBAAc,MAAA,MAAA,SAAA,wBAAA,gBAAgB,KAAK;AACnCA,sBAAAA,MAAI,UAAU;AAAA,UACb,OAAO,MAAM,UAAU;AAAA,UACvB,MAAM;AAAA,QACX,CAAK;AACD,eAAO,KAAK;AAAA,MACZ;AAAA,IACJ,CAAG;AAAA,EACH,CAAE;AACF;AAEY,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\nimport {\r\n\tURL,\r\n\tappid\r\n} from \"@/config/url.js\"\r\n// import { GET_PHONE_NUMBER_URL } from \"../config/url\"\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: \"wx2165f0be356ae7a9\"\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\treturn new Promise(async (res, rej) => {\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\nexport const getUserPhoneNumber = (code) => {\r\n\treturn new Promise(async (resolve, reject) => {\r\n\t\ttry {\r\n\t\t\t// 获取登录态信息\r\n\t\t\tconst token = uni.getStorageSync('token')\r\n\t\t\t\r\n\t\t\tif (!token) {\r\n\t\t\t\treject(new Error('用户未登录'))\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconsole.log('开始请求获取手机号,code=', code, '请求地址=', URL + '/app/user/getPhoneNumber')\r\n\t\t\t\r\n\t\t\t// 发送请求到后端获取手机号\r\n\t\t\tuni.request({\r\n\t\t\t\turl: URL + '/app/user/getPhoneNumber',\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theader: {\r\n\t\t\t\t\t'Authorization': 'Bearer ' + token,\r\n\t\t\t\t\t'clientId': uni.getStorageSync('client_id'),\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t},\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tcode: code, // 微信获取手机号授权后的临时code\r\n\t\t\t\t\tappid: appid\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: (res) => {\r\n\t\t\t\t\tconsole.log('请求获取手机号接口成功,原始响应:', JSON.stringify(res))\r\n\t\t\t\t\t\r\n\t\t\t\t\t// 检查HTTP状态码\r\n\t\t\t\t\tif (res.statusCode !== 200) {\r\n\t\t\t\t\t\treject(new Error(`HTTP错误: ${res.statusCode}`))\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t// 确保响应体存在\r\n\t\t\t\t\tif (!res.data) {\r\n\t\t\t\t\t\treject(new Error('服务器返回空数据'))\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t// 正常返回响应数据,不做额外判断,由调用方处理业务状态码\r\n\t\t\t\t\tresolve(res.data)\r\n\t\t\t\t},\r\n\t\t\t\tfail: (err) => {\r\n\t\t\t\t\tconsole.error('请求获取手机号接口网络错误:', err)\r\n\t\t\t\t\treject(new Error('请求获取手机号接口失败: ' + (err.errMsg || JSON.stringify(err))))\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('获取手机号过程中出现异常:', error)\r\n\t\t\treject(new Error('获取手机号异常: ' + (error.message || JSON.stringify(error))))\r\n\t\t}\r\n\t})\r\n}\r\n\r\n// 调用微信支付分接口\r\nexport const initiateWeChatScorePayment = (paymentData) => {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t// 确保paymentData包含所需数据\r\n\t\tif (!paymentData || !paymentData.data || !paymentData.data.package) {\r\n\t\t\treject(new Error('支付参数不完整'));\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// 使用wx.openBusinessView打开微信支付分小程序\r\n\t\twx.openBusinessView({\r\n\t\t\tbusinessType: 'wxpayScoreUse',\r\n\t\t\textraData: {\r\n\t\t\t\tmch_id: paymentData.data.mch_id,\r\n\t\t\t\tpackage: paymentData.data.package\r\n\t\t\t},\r\n\t\t\tsuccess: (businessRes) => {\r\n\t\t\t\t// 根据返回结果判断是否完成支付\r\n\t\t\t\tif (businessRes.errMsg === 'openBusinessView:ok') {\r\n\t\t\t\t\tresolve(businessRes);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(new Error('支付流程未完成'));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfail: (error) => {\r\n\t\t\t\tconsole.error('微信支付分小程序调用失败', error);\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: error.errMsg || '支付分接口调用失败',\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\nexport const getQueryString = function(url, name) {\r\n\tvar reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')\r\n\tvar r = url.substr(1).match(reg)\r\n\tif (r != null) {\r\n\t\treturn r[2]\r\n\t}\r\n\treturn null;\r\n}"],"names":["uni","login","getMyIndexInfo","URL","appid","wx"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/common/vendor.js b/unpackage/dist/dev/mp-weixin/common/vendor.js
index 446430a..f100e6f 100644
--- a/unpackage/dist/dev/mp-weixin/common/vendor.js
+++ b/unpackage/dist/dev/mp-weixin/common/vendor.js
@@ -6990,7 +6990,7 @@ function isConsoleWritable() {
function initRuntimeSocketService() {
const hosts = "192.168.10.59,127.0.0.1";
const port = "8090";
- const id = "mp-weixin_f_V2rb";
+ const id = "mp-weixin_1_bom0";
const lazy = typeof swan !== "undefined";
let restoreError = lazy ? () => {
} : initOnError();
diff --git a/unpackage/dist/dev/mp-weixin/pages/device/detail.js b/unpackage/dist/dev/mp-weixin/pages/device/detail.js
index 8a2e222..38ffe12 100644
--- a/unpackage/dist/dev/mp-weixin/pages/device/detail.js
+++ b/unpackage/dist/dev/mp-weixin/pages/device/detail.js
@@ -17,12 +17,99 @@ const _sfc_main = {
});
const isLoggedIn = common_vendor.ref(true);
const phoneNumber = common_vendor.ref("");
+ const showPhoneAuthPopup = common_vendor.ref(false);
common_vendor.onLoad((options) => {
deviceId.value = options.deviceNo;
checkOrderStatus();
- common_vendor.index.__f__("log", "at pages/device/detail.vue:174", options.deviceNo);
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:198", options.deviceNo);
fetchDeviceInfo();
});
+ common_vendor.onMounted(() => {
+ checkUserPhone();
+ });
+ const checkUserPhone = async () => {
+ try {
+ const userInfoRes = await util_index.getUserInfo();
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:209", userInfoRes.data.phone, "getUserInfoPhone");
+ if (userInfoRes.code == 200 && userInfoRes.data && userInfoRes.data.phone) {
+ phoneNumber.value = userInfoRes.data.phone;
+ } else {
+ showPhoneAuthPopup.value = true;
+ }
+ } catch (error) {
+ common_vendor.index.__f__("error", "at pages/device/detail.vue:218", "获取用户信息失败:", error);
+ }
+ };
+ const onGetPhoneNumber = (e) => {
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:224", "getPhoneNumber event:", e.detail);
+ if (e.detail.errMsg && e.detail.errMsg.includes("deny")) {
+ common_vendor.index.showToast({
+ title: "需要授权手机号才能使用设备",
+ icon: "none"
+ });
+ return;
+ }
+ if (e.detail.code) {
+ common_vendor.index.showLoading({
+ title: "获取中..."
+ });
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:241", "获取到的授权code:", e.detail.code);
+ try {
+ util_index.getUserPhoneNumber(e.detail.code).then((res) => {
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:247", "获取手机号API响应原始数据:", JSON.stringify(res));
+ common_vendor.index.hideLoading();
+ if (!res) {
+ common_vendor.index.__f__("error", "at pages/device/detail.vue:252", "API返回数据为空");
+ common_vendor.index.showModal({
+ title: "数据异常",
+ content: "API返回为空",
+ showCancel: false
+ });
+ return;
+ }
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:262", "响应code:", res.code, "响应类型:", typeof res.code);
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:263", "是否有data:", !!res.data, "是否有phone:", res.data && !!res.data.phone);
+ if (res.code == 200 && res.data && res.data.phoneNumber) {
+ phoneNumber.value = res.data.phoneNumber;
+ showPhoneAuthPopup.value = false;
+ common_vendor.index.showToast({
+ title: "手机号获取成功",
+ icon: "success"
+ });
+ } else {
+ common_vendor.index.__f__("warn", "at pages/device/detail.vue:275", "获取手机号响应异常:", res.msg || "未知错误");
+ common_vendor.index.showModal({
+ title: "获取手机号异常",
+ content: `状态码: ${res.code}, 消息: ${res.msg || "无"}`,
+ showCancel: false
+ });
+ }
+ }).catch((err) => {
+ common_vendor.index.hideLoading();
+ common_vendor.index.__f__("error", "at pages/device/detail.vue:285", "获取手机号码失败(catch):", err);
+ let errMsg = err.message || err.toString();
+ common_vendor.index.showModal({
+ title: "获取手机号失败",
+ content: "错误信息: " + errMsg,
+ showCancel: false
+ });
+ });
+ } catch (outerError) {
+ common_vendor.index.hideLoading();
+ common_vendor.index.__f__("error", "at pages/device/detail.vue:297", "获取手机号外部错误:", outerError);
+ common_vendor.index.showModal({
+ title: "意外错误",
+ content: "处理过程发生异常: " + (outerError.message || outerError),
+ showCancel: false
+ });
+ }
+ } else {
+ common_vendor.index.showToast({
+ title: "获取授权码失败",
+ icon: "none"
+ });
+ }
+ };
const fetchDeviceInfo = async () => {
const res = await config_user.getDeviceInfo(deviceId.value);
if (res.code == 200) {
@@ -84,6 +171,10 @@ const _sfc_main = {
showLoginTip();
return;
}
+ if (!phoneNumber.value) {
+ showPhoneAuthPopup.value = true;
+ return;
+ }
submitRentOrder(payWay);
};
const selectedPkg = common_vendor.reactive({
@@ -104,7 +195,7 @@ const _sfc_main = {
if (payWay == "wx-pay") {
common_vendor.index.hideLoading();
const res = await config_user.getOrderByOrderNo(order.orderNo);
- common_vendor.index.__f__("log", "at pages/device/detail.vue:287", res);
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:427", res);
try {
let packageTimeMinutes = 0;
if (selectedPkg.time.includes("小时")) {
@@ -120,12 +211,12 @@ const _sfc_main = {
packagePrice: parseFloat(selectedPkg.price)
});
if (updateRes.code !== 200) {
- common_vendor.index.__f__("warn", "at pages/device/detail.vue:304", "更新订单套餐信息失败:", updateRes.msg);
+ common_vendor.index.__f__("warn", "at pages/device/detail.vue:444", "更新订单套餐信息失败:", updateRes.msg);
} else {
- common_vendor.index.__f__("log", "at pages/device/detail.vue:307", "订单套餐信息已提前更新");
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:447", "订单套餐信息已提前更新");
}
} catch (updateError) {
- common_vendor.index.__f__("error", "at pages/device/detail.vue:310", "更新订单套餐信息时出错:", updateError);
+ common_vendor.index.__f__("error", "at pages/device/detail.vue:450", "更新订单套餐信息时出错:", updateError);
}
const deposit = parseFloat(deviceInfo.value.depositAmount);
const packagePrice = parseFloat(selectedPkg.price);
@@ -143,7 +234,7 @@ const _sfc_main = {
const payResult = await util_index.initiateWeChatScorePayment(res);
if (payResult.errCode == "0") {
const res2 = await config_user.getOrderByOrderNoScorePayStatus(order.orderNo);
- common_vendor.index.__f__("log", "at pages/device/detail.vue:340", res2.data.orderStatus);
+ common_vendor.index.__f__("log", "at pages/device/detail.vue:480", res2.data.orderStatus);
if (res2.data.orderStatus == "in_used") {
common_vendor.index.showToast({
title: "设备租借成功",
@@ -191,7 +282,7 @@ const _sfc_main = {
}
};
return (_ctx, _cache) => {
- return {
+ return common_vendor.e({
a: common_vendor.t(deviceStatus.text),
b: common_vendor.n(deviceStatus.class),
c: common_vendor.t(deviceId.value),
@@ -204,8 +295,14 @@ const _sfc_main = {
j: common_vendor.t(hasActiveOrder.value ? "归还设备" : "免押金租借"),
k: hasActiveOrder.value ? 1 : "",
l: common_vendor.o(($event) => handleRent("wx-score-pay")),
- m: common_vendor.o(($event) => handleRent("wx-pay"))
- };
+ m: common_vendor.o(($event) => handleRent("wx-pay")),
+ n: showPhoneAuthPopup.value
+ }, showPhoneAuthPopup.value ? {
+ o: common_vendor.o(() => {
+ }),
+ p: common_vendor.o(onGetPhoneNumber),
+ q: common_vendor.o(($event) => showPhoneAuthPopup.value = false)
+ } : {});
};
}
};
diff --git a/unpackage/dist/dev/mp-weixin/pages/device/detail.wxml b/unpackage/dist/dev/mp-weixin/pages/device/detail.wxml
index c688faa..59c3e9c 100644
--- a/unpackage/dist/dev/mp-weixin/pages/device/detail.wxml
+++ b/unpackage/dist/dev/mp-weixin/pages/device/detail.wxml
@@ -1 +1 @@
-当前位置{{e}}电池电量{{h}}%¥5.00/小时封顶 ¥99前15分钟内归还免费不足60分钟按60分钟计费持续计费至99元视为买断请在使用前检查设备是否完好请在指定区域内使用设备归还时请确保设备完好,避免损坏
\ No newline at end of file
+当前位置{{e}}电池电量{{h}}%¥5.00/小时封顶 ¥99前15分钟内归还免费不足60分钟按60分钟计费持续计费至99元视为买断请在使用前检查设备是否完好请在指定区域内使用设备归还时请确保设备完好,避免损坏
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/pages/device/detail.wxss b/unpackage/dist/dev/mp-weixin/pages/device/detail.wxss
index cd4ea48..cf48784 100644
--- a/unpackage/dist/dev/mp-weixin/pages/device/detail.wxss
+++ b/unpackage/dist/dev/mp-weixin/pages/device/detail.wxss
@@ -301,4 +301,96 @@
.footer .rent-button.data-v-d65de3a7:active {
transform: scale(0.98);
opacity: 0.9;
+}
+
+/* 手机号授权弹窗样式 */
+.phone-auth-popup.data-v-d65de3a7 {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 1000;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+.popup-mask.data-v-d65de3a7 {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.popup-content.data-v-d65de3a7 {
+ background-color: #fff;
+ border-radius: 24rpx;
+ box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.15);
+ width: 90%;
+ max-width: 500rpx;
+ padding: 40rpx 30rpx;
+ position: relative;
+ z-index: 1001;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+.popup-header.data-v-d65de3a7 {
+ margin-bottom: 30rpx;
+ text-align: center;
+}
+.popup-title.data-v-d65de3a7 {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+}
+.popup-body.data-v-d65de3a7 {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 30rpx;
+}
+.auth-desc.data-v-d65de3a7 {
+ font-size: 28rpx;
+ color: #666;
+ text-align: center;
+ margin-bottom: 30rpx;
+ line-height: 1.6;
+}
+.auth-btn.data-v-d65de3a7 {
+ width: 100%;
+ height: 92rpx;
+ border-radius: 46rpx;
+ background: linear-gradient(135deg, #07c160, #10d673);
+ color: #fff;
+ font-size: 32rpx;
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: none;
+ margin-bottom: 20rpx;
+}
+.auth-btn.data-v-d65de3a7:active {
+ transform: scale(0.98);
+ opacity: 0.9;
+}
+.auth-cancel.data-v-d65de3a7 {
+ width: 100%;
+ height: 92rpx;
+ border-radius: 46rpx;
+ background-color: #f5f7fa;
+ color: #333;
+ font-size: 32rpx;
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: none;
+}
+.auth-cancel.data-v-d65de3a7:active {
+ transform: scale(0.98);
+ opacity: 0.9;
}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/pages/index/index.js b/unpackage/dist/dev/mp-weixin/pages/index/index.js
index d1fffd3..9672966 100644
--- a/unpackage/dist/dev/mp-weixin/pages/index/index.js
+++ b/unpackage/dist/dev/mp-weixin/pages/index/index.js
@@ -14,10 +14,8 @@ const _sfc_main = {
fail: reject
});
});
- common_vendor.index.__f__("log", "at pages/index/index.vue:131", scanResult.path);
+ common_vendor.index.__f__("log", "at pages/index/index.vue:152", scanResult.path);
let deviceNo = util_index.getQueryString(scanResult.path, "deviceNo");
- common_vendor.index.__f__("log", "at pages/index/index.vue:134", "扫码路径:", scanResult.path);
- common_vendor.index.__f__("log", "at pages/index/index.vue:135", "解析到的设备号:", deviceNo);
if (!deviceNo) {
common_vendor.index.showToast({
title: "无效的设备二维码",
@@ -36,14 +34,12 @@ const _sfc_main = {
"Clientid": common_vendor.index.getStorageSync("client_id")
}
});
- common_vendor.index.__f__("log", "at pages/index/index.vue:160", "使用中订单检查结果:", 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:165", "检测到使用中订单,准备跳转:", 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:171", "已发起页面跳转");
+ common_vendor.index.__f__("log", "at pages/index/index.vue:187", "已发起页面跳转");
return;
}
const orderRes = await common_vendor.index.request({
@@ -54,28 +50,26 @@ const _sfc_main = {
"Clientid": common_vendor.index.getStorageSync("client_id")
}
});
- common_vendor.index.__f__("log", "at pages/index/index.vue:185", "待支付订单检查结果:", JSON.stringify(orderRes));
+ common_vendor.index.__f__("log", "at pages/index/index.vue:201", "待支付订单检查结果:", 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:190", "检测到待支付订单,准备跳转:", unpaidOrder);
common_vendor.index.navigateTo({
url: `/pages/order/payment?orderId=${unpaidOrder.orderId}`
});
} else {
- common_vendor.index.__f__("log", "at pages/index/index.vue:196", "无待支付订单,获取设备信息, deviceNo:", deviceNo);
try {
const deviceInfoRes = await config_user.getDeviceInfo(deviceNo);
if (deviceInfoRes.code == 200 && deviceInfoRes.data && deviceInfoRes.data.device) {
const deviceInfo = deviceInfoRes.data.device;
if (deviceInfo.feeConfig) {
- common_vendor.index.__f__("log", "at pages/index/index.vue:207", "获取到设备feeConfig信息:", deviceInfo.feeConfig);
+ common_vendor.index.__f__("log", "at pages/index/index.vue:219", "获取到设备feeConfig信息:", deviceInfo.feeConfig);
try {
const feeConfig = JSON.parse(deviceInfo.feeConfig);
common_vendor.index.navigateTo({
url: `/pages/device/detail?deviceNo=${deviceNo}&feeConfig=${encodeURIComponent(deviceInfo.feeConfig)}`
});
} catch (e) {
- common_vendor.index.__f__("error", "at pages/index/index.vue:218", "解析feeConfig失败:", e);
+ common_vendor.index.__f__("error", "at pages/index/index.vue:230", "解析feeConfig失败:", e);
common_vendor.index.navigateTo({
url: `/pages/device/detail?deviceNo=${deviceNo}`
});
@@ -86,7 +80,7 @@ const _sfc_main = {
});
}
} else {
- common_vendor.index.__f__("error", "at pages/index/index.vue:232", "获取设备信息失败:", deviceInfoRes.msg || "未知错误");
+ common_vendor.index.__f__("error", "at pages/index/index.vue:244", "获取设备信息失败:", deviceInfoRes.msg || "未知错误");
common_vendor.index.showToast({
title: "获取设备信息失败",
icon: "none"
@@ -96,7 +90,7 @@ const _sfc_main = {
});
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/index/index.vue:244", "获取设备信息异常:", error);
+ common_vendor.index.__f__("error", "at pages/index/index.vue:256", "获取设备信息异常:", error);
common_vendor.index.showToast({
title: "获取设备信息失败",
icon: "none"
@@ -107,7 +101,7 @@ const _sfc_main = {
}
}
} catch (error) {
- common_vendor.index.__f__("error", "at pages/index/index.vue:257", "扫码处理失败:", error);
+ common_vendor.index.__f__("error", "at pages/index/index.vue:269", "扫码处理失败:", error);
common_vendor.index.showToast({
title: "扫码失败",
icon: "none"
@@ -117,11 +111,16 @@ const _sfc_main = {
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
- return {
+ return common_vendor.e({
a: common_assets._imports_0,
b: common_assets._imports_1,
- c: common_vendor.o((...args) => $options.handleScan && $options.handleScan(...args))
- };
+ c: common_vendor.o((...args) => $options.handleScan && $options.handleScan(...args)),
+ d: _ctx.showPhoneAuthPopup
+ }, _ctx.showPhoneAuthPopup ? {
+ e: common_vendor.o(($event) => _ctx.showPhoneAuthPopup = false),
+ f: common_vendor.o((...args) => _ctx.onGetPhoneNumber && _ctx.onGetPhoneNumber(...args)),
+ g: common_vendor.o(($event) => _ctx.showPhoneAuthPopup = false)
+ } : {});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-1cf27b2a"]]);
wx.createPage(MiniProgramPage);
diff --git a/unpackage/dist/dev/mp-weixin/pages/index/index.wxml b/unpackage/dist/dev/mp-weixin/pages/index/index.wxml
index d2b9c9c..f8dea52 100644
--- a/unpackage/dist/dev/mp-weixin/pages/index/index.wxml
+++ b/unpackage/dist/dev/mp-weixin/pages/index/index.wxml
@@ -1 +1 @@
-扫码使用扫描设备二维码即可使用或归还5.0元/小时15分钟内归还免费不足1小时按1小时计费封顶99元,计费达99元视为买断1扫码弹出2使用风扇3插入归还4结束订单
\ No newline at end of file
+扫码使用扫描设备二维码即可使用或归还5.0元/小时15分钟内归还免费不足1小时按1小时计费封顶99元,计费达99元视为买断1扫码弹出2使用风扇3插入归还4结束订单
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/util/index.js b/unpackage/dist/dev/mp-weixin/util/index.js
index 0fbe1b6..d8d53e8 100644
--- a/unpackage/dist/dev/mp-weixin/util/index.js
+++ b/unpackage/dist/dev/mp-weixin/util/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 wxLogin = () => {
return new Promise((resolve, reject) => {
common_vendor.index.login({
@@ -48,6 +49,51 @@ const getUserInfo = () => {
res(result);
});
};
+const getUserPhoneNumber = (code) => {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const token = common_vendor.index.getStorageSync("token");
+ if (!token) {
+ reject(new Error("用户未登录"));
+ return;
+ }
+ common_vendor.index.__f__("log", "at util/index.js:88", "开始请求获取手机号,code=", code, "请求地址=", config_url.URL + "/app/user/getPhoneNumber");
+ common_vendor.index.request({
+ url: config_url.URL + "/app/user/getPhoneNumber",
+ method: "POST",
+ header: {
+ "Authorization": "Bearer " + token,
+ "clientId": common_vendor.index.getStorageSync("client_id"),
+ "Content-Type": "application/json"
+ },
+ data: {
+ code,
+ // 微信获取手机号授权后的临时code
+ appid: config_url.appid
+ },
+ success: (res) => {
+ common_vendor.index.__f__("log", "at util/index.js:104", "请求获取手机号接口成功,原始响应:", JSON.stringify(res));
+ if (res.statusCode !== 200) {
+ reject(new Error(`HTTP错误: ${res.statusCode}`));
+ return;
+ }
+ if (!res.data) {
+ reject(new Error("服务器返回空数据"));
+ return;
+ }
+ resolve(res.data);
+ },
+ fail: (err) => {
+ common_vendor.index.__f__("error", "at util/index.js:122", "请求获取手机号接口网络错误:", err);
+ reject(new Error("请求获取手机号接口失败: " + (err.errMsg || JSON.stringify(err))));
+ }
+ });
+ } catch (error) {
+ common_vendor.index.__f__("error", "at util/index.js:127", "获取手机号过程中出现异常:", error);
+ reject(new Error("获取手机号异常: " + (error.message || JSON.stringify(error))));
+ }
+ });
+};
const initiateWeChatScorePayment = (paymentData) => {
return new Promise((resolve, reject) => {
if (!paymentData || !paymentData.data || !paymentData.data.package) {
@@ -68,7 +114,7 @@ const initiateWeChatScorePayment = (paymentData) => {
}
},
fail: (error) => {
- common_vendor.index.__f__("error", "at util/index.js:100", "微信支付分小程序调用失败", error);
+ common_vendor.index.__f__("error", "at util/index.js:158", "微信支付分小程序调用失败", error);
common_vendor.index.showToast({
title: error.errMsg || "支付分接口调用失败",
icon: "none"
@@ -88,6 +134,7 @@ const getQueryString = function(url, name) {
};
exports.getQueryString = getQueryString;
exports.getUserInfo = getUserInfo;
+exports.getUserPhoneNumber = getUserPhoneNumber;
exports.initiateWeChatScorePayment = initiateWeChatScorePayment;
exports.wxLogin = wxLogin;
//# sourceMappingURL=../../.sourcemap/mp-weixin/util/index.js.map
diff --git a/util/index.js b/util/index.js
index 02b7e64..50715c3 100644
--- a/util/index.js
+++ b/util/index.js
@@ -2,6 +2,11 @@ import {
login,
getMyIndexInfo
} from "../config/user"
+import {
+ URL,
+ appid
+} from "@/config/url.js"
+// import { GET_PHONE_NUMBER_URL } from "../config/url"
// 微信登录方法
export const wxLogin = () => {
@@ -60,11 +65,7 @@ export const wxLogin = () => {
// 获取用户信息
export const getUserInfo = () => {
-
-
-
return new Promise(async (res, rej) => {
-
const result = await getMyIndexInfo({
isHide: false,
})
@@ -72,6 +73,63 @@ export const getUserInfo = () => {
})
}
+// 获取用户手机号
+export const getUserPhoneNumber = (code) => {
+ return new Promise(async (resolve, reject) => {
+ try {
+ // 获取登录态信息
+ const token = uni.getStorageSync('token')
+
+ if (!token) {
+ reject(new Error('用户未登录'))
+ return
+ }
+
+ console.log('开始请求获取手机号,code=', code, '请求地址=', URL + '/app/user/getPhoneNumber')
+
+ // 发送请求到后端获取手机号
+ uni.request({
+ url: URL + '/app/user/getPhoneNumber',
+ method: 'POST',
+ header: {
+ 'Authorization': 'Bearer ' + token,
+ 'clientId': uni.getStorageSync('client_id'),
+ 'Content-Type': 'application/json'
+ },
+ data: {
+ code: code, // 微信获取手机号授权后的临时code
+ appid: appid
+ },
+ success: (res) => {
+ console.log('请求获取手机号接口成功,原始响应:', JSON.stringify(res))
+
+ // 检查HTTP状态码
+ if (res.statusCode !== 200) {
+ reject(new Error(`HTTP错误: ${res.statusCode}`))
+ return
+ }
+
+ // 确保响应体存在
+ if (!res.data) {
+ reject(new Error('服务器返回空数据'))
+ return
+ }
+
+ // 正常返回响应数据,不做额外判断,由调用方处理业务状态码
+ resolve(res.data)
+ },
+ fail: (err) => {
+ console.error('请求获取手机号接口网络错误:', err)
+ reject(new Error('请求获取手机号接口失败: ' + (err.errMsg || JSON.stringify(err))))
+ }
+ })
+ } catch (error) {
+ console.error('获取手机号过程中出现异常:', error)
+ reject(new Error('获取手机号异常: ' + (error.message || JSON.stringify(error))))
+ }
+ })
+}
+
// 调用微信支付分接口
export const initiateWeChatScorePayment = (paymentData) => {
return new Promise((resolve, reject) => {
@@ -80,7 +138,7 @@ export const initiateWeChatScorePayment = (paymentData) => {
reject(new Error('支付参数不完整'));
return;
}
-
+
// 使用wx.openBusinessView打开微信支付分小程序
wx.openBusinessView({
businessType: 'wxpayScoreUse',
@@ -108,11 +166,11 @@ export const initiateWeChatScorePayment = (paymentData) => {
});
}
-export const getQueryString = function (url, name) {
- var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
- var r = url.substr(1).match(reg)
- if (r != null) {
- return r[2]
- }
- return null;
+export const getQueryString = function(url, name) {
+ var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
+ var r = url.substr(1).match(reg)
+ if (r != null) {
+ return r[2]
+ }
+ return null;
}
\ No newline at end of file