// pages/wodedashou/wodedashou.js import request from '../../utils/request.js' const app = getApp() Page({ data: { // 统计 yaoqingzongshu: 0, zaixianCount: 0, zhengchangCount: 0, fengjinCount: 0, // 列表 dashouList: [], currentPage: 1, pageSize: 10, hasMore: true, isLoading: false, // 首次加载或筛选时使用 isLoadingMore: false, // 上拉加载更多时使用 // 筛选条件 keyword: '', zhanghaozhuangtai: null, // null=全部, 1=正常, 2=封禁 zaixianzhuangtai: null, // null=全部, 1=在线, 2=离线 // 公共资源 ossImageUrl: '', defaultAvatar: '' }, onLoad() { this.initGlobal() this.jiazaiShuju(true) this.registerNotification() }, registerNotification() { const comp = this.selectComponent('#global-notification') if (comp?.showNotification) { app.globalData.globalNotification = { show: d => comp.showNotification(d), hide: () => comp.hideNotification() } } }, initGlobal() { const g = app.globalData this.setData({ ossImageUrl: g.ossImageUrl || '', defaultAvatar: (g.ossImageUrl || '') + (g.morentouxiang || '') }) }, // 手动点击刷新按钮(重新加载第一页) shuaxinShuju() { if (this.data.isLoading) return this.setData({ currentPage: 1 }) this.jiazaiShuju(true) }, // 上拉触底加载更多(同时也作为按钮点击方法) shanglaJiazaiGengduo() { if (!this.data.hasMore || this.data.isLoadingMore || this.data.isLoading) return this.jiazaiShuju(false) }, // 核心数据请求 async jiazaiShuju(isFirstLoad) { if (isFirstLoad && this.data.isLoading) return if (!isFirstLoad && this.data.isLoadingMore) return this.setData({ isLoading: isFirstLoad ? true : this.data.isLoading, isLoadingMore: isFirstLoad ? false : true }) try { const res = await request({ url: '/yonghu/gshqyqds', method: 'POST', data: { page: isFirstLoad ? 1 : this.data.currentPage, pageSize: this.data.pageSize, keyword: this.data.keyword, zhanghaozhuangtai: this.data.zhanghaozhuangtai, zaixianzhuangtai: this.data.zaixianzhuangtai } }) if (res.data.code === 200) { this.handleResponse(res.data.data, isFirstLoad) } else { wx.showToast({ title: res.data.message || '加载失败', icon: 'none' }) if (!isFirstLoad) { this.setData({ currentPage: this.data.currentPage - 1 }) } } } catch (err) { wx.showToast({ title: '网络异常', icon: 'none' }) if (!isFirstLoad) { this.setData({ currentPage: this.data.currentPage - 1 }) } } finally { this.setData({ isLoading: false, isLoadingMore: false }) } }, handleResponse(data, isFirstLoad) { const process = (list) => list.map(item => ({ ...item, touxiangUrl: this.fullAvatar(item.touxiang) })) if (isFirstLoad) { this.setData({ dashouList: process(data.dashouList || []), yaoqingzongshu: data.yaoqingzongshu || 0, zaixianCount: data.zaixianCount || 0, zhengchangCount: data.zhengchangCount || 0, fengjinCount: data.fengjinCount || 0, currentPage: data.hasMore ? 2 : 1, hasMore: data.hasMore }) } else { this.setData({ dashouList: [...this.data.dashouList, ...process(data.dashouList || [])], currentPage: this.data.currentPage + 1, hasMore: data.hasMore }) } }, fullAvatar(relative) { if (!relative) return this.data.defaultAvatar if (relative.startsWith('http')) return relative return this.data.ossImageUrl + relative }, // 筛选输入 onKeywordInput(e) { this.setData({ keyword: e.detail.value.trim() }) }, // picker 变更 onZhanghaoChange(e) { const idx = parseInt(e.detail.value, 10) this.setData({ zhanghaozhuangtai: idx === 0 ? null : idx }) }, onZaixianChange(e) { const idx = parseInt(e.detail.value, 10) this.setData({ zaixianzhuangtai: idx === 0 ? null : idx }) }, // 点击筛选按钮 applyFilter() { if (this.data.isLoading) return this.setData({ currentPage: 1 }) this.jiazaiShuju(true) }, // 联系打手(私聊) contactDashou(e) { const dashouUid = e.currentTarget.dataset.uid const myUid = wx.getStorageSync('uid') const role = app.globalData.currentRole || 'normal' if (role !== 'guanshi') { wx.showModal({ title: '提示', content: '请先切换到管事身份', showCancel: false }) return } // 确保连接为管事身份 app.globalData.currentRole = 'guanshi' wx.setStorageSync('currentRole', 'guanshi') if (app.connectForCurrentRole) { app.connectForCurrentRole() } const targetUserId = 'Ds' + dashouUid const item = this.data.dashouList.find(i => i.uid === dashouUid) const param = { toUserId: targetUserId, toName: item?.nicheng || '打手', toAvatar: item?.touxiangUrl || '' } wx.navigateTo({ url: '/pages/liaotian/liaotian?data=' + encodeURIComponent(JSON.stringify(param)) }) } })