Files
Wechat/pages/orders/orders.js

273 lines
7.6 KiB
JavaScript
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.
// pages/orders/orders.js
const app = getApp()
import request from '../../utils/request.js'
Page({
data: {
// 订单状态tab配置
dingdanZhuangtaiTabs: [
{ name: '全部', key: 'all', zhuangtaiList: [1, 2, 3, 4, 5, 6, 7, 8] },
{ name: '已下单', key: 'yixiadan', zhuangtaiList: [1, 7] },
{ name: '进行中', key: 'jinxingzhong', zhuangtaiList: [2] },
{ name: '争议订单', key: 'zhengyi', zhuangtaiList: [4, 5, 6] },
{ name: '已完成', key: 'yiwancheng', zhuangtaiList: [3] },
{ name: '结算中', key: 'jiesuanzhong', zhuangtaiList: [8] }
],
// 当前选中的tab索引
xuanzhongTabIndex: 0,
// 当前选中的tab的key
currentTabKey: 'all',
// 每个tab对应的订单数据
dingdanShuju: {
all: { list: [], page: 1, hasMore: true, isLoading: false },
yixiadan: { list: [], page: 1, hasMore: true, isLoading: false },
jinxingzhong: { list: [], page: 1, hasMore: true, isLoading: false },
zhengyi: { list: [], page: 1, hasMore: true, isLoading: false },
yiwancheng: { list: [], page: 1, hasMore: true, isLoading: false },
jiesuanzhong: { list: [], page: 1, hasMore: true, isLoading: false }
},
// 个人中心传递过来的type参数
gerenzhongxinType: '',
// 是否显示加载更多
xianshiJiazaigengduo: false,
// 页面加载状态
isLoading: true
},
onLoad(options) {
const type = options.type || ''
wx.setNavigationBarTitle({
title: '我的订单'
})
this.qingkongGerenzhongxinJishu(type)
const tabIndex = this.yingsheTypeToTabIndex(type)
const tabKey = this.data.dingdanZhuangtaiTabs[tabIndex].key
this.setData({
gerenzhongxinType: type,
xuanzhongTabIndex: tabIndex,
currentTabKey: tabKey,
isLoading: false
})
this.jiazaiDingdanShuju(tabIndex)
},
onShow() {
this.registerNotificationComponent();
},
registerNotificationComponent() {
const app = getApp();
const notificationComp = this.selectComponent('#global-notification');
if (notificationComp && notificationComp.showNotification) {
app.globalData.globalNotification = {
show: (data) => notificationComp.showNotification(data),
hide: () => notificationComp.hideNotification()
};
}
},
qingkongGerenzhongxinJishu(type) {
const jishuMap = {
'daifuwu': 'daifuwu',
'fuwuzhong': 'fuwuzhong',
'yiwancheng': 'yiwancheng',
'yituikuan': 'yituikuan'
}
const jishuKey = jishuMap[type]
if (jishuKey && app.globalData.dingdanTiaoshu) {
app.globalData.dingdanTiaoshu[jishuKey] = 0
}
},
yingsheTypeToTabIndex(type) {
const yingsheMap = {
'daifuwu': 1,
'fuwuzhong': 2,
'yiwancheng': 4,
'yituikuan': 3
}
return yingsheMap[type] || 0
},
switchDingdanTab(e) {
const tabIndex = e.currentTarget.dataset.index
if (tabIndex === this.data.xuanzhongTabIndex) return
const tabKey = this.data.dingdanZhuangtaiTabs[tabIndex].key
this.setData({
xuanzhongTabIndex: tabIndex,
currentTabKey: tabKey
})
this.jiazaiDingdanShuju(tabIndex)
},
async jiazaiDingdanShuju(tabIndex, isLoadMore = false) {
const tab = this.data.dingdanZhuangtaiTabs[tabIndex]
const tabKey = tab.key
const tabData = this.data.dingdanShuju[tabKey]
const page = isLoadMore ? tabData.page + 1 : 1
if (tabData.isLoading) return
// 重置逻辑:如果不是加载更多,清空已有数据
if (!isLoadMore) {
this.setData({
[`dingdanShuju.${tabKey}.list`]: [],
[`dingdanShuju.${tabKey}.page`]: 1
})
}
this.setData({
[`dingdanShuju.${tabKey}.isLoading`]: true
})
wx.showLoading({
title: isLoadMore ? '加载更多...' : '加载订单...',
mask: true
})
try {
const requestData = {
zhuangtai_list: tab.zhuangtaiList,
page: page,
page_size: 10
}
const res = await request({
url: '/dingdan/dingdanhuoqu',
method: 'POST',
data: requestData,
header: {
'content-type': 'application/json'
}
})
wx.hideLoading()
// 关键修正res是直接返回的数据对象
if (res && res.data.code === 0) {
const newDingdanList = res.data.data.list || []
const hasMore = res.data.data.has_more || false
// 处理图片URL拼接完整路径
const processedList = newDingdanList.map(item => {
let tupianUrl = item.tupian || ''
// 如果图片URL不是完整路径拼接ossImageUrl
if (tupianUrl && !tupianUrl.startsWith('http')) {
const ossImageUrl = app.globalData.ossImageUrl || ''
tupianUrl = ossImageUrl + tupianUrl
}
const zhuangtaiZh = this.getZhuangtaiZhongwen(item.zhuangtai)
return {
...item,
tupian: tupianUrl,
zhuangtaiZh: zhuangtaiZh
}
})
const currentList = this.data.dingdanShuju[tabKey].list
const updatedList = isLoadMore
? [...currentList, ...processedList]
: processedList
this.setData({
[`dingdanShuju.${tabKey}.list`]: updatedList,
[`dingdanShuju.${tabKey}.page`]: page,
[`dingdanShuju.${tabKey}.hasMore`]: hasMore,
[`dingdanShuju.${tabKey}.isLoading`]: false,
xianshiJiazaigengduo: hasMore
})
} else {
wx.showToast({
title: res ? (res.msg || '加载失败') : '请求失败',
icon: 'none',
duration: 2000
})
this.setData({
[`dingdanShuju.${tabKey}.isLoading`]: false
})
}
} catch (error) {
console.error('加载订单数据失败:', error)
wx.hideLoading()
wx.showToast({
title: '网络请求失败,请重试',
icon: 'none',
duration: 2000
})
this.setData({
[`dingdanShuju.${tabKey}.isLoading`]: false
})
}
},
getZhuangtaiZhongwen(zhuangtai) {
const zhuangtaiMap = {
1: '已下单',
2: '进行中',
3: '已完成',
4: '退款中',
5: '已退款',
6: '退款失败',
7: '指定中',
8: '结算中'
}
return zhuangtaiMap[zhuangtai] || '未知状态'
},
onReachBottom() {
const tabKey = this.data.currentTabKey
const tabData = this.data.dingdanShuju[tabKey]
if (tabData.hasMore && !tabData.isLoading) {
const tabIndex = this.data.xuanzhongTabIndex
this.jiazaiDingdanShuju(tabIndex, true)
}
},
goToDingdanXiangqing(e) {
const dingdanItem = e.currentTarget.dataset.item
if (!dingdanItem) return
const dingdanDataStr = encodeURIComponent(JSON.stringify(dingdanItem))
wx.navigateTo({
url: `/pages/order-detail/order-detail?dingdanData=${dingdanDataStr}`
})
},
onImageError(e) {
const index = e.currentTarget.dataset.index
const tabKey = this.data.currentTabKey
const defaultImage = app.globalData.lunbozhanwei || '/images/default.jpg'
this.setData({
[`dingdanShuju.${tabKey}.list[${index}].tupian`]: defaultImage
})
}
})