feat: 添加订单支付和成功页面,更新订单状态逻辑

新增了订单支付页面和支付成功页面,分别用于处理用户的支付流程和展示支付结果。同时,更新了订单状态的逻辑,确保在订单列表中正确显示各个状态。调整了设备租借逻辑,优化了扫码处理流程,提升用户体验。
This commit is contained in:
8vd8
2025-04-10 14:18:43 +08:00
parent aebd6c0459
commit 3fecd77739
53 changed files with 2049 additions and 702 deletions
+68 -64
View File
@@ -3,13 +3,13 @@
<!-- 状态切换 -->
<view class="tab-bar">
<view
v-for="(tab, index) in tabs"
v-for="(tab, index) in OrderStatusTabs"
:key="index"
class="tab-item"
:class="{ active: currentTab === index }"
@click="switchTab(index)"
>
{{ tab }}
{{ tab.text }}
</view>
</view>
@@ -18,7 +18,7 @@
<view class="order-item" v-for="(order, index) in orderList" :key="index">
<view class="order-header">
<text class="order-no">订单号{{ order.orderNo }}</text>
<text class="order-status" :class="order.status">{{ order.statusText }}</text>
<text class="order-status" :class="OrderStatusMap[order.status]?.class">{{ OrderStatusMap[order.status]?.text }}</text>
</view>
<view class="order-content">
<view class="device-info">
@@ -51,32 +51,16 @@
</template>
<script>
import {getOrderList, queryById} from '../../config/user.js'
import {getOrderList, queryById} from '../../config/user.js'
import { OrderStatusMap, OrderStatusTabs } from '../../constants/orderStatus.js'
export default {
data() {
return {
currentTab: 0,
tabs: ['全部', '使用中', '已完成'],
orderList: [
{
orderNo: 'ORDER202403200001',
status: 'using',
statusText: '使用中',
deviceId: 'FAN001',
startTime: '2024-03-20 15:30',
endTime: '',
amount: '2.00'
},
{
orderNo: 'ORDER202403190001',
status: 'finished',
statusText: '已完成',
deviceId: 'FAN002',
startTime: '2024-03-19 13:00',
endTime: '2024-03-19 15:00',
amount: '4.00'
}
]
OrderStatusMap,
OrderStatusTabs,
orderList: []
}
},
async onLoad(options) {
@@ -91,20 +75,22 @@ export default {
// 格式化订单数据
const formattedOrder = {
orderNo: orderData.orderId,
status: orderData.orderStatus === 2 ? 'using' : 'finished',
statusText: orderData.orderStatus === 2 ? '使用中' : '已完成',
status: orderData.orderStatus,
deviceId: orderData.deviceNo,
startTime: this.formatTime(new Date(orderData.createTime)),
endTime: orderData.endTime ? this.formatTime(new Date(orderData.endTime)) : '',
startTime: orderData.createTime,
endTime: orderData.endTime || '',
amount: orderData.amount || '0.00'
};
// 将订单添加到列表开头
this.orderList = [formattedOrder, ...this.orderList];
// 如果是使用中的订单,切换到使用中标签
if (orderData.orderStatus === 2) {
this.switchTab(1); // 切换到"使用中"
// 根据订单状态切换到对应标签
const tabIndex = this.OrderStatusTabs.findIndex(tab =>
tab.status.includes(orderData.orderStatus)
);
if (tabIndex !== -1) {
this.switchTab(tabIndex);
}
}
} catch (error) {
@@ -113,38 +99,36 @@ export default {
}
// 获取订单列表
try {
const res = await getOrderList();
console.log(res);
if (res.code === 200 && res.data && res.data.records) {
// 处理订单列表数据
this.orderList = res.data.records.map(item => ({
orderNo: item.orderId,
status: item.orderStatus === 2 ? 'using' : 'finished',
statusText: item.orderStatus === 2 ? '使用中' : '已完成',
deviceId: item.deviceNo,
startTime: item.startTime,
endTime: item.endTime ? this.formatTime(new Date(item.endTime)) : '',
amount: item.amount || '0.00'
}));
}
} catch (error) {
console.error('获取订单列表失败:', error);
}
await this.getOrderList();
},
methods: {
formatTime(date) {
const year = date.getFullYear()
const month = (date.getMonth() + 1).toString().padStart(2, '0')
const day = date.getDate().toString().padStart(2, '0')
const hour = date.getHours().toString().padStart(2, '0')
const minute = date.getMinutes().toString().padStart(2, '0')
return `${year}-${month}-${day} ${hour}:${minute}`
async getOrderList(statusList = []) {
try {
const res = await getOrderList(statusList);
if (res.code === 200 && res.data && res.data.records) {
// 处理订单列表数据
this.orderList = res.data.records.map(item => ({
orderNo: item.orderId,
status: item.orderStatus,
deviceId: item.deviceNo,
startTime: item.createTime,
endTime: item.endTime || '',
amount: item.amount || '0.00'
}));
}
} catch (error) {
console.error('获取订单列表失败:', error);
uni.showToast({
title: '获取订单列表失败',
icon: 'none'
});
}
},
switchTab(index) {
this.currentTab = index
// TODO: 根据状态获取订单列表
async switchTab(index) {
this.currentTab = index;
// 根据状态获取订单列表
const statusList = this.OrderStatusTabs[index].status;
await this.getOrderList(statusList);
}
}
}
@@ -216,11 +200,31 @@ export default {
.order-status {
font-size: 26rpx;
&.using {
&.status-waiting {
color: #FF9800;
}
&.status-progress {
color: #2196F3;
}
&.status-success {
color: #4CAF50;
}
&.status-using {
color: #1976D2;
}
&.finished {
&.status-failed {
color: #F44336;
}
&.status-cancelled {
color: #9E9E9E;
}
&.status-finished {
color: #4CAF50;
}
}