346 lines
11 KiB
JavaScript
346 lines
11 KiB
JavaScript
// pages/jinpaids/jinpaids.js
|
|
import request from '../../utils/request.js'
|
|
import popupService from '../../services/popupService.js'
|
|
|
|
const app = getApp()
|
|
|
|
Page({
|
|
data: {
|
|
// OSS地址
|
|
ossImageUrl: '',
|
|
|
|
// 图标路径
|
|
icons: {
|
|
jinpai: '',
|
|
refresh: '',
|
|
copy: '',
|
|
qiangdan: '',
|
|
chongzhi: '',
|
|
dingdan: '',
|
|
chufa: '',
|
|
paihang: '',
|
|
xiugai: '',
|
|
tixian: '',
|
|
rightArrow: ''
|
|
},
|
|
|
|
// 用户基本信息
|
|
uid: '',
|
|
touxiang: '',
|
|
avatarUrl: '',
|
|
dashouNicheng: '',
|
|
|
|
// 打手核心数据
|
|
chenghao: '',
|
|
yongjin: '0.00',
|
|
zonge: '0.00',
|
|
yajin: '0.00',
|
|
jinfen: '0',
|
|
chengjiaoliang: '0',
|
|
zaixianZhuangtai: 0,
|
|
dashouzhuangtai: '',
|
|
clumber: [],
|
|
|
|
// 金牌专属数据
|
|
jiedanZongliang: '0',
|
|
jinriJiedan: '0.00',
|
|
zuijinTixian: '0.00',
|
|
|
|
// 页面状态
|
|
isLoading: false,
|
|
lastRefreshTime: 0,
|
|
canRefresh: true,
|
|
|
|
// 计算数据
|
|
chengjiaoRate: '0%',
|
|
chengjiaoAngle: 0,
|
|
tixianProgress: 0,
|
|
|
|
// 邀请人缓存(管事)
|
|
inviterCache: null,
|
|
chenghaoList: [] // 新增
|
|
},
|
|
|
|
onLoad() {
|
|
const ossUrl = app.globalData.ossImageUrl || ''
|
|
const iconBase = 'beijing/tubiao/'
|
|
|
|
this.setData({
|
|
ossImageUrl: ossUrl,
|
|
'icons.jinpai': ossUrl + iconBase + 'jinpai.png',
|
|
'icons.refresh': ossUrl + iconBase + 'shuaxin.png',
|
|
'icons.copy': ossUrl + iconBase + 'fuzhi.png',
|
|
'icons.qiangdan': ossUrl + iconBase + 'qiangdan.png',
|
|
'icons.chongzhi': ossUrl + iconBase + 'chongzhi.png',
|
|
'icons.dingdan': ossUrl + iconBase + 'dingdan.png',
|
|
'icons.chufa': ossUrl + iconBase + 'chufa.png',
|
|
'icons.paihang': ossUrl + iconBase + 'paihang.png',
|
|
'icons.xiugai': ossUrl + iconBase + 'xiugai.png',
|
|
'icons.tixian': ossUrl + iconBase + 'tixian.png',
|
|
'icons.rightArrow': ossUrl + iconBase + 'jiantou.png',
|
|
'icons.guize': ossUrl + iconBase + 'guize.png',
|
|
'icons.kaohe': ossUrl + iconBase + 'kaohe.png',
|
|
})
|
|
|
|
this.loadUserInfo()
|
|
this.getJinpaiInfo()
|
|
|
|
if (!app.globalData.hasShownPopupOnColdStart) {
|
|
app.globalData.hasShownPopupOnColdStart = true;
|
|
setTimeout(() => {
|
|
popupService.checkAndShow(this, 'jinpaids');
|
|
}, 300);
|
|
}
|
|
},
|
|
|
|
onHide() {
|
|
const popupComp = this.selectComponent('#popupNotice');
|
|
if (popupComp && popupComp.cleanup) {
|
|
popupComp.cleanup();
|
|
}
|
|
},
|
|
|
|
onShow() {
|
|
this.registerNotificationComponent()
|
|
this.refreshJinpaiInfo()
|
|
this.fetchChenghaoList() // 新增
|
|
const inviterCache = wx.getStorageSync('inviterCache') || null
|
|
this.setData({ inviterCache })
|
|
},
|
|
|
|
registerNotificationComponent() {
|
|
const notificationComp = this.selectComponent('#global-notification')
|
|
if (notificationComp && notificationComp.showNotification) {
|
|
app.globalData.globalNotification = {
|
|
show: (data) => notificationComp.showNotification(data),
|
|
hide: () => notificationComp.hideNotification()
|
|
}
|
|
}
|
|
},
|
|
|
|
loadUserInfo() {
|
|
const uid = wx.getStorageSync('uid') || ''
|
|
const touxiang = wx.getStorageSync('touxiang') || ''
|
|
const ossUrl = app.globalData.ossImageUrl || ''
|
|
const defaultAvatar = ossUrl + (app.globalData.morentouxiang || 'avatar/default.jpg')
|
|
|
|
let avatarUrl = defaultAvatar
|
|
if (touxiang) {
|
|
avatarUrl = ossUrl + (touxiang.startsWith('/') ? touxiang : '/' + touxiang)
|
|
}
|
|
|
|
const dashouNicheng = app.globalData.dashouNicheng || wx.getStorageSync('nicheng') || '金牌选手'
|
|
|
|
this.setData({ uid, touxiang, avatarUrl, dashouNicheng })
|
|
},
|
|
|
|
async getJinpaiInfo() {
|
|
this.setData({ isLoading: true })
|
|
|
|
try {
|
|
const res = await request({
|
|
url: '/yonghu/dashouxinxi',
|
|
method: 'POST'
|
|
})
|
|
|
|
if (res && res.data.code === 200) {
|
|
const data = res.data.data
|
|
|
|
const updateData = {
|
|
dashouNicheng: data.dashounicheng || '',
|
|
zhanghaoStatus: data.zhanghaostatus || '',
|
|
yongjin: data.yongjin || '0.00',
|
|
zonge: data.zonge || '0.00',
|
|
yajin: data.yajin || '0.00',
|
|
chenghao: data.chenghao || '',
|
|
jinfen: data.jifen || '0',
|
|
chengjiaoliang: data.chengjiaoliang || '0',
|
|
zaixianZhuangtai: data.zaixianzhuangtai || 0,
|
|
dashouzhuangtai: data.dashouzhuangtai || '',
|
|
clumber: data.clumber || [],
|
|
jiedanZongliang: data.jiedanZongliang || '0',
|
|
jinriJiedan: data.jinriJiedan || '0.00',
|
|
zuijinTixian: data.zuijinTixian || '0.00',
|
|
}
|
|
|
|
const jiedanTotal = parseFloat(updateData.jiedanZongliang) || 0
|
|
const chengjiaoTotal = parseFloat(updateData.chengjiaoliang) || 0
|
|
const rateNumber = jiedanTotal > 0 ? (chengjiaoTotal / jiedanTotal) * 100 : 0
|
|
const chengjiaoRate = rateNumber.toFixed(1) + '%'
|
|
const chengjiaoAngle = rateNumber * 3.6
|
|
|
|
const zuijin = parseFloat(updateData.zuijinTixian) || 0
|
|
const zong = parseFloat(updateData.jinriJiedan) || 0
|
|
const tixianProgress = zong > 0 ? Math.min((zuijin / zong) * 100, 100) : 0
|
|
|
|
const globalUpdate = {
|
|
dashouNicheng: updateData.dashouNicheng,
|
|
zhanghaoStatus: updateData.zhanghaoStatus,
|
|
yongjin: updateData.yongjin,
|
|
zonge: updateData.zonge,
|
|
yajin: updateData.yajin,
|
|
chenghao: updateData.chenghao,
|
|
jinfen: updateData.jinfen,
|
|
chengjiaoliang: updateData.chengjiaoliang,
|
|
zaixianZhuangtai: updateData.zaixianZhuangtai,
|
|
dashouzhuangtai: updateData.dashouzhuangtai,
|
|
clumber: updateData.clumber,
|
|
}
|
|
Object.assign(app.globalData, globalUpdate)
|
|
|
|
wx.setStorageSync('nicheng', updateData.dashouNicheng)
|
|
if (data.touxiang) {
|
|
wx.setStorageSync('touxiang', data.touxiang)
|
|
}
|
|
|
|
this.setData({
|
|
...updateData,
|
|
chengjiaoRate,
|
|
chengjiaoAngle,
|
|
tixianProgress: Math.round(tixianProgress),
|
|
isLoading: false
|
|
})
|
|
|
|
this.checkJinpaiAndRedirect(updateData.chenghao)
|
|
|
|
} else {
|
|
wx.showToast({ title: res?.data?.msg || '获取信息失败', icon: 'none' })
|
|
this.setData({ isLoading: false })
|
|
}
|
|
} catch (error) {
|
|
console.error('获取金牌信息失败:', error)
|
|
wx.showToast({ title: '网络错误', icon: 'none' })
|
|
this.setData({ isLoading: false })
|
|
}
|
|
},
|
|
|
|
refreshJinpaiInfo() {
|
|
const now = Date.now()
|
|
const lastTime = this.data.lastRefreshTime
|
|
const canRefresh = this.data.canRefresh
|
|
if (!canRefresh || (now - lastTime < 3000)) return
|
|
|
|
|
|
this.setData({ lastRefreshTime: now, canRefresh: false })
|
|
this.getJinpaiInfo()
|
|
this.fetchChenghaoList() // 新增
|
|
setTimeout(() => this.setData({ canRefresh: true }), 3000)
|
|
},
|
|
|
|
checkJinpaiAndRedirect(chenghao) {
|
|
if (chenghao !== '金牌选手') {
|
|
wx.setStorageSync('isJinpai', 0)
|
|
wx.redirectTo({ url: '/pages/dashouduan/dashouduan' })
|
|
} else {
|
|
wx.setStorageSync('isJinpai', 1)
|
|
}
|
|
},
|
|
|
|
// 联系管事(与打手端完全一致,增加容错)
|
|
async contactInviter() {
|
|
wx.showLoading({ title: '获取管事信息...', mask: true })
|
|
try {
|
|
const res = await request({ url: '/yonghu/hqwdyqr', method: 'POST' })
|
|
if (res && res.data.code === 200) {
|
|
const inviter = res.data.data
|
|
const ossImageUrl = getApp().globalData.ossImageUrl || ''
|
|
const fullAvatar = inviter.touxiang
|
|
? (inviter.touxiang.startsWith('http') ? inviter.touxiang : ossImageUrl + inviter.touxiang)
|
|
: ''
|
|
|
|
// 缓存邀请人信息
|
|
const cacheData = {
|
|
uid: inviter.uid,
|
|
nicheng: inviter.nicheng || '',
|
|
avatar: fullAvatar
|
|
}
|
|
wx.setStorageSync('inviterCache', cacheData)
|
|
this.setData({ inviterCache: cacheData })
|
|
|
|
// 确保打手身份并连接
|
|
const app = getApp()
|
|
const myUid = wx.getStorageSync('uid')
|
|
|
|
// 如果当前不是打手身份,则切换并重连
|
|
if (app.globalData.currentRole !== 'dashou') {
|
|
app.globalData.currentRole = 'dashou'
|
|
wx.setStorageSync('currentRole', 'dashou')
|
|
if (app.switchRoleAndReconnect) {
|
|
await app.switchRoleAndReconnect('dashou')
|
|
} else if (app.connectWithIdentity) {
|
|
// 降级方案:直接用打手身份连接
|
|
await app.connectWithIdentity('dashou', 'Ds' + myUid, false)
|
|
}
|
|
} else {
|
|
// 已为打手,确保连接存活
|
|
if (app.connectForCurrentRole) {
|
|
app.connectForCurrentRole()
|
|
} else if (app.ensureConnection) {
|
|
app.ensureConnection()
|
|
}
|
|
}
|
|
|
|
// 构造私聊参数
|
|
const param = {
|
|
toUserId: 'Gs' + inviter.uid,
|
|
toName: inviter.nicheng || '管事',
|
|
toAvatar: fullAvatar
|
|
}
|
|
wx.navigateTo({
|
|
url: '/pages/liaotian/liaotian?data=' + encodeURIComponent(JSON.stringify(param)),
|
|
fail: (err) => {
|
|
console.error('跳转私聊失败', err)
|
|
wx.showToast({ title: '打开聊天失败', icon: 'none' })
|
|
}
|
|
})
|
|
} else {
|
|
wx.showToast({ title: res?.data?.msg || '获取失败', icon: 'none' })
|
|
}
|
|
} catch (e) {
|
|
console.error('联系管事出错:', e)
|
|
wx.showToast({ title: '网络错误', icon: 'none' })
|
|
} finally {
|
|
wx.hideLoading()
|
|
}
|
|
},
|
|
|
|
copyUid() {
|
|
const { uid } = this.data
|
|
if (!uid) return wx.showToast({ title: 'UID不存在', icon: 'none' })
|
|
wx.setClipboardData({
|
|
data: uid,
|
|
success: () => wx.showToast({ title: '已复制UID', icon: 'success' })
|
|
})
|
|
},
|
|
|
|
previewAvatar() {
|
|
if (this.data.avatarUrl) wx.previewImage({ urls: [this.data.avatarUrl] })
|
|
},
|
|
|
|
goToWithdraw() { wx.navigateTo({ url: '/pages/tixian/tixian' }) },
|
|
goToReceiveOrder() { wx.navigateTo({ url: '/pages/jiedan/jiedan' }) },
|
|
goToRecharge() { wx.navigateTo({ url: '/pages/dashouchongzhi/dashouchongzhi' }) },
|
|
goToMyOrders() { wx.navigateTo({ url: '/pages/dashoudingdan/dashoudingdan' }) },
|
|
goToMyPunishment() { wx.navigateTo({ url: '/pages/cfss/cfss/cfss' }) },
|
|
goToRanking() { wx.navigateTo({ url: '/pages/dashoupaihang/dashoupaihang' }) },
|
|
goToModifyInfo() { wx.navigateTo({ url: '/pages/dashouxiugai/dashouxiugai' }) },
|
|
goToRules() { wx.navigateTo({ url: '/pages/dashouguize/dashouguize' }) },
|
|
// 跳转到考核金牌
|
|
goToKaohe() {
|
|
wx.navigateTo({ url: '/pages/kaohe_jinpai/kaohe_jinpai' });
|
|
},
|
|
|
|
async fetchChenghaoList() {
|
|
try {
|
|
const res = await request({
|
|
url: '/dengji/dsbqhq',
|
|
method: 'POST'
|
|
});
|
|
if (res && res.data.code === 0 && res.data.data) {
|
|
this.setData({ chenghaoList: res.data.data.chenghao_list || [] });
|
|
}
|
|
} catch (e) {
|
|
console.error('获取称号标签失败', e);
|
|
}
|
|
},
|
|
}) |