driverSchool/newPages/orderList/index.vue
2025-04-11 18:06:20 +08:00

326 lines
10 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="page flex-col">
<view class="block_1 flex-row">
</view>
<view class="block_2 flex-col">
<view class="group_1 flex-row">
<image
class="label_1"
referrerpolicy="no-referrer"
src="/static/lanhu_quanbudingdan/FigmaDDSSlicePNGacf527a62cbe7351c6472edd8f5b2814.png"
@click="handleBack()"
/>
<text class="text_1">订单</text>
</view>
<view class="list_1 flex-col">
<scroll-view
class="scroll-view"
scroll-y
:style="{ height: scrollHeight + 'px' }"
@scrolltolower="loadMoreData"
:refresher-enabled="true"
:refresher-triggered="isRefreshing"
@refresherrefresh="onRefresherrefresh"
>
<view class="list-items_1 flex-col" v-for="(item, index) in orderList" :key="index" @click="goOrderDetails(item)">
<view class="box_6 flex-row justify-between">
<text class="text_2">订单号: {{item.orderNo}}</text>
<view class="text-wrapper_1 flex-col" :style="{ background: statusMap[item.paymentStatus].background }">
<text class="text_3" :style="{ color: statusMap[item.paymentStatus].color }">{{
statusMap[item.paymentStatus].name}}
</text>
</view>
</view>
<view class="box_7 flex-row">
<view class="image-text_1 flex-row">
<image
class="image_3"
referrerpolicy="no-referrer"
:src="imageUrl + '/' + item.photo"
/>
<view class="text-group_1 flex-col justify-between">
<text class="text_4">{{item.courseName}}</text>
<view class="text-wrapper_2 flex-row justify-between">
<text class="text_5">¥{{item.reserveMoney}}</text>
<!-- <text class="text_6">{{item.reserveMoney}}</text> -->
</view>
</view>
<view class="text-wrapper_4 flex-col">
<text class="text_8">{{item.type}}</text>
</view>
<!-- <view class="text-wrapper_3 flex-col">
<text class="text_7">{{item.type}}</text>
</view> -->
</view>
</view>
</view>
</scroll-view>
</view>
<view class="group_2 flex-col justify-end">
<view class="text-wrapper_5 flex-row">
<text
class="text_9"
:class="{ 'active-blue': type === 1 }"
@click="changeOrderType('',1)"
>
全部订单
</text>
<text
class="text_10"
:class="{ 'active-blue': type === 2 }"
@click="changeOrderType(2,2)"
>
已付款
</text>
<text
class="text_11"
:class="{ 'active-blue': type === 3 }"
@click="changeOrderType(4,3)"
>
已面签
</text>
<text
class="text_12"
:class="{ 'active-blue': type === 4 }"
@click="changeOrderType(2,4)"
>
已报名
</text>
</view>
<view class="box_8 flex-row">
<!-- <view class="group_8 flex-col"></view> -->
</view>
</view>
</view>
</view>
</template>
<script>
import request from '@/utils/request.js'
export default {
data() {
return {
imageUrl: this.$imagesUrl,
loopData0: [
{
lanhutext0: '订单号44782938752039585',
lanhuBg2: 'rgba(255,244,228,1.000000)',
lanhutext1: '已付款',
lanhufontColor1: 'rgba(237,162,58,1.000000)',
/* lanhuimage0:
'https://lanhu-oss-2537-2.lanhuapp.com/FigmaDDSSlicePNGcdb906a0aec43afcbb43c980454f42f5.png', */
lanhutext2: 'AI智能+人工教学',
lanhutext3: '¥3000.00',
lanhutext4: '¥3000.00',
lanhutext5: 'C2',
lanhutext6: '自动挡'
},
{
lanhutext0: '订单号44782938752039585',
lanhuBg2: 'rgba(218,255,239,1.000000)',
lanhutext1: '已面签',
lanhufontColor1: 'rgba(17,186,113,1.000000)',
/* lanhuimage0:
'https://lanhu-oss-2537-2.lanhuapp.com/FigmaDDSSlicePNGcdb906a0aec43afcbb43c980454f42f5.png', */
lanhutext2: 'AI智能+人工教学',
lanhutext3: '¥3000.00',
lanhutext4: '¥3000.00',
lanhutext5: 'C2',
lanhutext6: '自动挡'
},
{
lanhutext0: '订单号44782938752039585',
lanhuBg2: 'rgba(227,238,255,1.000000)',
lanhutext1: '已报名',
lanhufontColor1: 'rgba(44,120,245,1.000000)',
/* lanhuimage0:
'https://lanhu-oss-2537-2.lanhuapp.com/FigmaDDSSlicePNGcdb906a0aec43afcbb43c980454f42f5.png', */
lanhutext2: 'AI智能+人工教学',
lanhutext3: '¥3000.00',
lanhutext4: '¥3000.00',
lanhutext5: 'C2',
lanhutext6: '自动挡'
}
],
type: null,
orderType: null,
scrollHeight: 0,
userId: null,
orderList: [],
constants: {},
courseDetails: {},
pageNo: 1,
pageSize: 10,
total: 0,
loading: false,
isRefreshing: false,
statusMap: {
8: { name: '退款成功', background: '#fef0f0', color: '#f56c6c' }, // 红色柔和
7: { name: '退款中', background: '#fef0f0', color: '#f56c6c' }, // 红色柔和
6: { name: '申请退款', background: '#fef0f0', color: '#f56c6c' }, // 红色柔和
5: { name: '已完成', background: '#f0f9eb', color: '#67c23a' }, // 绿色完成
4: { name: '已面签', background: '#ecf5ff', color: '#409EFF' }, // 蓝色稳定
3: { name: '待面签', background: '#fdf6ec', color: '#e6a23c' }, // 橙色提醒
2: { name: '已支付', background: '#f0f9eb', color: '#67c23a' }, // 绿色支付成功
1: { name: '已取消', background: '#f4f4f5', color: '#909399' }, // 灰色中立
0: { name: '待支付', background: '#fdf6ec', color: '#e6a23c' }, // 橙色提醒
}
};
},
onLoad(options) {
// this.orderType = options.orderType; // 读取上个页面传入的 orderType
this.orderType = options.orderType ? parseInt(options.orderType) : '';
this.type = options.type ? parseInt(options.type) : 1;
this.userId = options.userId;
// this.type = options.type;
// this.getUserOrderDetails(this.orderType); // 页面加载时请求数据
// this.getUserOrderDetails(options.orderType);
this.changeOrderType(this.orderType, this.type)
},
onReady() {
// 动态计算滚动区域高度
this.calculateScrollHeight();
},
mounted() {
// this.updateUnderlinePosition(this.orderType);
},
methods: {
handleBack() {
uni.navigateBack({
delta: 1
});
},
/**
* 上滑加载数据
*/
loadMoreData() {
// 如果正在加载或没有更多数据,则直接返回
if (this.loading || this.pageNo * this.pageSize >= this.total) {
return;
}
this.loading = true;
this.pageNo++;
this.getUserOrderDetails(this.orderType, false);
},
/**
* 下拉刷新数据
*/
onRefresherrefresh() {
if (this.isRefreshing) return;
this.isRefreshing = true;
// 重置页码
this.pageNo = 1;
this.getUserOrderDetails(this.orderType, true);
},
// 获取用户订单详情
getUserOrderDetails(paymentStatus, isRefresh = false) {
if (!isRefresh && this.loading) return;
request({
url: '/app-api/small/drive/school-course-order/page',
method: 'GET',
params: {
userId: this.userId,
paymentStatus: paymentStatus,
pageNo: this.pageNo,
pageSize: this.pageSize
},
tenantIdFlag: false
}).then(res => {
if (isRefresh) {
// 下拉刷新,替换原有数据
this.orderList = res.data.records;
this.isRefreshing = false;
// 停止下拉刷新动画
uni.stopPullDownRefresh();
} else if (this.pageNo === 1) {
// 首次加载或切换tab
this.orderList = res.data.records;
} else {
// 上拉加载更多,追加数据
this.orderList = [...this.orderList, ...res.data.records];
}
this.total = res.data.total;
this.loading = false;
}).catch(err => {
this.loading = false;
this.isRefreshing = false;
if (isRefresh) {
uni.stopPullDownRefresh();
}
console.error('获取订单失败', err);
});
},
// 判断选择的标签
changeOrderType(orderType, type) {
this.orderType = orderType;
this.type = type;
this.pageNo = 1;
this.getUserOrderDetails(orderType); // 切换 Tab 时重新请求数据
// this.updateUnderlinePosition(type);
},
// 支付状态
getStatusStyle(status) {
return this.statusMap[status] || {name: '未知状态', background: '', color: ''};
},
// 获取课程详情
getCourseDetails() {
request({
url: '/app-api/dl-drive-school-course-small/get',
method: 'GET',
params: {
id: this.courseId,
tenantId: this.tenantId,
},
tenantIdFlag: false
}).then(res => {
this.courseDetails = res.data;
})
},
// 订单详情
goOrderDetails(data){
uni.navigateTo({
// url: `/newPages/orderDetails/index?data=${data}`
url: `/newPages/orderDetails/index?data=${encodeURIComponent(JSON.stringify(data))}`
})
},
calculateScrollHeight() {
// 获取屏幕高度
const screenHeight = uni.getSystemInfoSync().windowHeight;
// 获取顶部区域高度
const topHeight = 160;
// 计算滚动区域高度
this.scrollHeight = screenHeight - topHeight;
},
}
};
</script>
<style lang='scss'>
@import '../common/common.scss';
@import './assets/style/index.rpx.scss';
</style>