// pages/assess-score/assess-score.js const app = getApp(); import request from '../../utils/request.js'; import { openPrivateChat, buildDashouPeerId } from '../../utils/im-user.js'; import { resolveAvatarUrl } from '../../utils/avatar.js'; Page({ data: { recordList: [], page: 1, pageSize: 10, hasMore: false, isLoading: false, ossImageUrl: app.globalData.ossImageUrl || '', // 操作弹窗 showAgreeModal: false, showRejectModal: false, showTransferModal: false, currentItem: null, rejectReason: '', // 倒计时 countdown: 2, counting: false, countdownTimer: null, }, onLoad() { this.loadRecords(true); }, // 加载考核记录 async loadRecords(isRefresh = false) { if (this.data.isLoading) return; const page = isRefresh ? 1 : this.data.page; this.setData({ isLoading: true }); try { const res = await request({ url: '/dengji/hqkhxq', method: 'POST', data: { page, page_size: this.data.pageSize } }); if (res && res.data.code === 0) { const list = res.data.data.list || []; const hasMore = res.data.data.has_more; const oss = this.data.ossImageUrl; const processed = list.map(item => ({ ...item, shenqingren_avatar: item.shenqingren_avatar && !item.shenqingren_avatar.startsWith('http') ? oss + item.shenqingren_avatar : item.shenqingren_avatar || '/images/default-avatar.png' })); const newList = isRefresh ? processed : [...this.data.recordList, ...processed]; this.setData({ recordList: newList, page: page + 1, hasMore, isLoading: false }); } else { wx.showToast({ title: '加载失败', icon: 'none' }); this.setData({ isLoading: false }); } } catch (e) { wx.showToast({ title: '网络错误', icon: 'none' }); this.setData({ isLoading: false }); } }, onReachBottom() { if (this.data.hasMore && !this.data.isLoading) { this.loadRecords(false); } }, // 联系打手(私聊)—— 照搬金牌页面逻辑 contactDashou(e) { const item = e.currentTarget.dataset.item; if (!item || !item.shenqingren_id) { wx.showToast({ title: '无法获取接单员ID', icon: 'none' }); return; } openPrivateChat(this, { toUserId: buildDashouPeerId(item.shenqingren_id), toName: '接单员' + item.shenqingren_id, toAvatar: resolveAvatarUrl(item.shenqingren_avatar), }); }, // 修改游戏昵称 async modifyNick(e) { const { id } = e.currentTarget.dataset; const item = this.data.recordList.find(r => r.jilu_id === id); if (!item) return; const newNick = item.shenheguan_youxi_id || ''; try { const res = await request({ url: '/dengji/khgxgkh', method: 'POST', data: { jilu_id: id, caozuo: 'modify_nick', youxi_id: newNick } }); if (res && res.data.code === 0) { wx.showToast({ title: '修改成功', icon: 'success' }); } else { wx.showToast({ title: res.data?.msg || '修改失败', icon: 'none' }); } } catch (e) { wx.showToast({ title: '网络错误', icon: 'none' }); } }, onNickInput(e) { const id = e.currentTarget.dataset.id; const value = e.detail.value; const list = this.data.recordList.map(item => { if (item.jilu_id === id) { return { ...item, shenheguan_youxi_id: value }; } return item; }); this.setData({ recordList: list }); }, // 🆕 实时更新拒绝原因 onRejectInput(e) { this.setData({ rejectReason: e.detail.value }); }, openAgreeModal(e) { const item = e.currentTarget.dataset.item; this.setData({ showAgreeModal: true, currentItem: item }); this.startCountdown(); }, openRejectModal(e) { const item = e.currentTarget.dataset.item; this.setData({ showRejectModal: true, currentItem: item, rejectReason: '' }); this.startCountdown(); }, openTransferModal(e) { const item = e.currentTarget.dataset.item; this.setData({ showTransferModal: true, currentItem: item }); this.startCountdown(); }, closeAllModals() { this.stopCountdown(); this.setData({ showAgreeModal: false, showRejectModal: false, showTransferModal: false, currentItem: null, rejectReason: '' }); }, startCountdown() { this.stopCountdown(); this.setData({ counting: true, countdown: 2 }); this.data.countdownTimer = setInterval(() => { if (this.data.countdown > 1) { this.setData({ countdown: this.data.countdown - 1 }); } else { this.stopCountdown(); this.setData({ counting: false, countdown: 0 }); } }, 1000); }, stopCountdown() { if (this.data.countdownTimer) { clearInterval(this.data.countdownTimer); this.data.countdownTimer = null; } }, // 执行操作(从事件对象中获取操作类型) async executeAction(e) { const actionType = e.currentTarget.dataset.action; if (!actionType) { wx.showToast({ title: '操作类型异常', icon: 'none' }); return; } const item = this.data.currentItem; if (!item) return; const params = { jilu_id: item.jilu_id, caozuo: actionType }; if (actionType === 'reject') { if (!this.data.rejectReason.trim()) { wx.showToast({ title: '请填写拒绝原因', icon: 'none' }); return; } params.yuanyin = this.data.rejectReason; } try { const res = await request({ url: '/dengji/khgxgkh', method: 'POST', data: params }); if (res && res.data.code === 0) { wx.showToast({ title: '操作成功', icon: 'success' }); this.closeAllModals(); const newList = this.data.recordList.filter(r => r.jilu_id !== item.jilu_id); this.setData({ recordList: newList }); } else { wx.showToast({ title: res.data?.msg || '操作失败', icon: 'none' }); this.closeAllModals(); } } catch (e) { wx.showToast({ title: '网络错误', icon: 'none' }); this.closeAllModals(); } }, });