feat: 投诉仅限邀请人+人工客服展示+抢单池商家指标与平台标签

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-27 01:55:45 +08:00
parent 16eecd1278
commit 2a8f7c427c
6 changed files with 255 additions and 22 deletions

View File

@@ -7,6 +7,7 @@ const TYPES = [
{ value: 3, label: '罚款投诉' },
{ value: 4, label: '管事投诉' },
{ value: 5, label: '被骗投诉' },
{ value: 6, label: '组长投诉' },
]
Page({
@@ -16,7 +17,16 @@ Page({
order_id: '',
chongzhi_id: '',
fadan_id: '',
guanshi_id: '',
target_user_id: '',
target_nicheng: '',
canComplainInviter: false,
inviterReason: '',
humanKefu: {
available: false,
wechat: '',
link: '',
tip: '',
},
shuoming: '',
images: [],
maxImages: 9,
@@ -30,13 +40,88 @@ Page({
if (q.chongzhi_id) patch.chongzhi_id = decodeURIComponent(q.chongzhi_id)
if (q.fadan_id) patch.fadan_id = decodeURIComponent(q.fadan_id)
if (Object.keys(patch).length) this.setData(patch)
this.loadMeta()
},
onPickType(e) { this.setData({ leixing: Number(e.currentTarget.dataset.v) }) },
async loadMeta() {
try {
const res = await request({ url: '/gongdan/meta/', method: 'GET' })
const body = res.data || {}
if (!(body.code === 200 || body.code === 0)) return
const data = body.data || {}
const hk = data.human_kefu || {}
this.setData({
humanKefu: {
available: !!hk.available,
wechat: hk.wechat || '',
link: hk.link || '',
tip: hk.tip || '',
},
maxImages: data.max_images || 9,
})
this.applyInviterFromMeta(data.inviter_targets)
} catch (e) {
// ignore
}
if (this.data.leixing === 4 || this.data.leixing === 6) {
this.loadInviterTarget(this.data.leixing)
}
},
applyInviterFromMeta(targets) {
if (!targets) return
const leixing = this.data.leixing
const info = leixing === 4 ? targets.guanshi : (leixing === 6 ? targets.zuzhang : null)
if (!info) return
this.setData({
canComplainInviter: !!info.can_complain,
target_user_id: info.user_id || '',
target_nicheng: info.nicheng || '',
inviterReason: info.reason || '',
})
},
async loadInviterTarget(leixing) {
try {
const res = await request({
url: '/gongdan/my-inviter-target/',
method: 'POST',
data: { leixing },
})
const body = res.data || {}
const info = body.data || {}
this.setData({
canComplainInviter: !!info.can_complain,
target_user_id: info.user_id || '',
target_nicheng: info.nicheng || '',
inviterReason: info.reason || (body.message || ''),
})
} catch (e) {
this.setData({
canComplainInviter: false,
target_user_id: '',
target_nicheng: '',
inviterReason: '无法获取邀请人信息',
})
}
},
onPickType(e) {
const leixing = Number(e.currentTarget.dataset.v)
this.setData({
leixing,
target_user_id: '',
target_nicheng: '',
canComplainInviter: false,
inviterReason: '',
})
if (leixing === 4 || leixing === 6) {
this.loadInviterTarget(leixing)
}
},
onOrderId(e) { this.setData({ order_id: e.detail.value }) },
onChongzhiId(e) { this.setData({ chongzhi_id: e.detail.value }) },
onFadanId(e) { this.setData({ fadan_id: e.detail.value }) },
onGuanshiId(e) { this.setData({ guanshi_id: e.detail.value }) },
onShuoming(e) { this.setData({ shuoming: e.detail.value }) },
openMiniKefu() { openCustomerServiceChat() },
@@ -54,7 +139,43 @@ Page({
})
},
goChongzhiList() { wx.navigateTo({ url: '/pages/gongdan/chongzhi-list/chongzhi-list' }) },
openHumanLink() {
const link = (this.data.humanKefu.link || '').trim()
if (!link) return
// 企业微信客服链接优先用官方能力打开
const app = getApp()
const cfg = app.globalData.kefuConfig || {}
if (cfg.enterpriseId && (link.indexOf('work.weixin.qq.com') >= 0 || link.indexOf('kf') >= 0)) {
wx.openCustomerServiceChat({
extInfo: { url: link },
corpId: cfg.enterpriseId,
fail: () => {
wx.setClipboardData({
data: link,
success: () => wx.showToast({ title: '链接已复制', icon: 'none' }),
})
},
})
return
}
wx.setClipboardData({
data: link,
success: () => wx.showToast({ title: '客服链接已复制', icon: 'none' }),
})
},
copyHumanWechat() {
const wxid = (this.data.humanKefu.wechat || '').trim()
if (!wxid) return
wx.setClipboardData({
data: wxid,
success: () => wx.showToast({ title: '微信号已复制', icon: 'success' }),
})
},
goChongzhiList() {
wx.navigateTo({ url: '/pages/gongdan/chongzhi-list/chongzhi-list?from=complaint' })
},
goPenalty() { wx.navigateTo({ url: '/pages/penalty/penalty/penalty' }) },
goMyList() { wx.navigateTo({ url: '/pages/gongdan/list/list' }) },
@@ -81,7 +202,7 @@ Page({
})
},
uploadOne(filePath) {
uploadOne(filePath) {
const app = getApp()
const base = (app.globalData.apiBaseUrl || '').replace(/\/$/, '')
const token = wx.getStorageSync('token') || ''
@@ -121,26 +242,44 @@ Page({
wx.showToast({ title: '请填写投诉说明', icon: 'none' })
return
}
if (this.data.leixing === 4 || this.data.leixing === 6) {
if (!this.data.canComplainInviter || !this.data.target_user_id) {
wx.showToast({
title: this.data.inviterReason || '没有邀请人,无法投诉',
icon: 'none',
})
return
}
}
this.setData({ submitting: true })
try {
const payload = {
leixing: this.data.leixing,
shuoming: this.data.shuoming,
order_id: this.data.order_id,
chongzhi_id: this.data.chongzhi_id,
fadan_id: this.data.fadan_id,
images: this.data.images,
}
if (this.data.leixing === 4) {
payload.target_role = 'guanshi'
// 后端会强制本人邀请人,这里仅作兼容提交
payload.target_user_id = this.data.target_user_id
payload.guanshi_id = this.data.target_user_id
} else if (this.data.leixing === 6) {
payload.target_role = 'zuzhang'
payload.target_user_id = this.data.target_user_id
}
const res = await request({
url: '/gongdan/create/',
method: 'POST',
data: {
leixing: this.data.leixing,
shuoming: this.data.shuoming,
order_id: this.data.order_id,
chongzhi_id: this.data.chongzhi_id,
fadan_id: this.data.fadan_id,
guanshi_id: this.data.guanshi_id,
images: this.data.images,
},
data: payload,
})
const body = res.data || {}
if (body.code === 200 || body.code === 0) {
wx.showToast({ title: '提交成功', icon: 'success' })
setTimeout(() => {
wx.redirectTo({ url: '/pages/gongdan/list/list' })
wx.redirectTo({ url: '/pages/gongdan/list/list?tab=created' })
}, 500)
} else {
wx.showToast({ title: body.message || body.msg || '提交失败', icon: 'none' })