style:修改页面样式

This commit is contained in:
2025-07-25 14:39:34 +08:00
parent 6494721f81
commit 45f80e469a
21 changed files with 1237 additions and 1375 deletions
+1 -1
View File
@@ -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.1.123:8080" //本地调试
// export const URL = "http://192.168.10.16:8080" //本地调试
export const appid = "wx2165f0be356ae7a9" //小程序appid
+2 -2
View File
@@ -123,9 +123,9 @@
<text class="credit-score">550分及以上优享</text>
</view>
</view>
<!-- <view class="" style="align-items: center;align-content: center;text-align: center;line-height: 50rpx;"
<view class="" style="align-items: center;align-content: center;text-align: center;line-height: 50rpx;"
@click="handleRent('wx-pay')">
无法免押点这里></view> -->
无法免押点这里></view>
</view>
<!-- 手机号授权弹窗 -->
+8 -1
View File
@@ -12,7 +12,7 @@
<view class="user-details" v-if="userInfo">
<view class="username">{{ userInfo.nickName }}</view>
<view class="user-id">{{ userInfo.phone || '未绑定手机号' }}</view>
<view class="user-id">{{ userInfo.phone ? maskPhone(userInfo.phone) : '未绑定手机号' }}</view>
</view>
<view class="user-details" v-else>
@@ -314,6 +314,13 @@
icon: 'none'
});
};
// 手机号掩码函数
function maskPhone(phone) {
if (!phone) return '';
// 只处理11位手机号
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
}
</script>
<style lang="scss" scoped>
+243 -312
View File
@@ -1,29 +1,17 @@
<template>
<view class="details-container">
<!-- 订单状态卡片 -->
<view class="status-card">
<view class="status-icon" :class="orderStatusClass"></view>
<view class="status-text">{{ orderStatusText }}</view>
<view class="status-desc">{{ orderStatusDesc }}</view>
</view>
<view class="return-container">
<!-- 订单信息卡片 -->
<view class="info-card">
<view class="card-title">订单信息</view>
<view class="info-item">
<text class="label">订单号</text>
<text class="value">{{ orderInfo.orderNo || '-' }}</text>
<view class="order-card">
<view class="order-header">
<text class="title">{{ orderStatusText }}</text>
<text class="order-no">订单号{{ orderInfo.orderNo || '-' }}</text>
</view>
<view class="info-item">
<text class="label">设备号</text>
<text class="value">{{ orderInfo.deviceNo || '-' }}</text>
</view>
<view class="info-item">
<text class="label">租借方式</text>
<view class="value payment-method">
<!-- <text>{{ paymentMethod }}</text> -->
<!-- 支付方式标识 -->
<view class="device-info">
<view class="device-left">
<view class="device-name">共享风扇</view>
<view class="device-id">设备号{{ orderInfo.deviceNo || '-' }}</view>
</view>
<view class="device-right">
<view class="payment-badge wx-score" v-if="orderInfo.payWay === 'wx_score_pay'">
<image src="/static/images/wxpayflag.png" mode="aspectFit" class="badge-icon"></image>
<view class="badge-text">
@@ -32,114 +20,76 @@
<text class="highlight">免押租借</text>
</view>
</view>
<!-- 押金租借标识 -->
<view class="payment-badge deposit" v-else>
<text class="badge-text">押金租借</text>
</view>
</view>
</view>
<view class="info-item">
<text class="label">创建时间</text>
<text class="value">{{ orderInfo.createTime || '-' }}</text>
</view>
<view class="info-item">
<text class="label">开始时间</text>
<text class="value">{{ orderInfo.startTime || '-' }}</text>
</view>
<view class="info-item" v-if="orderInfo.endTime">
<text class="label">结束时间</text>
<text class="value">{{ orderInfo.endTime }}</text>
</view>
<view class="info-item" v-if="orderInfo.phone">
<text class="label">联系电话</text>
<text class="value">{{ orderInfo.phone }}</text>
<view class="time-info">
<!-- <view class="time-item">
<text class="label">创建时间</text>
<text class="value">{{ orderInfo.createTime || '-' }}</text>
</view> -->
<view class="time-item">
<text class="label">开始时间</text>
<text class="value">{{ orderInfo.startTime || '-' }}</text>
</view>
<view class="time-item" v-if="orderInfo.endTime">
<text class="label">结束时间</text>
<text class="value">{{ orderInfo.endTime }}</text>
</view>
<view class="time-item" v-if="orderInfo.phone">
<text class="label">联系电话</text>
<text class="value">{{ orderInfo.phone }}</text>
</view>
</view>
</view>
<!-- 费用信息卡片 -->
<view class="info-card">
<view class="card-title">费用信息</view>
<view class="info-item" v-if="orderInfo.depositAmount">
<text class="label">押金</text>
<text class="value">{{ orderInfo.depositAmount }}</text>
</view>
<view class="info-item" v-if="orderInfo.packageTime && orderInfo.packagePrice">
<text class="label">套餐</text>
<text class="value">{{ orderInfo.packagePrice }} / {{ formatTime(orderInfo.packageTime) }}</text>
</view>
<view class="info-item total">
<text class="label">合计</text>
<text class="value">{{ orderInfo.payAmount || 0 }}</text>
<view class="notice-card">
<view class="notice-title">费用信息</view>
<view class="notice-list">
<view class="notice-item" v-if="orderInfo.depositAmount">
<view class="dot"></view>
<text>押金{{ orderInfo.depositAmount }}</text>
</view>
<view class="notice-item" v-if="orderInfo.packageTime && orderInfo.packagePrice">
<view class="dot"></view>
<text>套餐{{ orderInfo.packagePrice }} / {{ formatTime(orderInfo.packageTime) }}</text>
</view>
<view class="notice-item">
<view class="dot"></view>
<text>合计{{ orderInfo.payAmount || 0 }}</text>
</view>
</view>
</view>
<!-- 操作按钮 -->
<view class="action-buttons" v-if="orderInfo.orderStatus === 'waiting_for_payment'">
<view class="btn cancel" @click="handleCancelOrder">取消订单</view>
<view class="btn primary" @click="handlePayment">立即支付</view>
</view>
<view class="action-buttons" v-else-if="orderInfo.orderStatus === 'in_used'">
<view class="btn primary" @click="navigateToReturn">归还设备</view>
</view>
<!-- 底部操作栏 -->
<!-- <view class="bottom-bar">
<view class="action-item secondary" v-if="orderInfo.orderStatus == 'waiting_for_payment'" @click="handleCancelOrder">取消订单</view>
<view class="action-item primary" v-if="orderInfo.orderStatus == 'waiting_for_payment'" @click="handlePayment">立即支付</view>
<view class="action-item primary" v-else-if="orderInfo.orderStatus == 'in_used'" @click="navigateToReturn">归还设备</view>
</view> -->
</view>
</template>
<script setup>
import { ref, computed, onMounted } from 'vue';
import { ref, computed } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import { queryById, cancelOrder, confirmPaymentAndRent } from '@/config/user.js';
const orderId = ref('');
const orderInfo = ref({});
// 状态计算属性
const orderStatusText = computed(() => {
const status = orderInfo.value.orderStatus;
switch(status) {
case 'waiting_for_payment': return '待支付';
case 'waiting_for_payment': return '待支付';
case 'in_used': return '使用中';
case 'used_done': return '已完成';
case 'order_cancelled': return '已取消';
default: return '未知状态';
default: return '使用中';
}
});
const orderStatusClass = computed(() => {
const status = orderInfo.value.orderStatus;
switch(status) {
case 'waiting_for_payment': return 'status-waiting';
case 'in_used': return 'status-using';
case 'used_done': return 'status-finished';
case 'order_cancelled': return 'status-cancelled';
default: return '';
}
});
const orderStatusDesc = computed(() => {
const status = orderInfo.value.orderStatus;
switch(status) {
case 'waiting_for_payment': return '请在15分钟内完成支付';
case 'in_used': return '设备正在使用中';
case 'used_done': return '感谢您的使用';
case 'order_cancelled': return '该订单已取消';
default: return '';
}
});
const paymentMethod = computed(() => {
const payWay = orderInfo.value.payWay;
if (payWay === 'wx_score_pay') {
return '微信支付分 (免押金)';
} else if (payWay === 'wx_pay') {
return '微信支付';
} else {
return '押金支付';
}
});
// 页面加载
onLoad(async (options) => {
if (options && options.orderId) {
orderId.value = options.orderId;
@@ -155,18 +105,12 @@ onLoad(async (options) => {
}
});
// 加载订单详情
const loadOrderDetails = async () => {
try {
uni.showLoading({
title: '加载中'
});
uni.showLoading({ title: '加载中' });
const res = await queryById(orderId.value);
if (res.code === 200 && res.data) {
orderInfo.value = res.data;
// 格式化时间
if (orderInfo.value.createTime) {
orderInfo.value.createTime = formatDateTime(new Date(orderInfo.value.createTime));
}
@@ -179,7 +123,6 @@ const loadOrderDetails = async () => {
} else {
throw new Error('获取订单详情失败');
}
uni.hideLoading();
} catch (error) {
uni.hideLoading();
@@ -190,7 +133,6 @@ const loadOrderDetails = async () => {
}
};
// 格式化时间
const formatDateTime = (date) => {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
@@ -200,10 +142,8 @@ const formatDateTime = (date) => {
return `${year}-${month}-${day} ${hour}:${minute}`;
};
// 格式化套餐时间
const formatTime = (minutes) => {
if (!minutes) return '';
const mins = parseInt(minutes);
if (mins < 60) {
return `${mins}分钟`;
@@ -214,7 +154,6 @@ const formatTime = (minutes) => {
}
};
// 取消订单
const handleCancelOrder = () => {
uni.showModal({
title: '确认取消',
@@ -223,65 +162,40 @@ const handleCancelOrder = () => {
if (res.confirm) {
try {
uni.showLoading({ title: '处理中' });
const result = await cancelOrder({
orderId: orderId.value
});
const result = await cancelOrder({ orderId: orderId.value });
if (result.code === 200) {
uni.hideLoading();
uni.showToast({
title: '订单已取消',
icon: 'success'
});
// 重新加载订单详情
uni.showToast({ title: '订单已取消', icon: 'success' });
await loadOrderDetails();
} else {
throw new Error(result.msg || '取消订单失败');
}
} catch (error) {
uni.hideLoading();
uni.showToast({
title: error.message || '取消订单失败',
icon: 'none'
});
uni.showToast({ title: error.message || '取消订单失败', icon: 'none' });
}
}
}
});
};
// 立即支付
const handlePayment = async () => {
try {
uni.showLoading({
title: '处理中'
});
uni.showLoading({ title: '处理中' });
const res = await confirmPaymentAndRent(orderId.value);
if (res.code === 200) {
uni.hideLoading();
uni.showToast({
title: '支付成功',
icon: 'success'
});
// 重新加载订单详情
uni.showToast({ title: '支付成功', icon: 'success' });
await loadOrderDetails();
} else {
throw new Error(res.msg || '支付失败');
}
} catch (error) {
uni.hideLoading();
uni.showToast({
title: error.message || '支付失败',
icon: 'none'
});
uni.showToast({ title: error.message || '支付失败', icon: 'none' });
}
};
// 跳转到归还页面
const navigateToReturn = () => {
uni.navigateTo({
url: `/pages/return/index?deviceId=${orderInfo.value.deviceNo}&orderId=${orderId.value}`
@@ -290,209 +204,226 @@ const navigateToReturn = () => {
</script>
<style lang="scss" scoped>
.details-container {
.return-container {
min-height: 100vh;
background: #f7f8fa;
padding: 30rpx;
padding-bottom: 100rpx;
padding-bottom: 180rpx;
box-sizing: border-box;
// 状态卡片
.status-card {
background: #fff;
border-radius: 20rpx;
padding: 40rpx;
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
.status-icon {
width: 120rpx;
height: 120rpx;
border-radius: 50%;
margin-bottom: 20rpx;
&.status-waiting {
background: #FFF9C4;
}
&.status-using {
background: #E8F5E9;
}
&.status-finished {
background: #E3F2FD;
}
&.status-cancelled {
background: #FFEBEE;
}
}
.status-text {
font-size: 36rpx;
font-weight: 600;
color: #333;
margin-bottom: 10rpx;
}
.status-desc {
font-size: 28rpx;
color: #999;
}
}
// 信息卡片
.info-card {
.order-card {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
.card-title {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 20rpx;
position: relative;
padding-left: 20rpx;
&::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 8rpx;
height: 32rpx;
background: #1976D2;
border-radius: 4rpx;
}
}
.info-item {
.order-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
border-bottom: 1px solid #f5f5f5;
&:last-child {
border-bottom: none;
}
.label {
font-size: 28rpx;
color: #666;
}
.value {
font-size: 28rpx;
margin-bottom: 20rpx;
padding-bottom: 16rpx;
border-bottom: 1rpx solid #f0f0f0;
.title {
font-size: 30rpx;
font-weight: bold;
color: #333;
word-break: break-all;
text-align: right;
max-width: 70%;
&.payment-method {
display: flex;
flex-direction: column;
align-items: flex-end;
.payment-badge {
margin-top: 8rpx;
display: flex;
align-items: center;
padding: 4rpx 10rpx;
border-radius: 8rpx;
&.wx-score {
background: rgba(7, 193, 96, 0.08);
.badge-icon {
width: 32rpx;
height: 26rpx;
margin-right: 8rpx;
}
.badge-text {
font-size: 22rpx;
color: #07c160;
display: flex;
align-items: center;
.divider {
margin: 0 6rpx;
}
.highlight {
font-weight: 500;
}
}
}
.order-no {
font-size: 24rpx;
color: #999;
}
}
.device-info {
margin-bottom: 24rpx;
display: flex;
justify-content: space-between;
align-items: flex-start;
.device-left {
flex: 1;
margin-right: 20rpx;
.device-name {
font-size: 32rpx;
font-weight: 500;
color: #333;
margin-bottom: 8rpx;
}
.device-id {
font-size: 26rpx;
color: #999;
margin-bottom: 0;
}
}
.device-right {
.payment-badge {
display: inline-flex;
align-items: center;
padding: 6rpx 12rpx;
border-radius: 8rpx;
white-space: nowrap;
&.wx-score {
background: rgba(7, 193, 96, 0.08);
.badge-icon {
width: 32rpx;
height: 26rpx;
margin-right: 8rpx;
}
&.deposit {
background: #f5f5f5;
.badge-text {
font-size: 22rpx;
color: #666;
.badge-text {
font-size: 22rpx;
color: #07c160;
display: flex;
align-items: center;
.divider {
margin: 0 6rpx;
}
.highlight {
font-weight: 500;
}
}
}
&.deposit {
background: #f5f5f5;
.badge-text {
font-size: 22rpx;
color: #666;
font-weight: 500;
}
}
}
}
&.total {
margin-top: 10rpx;
padding-top: 30rpx;
border-top: 1px solid #f5f5f5;
.label, .value {
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.time-info {
background: #f9f9f9;
border-radius: 16rpx;
padding: 20rpx;
.time-item {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
.label {
font-size: 26rpx;
color: #666;
}
.value {
color: #FF5722;
font-size: 26rpx;
color: #333;
&.highlight {
color: #ff6b6b;
font-weight: bold;
}
}
}
}
}
// 操作按钮
.action-buttons {
.notice-card {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
.notice-title {
font-size: 30rpx;
font-weight: bold;
color: #333;
margin-bottom: 20rpx;
}
.notice-list {
.notice-item {
display: flex;
align-items: flex-start;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
.dot {
width: 12rpx;
height: 12rpx;
background: #07c160;
border-radius: 50%;
margin-top: 10rpx;
margin-right: 16rpx;
flex-shrink: 0;
}
text {
font-size: 26rpx;
color: #666;
line-height: 1.5;
}
}
}
}
.bottom-bar {
position: fixed;
left: 0;
right: 0;
bottom: 0;
padding: 20rpx 30rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background: #fff;
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.04);
z-index: 10;
display: flex;
justify-content: space-between;
padding: 30rpx 0;
.btn {
flex: 1;
gap: 20rpx;
.action-item {
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
font-weight: 500;
font-size: 30rpx;
border-radius: 44rpx;
&.cancel {
background: #f5f5f5;
color: #666;
margin-right: 20rpx;
}
flex: 1;
&.primary {
background: #1976D2;
background: #07c160;
color: #fff;
&:active {
opacity: 0.8;
}
}
&:active {
opacity: 0.9;
&.secondary {
background: #f5f5f5;
color: #333;
border: 1rpx solid #e0e0e0;
&:active {
opacity: 0.8;
}
}
}
}
+1 -1
View File
@@ -122,7 +122,7 @@ export default {
this.orderId = options.orderId
if (options.totalAmount) {
this.passedTotalAmount = options.totalAmount;
this.passedTotalAmount = options.depositAmount;
}
if (options.depositAmount) {
+764 -753
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["export const URL = \"https://my.gxfs123.com/api\" //正式服务器\r\n// export const URL = \"https://unifans.gxfs123.com/api\" //测试服务器\r\n// export const URL = \"http://192.168.1.123:8080\" \t\t//本地调试\r\n\r\nexport const appid = \"wx2165f0be356ae7a9\" //小程序appid"],"names":[],"mappings":";AAAY,MAAC,MAAM;AAIP,MAAC,QAAQ;;;"}
{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["export const URL = \"https://my.gxfs123.com/api\" //正式服务器\r\n// export const URL = \"https://unifans.gxfs123.com/api\" //测试服务器\r\n// export const URL = \"http://192.168.10.16:8080\" \t\t//本地调试\r\n\r\nexport const appid = \"wx2165f0be356ae7a9\" //小程序appid"],"names":[],"mappings":";AAAY,MAAC,MAAM;AAIP,MAAC,QAAQ;;;"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -6988,9 +6988,9 @@ function isConsoleWritable() {
return isWritable;
}
function initRuntimeSocketService() {
const hosts = "192.168.10.112,127.0.0.1";
const hosts = "192.168.10.13,127.0.0.1";
const port = "8090";
const id = "mp-weixin_HqxvGq";
const id = "mp-weixin_4_oLdt";
const lazy = typeof swan !== "undefined";
let restoreError = lazy ? () => {
} : initOnError();
+5 -4
View File
@@ -295,12 +295,13 @@ const _sfc_main = {
j: hasActiveOrder.value ? 1 : "",
k: common_vendor.o(($event) => handleRent("wx-score-pay")),
l: common_assets._imports_0$2,
m: showPhoneAuthPopup.value
m: common_vendor.o(($event) => handleRent("wx-pay")),
n: showPhoneAuthPopup.value
}, showPhoneAuthPopup.value ? {
n: common_vendor.o(() => {
o: common_vendor.o(() => {
}),
o: common_vendor.o(onGetPhoneNumber),
p: common_vendor.o(($event) => showPhoneAuthPopup.value = false)
p: common_vendor.o(onGetPhoneNumber),
q: common_vendor.o(($event) => showPhoneAuthPopup.value = false)
} : {});
};
}
+1 -1
View File
@@ -1 +1 @@
<view class="container data-v-d65de3a7"><view class="device-header data-v-d65de3a7"><view class="{{['device-status-card', 'data-v-d65de3a7', b]}}"><view class="status-indicator data-v-d65de3a7"></view><text class="status-text data-v-d65de3a7">{{a}}</text></view><view class="device-title data-v-d65de3a7"><text class="name data-v-d65de3a7">共享风扇</text><view class="device-meta data-v-d65de3a7"><text class="id-label data-v-d65de3a7">设备号:</text><text class="id-value data-v-d65de3a7">{{c}}</text></view></view></view><view class="card device-info-card data-v-d65de3a7"><view class="card-row data-v-d65de3a7"><view class="card-item data-v-d65de3a7"><view class="item-icon location-icon data-v-d65de3a7"><image class="data-v-d65de3a7" src="{{d}}" mode="aspectFill" style="width:45rpx;height:45rpx"></image></view><view class="item-content data-v-d65de3a7"><text class="item-label data-v-d65de3a7">当前位置</text><text class="item-value data-v-d65de3a7">{{e}}</text></view></view><view class="card-item data-v-d65de3a7"><view class="{{['item-icon', 'battery-icon', 'data-v-d65de3a7', g && 'battery-low']}}"><image class="data-v-d65de3a7" src="{{f}}" mode="aspectFill" style="width:45rpx;height:45rpx"></image></view><view class="item-content data-v-d65de3a7"><text class="item-label data-v-d65de3a7">电池电量</text><text class="item-value data-v-d65de3a7">{{h}}%</text></view></view></view></view><view class="card pricing-card data-v-d65de3a7"><view class="card-header data-v-d65de3a7"><text class="card-title data-v-d65de3a7">计费规则</text></view><view class="pricing-banner data-v-d65de3a7"><view class="pricing-main data-v-d65de3a7"><text class="price data-v-d65de3a7">¥5.00</text><text class="unit data-v-d65de3a7">/小时</text></view><text class="cap-price data-v-d65de3a7">封顶 ¥99</text></view><view class="pricing-rules data-v-d65de3a7"><view class="rule-item data-v-d65de3a7"><view class="rule-dot data-v-d65de3a7"></view><text class="rule-text data-v-d65de3a7">不足60分钟按60分钟计费</text></view><view class="rule-item data-v-d65de3a7"><view class="rule-dot data-v-d65de3a7"></view><text class="rule-text data-v-d65de3a7">持续计费至99元视为买断</text></view></view></view><view class="card notice-card data-v-d65de3a7"><view class="card-header data-v-d65de3a7"><text class="card-title data-v-d65de3a7">使用须知</text></view><view class="notice-items data-v-d65de3a7"><view class="notice-item data-v-d65de3a7"><view class="notice-dot data-v-d65de3a7"></view><text class="notice-text data-v-d65de3a7">请在使用前检查设备是否完好</text></view><view class="notice-item data-v-d65de3a7"><view class="notice-dot data-v-d65de3a7"></view><text class="notice-text data-v-d65de3a7">请在指定区域内使用设备</text></view><view class="notice-item data-v-d65de3a7"><view class="notice-dot data-v-d65de3a7"></view><text class="notice-text data-v-d65de3a7">归还时请确保设备完好,避免损坏</text></view></view></view><view class="footer data-v-d65de3a7"><button class="{{['rent-button', 'data-v-d65de3a7', j && 'return-button']}}" bindtap="{{k}}"><text class="data-v-d65de3a7">{{i}}</text></button><view class="wechat-credit data-v-d65de3a7"><image src="{{l}}" mode="aspectFit" class="wx-icon data-v-d65de3a7"></image><view class="credit-text data-v-d65de3a7"><text class="data-v-d65de3a7">微信支付分</text><text class="credit-divider data-v-d65de3a7">|</text><text class="credit-score data-v-d65de3a7">550分及以上优享</text></view></view></view><view wx:if="{{m}}" class="phone-auth-popup data-v-d65de3a7"><view class="popup-mask data-v-d65de3a7" catchtap="{{n}}"></view><view class="popup-content data-v-d65de3a7"><view class="popup-header data-v-d65de3a7"><text class="popup-title data-v-d65de3a7">授权获取手机号</text></view><view class="popup-body data-v-d65de3a7"><view class="auth-desc data-v-d65de3a7"><text class="data-v-d65de3a7">为了提供更好的服务,需要授权获取您的手机号</text></view><button class="auth-btn data-v-d65de3a7" open-type="getPhoneNumber" bindgetphonenumber="{{o}}"> 一键获取手机号 </button><view class="auth-cancel data-v-d65de3a7" bindtap="{{p}}"><text class="data-v-d65de3a7">暂不授权</text></view></view></view></view></view>
<view class="container data-v-d65de3a7"><view class="device-header data-v-d65de3a7"><view class="{{['device-status-card', 'data-v-d65de3a7', b]}}"><view class="status-indicator data-v-d65de3a7"></view><text class="status-text data-v-d65de3a7">{{a}}</text></view><view class="device-title data-v-d65de3a7"><text class="name data-v-d65de3a7">共享风扇</text><view class="device-meta data-v-d65de3a7"><text class="id-label data-v-d65de3a7">设备号:</text><text class="id-value data-v-d65de3a7">{{c}}</text></view></view></view><view class="card device-info-card data-v-d65de3a7"><view class="card-row data-v-d65de3a7"><view class="card-item data-v-d65de3a7"><view class="item-icon location-icon data-v-d65de3a7"><image class="data-v-d65de3a7" src="{{d}}" mode="aspectFill" style="width:45rpx;height:45rpx"></image></view><view class="item-content data-v-d65de3a7"><text class="item-label data-v-d65de3a7">当前位置</text><text class="item-value data-v-d65de3a7">{{e}}</text></view></view><view class="card-item data-v-d65de3a7"><view class="{{['item-icon', 'battery-icon', 'data-v-d65de3a7', g && 'battery-low']}}"><image class="data-v-d65de3a7" src="{{f}}" mode="aspectFill" style="width:45rpx;height:45rpx"></image></view><view class="item-content data-v-d65de3a7"><text class="item-label data-v-d65de3a7">电池电量</text><text class="item-value data-v-d65de3a7">{{h}}%</text></view></view></view></view><view class="card pricing-card data-v-d65de3a7"><view class="card-header data-v-d65de3a7"><text class="card-title data-v-d65de3a7">计费规则</text></view><view class="pricing-banner data-v-d65de3a7"><view class="pricing-main data-v-d65de3a7"><text class="price data-v-d65de3a7">¥5.00</text><text class="unit data-v-d65de3a7">/小时</text></view><text class="cap-price data-v-d65de3a7">封顶 ¥99</text></view><view class="pricing-rules data-v-d65de3a7"><view class="rule-item data-v-d65de3a7"><view class="rule-dot data-v-d65de3a7"></view><text class="rule-text data-v-d65de3a7">不足60分钟按60分钟计费</text></view><view class="rule-item data-v-d65de3a7"><view class="rule-dot data-v-d65de3a7"></view><text class="rule-text data-v-d65de3a7">持续计费至99元视为买断</text></view></view></view><view class="card notice-card data-v-d65de3a7"><view class="card-header data-v-d65de3a7"><text class="card-title data-v-d65de3a7">使用须知</text></view><view class="notice-items data-v-d65de3a7"><view class="notice-item data-v-d65de3a7"><view class="notice-dot data-v-d65de3a7"></view><text class="notice-text data-v-d65de3a7">请在使用前检查设备是否完好</text></view><view class="notice-item data-v-d65de3a7"><view class="notice-dot data-v-d65de3a7"></view><text class="notice-text data-v-d65de3a7">请在指定区域内使用设备</text></view><view class="notice-item data-v-d65de3a7"><view class="notice-dot data-v-d65de3a7"></view><text class="notice-text data-v-d65de3a7">归还时请确保设备完好,避免损坏</text></view></view></view><view class="footer data-v-d65de3a7"><button class="{{['rent-button', 'data-v-d65de3a7', j && 'return-button']}}" bindtap="{{k}}"><text class="data-v-d65de3a7">{{i}}</text></button><view class="wechat-credit data-v-d65de3a7"><image src="{{l}}" mode="aspectFit" class="wx-icon data-v-d65de3a7"></image><view class="credit-text data-v-d65de3a7"><text class="data-v-d65de3a7">微信支付分</text><text class="credit-divider data-v-d65de3a7">|</text><text class="credit-score data-v-d65de3a7">550分及以上优享</text></view></view><view class=" data-v-d65de3a7" style="align-items:center;align-content:center;text-align:center;line-height:50rpx" bindtap="{{m}}"> 无法免押点这里></view></view><view wx:if="{{n}}" class="phone-auth-popup data-v-d65de3a7"><view class="popup-mask data-v-d65de3a7" catchtap="{{o}}"></view><view class="popup-content data-v-d65de3a7"><view class="popup-header data-v-d65de3a7"><text class="popup-title data-v-d65de3a7">授权获取手机号</text></view><view class="popup-body data-v-d65de3a7"><view class="auth-desc data-v-d65de3a7"><text class="data-v-d65de3a7">为了提供更好的服务,需要授权获取您的手机号</text></view><button class="auth-btn data-v-d65de3a7" open-type="getPhoneNumber" bindgetphonenumber="{{p}}"> 一键获取手机号 </button><view class="auth-cancel data-v-d65de3a7" bindtap="{{q}}"><text class="data-v-d65de3a7">暂不授权</text></view></view></view></view></view>
+6 -1
View File
@@ -67,6 +67,11 @@ const _sfc_main = {
isPopupVisible.value = true;
}
};
function maskPhone(phone) {
if (!phone)
return "";
return phone.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
}
return (_ctx, _cache) => {
return common_vendor.e({
a: userInfo.value.avatar
@@ -80,7 +85,7 @@ const _sfc_main = {
e: userInfo.value
}, userInfo.value ? {
f: common_vendor.t(userInfo.value.nickName),
g: common_vendor.t(userInfo.value.phone || "未绑定手机号")
g: common_vendor.t(userInfo.value.phone ? maskPhone(userInfo.value.phone) : "未绑定手机号")
} : {}, {
h: common_vendor.p({
type: "right",
+19 -133
View File
@@ -11,7 +11,7 @@ const _sfc_main = {
const status = orderInfo.value.orderStatus;
switch (status) {
case "waiting_for_payment":
return "待支付";
return "待支付";
case "in_used":
return "使用中";
case "used_done":
@@ -19,47 +19,7 @@ const _sfc_main = {
case "order_cancelled":
return "已取消";
default:
return "未知状态";
}
});
const orderStatusClass = common_vendor.computed(() => {
const status = orderInfo.value.orderStatus;
switch (status) {
case "waiting_for_payment":
return "status-waiting";
case "in_used":
return "status-using";
case "used_done":
return "status-finished";
case "order_cancelled":
return "status-cancelled";
default:
return "";
}
});
const orderStatusDesc = common_vendor.computed(() => {
const status = orderInfo.value.orderStatus;
switch (status) {
case "waiting_for_payment":
return "请在15分钟内完成支付";
case "in_used":
return "设备正在使用中";
case "used_done":
return "感谢您的使用";
case "order_cancelled":
return "该订单已取消";
default:
return "";
}
});
common_vendor.computed(() => {
const payWay = orderInfo.value.payWay;
if (payWay === "wx_score_pay") {
return "微信支付分 (免押金)";
} else if (payWay === "wx_pay") {
return "微信支付";
} else {
return "押金支付";
return "使用中";
}
});
common_vendor.onLoad(async (options) => {
@@ -78,9 +38,7 @@ const _sfc_main = {
});
const loadOrderDetails = async () => {
try {
common_vendor.index.showLoading({
title: "加载中"
});
common_vendor.index.showLoading({ title: "加载中" });
const res = await config_user.queryById(orderId.value);
if (res.code === 200 && res.data) {
orderInfo.value = res.data;
@@ -125,106 +83,34 @@ const _sfc_main = {
return remainingMins > 0 ? `${hours}小时${remainingMins}分钟` : `${hours}小时`;
}
};
const handleCancelOrder = () => {
common_vendor.index.showModal({
title: "确认取消",
content: "确定要取消此订单吗?",
success: async (res) => {
if (res.confirm) {
try {
common_vendor.index.showLoading({ title: "处理中" });
const result = await config_user.cancelOrder({
orderId: orderId.value
});
if (result.code === 200) {
common_vendor.index.hideLoading();
common_vendor.index.showToast({
title: "订单已取消",
icon: "success"
});
await loadOrderDetails();
} else {
throw new Error(result.msg || "取消订单失败");
}
} catch (error) {
common_vendor.index.hideLoading();
common_vendor.index.showToast({
title: error.message || "取消订单失败",
icon: "none"
});
}
}
}
});
};
const handlePayment = async () => {
try {
common_vendor.index.showLoading({
title: "处理中"
});
const res = await config_user.confirmPaymentAndRent(orderId.value);
if (res.code === 200) {
common_vendor.index.hideLoading();
common_vendor.index.showToast({
title: "支付成功",
icon: "success"
});
await loadOrderDetails();
} else {
throw new Error(res.msg || "支付失败");
}
} catch (error) {
common_vendor.index.hideLoading();
common_vendor.index.showToast({
title: error.message || "支付失败",
icon: "none"
});
}
};
const navigateToReturn = () => {
common_vendor.index.navigateTo({
url: `/pages/return/index?deviceId=${orderInfo.value.deviceNo}&orderId=${orderId.value}`
});
};
return (_ctx, _cache) => {
return common_vendor.e({
a: common_vendor.n(orderStatusClass.value),
b: common_vendor.t(orderStatusText.value),
c: common_vendor.t(orderStatusDesc.value),
d: common_vendor.t(orderInfo.value.orderNo || "-"),
e: common_vendor.t(orderInfo.value.deviceNo || "-"),
f: orderInfo.value.payWay === "wx_score_pay"
a: common_vendor.t(orderStatusText.value),
b: common_vendor.t(orderInfo.value.orderNo || "-"),
c: common_vendor.t(orderInfo.value.deviceNo || "-"),
d: orderInfo.value.payWay === "wx_score_pay"
}, orderInfo.value.payWay === "wx_score_pay" ? {
g: common_assets._imports_0$2
e: common_assets._imports_0$2
} : {}, {
h: common_vendor.t(orderInfo.value.createTime || "-"),
i: common_vendor.t(orderInfo.value.startTime || "-"),
j: orderInfo.value.endTime
f: common_vendor.t(orderInfo.value.startTime || "-"),
g: orderInfo.value.endTime
}, orderInfo.value.endTime ? {
k: common_vendor.t(orderInfo.value.endTime)
h: common_vendor.t(orderInfo.value.endTime)
} : {}, {
l: orderInfo.value.phone
i: orderInfo.value.phone
}, orderInfo.value.phone ? {
m: common_vendor.t(orderInfo.value.phone)
j: common_vendor.t(orderInfo.value.phone)
} : {}, {
n: orderInfo.value.depositAmount
k: orderInfo.value.depositAmount
}, orderInfo.value.depositAmount ? {
o: common_vendor.t(orderInfo.value.depositAmount)
l: common_vendor.t(orderInfo.value.depositAmount)
} : {}, {
p: orderInfo.value.packageTime && orderInfo.value.packagePrice
m: orderInfo.value.packageTime && orderInfo.value.packagePrice
}, orderInfo.value.packageTime && orderInfo.value.packagePrice ? {
q: common_vendor.t(orderInfo.value.packagePrice),
r: common_vendor.t(formatTime(orderInfo.value.packageTime))
n: common_vendor.t(orderInfo.value.packagePrice),
o: common_vendor.t(formatTime(orderInfo.value.packageTime))
} : {}, {
s: common_vendor.t(orderInfo.value.payAmount || 0),
t: orderInfo.value.orderStatus === "waiting_for_payment"
}, orderInfo.value.orderStatus === "waiting_for_payment" ? {
v: common_vendor.o(handleCancelOrder),
w: common_vendor.o(handlePayment)
} : orderInfo.value.orderStatus === "in_used" ? {
y: common_vendor.o(navigateToReturn)
} : {}, {
x: orderInfo.value.orderStatus === "in_used"
p: common_vendor.t(orderInfo.value.payAmount || 0)
});
};
}
+1 -1
View File
@@ -1 +1 @@
<view class="details-container data-v-2b5cbeae"><view class="status-card data-v-2b5cbeae"><view class="{{['status-icon', 'data-v-2b5cbeae', a]}}"></view><view class="status-text data-v-2b5cbeae">{{b}}</view><view class="status-desc data-v-2b5cbeae">{{c}}</view></view><view class="info-card data-v-2b5cbeae"><view class="card-title data-v-2b5cbeae">订单信息</view><view class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">订单号</text><text class="value data-v-2b5cbeae">{{d}}</text></view><view class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">设备号</text><text class="value data-v-2b5cbeae">{{e}}</text></view><view class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">租借方式</text><view class="value payment-method data-v-2b5cbeae"><view wx:if="{{f}}" class="payment-badge wx-score data-v-2b5cbeae"><image src="{{g}}" mode="aspectFit" class="badge-icon data-v-2b5cbeae"></image><view class="badge-text data-v-2b5cbeae"><text class="data-v-2b5cbeae">微信支付分</text><text class="divider data-v-2b5cbeae">|</text><text class="highlight data-v-2b5cbeae">免押租借</text></view></view><view wx:else class="payment-badge deposit data-v-2b5cbeae"><text class="badge-text data-v-2b5cbeae">押金租借</text></view></view></view><view class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">创建时间</text><text class="value data-v-2b5cbeae">{{h}}</text></view><view class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">开始时间</text><text class="value data-v-2b5cbeae">{{i}}</text></view><view wx:if="{{j}}" class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">结束时间</text><text class="value data-v-2b5cbeae">{{k}}</text></view><view wx:if="{{l}}" class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">联系电话</text><text class="value data-v-2b5cbeae">{{m}}</text></view></view><view class="info-card data-v-2b5cbeae"><view class="card-title data-v-2b5cbeae">费用信息</view><view wx:if="{{n}}" class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">押金</text><text class="value data-v-2b5cbeae">¥{{o}}</text></view><view wx:if="{{p}}" class="info-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">套餐</text><text class="value data-v-2b5cbeae">¥{{q}}元 / {{r}}</text></view><view class="info-item total data-v-2b5cbeae"><text class="label data-v-2b5cbeae">合计</text><text class="value data-v-2b5cbeae">¥{{s}}</text></view></view><view wx:if="{{t}}" class="action-buttons data-v-2b5cbeae"><view class="btn cancel data-v-2b5cbeae" bindtap="{{v}}">取消订单</view><view class="btn primary data-v-2b5cbeae" bindtap="{{w}}">立即支付</view></view><view wx:elif="{{x}}" class="action-buttons data-v-2b5cbeae"><view class="btn primary data-v-2b5cbeae" bindtap="{{y}}">归还设备</view></view></view>
<view class="return-container data-v-2b5cbeae"><view class="order-card data-v-2b5cbeae"><view class="order-header data-v-2b5cbeae"><text class="title data-v-2b5cbeae">{{a}}</text><text class="order-no data-v-2b5cbeae">订单号:{{b}}</text></view><view class="device-info data-v-2b5cbeae"><view class="device-left data-v-2b5cbeae"><view class="device-name data-v-2b5cbeae">共享风扇</view><view class="device-id data-v-2b5cbeae">设备号:{{c}}</view></view><view class="device-right data-v-2b5cbeae"><view wx:if="{{d}}" class="payment-badge wx-score data-v-2b5cbeae"><image src="{{e}}" mode="aspectFit" class="badge-icon data-v-2b5cbeae"></image><view class="badge-text data-v-2b5cbeae"><text class="data-v-2b5cbeae">微信支付分</text><text class="divider data-v-2b5cbeae">|</text><text class="highlight data-v-2b5cbeae">免押租借</text></view></view><view wx:else class="payment-badge deposit data-v-2b5cbeae"><text class="badge-text data-v-2b5cbeae">押金租借</text></view></view></view><view class="time-info data-v-2b5cbeae"><view class="time-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">开始时间</text><text class="value data-v-2b5cbeae">{{f}}</text></view><view wx:if="{{g}}" class="time-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">结束时间</text><text class="value data-v-2b5cbeae">{{h}}</text></view><view wx:if="{{i}}" class="time-item data-v-2b5cbeae"><text class="label data-v-2b5cbeae">联系电话</text><text class="value data-v-2b5cbeae">{{j}}</text></view></view></view><view class="notice-card data-v-2b5cbeae"><view class="notice-title data-v-2b5cbeae">费用信息</view><view class="notice-list data-v-2b5cbeae"><view wx:if="{{k}}" class="notice-item data-v-2b5cbeae"><view class="dot data-v-2b5cbeae"></view><text class="data-v-2b5cbeae">押金:¥{{l}}</text></view><view wx:if="{{m}}" class="notice-item data-v-2b5cbeae"><view class="dot data-v-2b5cbeae"></view><text class="data-v-2b5cbeae">套餐:¥{{n}}元 / {{o}}</text></view><view class="notice-item data-v-2b5cbeae"><view class="dot data-v-2b5cbeae"></view><text class="data-v-2b5cbeae">合计:¥{{p}}</text></view></view></view></view>
+130 -116
View File
@@ -23,175 +23,189 @@
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.details-container.data-v-2b5cbeae {
.return-container.data-v-2b5cbeae {
min-height: 100vh;
background: #f7f8fa;
padding: 30rpx;
padding-bottom: 100rpx;
padding-bottom: 180rpx;
box-sizing: border-box;
}
.details-container .status-card.data-v-2b5cbeae {
background: #fff;
border-radius: 20rpx;
padding: 40rpx;
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.details-container .status-card .status-icon.data-v-2b5cbeae {
width: 120rpx;
height: 120rpx;
border-radius: 50%;
margin-bottom: 20rpx;
}
.details-container .status-card .status-icon.status-waiting.data-v-2b5cbeae {
background: #FFF9C4;
}
.details-container .status-card .status-icon.status-using.data-v-2b5cbeae {
background: #E8F5E9;
}
.details-container .status-card .status-icon.status-finished.data-v-2b5cbeae {
background: #E3F2FD;
}
.details-container .status-card .status-icon.status-cancelled.data-v-2b5cbeae {
background: #FFEBEE;
}
.details-container .status-card .status-text.data-v-2b5cbeae {
font-size: 36rpx;
font-weight: 600;
color: #333;
margin-bottom: 10rpx;
}
.details-container .status-card .status-desc.data-v-2b5cbeae {
font-size: 28rpx;
color: #999;
}
.details-container .info-card.data-v-2b5cbeae {
.return-container .order-card.data-v-2b5cbeae {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.details-container .info-card .card-title.data-v-2b5cbeae {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 20rpx;
position: relative;
padding-left: 20rpx;
}
.details-container .info-card .card-title.data-v-2b5cbeae::before {
content: "";
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 8rpx;
height: 32rpx;
background: #1976D2;
border-radius: 4rpx;
}
.details-container .info-card .info-item.data-v-2b5cbeae {
.return-container .order-card .order-header.data-v-2b5cbeae {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
border-bottom: 1px solid #f5f5f5;
margin-bottom: 20rpx;
padding-bottom: 16rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.details-container .info-card .info-item.data-v-2b5cbeae:last-child {
border-bottom: none;
}
.details-container .info-card .info-item .label.data-v-2b5cbeae {
font-size: 28rpx;
color: #666;
}
.details-container .info-card .info-item .value.data-v-2b5cbeae {
font-size: 28rpx;
.return-container .order-card .order-header .title.data-v-2b5cbeae {
font-size: 30rpx;
font-weight: bold;
color: #333;
word-break: break-all;
text-align: right;
max-width: 70%;
}
.details-container .info-card .info-item .value.payment-method.data-v-2b5cbeae {
display: flex;
flex-direction: column;
align-items: flex-end;
.return-container .order-card .order-header .order-no.data-v-2b5cbeae {
font-size: 24rpx;
color: #999;
}
.details-container .info-card .info-item .value.payment-method .payment-badge.data-v-2b5cbeae {
margin-top: 8rpx;
.return-container .order-card .device-info.data-v-2b5cbeae {
margin-bottom: 24rpx;
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.return-container .order-card .device-info .device-left.data-v-2b5cbeae {
flex: 1;
margin-right: 20rpx;
}
.return-container .order-card .device-info .device-left .device-name.data-v-2b5cbeae {
font-size: 32rpx;
font-weight: 500;
color: #333;
margin-bottom: 8rpx;
}
.return-container .order-card .device-info .device-left .device-id.data-v-2b5cbeae {
font-size: 26rpx;
color: #999;
margin-bottom: 0;
}
.return-container .order-card .device-info .device-right .payment-badge.data-v-2b5cbeae {
display: inline-flex;
align-items: center;
padding: 4rpx 10rpx;
padding: 6rpx 12rpx;
border-radius: 8rpx;
white-space: nowrap;
}
.details-container .info-card .info-item .value.payment-method .payment-badge.wx-score.data-v-2b5cbeae {
.return-container .order-card .device-info .device-right .payment-badge.wx-score.data-v-2b5cbeae {
background: rgba(7, 193, 96, 0.08);
}
.details-container .info-card .info-item .value.payment-method .payment-badge.wx-score .badge-icon.data-v-2b5cbeae {
.return-container .order-card .device-info .device-right .payment-badge.wx-score .badge-icon.data-v-2b5cbeae {
width: 32rpx;
height: 26rpx;
margin-right: 8rpx;
}
.details-container .info-card .info-item .value.payment-method .payment-badge.wx-score .badge-text.data-v-2b5cbeae {
.return-container .order-card .device-info .device-right .payment-badge.wx-score .badge-text.data-v-2b5cbeae {
font-size: 22rpx;
color: #07c160;
display: flex;
align-items: center;
}
.details-container .info-card .info-item .value.payment-method .payment-badge.wx-score .badge-text .divider.data-v-2b5cbeae {
.return-container .order-card .device-info .device-right .payment-badge.wx-score .badge-text .divider.data-v-2b5cbeae {
margin: 0 6rpx;
}
.details-container .info-card .info-item .value.payment-method .payment-badge.wx-score .badge-text .highlight.data-v-2b5cbeae {
.return-container .order-card .device-info .device-right .payment-badge.wx-score .badge-text .highlight.data-v-2b5cbeae {
font-weight: 500;
}
.details-container .info-card .info-item .value.payment-method .payment-badge.deposit.data-v-2b5cbeae {
.return-container .order-card .device-info .device-right .payment-badge.deposit.data-v-2b5cbeae {
background: #f5f5f5;
}
.details-container .info-card .info-item .value.payment-method .payment-badge.deposit .badge-text.data-v-2b5cbeae {
.return-container .order-card .device-info .device-right .payment-badge.deposit .badge-text.data-v-2b5cbeae {
font-size: 22rpx;
color: #666;
font-weight: 500;
}
.details-container .info-card .info-item.total.data-v-2b5cbeae {
margin-top: 10rpx;
padding-top: 30rpx;
border-top: 1px solid #f5f5f5;
.return-container .order-card .time-info.data-v-2b5cbeae {
background: #f9f9f9;
border-radius: 16rpx;
padding: 20rpx;
}
.details-container .info-card .info-item.total .label.data-v-2b5cbeae, .details-container .info-card .info-item.total .value.data-v-2b5cbeae {
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.details-container .info-card .info-item.total .value.data-v-2b5cbeae {
color: #FF5722;
}
.details-container .action-buttons.data-v-2b5cbeae {
.return-container .order-card .time-info .time-item.data-v-2b5cbeae {
display: flex;
justify-content: space-between;
padding: 30rpx 0;
align-items: center;
margin-bottom: 16rpx;
}
.details-container .action-buttons .btn.data-v-2b5cbeae {
flex: 1;
.return-container .order-card .time-info .time-item.data-v-2b5cbeae:last-child {
margin-bottom: 0;
}
.return-container .order-card .time-info .time-item .label.data-v-2b5cbeae {
font-size: 26rpx;
color: #666;
}
.return-container .order-card .time-info .time-item .value.data-v-2b5cbeae {
font-size: 26rpx;
color: #333;
}
.return-container .order-card .time-info .time-item .value.highlight.data-v-2b5cbeae {
color: #ff6b6b;
font-weight: bold;
}
.return-container .notice-card.data-v-2b5cbeae {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.return-container .notice-card .notice-title.data-v-2b5cbeae {
font-size: 30rpx;
font-weight: bold;
color: #333;
margin-bottom: 20rpx;
}
.return-container .notice-card .notice-list .notice-item.data-v-2b5cbeae {
display: flex;
align-items: flex-start;
margin-bottom: 16rpx;
}
.return-container .notice-card .notice-list .notice-item.data-v-2b5cbeae:last-child {
margin-bottom: 0;
}
.return-container .notice-card .notice-list .notice-item .dot.data-v-2b5cbeae {
width: 12rpx;
height: 12rpx;
background: #07c160;
border-radius: 50%;
margin-top: 10rpx;
margin-right: 16rpx;
flex-shrink: 0;
}
.return-container .notice-card .notice-list .notice-item text.data-v-2b5cbeae {
font-size: 26rpx;
color: #666;
line-height: 1.5;
}
.return-container .bottom-bar.data-v-2b5cbeae {
position: fixed;
left: 0;
right: 0;
bottom: 0;
padding: 20rpx 30rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background: #fff;
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.04);
z-index: 10;
display: flex;
justify-content: space-between;
gap: 20rpx;
}
.return-container .bottom-bar .action-item.data-v-2b5cbeae {
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
font-weight: 500;
font-size: 30rpx;
border-radius: 44rpx;
flex: 1;
}
.details-container .action-buttons .btn.cancel.data-v-2b5cbeae {
background: #f5f5f5;
color: #666;
margin-right: 20rpx;
}
.details-container .action-buttons .btn.primary.data-v-2b5cbeae {
background: #1976D2;
.return-container .bottom-bar .action-item.primary.data-v-2b5cbeae {
background: #07c160;
color: #fff;
}
.details-container .action-buttons .btn.data-v-2b5cbeae:active {
opacity: 0.9;
.return-container .bottom-bar .action-item.primary.data-v-2b5cbeae:active {
opacity: 0.8;
}
.return-container .bottom-bar .action-item.secondary.data-v-2b5cbeae {
background: #f5f5f5;
color: #333;
border: 1rpx solid #e0e0e0;
}
.return-container .bottom-bar .action-item.secondary.data-v-2b5cbeae:active {
opacity: 0.8;
}
+1 -1
View File
@@ -49,7 +49,7 @@ const _sfc_main = {
if (options && options.orderId) {
this.orderId = options.orderId;
if (options.totalAmount) {
this.passedTotalAmount = options.totalAmount;
this.passedTotalAmount = options.depositAmount;
}
if (options.depositAmount) {
this.passedDepositAmount = options.depositAmount;
+47 -40
View File
@@ -16,8 +16,9 @@ const _sfc_main = {
currentFee: "0.00",
orderStatus: "in_used",
// 默认状态为使用中
payWay: ""
payWay: "",
// 新增支付方式字段
orderNo: ""
},
timer: null,
statusCheckTimer: null,
@@ -31,11 +32,11 @@ const _sfc_main = {
};
},
onLoad(options) {
common_vendor.index.__f__("log", "at pages/return/index.vue:117", "Return page loaded with options:", JSON.stringify(options));
common_vendor.index.__f__("log", "at pages/return/index.vue:120", "Return page loaded with options:", JSON.stringify(options));
this.isPageActive = true;
this.orderInfo.orderId = options.orderId || "";
this.deviceId = options.deviceNo || options.deviceId || "";
common_vendor.index.__f__("log", "at pages/return/index.vue:126", `初始化参数: orderId=${this.orderInfo.orderId}, deviceId=${this.deviceId}`);
common_vendor.index.__f__("log", "at pages/return/index.vue:130", `初始化参数: orderId=${this.orderInfo.orderId}, deviceId=${this.deviceId}`);
if (!this.orderInfo.orderId && this.deviceId) {
this.getOrderByDevice();
} else if (this.orderInfo.orderId) {
@@ -45,14 +46,18 @@ const _sfc_main = {
common_vendor.index.setStorageSync("activeOrderId", this.orderInfo.orderId);
try {
if (this.$orderMonitor) {
this.$orderMonitor.removeOrder({ orderId: this.orderInfo.orderId });
this.$orderMonitor.addOrder({ orderId: this.orderInfo.orderId }, "return");
common_vendor.index.__f__("log", "at pages/return/index.vue:149", "订单已添加到监控队列:", this.orderInfo.orderId);
this.$orderMonitor.removeOrder({
orderId: this.orderInfo.orderId
});
this.$orderMonitor.addOrder({
orderId: this.orderInfo.orderId
}, "return");
common_vendor.index.__f__("log", "at pages/return/index.vue:157", "订单已添加到监控队列:", this.orderInfo.orderId);
} else {
common_vendor.index.__f__("warn", "at pages/return/index.vue:151", "$orderMonitor 未定义,无法添加订单到监控队列");
common_vendor.index.__f__("warn", "at pages/return/index.vue:159", "$orderMonitor 未定义,无法添加订单到监控队列");
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/return/index.vue:154", "添加订单到监控队列失败:", error);
common_vendor.index.__f__("error", "at pages/return/index.vue:162", "添加订单到监控队列失败:", error);
}
} else {
common_vendor.index.showToast({
@@ -67,14 +72,14 @@ const _sfc_main = {
},
// 添加onHide生命周期,处理页面隐藏时的清理工作
onHide() {
common_vendor.index.__f__("log", "at pages/return/index.vue:174", "归还页面隐藏,清理计时器资源和监控服务");
common_vendor.index.__f__("log", "at pages/return/index.vue:182", "归还页面隐藏,清理计时器资源和监控服务");
this.isPageActive = false;
this.clearTimer();
this.clearStatusCheckTimer();
this.removeFromOrderMonitor();
},
onUnload() {
common_vendor.index.__f__("log", "at pages/return/index.vue:186", "归还页面卸载,清理所有资源");
common_vendor.index.__f__("log", "at pages/return/index.vue:194", "归还页面卸载,清理所有资源");
this.isPageActive = false;
this.clearTimer();
this.clearStatusCheckTimer();
@@ -86,16 +91,18 @@ const _sfc_main = {
removeFromOrderMonitor() {
if (this.orderInfo.orderId && this.$orderMonitor) {
try {
this.$orderMonitor.removeOrder({ orderId: this.orderInfo.orderId });
common_vendor.index.__f__("log", "at pages/return/index.vue:206", "订单已从监控队列移除:", this.orderInfo.orderId);
this.$orderMonitor.removeOrder({
orderId: this.orderInfo.orderId
});
common_vendor.index.__f__("log", "at pages/return/index.vue:216", "订单已从监控队列移除:", this.orderInfo.orderId);
} catch (error) {
common_vendor.index.__f__("error", "at pages/return/index.vue:208", "从监控队列移除订单失败:", error);
common_vendor.index.__f__("error", "at pages/return/index.vue:218", "从监控队列移除订单失败:", error);
}
}
},
// 处理订单完成事件(可由任何地方触发)
handleOrderCompleted(orderData) {
common_vendor.index.__f__("log", "at pages/return/index.vue:214", "收到订单完成事件:", orderData);
common_vendor.index.__f__("log", "at pages/return/index.vue:224", "收到订单完成事件:", orderData);
if (orderData.orderId === this.orderInfo.orderId || orderData.orderNo === this.orderInfo.orderNo) {
this.showReturnSuccessModal(orderData);
}
@@ -138,20 +145,18 @@ const _sfc_main = {
// 获取订单详情
async getOrderDetails() {
if (!this.isPageActive) {
common_vendor.index.__f__("log", "at pages/return/index.vue:270", "页面已不活跃,跳过订单详情请求");
common_vendor.index.__f__("log", "at pages/return/index.vue:280", "页面已不活跃,跳过订单详情请求");
return;
}
try {
if (!this.orderInfo.orderId) {
throw new Error("订单ID不能为空");
}
common_vendor.index.__f__("log", "at pages/return/index.vue:281", "请求订单详情, orderId:", this.orderInfo.orderId);
const result = await config_user.queryById(this.orderInfo.orderId);
common_vendor.index.__f__("log", "at pages/return/index.vue:283", "订单详情结果:", JSON.stringify(result));
if (result.code === 200 && result.data) {
const orderData = result.data;
common_vendor.index.__f__("log", "at pages/return/index.vue:287", "订单原始数据:", orderData);
common_vendor.index.__f__("log", "at pages/return/index.vue:288", "开始时间字段:", orderData.startTime, typeof orderData.startTime);
common_vendor.index.__f__("log", "at pages/return/index.vue:295", "订单原始数据:", orderData);
common_vendor.index.__f__("log", "at pages/return/index.vue:296", "开始时间字段:", orderData.startTime, typeof orderData.startTime);
if (orderData.orderStatus) {
this.orderInfo.orderStatus = orderData.orderStatus;
}
@@ -164,12 +169,12 @@ const _sfc_main = {
return;
}
this.updateOrderInfo(orderData);
common_vendor.index.__f__("log", "at pages/return/index.vue:315", "更新后的开始时间:", this.orderInfo.startTime);
common_vendor.index.__f__("log", "at pages/return/index.vue:323", "更新后的开始时间:", this.orderInfo.startTime);
} else {
throw new Error(result.msg || "获取订单详情失败");
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/return/index.vue:320", "获取订单详情错误:", error);
common_vendor.index.__f__("error", "at pages/return/index.vue:328", "获取订单详情错误:", error);
common_vendor.index.showToast({
title: error.message || "获取订单信息失败",
icon: "none"
@@ -192,7 +197,6 @@ const _sfc_main = {
},
// 使用后端返回的使用时长和费用数据
updateOrderInfo(orderData) {
common_vendor.index.__f__("log", "at pages/return/index.vue:348", "更新订单信息:", JSON.stringify(orderData));
this.orderInfo.usedTime = orderData.usedTime || "0分钟";
this.orderInfo.currentFee = orderData.currentFee || orderData.actualDeviceAmount || orderData.payAmount || "0.00";
if (orderData.orderStatus) {
@@ -204,21 +208,24 @@ const _sfc_main = {
this.orderInfo._rawStartTime = orderData.startTime;
if (orderData.startTime) {
try {
common_vendor.index.__f__("log", "at pages/return/index.vue:372", "API返回的开始时间:", orderData.startTime);
common_vendor.index.__f__("log", "at pages/return/index.vue:379", "API返回的开始时间:", orderData.startTime);
this.orderInfo.startTime = orderData.startTime;
} catch (e) {
common_vendor.index.__f__("error", "at pages/return/index.vue:376", "更新开始时间错误:", e);
common_vendor.index.__f__("error", "at pages/return/index.vue:383", "更新开始时间错误:", e);
this.orderInfo.startTime = "未知";
}
} else {
common_vendor.index.__f__("warn", "at pages/return/index.vue:380", "API返回的订单数据中没有startTime字段");
common_vendor.index.__f__("warn", "at pages/return/index.vue:387", "API返回的订单数据中没有startTime字段");
if (orderData.createTime) {
common_vendor.index.__f__("log", "at pages/return/index.vue:383", "使用createTime作为备选:", orderData.createTime);
common_vendor.index.__f__("log", "at pages/return/index.vue:390", "使用createTime作为备选:", orderData.createTime);
this.orderInfo.startTime = orderData.createTime;
} else {
this.orderInfo.startTime = "未知";
}
}
if (orderData.orderNo) {
this.orderInfo.orderNo = orderData.orderNo;
}
if (orderData.deviceNo && !this.deviceId) {
this.deviceId = orderData.deviceNo;
}
@@ -228,21 +235,21 @@ const _sfc_main = {
this.clearTimer();
this.timer = setInterval(() => {
if (this.isPageActive) {
common_vendor.index.__f__("log", "at pages/return/index.vue:405", "执行定时更新订单信息");
common_vendor.index.__f__("log", "at pages/return/index.vue:415", "执行定时更新订单信息");
this.getOrderDetails();
} else {
common_vendor.index.__f__("log", "at pages/return/index.vue:408", "页面已不活跃,停止计时器");
common_vendor.index.__f__("log", "at pages/return/index.vue:418", "页面已不活跃,停止计时器");
this.clearTimer();
}
}, 6e4);
common_vendor.index.__f__("log", "at pages/return/index.vue:413", "已启动使用时长更新计时器");
common_vendor.index.__f__("log", "at pages/return/index.vue:423", "已启动使用时长更新计时器");
},
// 清除定时器
clearTimer() {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
common_vendor.index.__f__("log", "at pages/return/index.vue:421", "已清除使用时长更新计时器");
common_vendor.index.__f__("log", "at pages/return/index.vue:431", "已清除使用时长更新计时器");
}
},
// 清除状态检查定时器
@@ -250,7 +257,7 @@ const _sfc_main = {
if (this.statusCheckTimer) {
clearInterval(this.statusCheckTimer);
this.statusCheckTimer = null;
common_vendor.index.__f__("log", "at pages/return/index.vue:430", "已清除归还状态检查计时器");
common_vendor.index.__f__("log", "at pages/return/index.vue:440", "已清除归还状态检查计时器");
}
},
// 开始状态检查定时器
@@ -260,7 +267,7 @@ const _sfc_main = {
this.statusCheckTimer = setInterval(() => {
if (this.isPageActive) {
this.currentStatusChecks++;
common_vendor.index.__f__("log", "at pages/return/index.vue:444", `执行归还状态检查 (${this.currentStatusChecks}/${this.maxStatusChecks})`);
common_vendor.index.__f__("log", "at pages/return/index.vue:454", `执行归还状态检查 (${this.currentStatusChecks}/${this.maxStatusChecks})`);
this.checkReturnStatus();
if (this.currentStatusChecks >= this.maxStatusChecks) {
this.clearStatusCheckTimer();
@@ -271,11 +278,11 @@ const _sfc_main = {
});
}
} else {
common_vendor.index.__f__("log", "at pages/return/index.vue:459", "页面已不活跃,停止状态检查计时器");
common_vendor.index.__f__("log", "at pages/return/index.vue:469", "页面已不活跃,停止状态检查计时器");
this.clearStatusCheckTimer();
}
}, this.statusCheckInterval);
common_vendor.index.__f__("log", "at pages/return/index.vue:464", "已启动归还状态检查计时器");
common_vendor.index.__f__("log", "at pages/return/index.vue:474", "已启动归还状态检查计时器");
},
// 通过设备号查询使用中的订单
async getOrderByDevice() {
@@ -291,10 +298,10 @@ const _sfc_main = {
"Clientid": common_vendor.index.getStorageSync("client_id")
}
});
common_vendor.index.__f__("log", "at pages/return/index.vue:486", "通过设备号查询订单结果:", JSON.stringify(inUseRes));
common_vendor.index.__f__("log", "at pages/return/index.vue:496", "通过设备号查询订单结果:", JSON.stringify(inUseRes));
if (inUseRes.statusCode === 200 && inUseRes.data.code === 200 && inUseRes.data.data) {
const inUseOrder = inUseRes.data.data;
common_vendor.index.__f__("log", "at pages/return/index.vue:490", "使用中的订单:", inUseOrder);
common_vendor.index.__f__("log", "at pages/return/index.vue:500", "使用中的订单:", inUseOrder);
this.orderInfo.orderId = inUseOrder.orderId;
if (inUseOrder.orderStatus) {
this.orderInfo.orderStatus = inUseOrder.orderStatus;
@@ -303,7 +310,7 @@ const _sfc_main = {
this.orderInfo.payWay = inUseOrder.payWay;
}
if (inUseOrder.startTime) {
common_vendor.index.__f__("log", "at pages/return/index.vue:507", "inUse API返回的开始时间:", inUseOrder.startTime);
common_vendor.index.__f__("log", "at pages/return/index.vue:517", "inUse API返回的开始时间:", inUseOrder.startTime);
this.orderInfo.startTime = inUseOrder.startTime;
}
this.getOrderDetails();
@@ -313,7 +320,7 @@ const _sfc_main = {
throw new Error("未找到使用中的订单");
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/return/index.vue:521", "通过设备号查询订单失败:", error);
common_vendor.index.__f__("error", "at pages/return/index.vue:531", "通过设备号查询订单失败:", error);
common_vendor.index.showToast({
title: error.message || "获取订单信息失败",
icon: "none"
@@ -332,7 +339,7 @@ const _sfc_main = {
await this.getOrderDetails();
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/return/index.vue:544", "检查归还状态失败:", error);
common_vendor.index.__f__("error", "at pages/return/index.vue:554", "检查归还状态失败:", error);
}
},
// 返回首页
@@ -346,7 +353,7 @@ const _sfc_main = {
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.t($options.getOrderStatusText()),
b: common_vendor.t($data.orderInfo.orderId),
b: common_vendor.t($data.orderInfo.orderNo),
c: common_vendor.t($data.deviceId),
d: $data.orderInfo.payWay == "wx_score_pay"
}, $data.orderInfo.payWay == "wx_score_pay" ? {