// pages/dingdanxiangqing/dingdanxiangqing.js const app = getApp() import request from '../../utils/request.js' Page({ data: { // 从跳转参数获取的基础数据 jibenShuju: { dingdanId: '', tupian: '', jieshao: '', chuangjianshijian: '', jine: '', nicheng: '', beizhu: '', zhuangtai: 0 }, // 从后端获取的详细数据 xiangxiShuju: { zhiding: '', // 指定打手 dashou: '', // 服务打手 dashoujiaofu: [], // 打手交付图片列表 dashouliuyan: '' // 打手留言 }, // 结算相关数据 jiesuanShuju: { pingfen: 0, // 评分 0-5 liuyan: '' // 留言 }, // 页面状态 isLoading: true, // 页面加载中 isJiesuanLoading: false, // 结单请求中 // 状态颜色映射 zhuangtaiYanseMap: { 1: '#E8F5E9', // 已下单 - 浅绿色 2: '#E3F2FD', // 进行中 - 浅蓝色 3: '#F3E5F5', // 已完成 - 浅紫色 4: '#FFF3E0', // 退款中 - 浅橙色 5: '#FFEBEE', // 已退款 - 浅红色 6: '#EFEBE9', // 退款失败 - 浅棕色 7: '#E0F7FA', // 指定中 - 浅青色 8: '#FFF8E1' // 结算中 - 浅黄色 }, // 状态文字映射 zhuangtaiWenziMap: { 1: '已下单', 2: '进行中', 3: '已完成', 4: '退款中', 5: '已退款', 6: '退款失败', 7: '指定中', 8: '结算中' }, // 星星评分数据 xingxingData: [ { id: 1, active: false }, { id: 2, active: false }, { id: 3, active: false }, { id: 4, active: false }, { id: 5, active: false } ] }, onLoad(options) { // 设置页面标题 wx.setNavigationBarTitle({ title: '订单详情' }) // 解析跳转参数 this.jiexiTiaozhuanCanshu(options) }, onShow() { // 原有代码... // 🆕 注册通知组件 this.registerNotificationComponent(); }, // 🆕 新增:注册通知组件 registerNotificationComponent() { const app = getApp(); const notificationComp = this.selectComponent('#global-notification'); if (notificationComp && notificationComp.showNotification) { console.log('🏪 商城页面注册通知组件'); app.globalData.globalNotification = { show: (data) => notificationComp.showNotification(data), hide: () => notificationComp.hideNotification() }; } }, /** * 解析跳转参数 */ jiexiTiaozhuanCanshu(options) { try { const dingdanDataStr = options.dingdanData || '' if (!dingdanDataStr) { wx.showToast({ title: '订单数据错误', icon: 'none' }) setTimeout(() => { wx.navigateBack() }, 1500) return } // 解析订单数据 const dingdanData = JSON.parse(decodeURIComponent(dingdanDataStr)) // 处理图片URL(拼接完整路径) let tupianUrl = dingdanData.tupian || '' if (tupianUrl && !tupianUrl.startsWith('http')) { const ossImageUrl = app.globalData.ossImageUrl || '' tupianUrl = ossImageUrl + tupianUrl } // 格式化价格 let jine = dingdanData.jine || 0 jine = parseFloat(jine) if (isNaN(jine)) { jine = 0 } const formattedJine = jine.toFixed(2) // 设置基础数据(状态先用跳转的,等后端返回后更新) this.setData({ 'jibenShuju.dingdanId': dingdanData.dingdanId || '', 'jibenShuju.tupian': tupianUrl, 'jibenShuju.jieshao': dingdanData.jieshao || '', 'jibenShuju.chuangjianshijian': dingdanData.chuangjianshijian || '', 'jibenShuju.jine': formattedJine, 'jibenShuju.nicheng': dingdanData.nicheng || '', 'jibenShuju.beizhu': dingdanData.beizhu || '', // 这里先使用跳转的状态,等后端返回后会被覆盖 'jibenShuju.zhuangtai': dingdanData.zhuangtai || 0, isLoading: false }) // 加载详细数据 this.jiazaiXiangxiShuju(dingdanData.dingdanId) } catch (error) { console.error('解析订单数据失败:', error) wx.showToast({ title: '数据解析失败', icon: 'none' }) setTimeout(() => { wx.navigateBack() }, 1500) } }, /** * 加载详细数据 */ async jiazaiXiangxiShuju(dingdanId) { if (!dingdanId) return try { const res = await request({ url: '/dingdan/dingdanxiangqing', method: 'POST', data: { dingdanId: dingdanId }, header: { 'content-type': 'application/json' } }) // 关键修正:使用正确的数据访问路径 if (res && res.data.code === 0 && res.data.data) { const data = res.data.data // 处理打手交付图片(拼接完整URL) let dashoujiaofuList = data.dashoujiaofu || [] dashoujiaofuList = dashoujiaofuList.map(imgUrl => { if (imgUrl && !imgUrl.startsWith('http')) { const ossImageUrl = app.globalData.ossImageUrl || '' return ossImageUrl + imgUrl } return imgUrl }) // 核心修正:使用后端返回的订单状态,覆盖跳转时的状态 this.setData({ 'xiangxiShuju.zhiding': data.zhiding || '', 'xiangxiShuju.dashou': data.dashou || '', 'xiangxiShuju.dashoujiaofu': dashoujiaofuList, 'xiangxiShuju.dashouliuyan': data.dashouliuyan || '', // 关键:使用后端返回的状态覆盖跳转的状态 'jibenShuju.zhuangtai': data.zhuangtai || 0 }) } else { console.warn('获取详细数据失败:', res?.msg || '未知错误') wx.showToast({ title: res?.msg || '获取订单详情失败', icon: 'none', duration: 2000 }) } } catch (error) { console.error('加载详细数据失败:', error) wx.showToast({ title: '加载数据失败,请重试', icon: 'none', duration: 2000 }) } }, /** * 复制文本到剪贴板 */ async fuzhiWenben(e) { const text = e.currentTarget.dataset.text if (!text) return try { await wx.setClipboardData({ data: text }) wx.showToast({ title: '复制成功', icon: 'success', duration: 1500 }) } catch (error) { console.error('复制失败:', error) wx.showToast({ title: '复制失败', icon: 'none' }) } }, /** * 预览图片 */ yulanTupian(e) { const currentUrl = e.currentTarget.dataset.url const urls = e.currentTarget.dataset.urls || [] if (!currentUrl) return wx.previewImage({ current: currentUrl, urls: urls.length > 0 ? urls : [currentUrl] }) }, /** * 点击星星评分 */ dianjiXingxing(e) { const pingfen = e.currentTarget.dataset.index // 更新星星状态 const xingxingData = this.data.xingxingData.map((item, index) => ({ ...item, active: index < pingfen })) this.setData({ xingxingData: xingxingData, 'jiesuanShuju.pingfen': pingfen }) }, /** * 输入留言 */ shuruLiuyan(e) { const liuyan = e.detail.value.slice(0, 50) // 限制50字 this.setData({ 'jiesuanShuju.liuyan': liuyan }) }, /** * 提交结单 */ async tijiaoJiedan() { const { jibenShuju, jiesuanShuju } = this.data console.log('提交结单,数据:', { dingdanId: jibenShuju.dingdanId, pingfen: jiesuanShuju.pingfen, liuyan: jiesuanShuju.liuyan }) // 验证订单状态 if (jibenShuju.zhuangtai !== 8) { wx.showToast({ title: '订单不在结算状态', icon: 'none' }) return } // 验证评分范围 if (jiesuanShuju.pingfen < 0 || jiesuanShuju.pingfen > 5) { wx.showToast({ title: '请选择0-5分评分', icon: 'none' }) return } // 验证订单ID if (!jibenShuju.dingdanId) { wx.showToast({ title: '订单信息错误', icon: 'none' }) return } // 显示加载中 this.setData({ isJiesuanLoading: true }) wx.showLoading({ title: '提交中...', mask: true }) try { const res = await request({ url: '/dingdan/jiedan', method: 'POST', data: { dingdanId: jibenShuju.dingdanId, pingfen: jiesuanShuju.pingfen, liuyan: jiesuanShuju.liuyan }, header: { 'content-type': 'application/json' } }) wx.hideLoading() this.setData({ isJiesuanLoading: false }) // 使用正确的数据访问路径 if (res && res.data.code === 0) { // 结单成功,更新订单状态 this.setData({ 'jibenShuju.zhuangtai': 3, // 变为已完成状态 'jiesuanShuju.pingfen': 0, 'jiesuanShuju.liuyan': '' }) // 重置星星 const resetXingxingData = this.data.xingxingData.map(item => ({ ...item, active: false })) this.setData({ xingxingData: resetXingxingData }) wx.showToast({ title: '结单成功', icon: 'success', duration: 2000 }) } else { wx.showToast({ title: res?.msg || '结单失败', icon: 'none' }) } } catch (error) { console.error('结单失败:', error) wx.hideLoading() this.setData({ isJiesuanLoading: false }) wx.showToast({ title: '网络错误,请重试', icon: 'none' }) } }, })