修正了 pages 名为拼音的问题
This commit is contained in:
313
pages/gold-fighter/gold-fighter.js
Normal file
313
pages/gold-fighter/gold-fighter.js
Normal file
@@ -0,0 +1,313 @@
|
||||
// pages/gold-fighter/gold-fighter.js
|
||||
import request from '../../utils/request.js'
|
||||
import popupService from '../../services/popupService.js'
|
||||
import {
|
||||
isRoleStatusActive,
|
||||
isCenterPageActive,
|
||||
ensureRoleOnCenterPage,
|
||||
} from '../../utils/role-tab-bar.js'
|
||||
import { buildInviterPeerId } from '../../utils/im-user.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() {
|
||||
wx.redirectTo({ url: '/pages/fighter/fighter' });
|
||||
},
|
||||
|
||||
onShow() {
|
||||
wx.redirectTo({ url: '/pages/fighter/fighter' });
|
||||
},
|
||||
|
||||
_deprecatedOnLoad() {
|
||||
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/fighter/fighter' })
|
||||
} 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: buildInviterPeerId(inviter.uid),
|
||||
toName: inviter.nicheng || '管事',
|
||||
toAvatar: fullAvatar
|
||||
}
|
||||
wx.navigateTo({
|
||||
url: '/pages/chat/chat?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/withdraw/withdraw' }) },
|
||||
goToReceiveOrder() { wx.navigateTo({ url: '/pages/accept-order/accept-order' }) },
|
||||
goToRecharge() { wx.navigateTo({ url: '/pages/fighter-recharge/fighter-recharge' }) },
|
||||
goToMyOrders() { wx.navigateTo({ url: '/pages/fighter-orders/fighter-orders' }) },
|
||||
goToMyPunishment() { wx.navigateTo({ url: '/pages/penalty/penalty/penalty' }) },
|
||||
goToRanking() { wx.navigateTo({ url: '/pages/fighter-rank/fighter-rank?type=dashou' }) },
|
||||
goToModifyInfo() { wx.navigateTo({ url: '/pages/fighter-edit/fighter-edit' }) },
|
||||
goToRules() { wx.navigateTo({ url: '/pages/fighter-rules/fighter-rules' }) },
|
||||
// 跳转到考核金牌
|
||||
goToKaohe() {
|
||||
wx.navigateTo({ url: '/pages/assess-gold/assess-gold' });
|
||||
},
|
||||
|
||||
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);
|
||||
}
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user