修正了 pages 名为拼音的问题

This commit is contained in:
2026-06-13 10:44:02 +08:00
parent 76cc4ac55e
commit 296e41a8a7
249 changed files with 29660 additions and 29505 deletions

View File

@@ -0,0 +1,310 @@
const app = getApp()
import request from '../../utils/request.js'
import connectionManager from '../../utils/xiaoxilj.js'
Page({
data: {
isLoading: true,
jibenShuju: {
dingdanId: '',
tupian: '',
jieshao: '',
chuangjianshijian: '',
jine: '0.00',
nicheng: '',
beizhu: '',
zhuangtai: 0,
updateTime: ''
},
xiangxiShuju: {
dashou: '',
dashouNicheng: '',
dashouTouxiang: '',
dashoujiaofu: [],
dashouliuyan: '',
jiedanTime: '',
tijiaoTime: '',
laobanPingjia: '',
shangxianSudu: null,
fuwuTaidu: null,
fancheCishu: null
},
zhuangtaiWenziMap: {
1: '已下单', 2: '进行中', 3: '已完成', 4: '退款中',
5: '已退款', 6: '退款失败', 7: '指定中', 8: '结算中'
},
jiesuan: {
fancheCishu: '',
speedValue: 0,
attitudeValue: 0,
liuyan: ''
},
// 🔥 实时解释文字(必须在 data 中声明,才能用于 wxml 绑定)
speedExplain: '',
attitudeExplain: '',
speedOptions: [
{ value: 5, label: '极速', explain: '接单后秒上线2分钟以内' },
{ value: 4, label: '快', explain: '接单后5分钟以内上线' },
{ value: 3, label: '一般', explain: '接单后10分钟以内上线' },
{ value: 2, label: '慢', explain: '接单后15分钟以内上线' },
{ value: 1, label: '极慢', explain: '接单后15分钟以后上线' }
],
attitudeOptions: [
{ value: 5, label: '极好', explain: '主动聊天哄开心,情绪价值拉满,处处护着老板' },
{ value: 4, label: '好', explain: '主动互动,保护老板,说话语气温和' },
{ value: 3, label: '一般', explain: '正常保护与聊天,以任务为主,情绪价值一般' },
{ value: 2, label: '较差', explain: '交互少,很少说话,纯应付订单,偶尔埋怨' },
{ value: 1, label: '极差', explain: '全程无交流或骂老板,体验极差,很愤怒' }
],
showSpeedModal: false,
showAttitudeModal: false,
showConfirm: false,
countdown: 3,
countdownTimer: null,
showMyEvaluation: false
},
onLoad(options) {
wx.setNavigationBarTitle({ title: '订单详情' })
this.parseParams(options)
},
parseParams(options) {
try {
const dingdanDataStr = options.dingdanData || ''
if (!dingdanDataStr) {
wx.showToast({ title: '参数错误', icon: 'none' })
setTimeout(() => wx.navigateBack(), 1500)
return
}
const data = JSON.parse(decodeURIComponent(dingdanDataStr))
const ossImageUrl = app.globalData.ossImageUrl || ''
let tupianUrl = data.tupian || ''
if (tupianUrl && !tupianUrl.startsWith('http')) {
tupianUrl = ossImageUrl + tupianUrl
}
if (!tupianUrl) {
tupianUrl = ossImageUrl + (app.globalData.morentouxiang || '/images/default-avatar.png')
}
const jine = parseFloat(data.jine || 0).toFixed(2)
this.setData({
'jibenShuju.dingdanId': data.dingdanId || '',
'jibenShuju.tupian': tupianUrl,
'jibenShuju.jieshao': data.jieshao || '',
'jibenShuju.chuangjianshijian': data.chuangjianshijian || '',
'jibenShuju.jine': jine,
'jibenShuju.nicheng': data.nicheng || '',
'jibenShuju.beizhu': data.beizhu || '',
'jibenShuju.zhuangtai': data.zhuangtai || 0,
isLoading: false
})
this.loadDetail(data.dingdanId)
} catch (e) {
console.error('参数解析失败', e)
wx.showToast({ title: '数据解析错误', icon: 'none' })
}
},
async loadDetail(dingdanId) {
try {
const res = await request({
url: '/dingdan/dingdanxiangqing2',
method: 'POST',
data: { dingdanId }
})
if (res && res.data.code === 0 && res.data.data) {
const d = res.data.data
const oss = app.globalData.ossImageUrl || ''
let dashouTouxiang = d.dashou_touxiang || ''
if (dashouTouxiang && !dashouTouxiang.startsWith('http')) {
dashouTouxiang = oss + dashouTouxiang
}
if (!dashouTouxiang) {
dashouTouxiang = oss + (app.globalData.morentouxiang || '/images/default-avatar.png')
}
const jiaofuList = (d.dashoujiaofu || []).map(url => {
if (url && !url.startsWith('http')) return oss + url
return url
})
const shangxian = d.shangxian_sudu
const taidu = d.fuwu_taidu
const fanche = d.fanche_cishu
const showEval = (shangxian !== null && shangxian !== undefined) ||
(taidu !== null && taidu !== undefined) ||
(fanche !== null && fanche !== undefined)
this.setData({
'jibenShuju.zhuangtai': d.zhuangtai || 0,
'jibenShuju.updateTime': d.update_time || '',
'xiangxiShuju.dashou': d.dashou || '',
'xiangxiShuju.dashouNicheng': d.dashou_nicheng || '',
'xiangxiShuju.dashouTouxiang': dashouTouxiang,
'xiangxiShuju.dashoujiaofu': jiaofuList,
'xiangxiShuju.dashouliuyan': d.dashouliuyan || '',
'xiangxiShuju.jiedanTime': d.jiedan_time || '',
'xiangxiShuju.tijiaoTime': d.tijiao_time || '',
'xiangxiShuju.laobanPingjia': d.laoban_pingjia || '',
'xiangxiShuju.shangxianSudu': shangxian,
'xiangxiShuju.fuwuTaidu': taidu,
'xiangxiShuju.fancheCishu': fanche,
showMyEvaluation: showEval && [3,4,5,6].includes(d.zhuangtai)
})
this.computeEvaluationText()
} else {
wx.showToast({ title: '获取详情失败', icon: 'none' })
}
} catch (e) {
console.error('加载详情失败', e)
wx.showToast({ title: '网络错误', icon: 'none' })
}
},
// 计算历史评价的文字
computeEvaluationText() {
const { speedOptions, attitudeOptions, xiangxiShuju } = this.data
let speedText = '未评价'
let attitudeText = '未评价'
if (xiangxiShuju.shangxianSudu != null) {
const sItem = speedOptions.find(v => v.value == xiangxiShuju.shangxianSudu)
speedText = sItem ? sItem.label + ' (' + sItem.explain + ')' : ''
}
if (xiangxiShuju.fuwuTaidu != null) {
const aItem = attitudeOptions.find(v => v.value == xiangxiShuju.fuwuTaidu)
attitudeText = aItem ? aItem.label + ' (' + aItem.explain + ')' : ''
}
this.setData({ speedText, attitudeText })
},
onGoodsImgError() {
const fallback = app.globalData.ossImageUrl + (app.globalData.morentouxiang || '/images/default-avatar.png')
this.setData({ 'jibenShuju.tupian': fallback })
},
copyText(e) {
const text = e.currentTarget.dataset.text
if (text) {
wx.setClipboardData({ data: text, success: () => wx.showToast({ title: '已复制', icon: 'none' }) })
}
},
previewImages(e) {
const current = e.currentTarget.dataset.url
const urls = e.currentTarget.dataset.urls || [current]
wx.previewImage({ current, urls })
},
// 联系打手(防止角色被篡改)
contactDashou() {
const uid = wx.getStorageSync('uid')
if (!uid) {
wx.showToast({ title: '用户信息缺失', icon: 'none' })
return
}
const dingdanId = this.data.jibenShuju.dingdanId
// 备份全局角色
const savedRole = app.globalData.currentRole
const savedXshenfen = app.globalData.xshenfen
connectionManager.connectToGroupChat({
identityType: 'normal',
userId: 'Boss' + uid,
orderId: dingdanId,
groupName: this.data.jibenShuju.nicheng + '的订单群',
isCross: 0
}).catch(err => {
console.error('跳转群聊失败', err)
wx.showToast({ title: '跳转聊天失败,请检查网络', icon: 'none' })
})
// 立即恢复角色
app.globalData.currentRole = savedRole
app.globalData.xshenfen = savedXshenfen
wx.setStorageSync('currentRole', savedRole)
},
// 结算相关
onFancheshuInput(e) { this.setData({ 'jiesuan.fancheCishu': e.detail.value }) },
selectSpeed(e) {
const value = parseInt(e.currentTarget.dataset.value)
const explain = this.data.speedOptions.find(v => v.value === value)?.explain || ''
this.setData({
'jiesuan.speedValue': value,
speedExplain: explain // 更新解释文字
})
},
selectAttitude(e) {
const value = parseInt(e.currentTarget.dataset.value)
const explain = this.data.attitudeOptions.find(v => v.value === value)?.explain || ''
this.setData({
'jiesuan.attitudeValue': value,
attitudeExplain: explain
})
},
onLiuyanInput(e) { this.setData({ 'jiesuan.liuyan': e.detail.value.slice(0, 50) }) },
showSpeedStandard() { this.setData({ showSpeedModal: true }) },
hideSpeedModal() { this.setData({ showSpeedModal: false }) },
showAttitudeStandard() { this.setData({ showAttitudeModal: true }) },
hideAttitudeModal() { this.setData({ showAttitudeModal: false }) },
noop() {},
showSettleConfirm() {
const { fancheCishu } = this.data.jiesuan
if (!fancheCishu || isNaN(parseInt(fancheCishu))) {
wx.showToast({ title: '请填写翻车次数', icon: 'none' })
return
}
if (!this.data.jiesuan.speedValue || !this.data.jiesuan.attitudeValue) {
wx.showToast({ title: '请选择上线速度和服务态度', icon: 'none' })
return
}
this.setData({ showConfirm: true, countdown: 3 })
this.countdownTimer = setInterval(() => {
const next = this.data.countdown - 1
if (next <= 0) {
clearInterval(this.countdownTimer)
this.setData({ countdown: 0 })
} else {
this.setData({ countdown: next })
}
}, 1000)
},
cancelConfirm() {
clearInterval(this.countdownTimer)
this.setData({ showConfirm: false, countdown: 3 })
},
async confirmSettle() {
if (this.data.countdown !== 0) return
clearInterval(this.countdownTimer)
this.setData({ showConfirm: false, countdown: 3 })
wx.showLoading({ title: '结算中' })
const { jiesuan, jibenShuju } = this.data
try {
const res = await request({
url: '/dingdan/jiedan2',
method: 'POST',
data: {
dingdanId: jibenShuju.dingdanId,
fanche_cishu: parseInt(jiesuan.fancheCishu),
shangxian_sudu: jiesuan.speedValue,
fuwu_taidu: jiesuan.attitudeValue,
liuyan: jiesuan.liuyan
}
})
wx.hideLoading()
if (res && res.data.code === 0) {
wx.showToast({ title: '结算成功' })
setTimeout(() => wx.navigateBack(), 1000)
} else {
wx.showToast({ title: res?.data?.msg || '结算失败', icon: 'none' })
}
} catch (e) {
wx.hideLoading()
wx.showToast({ title: '网络错误', icon: 'none' })
}
}
})