mrr.sj.front/pages/syr/shoporders.vue

345 lines
7.6 KiB
Vue
Raw Permalink Normal View History

2026-03-24 11:45:13 +08:00
<template>
<view class="orders-page">
<!-- 顶部导航栏 -->
<custom-navbar
title="全部订单"
:show-back="true"
backgroundColor="#fff"
></custom-navbar>
<!-- 订单列表 -->
<!-- <scroll-view
scroll-y
class="order-list"
@scrolltolower="loadMore"
refresher-enabled
:refresher-triggered="isRefreshing"
@refresherrefresh="onRefresh"
> -->
<view class="order-list">
<view class="order-item" v-for="(order, index) in orderList" :key="index">
<!-- 订单日期 -->
<text class="order-date">{{order.add_time}}</text>
<!-- 订单内容 -->
<view class="order-content">
<!-- 服务图片 -->
<image
:src="order.order_photo[0]"
mode="aspectFill"
class="service-image"
></image>
<!-- 订单信息 -->
<view class="order-info">
<!-- 服务名称 -->
<view class="service-name text-overflow-1">{{order.server_title}}</view>
<!-- 评分 -->
<!-- <view class="rating">
<image
v-for="n in 5"
:key="n"
src="/static/images/star.png"
mode="aspectFit"
class="star-icon"
></image>
<text class="rating-score">{{order.rating}}</text>
</view> -->
<!-- 价格 -->
<view class="price">
<text class="currency">¥</text>
<text class="amount">{{order.pay_money}}</text>
</view>
<!-- 地址 -->
<view class="address" v-if="order.order_kind == 1">
<image
src="/static/images/position_icon.png"
mode="aspectFit"
class="location-icon"
></image>
<text class="address-text text-overflow-1">{{order.reservation_address}}</text>
</view>
</view>
</view>
<!-- 订单状态 -->
<view class="order-status">
<text class="status-text">{{order.state == 1 ? '待支付' : order.state == 2 ? '待接单' : order.state == 3 ? '待服务' : order.state == 4 ? '待完成' : order.state == 5 ? '已完成' : order.state == 6 ? '待评价' : order.state == 7 ? '已取消' : ''}}</text>
</view>
</view>
<!-- 加载更多 -->
<view class="load-more" @click="loadPreviousMonth">
<view class="">
<text class="load-text">点击查看</text>
<text class="load-date">{{nextMonthText}}</text>
<text class="load-text">订单</text>
</view>
</view>
</view>
</view>
</template>
<script>
import request from '../../utils/request'
export default {
data() {
const now = new Date()
return {
userInfo: {},
isRefreshing: false,
currentYear: now.getFullYear(),
currentMonth: now.getMonth() + 1, // JavaScript月份从0开始需要+1
orderList: [],
artisanType: getApp().globalData.artisanType
}
},
computed: {
nextMonthText() {
let year = this.currentYear
let month = this.currentMonth - 1
if (month === 0) {
year--
month = 12
}
return `${year}${month}`
}
},
async onLoad() {
const {data} = await request.post('/user/getuser',{type: 2});
this.userInfo = data;
this.loadOrders();
},
onPullDownRefresh() {
this.onRefresh();
},
methods: {
// 格式化日期
formatDate(date) {
return `${date.getFullYear()}${date.getMonth() + 1}${date.getDate()}`
},
// 下拉刷新
async onRefresh() {
this.isRefreshing = true
// 重置为当前月份
const now = new Date()
this.currentYear = now.getFullYear()
this.currentMonth = now.getMonth() + 1
await this.loadOrders()
uni.stopPullDownRefresh()
// console.log('this.isRefreshing',this.isRefreshing)
this.isRefreshing = false;
},
// 加载更多
async loadMore() {
await this.loadOrders()
},
// 加载上一个月订单
async loadPreviousMonth() {
uni.showLoading({
title: '加载中...'
})
try {
// 更新月份
if (this.currentMonth === 1) {
this.currentYear--
this.currentMonth = 12
} else {
this.currentMonth--
}
let currentMonth;
if(this.currentMonth<10) {
currentMonth = '0' + this.currentMonth
}else {
currentMonth = this.currentMonth
}
console.log(this.currentYear+'-'+currentMonth)
// 加载上一个月数据
request.post('/syr/syrgetsjorder',{syrid: this.userInfo.id,add_time: this.currentYear+'-'+currentMonth}).then(res=>{
// 追加数据到列表
this.orderList = [...this.orderList, ...res.data];
console.log(this.orderList,res.data)
})
} catch (error) {
uni.showToast({
title: '加载失败,请重试',
icon: 'none'
})
} finally {
uni.hideLoading()
}
},
// 加载订单数据
async loadOrders() {
// TODO: 调用获取订单列表接口
let currentMonth;
if(this.currentMonth<10) {
currentMonth = '0' + this.currentMonth
}else {
currentMonth = this.currentMonth
}
return new Promise(resolve => {
request.post('/syr/syrgetsjorder',{syrid: this.userInfo.id,add_time: this.currentYear+'-'+currentMonth}).then(res=>{
this.orderList = res.data;
resolve(res.data)
})
})
}
}
}
</script>
<style>
.order-item {
margin: 32rpx 24rpx;
border-radius: 16rpx;
padding: 24rpx;
background-color: #FFFFFF;
position: relative;
}
.order-date {
font-size: 24rpx;
color: #666666;
font-weight: 400;
}
.order-content {
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
align-items: center;
margin-top: 16rpx;
}
.service-image {
width: 162rpx;
height: 162rpx;
border-radius: 24rpx;
margin-right: 16rpx;
background-color: #333333;
}
.order-info {
width: 350rpx;
height: 162rpx;
display: flex;
flex-flow: column nowrap;
justify-content: flex-start;
align-items: flex-start;
}
.service-name {
flex: 1;
font-size: 28rpx;
color: #000000;
font-weight: 400;
margin-bottom: 6rpx;
}
.rating {
display: flex;
align-items: center;
margin-bottom: 6rpx;
}
.star-icon {
width: 20rpx;
height: 20rpx;
margin-right: 6rpx;
background-color: #000000;
}
.rating-score {
font-size: 16rpx;
2026-06-02 11:39:23 +08:00
color: #FF4767;
2026-03-24 11:45:13 +08:00
margin-left: 68rpx;
}
.currency {
font-size: 24rpx;
2026-06-02 11:39:23 +08:00
color: #FF4767;
2026-03-24 11:45:13 +08:00
}
.amount {
font-size: 32rpx;
2026-06-02 11:39:23 +08:00
color: #FF4767;
2026-03-24 11:45:13 +08:00
font-weight: 500;
}
.address {
display: flex;
align-items: center;
}
.location-icon {
width: 24rpx;
height: 24rpx;
margin-right: 4rpx;
}
.address-text {
font-size: 24rpx;
color: #999999;
flex: 1;
}
.order-status {
position: absolute;
top: 0;
right: 0;
}
.status-text {
font-size: 24rpx;
font-weight: 400;
padding: 6rpx 16rpx;
color: #28D189;
background-color: rgba(40, 209, 137, 0.20);
border-radius: 0 16rpx 0 16rpx;
}
.load-more {
text-align: center;
padding: 0 0 32rpx;
}
.load-date {
font-size: 24rpx;
2026-06-02 11:39:23 +08:00
color: #FF4767;
2026-03-24 11:45:13 +08:00
}
.load-text {
font-size: 24rpx;
color: #999999;
}
.nothings-box {
display: flex;
flex-flow: row nowrap;
justify-content: center;
align-items: center;
padding: 280rpx 0 0;
}
.nothings-text {
font-size: 32rpx;
font-weight: 500;
color: #999999;
text-align: center;
font-style: italic;
}
/* 下拉刷新样式 */
::-webkit-scrollbar {
width: 0;
height: 0;
color: transparent;
}
</style>