统一排行榜对齐星雀UI,页面资源后台配置实时刷新
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
194
miniprogram/pages/wodedashou/wodedashou.js
Normal file
194
miniprogram/pages/wodedashou/wodedashou.js
Normal file
@@ -0,0 +1,194 @@
|
||||
// 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))
|
||||
})
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user