Files
a_long/miniprogram/pages/kaohe_dafen/kaohe_dafen.js
2026-06-27 01:26:11 +08:00

237 lines
6.7 KiB
JavaScript

// pages/kaohe_dafen/kaohe_dafen.js
const app = getApp();
import request from '../../utils/request.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) return;
if (!item.shenqingren_id) {
wx.showToast({ title: '无法获取打手ID', icon: 'none' });
return;
}
const uid = wx.getStorageSync('uid');
if (!uid) {
wx.showToast({ title: '用户信息缺失', icon: 'none' });
return;
}
// 1. 设置当前角色为考核官
if (app.globalData.currentRole !== 'kaoheguan') {
app.globalData.currentRole = 'kaoheguan';
wx.setStorageSync('currentRole', 'kaoheguan');
}
// 2. 确保 IM 连接存活
if (app.connectForCurrentRole) {
app.connectForCurrentRole();
} else if (app.ensureConnection) {
app.ensureConnection();
}
// 3. 构造私聊参数
const param = {
toUserId: 'Ds' + item.shenqingren_id,
toName: '打手' + item.shenqingren_id,
toAvatar: item.shenqingren_avatar || ''
};
// 4. 直接跳转聊天页面
wx.navigateTo({
url: '/pages/liaotian/liaotian?data=' + encodeURIComponent(JSON.stringify(param)),
fail: (err) => {
console.error('跳转私聊失败', err);
wx.showToast({ title: '打开聊天失败', icon: 'none' });
}
});
},
// 修改游戏昵称
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();
}
},
});