// 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 }) } })