2025-09-09 16:23:08 +08:00

173 lines
6.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="order-list">
<!-- 订单按月分组显示 -->
<view class="month-group" v-for="monthGroup in orderData" :key="monthGroup.month">
<view class="month-header">
<text class="month-title">{{ monthGroup.pay_time }}</text>
<text class="month-expense">支出¥{{ monthGroup.amount }}</text>
</view>
<!-- 订单列表 -->
<view class="order-item" v-for="order in monthGroup.orders" :key="order.id" @tap="viewOrderDetail(order)">
<view class="order-left">
<view class="order-type">
<view class="order-type1">
<image class="order-icon"
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/park/park_p.png"
mode="aspectFit"></image>
<text class="order-type-text">停车</text>
</view>
<text class="order-status">{{ order.status == 1 ? '待支付' : '已支付' }}</text>
</view>
<view class="order-park-info">
<text class="order-park-name">{{ order.record_info.parking_info.parking_name }}</text>
<text class="order-amount">¥{{ order.amount.toFixed(2) }}</text>
</view>
<view class="order-car-info">
<text class="order-car-number">{{ order.record_info.car_number }}</text>
<text class="order-car-type">{{ order.record_info.car_billing_type == 1 ? '月租车' :
(order.record_info.car_billing_type == 2) ? '临时车' : '贵宾车' }}</text>
</view>
<text class="order-time">{{ order.pay_time }}</text>
</view>
<view class="delete-button" @tap.stop="deleteOrder(order)">
<u-icon name="trash" size="45rpx"></u-icon>
</view>
</view>
</view>
<!-- 空状态显示 -->
<view class="empty-state" v-if="orderData.length === 0">
<image class="empty-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/park/empty_order.png"
mode="aspectFit"></image>
<text class="empty-text">暂无停车订单</text>
</view>
</view>
</template>
<script>
import {
isPhone,
picUrl,
request,
upload,
NavgateTo
} from '../../../utils';
import { apiArr } from '@/api/park.js'
export default {
data() {
return {
orderData: [],
page_num: 1,
page_size: 20,
}
},
methods: {
// 查看订单详情
viewOrderDetail(order) {
NavgateTo('../orderDetail/index?order=' + JSON.stringify(order))
},
// 删除订单方法
deleteOrder(order) {
const that = this;
uni.showModal({
title: '确认删除订单',
content: '你确定删除订单吗?删除之后你将无法再找回该订单',
success: function (res) {
if (res.confirm) {
const params = {
order_id: order.id
}
request(apiArr.tempParkingOrderDelete, "POST", params).then((res) => {
uni.showToast({
title: '删除成功',
icon: 'success',
duration: 2000
});
setTimeout(() => {
that.getOrderData();
}, 1000);
})
}
}
});
},
// 按月份对订单进行分组的方法
groupOrdersByMonth(orderList) {
const monthMap = new Map();
orderList.forEach(order => {
let payTime;
try {
payTime = new Date(order.pay_time);
} catch (error) {
payTime = new Date(order.pay_time.replace(/T/, ' ').replace(/\+.*$/, ''));
}
// 获取年月作为分组键
const year = payTime.getFullYear();
const month = payTime.getMonth() + 1;
const monthKey = `${year}-${month.toString().padStart(2, '0')}`;
// 如果该月份还没有分组,创建一个新分组
if (!monthMap.has(monthKey)) {
monthMap.set(monthKey, {
month: monthKey,
pay_time: `${year}${month}`,
amount: 0,
orders: []
});
}
// 将当前订单添加到对应月份的分组中
const monthGroup = monthMap.get(monthKey);
monthGroup.orders.push(order);
monthGroup.amount += parseFloat(order.amount || 0);
});
// 将Map转换为数组并按月份降序排序
const groupedArray = Array.from(monthMap.values());
groupedArray.sort((a, b) => b.month.localeCompare(a.month));
// 格式化总金额,保留两位小数
groupedArray.forEach(group => {
group.amount = group.amount.toFixed(2);
});
return groupedArray;
},
// 获取订单数据
getOrderData() {
const params = {
page_num: this.page_num,
page_size: this.page_size,
user_id: uni.getStorageSync('userId')
}
request(apiArr.tempParkingOrderList, "POST", params).then((res) => {
this.orderData = this.groupOrdersByMonth(res.order_list);
})
}
},
onLoad() {
// 页面加载时获取订单数据
this.getOrderData();
},
// 页面滑动到底部时触发
onReachBottom() {
this.page_size += 10;
this.getOrderData();
}
}
</script>
<style>
@import url('./index.css');
</style>