543 lines
18 KiB
JavaScript
543 lines
18 KiB
JavaScript
// pages/dashouzhongxin/dashouzhongxin.js
|
||
import request from '../../utils/request.js'
|
||
import popupService from '../../services/popupService.js'
|
||
|
||
const PLATFORM_INVITE_CODE = '0000008RffVgKHMj7kQC'
|
||
|
||
Page({
|
||
data: {
|
||
isDashou: false,
|
||
isLoading: false,
|
||
inviteCode: '',
|
||
uid: '',
|
||
touxiang: '',
|
||
avatarUrl: '',
|
||
dashouNicheng: '',
|
||
zhanghaoStatus: '',
|
||
yongjin: '',
|
||
zonge: '',
|
||
yajin: '',
|
||
chenghao: '',
|
||
jinfen: '',
|
||
clumber: [],
|
||
chengjiaoliang: '',
|
||
zaixianZhuangtai: 0,
|
||
lastRefreshTime: 0,
|
||
canRefresh: true,
|
||
isAutoRegistering: false,
|
||
inviterCache: null,
|
||
// 🆕 称号标签列表(从独立接口获取)
|
||
chenghaoList: []
|
||
},
|
||
|
||
onLoad(options) {
|
||
if (options.scene) {
|
||
try {
|
||
const scene = decodeURIComponent(options.scene);
|
||
options.inviteCode = scene;
|
||
} catch (e) {
|
||
console.error('scene解码失败', e);
|
||
}
|
||
}
|
||
this.checkDashouStatus();
|
||
const { inviteCode } = options || {};
|
||
if (inviteCode) {
|
||
this.setData({ inviteCode: inviteCode });
|
||
setTimeout(() => {
|
||
this.handleInviteCodeWithLoginCheck(inviteCode);
|
||
}, 500);
|
||
}
|
||
const app = getApp();
|
||
if (!app.globalData.hasShownPopupOnColdStart) {
|
||
app.globalData.hasShownPopupOnColdStart = true;
|
||
setTimeout(() => {
|
||
popupService.checkAndShow(this, 'dashouduan');
|
||
}, 300);
|
||
}
|
||
},
|
||
|
||
onHide() {
|
||
const popupComp = this.selectComponent('#popupNotice');
|
||
if (popupComp && popupComp.cleanup) {
|
||
popupComp.cleanup();
|
||
}
|
||
},
|
||
|
||
onShow() {
|
||
// 从缓存读取邀请人信息
|
||
const inviterCache = wx.getStorageSync('inviterCache') || null;
|
||
this.setData({ inviterCache });
|
||
|
||
this.registerNotificationComponent();
|
||
this.checkAndRedirectToJinpai();
|
||
if (this.data.isDashou) {
|
||
setTimeout(() => {
|
||
this.refreshDashouInfo();
|
||
this.fetchChenghaoList(); // 🆕 获取标签
|
||
}, 300);
|
||
}
|
||
const pages = getCurrentPages();
|
||
const currentPage = pages[pages.length - 1];
|
||
const options = currentPage.options || {};
|
||
if (options.inviteCode && this.data.isDashou === false) {
|
||
const { inviteCode } = options;
|
||
setTimeout(() => {
|
||
this.handleInviteCodeWithLoginCheck(inviteCode);
|
||
}, 300);
|
||
}
|
||
},
|
||
|
||
// ==================== 🆕 获取称号标签列表 ====================
|
||
async fetchChenghaoList() {
|
||
try {
|
||
const res = await request({
|
||
url: '/dengji/dsbqhq',
|
||
method: 'POST'
|
||
});
|
||
if (res && res.data.code === 0 && res.data.data) {
|
||
const list = res.data.data.chenghao_list || [];
|
||
this.setData({ chenghaoList: list });
|
||
// 可选:也存入全局,方便其他页面使用
|
||
const app = getApp();
|
||
app.globalData.chenghaoList = list;
|
||
} else {
|
||
this.setData({ chenghaoList: [] });
|
||
}
|
||
} catch (e) {
|
||
console.error('获取称号标签失败', e);
|
||
// 失败不影响主流程
|
||
}
|
||
},
|
||
// ========================================================
|
||
|
||
// 联系邀请人(保持不变)
|
||
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.connectForCurrentRole) app.connectForCurrentRole();
|
||
}
|
||
|
||
const param = {
|
||
toUserId: 'Gs' + inviter.uid,
|
||
toName: inviter.nicheng || '邀请人',
|
||
toAvatar: fullAvatar
|
||
};
|
||
wx.navigateTo({
|
||
url: '/pages/liaotian/liaotian?data=' + encodeURIComponent(JSON.stringify(param))
|
||
});
|
||
} else {
|
||
wx.showToast({ title: res?.data?.msg || '获取失败', icon: 'none' });
|
||
}
|
||
} catch (e) {
|
||
wx.showToast({ title: '网络错误', icon: 'none' });
|
||
} finally {
|
||
wx.hideLoading();
|
||
}
|
||
},
|
||
|
||
handleInviteCodeWithLoginCheck(inviteCode) {
|
||
const that = this;
|
||
const token = wx.getStorageSync('token');
|
||
const uid = wx.getStorageSync('uid');
|
||
if (!token || !uid) {
|
||
this.loginAndRegisterWithInviteCode(inviteCode);
|
||
} else {
|
||
if (!that.data.isDashou) {
|
||
wx.showLoading({ title: '自动注册中...', mask: true });
|
||
that.setData({ isAutoRegistering: true });
|
||
that.onRegister();
|
||
} else {
|
||
wx.showToast({ title: '您已是打手', icon: 'success', duration: 2000 });
|
||
}
|
||
}
|
||
},
|
||
|
||
loginAndRegisterWithInviteCode(inviteCode) {
|
||
const that = this;
|
||
wx.showLoading({ title: '登录注册中...', mask: true });
|
||
wx.login({
|
||
success: (loginRes) => {
|
||
if (loginRes.code) {
|
||
that.callLoginRegisterApi(loginRes.code, inviteCode);
|
||
} else {
|
||
wx.hideLoading();
|
||
wx.showToast({ title: '微信登录失败', icon: 'none' });
|
||
}
|
||
},
|
||
fail: () => {
|
||
wx.hideLoading();
|
||
console.error('微信登录失败');
|
||
wx.reLaunch({ url: '/pages/gerenzhongxin/gerenzhongxin' });
|
||
}
|
||
});
|
||
},
|
||
|
||
callLoginRegisterApi(code, inviteCode) {
|
||
const that = this;
|
||
const app = getApp();
|
||
const apiBaseUrl = app.globalData.apiBaseUrl;
|
||
if (!apiBaseUrl) {
|
||
wx.hideLoading();
|
||
wx.showToast({ title: '服务器配置错误', icon: 'none' });
|
||
return;
|
||
}
|
||
wx.request({
|
||
url: apiBaseUrl + '/yonghu/wdlyhdl',
|
||
method: 'POST',
|
||
data: { code: code, inviteCode: inviteCode },
|
||
header: { 'content-type': 'application/json' },
|
||
success: (res) => {
|
||
if (res.statusCode === 200 && res.data && res.data.code === 0 && res.data.data) {
|
||
const userData = res.data.data;
|
||
if (userData.token) wx.setStorageSync('token', userData.token);
|
||
const identityFields = ['nicheng', 'uid', 'touxiang', 'dashoustatus', 'guanshistatus', 'shangjiastatus', 'zuzhangstatus'];
|
||
identityFields.forEach(field => {
|
||
if (userData[field] !== undefined) {
|
||
wx.setStorageSync(field, userData[field]);
|
||
app.globalData[field] = userData[field];
|
||
}
|
||
});
|
||
const groupFields = ['dashouqun', 'dashouqunid', 'guanshiqun', 'guanshiqunid'];
|
||
groupFields.forEach(field => {
|
||
if (userData[field] !== undefined) {
|
||
wx.setStorageSync(field, userData[field]);
|
||
app.globalData[field] = userData[field];
|
||
}
|
||
});
|
||
if (userData.dashounicheng || userData.yongjin) {
|
||
const updateData = {
|
||
dashouNicheng: userData.dashounicheng || '',
|
||
zhanghaoStatus: userData.zhanghaostatus || '',
|
||
yongjin: userData.yongjin || '0.00',
|
||
zonge: userData.zonge || '0.00',
|
||
yajin: userData.yajin || '0.00',
|
||
chenghao: userData.chenghao || '',
|
||
jinfen: userData.jifen || userData.jinfen || '0',
|
||
clumber: userData.clumber || [],
|
||
chengjiaoliang: userData.chengjiaoliang || '0',
|
||
zaixianZhuangtai: userData.zaixianzhuangtai || 0,
|
||
dashouzhuangtai: userData.dashouzhuangtai || '',
|
||
// 🔥 不再从这里取 chenghaoList,单独调用 fetchChenghaoList
|
||
};
|
||
Object.assign(app.globalData, updateData);
|
||
}
|
||
that.setData({
|
||
isDashou: true,
|
||
uid: userData.uid || '',
|
||
touxiang: userData.touxiang || '',
|
||
isAutoRegistering: false
|
||
// 不设置 chenghaoList,稍后在 onShow 中自动获取
|
||
});
|
||
that.loadAvatar();
|
||
that.getDashouInfo();
|
||
that.switchToDashouRole();
|
||
wx.hideLoading();
|
||
wx.showToast({ title: '登录注册成功!', icon: 'success', duration: 2000 });
|
||
} else {
|
||
wx.hideLoading();
|
||
wx.showToast({ title: (res.data && res.data.msg) || '登录注册失败', icon: 'none' });
|
||
}
|
||
},
|
||
fail: () => {
|
||
wx.hideLoading();
|
||
wx.showToast({ title: '网络请求失败', icon: 'none' });
|
||
}
|
||
});
|
||
},
|
||
|
||
registerNotificationComponent() {
|
||
const app = getApp();
|
||
const notificationComp = this.selectComponent('#global-notification');
|
||
if (notificationComp && notificationComp.showNotification) {
|
||
app.globalData.globalNotification = {
|
||
show: (data) => notificationComp.showNotification(data),
|
||
hide: () => notificationComp.hideNotification()
|
||
};
|
||
}
|
||
},
|
||
|
||
checkDashouStatus() {
|
||
try {
|
||
const dashoustatus = wx.getStorageSync('dashoustatus');
|
||
const uid = wx.getStorageSync('uid');
|
||
const touxiang = wx.getStorageSync('touxiang');
|
||
if (dashoustatus === 1) {
|
||
this.setData({ isDashou: true, uid: uid || '', touxiang: touxiang || '' });
|
||
this.loadAvatar();
|
||
this.checkGlobalData();
|
||
} else {
|
||
this.setData({ isDashou: false });
|
||
}
|
||
} catch (error) {
|
||
console.error('读取缓存失败:', error);
|
||
this.setData({ isDashou: false });
|
||
}
|
||
},
|
||
|
||
loadAvatar() {
|
||
const app = getApp();
|
||
const { ossImageUrl = '', morentouxiang = 'avatar/default.jpg' } = app.globalData || {};
|
||
const { touxiang } = this.data;
|
||
let avatarUrl = '';
|
||
if (touxiang) {
|
||
avatarUrl = ossImageUrl + (touxiang.startsWith('/') ? touxiang : '/' + touxiang);
|
||
} else {
|
||
avatarUrl = ossImageUrl + (morentouxiang.startsWith('/') ? morentouxiang : '/' + morentouxiang);
|
||
}
|
||
this.setData({ avatarUrl });
|
||
},
|
||
|
||
checkGlobalData() {
|
||
const app = getApp();
|
||
const globalData = app.globalData || {};
|
||
const needRefresh = !globalData.dashouNicheng || globalData.dashouNicheng === '' || !globalData.yongjin;
|
||
if (needRefresh) {
|
||
this.getDashouInfo();
|
||
} else {
|
||
this.setDataFromGlobalData();
|
||
}
|
||
},
|
||
|
||
setDataFromGlobalData() {
|
||
const app = getApp();
|
||
const {
|
||
dashouNicheng = '', zhanghaoStatus = '', yongjin = '0.00', zonge = '0.00',
|
||
yajin = '0.00', chenghao = '', jinfen = '0', clumber = [],
|
||
chengjiaoliang = '0', zaixianZhuangtai = 0
|
||
// 🔥 chenghaoList 不再从全局取,避免旧数据干扰
|
||
} = app.globalData || {};
|
||
this.setData({
|
||
dashouNicheng, zhanghaoStatus, yongjin, zonge, yajin,
|
||
chenghao, jinfen,
|
||
clumber: Array.isArray(clumber) ? clumber : [],
|
||
chengjiaoliang,
|
||
zaixianZhuangtai: zaixianZhuangtai === 1 ? 1 : 0
|
||
});
|
||
},
|
||
|
||
async getDashouInfo() {
|
||
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 app = getApp();
|
||
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',
|
||
clumber: data.clumber || [],
|
||
chengjiaoliang: data.chengjiaoliang || '0',
|
||
zaixianZhuangtai: data.zaixianzhuangtai || 0,
|
||
dashouzhuangtai: data.dashouzhuangtai || '',
|
||
// 🔥 不再包含 chenghaoList
|
||
};
|
||
Object.assign(app.globalData, updateData);
|
||
if (data.dashoustatus !== undefined) {
|
||
wx.setStorageSync('dashoustatus', data.dashoustatus);
|
||
app.globalData.dashoustatus = data.dashoustatus;
|
||
}
|
||
if (data.guanshistatus !== undefined) {
|
||
wx.setStorageSync('guanshistatus', data.guanshistatus);
|
||
app.globalData.guanshistatus = data.guanshistatus;
|
||
}
|
||
this.setData({ ...updateData, isLoading: false });
|
||
if (this.data.isAutoRegistering) {
|
||
this.setData({ isAutoRegistering: false });
|
||
wx.showToast({ title: '注册成功!', icon: 'success', duration: 2000 });
|
||
} else {
|
||
wx.showToast({ title: '信息已更新', icon: 'success', duration: 1500 });
|
||
}
|
||
this.handleJinpaiStatus(data.chenghao);
|
||
}
|
||
} catch (error) {
|
||
console.error('获取打手信息失败:', error);
|
||
this.setData({ isLoading: false, isAutoRegistering: false });
|
||
wx.showToast({ title: '获取信息失败', icon: 'error', duration: 2000 });
|
||
}
|
||
},
|
||
|
||
refreshDashouInfo() {
|
||
const now = Date.now();
|
||
if (!this.data.canRefresh || (now - this.data.lastRefreshTime < 3000)) return;
|
||
this.setData({ lastRefreshTime: now, canRefresh: false });
|
||
this.getDashouInfo();
|
||
this.fetchChenghaoList(); // 🆕 同时刷新标签
|
||
setTimeout(() => this.setData({ canRefresh: true }), 3000);
|
||
},
|
||
|
||
onInviteCodeInput(e) {
|
||
this.setData({ inviteCode: e.detail.value.trim() });
|
||
},
|
||
|
||
async onRegister() {
|
||
const { inviteCode } = this.data;
|
||
if (!inviteCode) {
|
||
wx.showToast({ title: '请输入邀请码', icon: 'none', duration: 2000 });
|
||
return;
|
||
}
|
||
if (inviteCode.length > 100) {
|
||
wx.showToast({ title: '邀请码不能超过100字符', icon: 'none', duration: 2000 });
|
||
return;
|
||
}
|
||
this.setData({ isLoading: true });
|
||
try {
|
||
const res = await request({
|
||
url: '/yonghu/dashouzhuce',
|
||
method: 'POST',
|
||
data: { inviteCode: inviteCode }
|
||
});
|
||
if (res && res.data.code == 200) {
|
||
const data = res.data.data;
|
||
const app = getApp();
|
||
const identityFields = ['dashoustatus', 'guanshistatus', 'shangjiastatus', 'zuzhangstatus'];
|
||
identityFields.forEach(field => {
|
||
if (data[field] !== undefined) {
|
||
wx.setStorageSync(field, data[field]);
|
||
app.globalData[field] = data[field];
|
||
}
|
||
});
|
||
if (data.dashoustatus === undefined) {
|
||
wx.setStorageSync('dashoustatus', 1);
|
||
app.globalData.dashoustatus = 1;
|
||
}
|
||
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.jinfen || '0',
|
||
clumber: data.clumber || [],
|
||
chengjiaoliang: data.chengjiaoliang || '0',
|
||
zaixianZhuangtai: data.zaixianzhuangtai || 0,
|
||
dashouzhuangtai: data.dashouzhuangtai || '',
|
||
// chenghaoList 不从这取
|
||
};
|
||
Object.assign(app.globalData, updateData);
|
||
this.setData({
|
||
isDashou: true,
|
||
...updateData,
|
||
isLoading: false,
|
||
isAutoRegistering: false
|
||
});
|
||
this.loadAvatar();
|
||
if (this.data.isAutoRegistering || !wx.getStorageSync('token')) {
|
||
this.switchToDashouRole();
|
||
}
|
||
wx.showToast({ title: '注册成功!', icon: 'success', duration: 2000 });
|
||
this.handleJinpaiStatus(data.chenghao);
|
||
} else {
|
||
this.setData({ isLoading: false, isAutoRegistering: false });
|
||
wx.showToast({ title: (res.data && res.data.message) || '注册失败', icon: 'error', duration: 2000 });
|
||
}
|
||
} catch (error) {
|
||
console.error('注册失败:', error);
|
||
this.setData({ isLoading: false, isAutoRegistering: false });
|
||
wx.showToast({ title: error.message || '注册失败', icon: 'error', duration: 2000 });
|
||
}
|
||
},
|
||
|
||
switchToDashouRole() {
|
||
const app = getApp();
|
||
app.globalData.currentRole = 'dashou';
|
||
wx.setStorageSync('currentRole', 'dashou');
|
||
const tabBar = this.getTabBar();
|
||
if (tabBar && tabBar.refresh) tabBar.refresh();
|
||
if (app.connectForCurrentRole) {
|
||
app.connectForCurrentRole();
|
||
} else if (app.ensureConnection) {
|
||
app.ensureConnection();
|
||
}
|
||
},
|
||
|
||
copyUid() {
|
||
const { uid } = this.data;
|
||
if (!uid) {
|
||
wx.showToast({ title: 'UID不存在', icon: 'none', duration: 1500 });
|
||
return;
|
||
}
|
||
wx.setClipboardData({
|
||
data: uid,
|
||
success: () => wx.showToast({ title: '已复制UID', icon: 'success', duration: 1500 }),
|
||
fail: () => wx.showToast({ title: '复制失败', icon: 'error', duration: 1500 })
|
||
});
|
||
},
|
||
|
||
previewAvatar() {
|
||
const { avatarUrl } = this.data;
|
||
if (avatarUrl) wx.previewImage({ urls: [avatarUrl] });
|
||
},
|
||
|
||
goToWithdraw() { wx.navigateTo({ url: '/pages/tixian/tixian' }) },
|
||
goToReceiveOrder() { wx.navigateTo({ url: '/pages/jiedan/jiedan' }) },
|
||
goToMyOrders() { wx.navigateTo({ url: '/pages/dashoudingdan/dashoudingdan' }) },
|
||
goToMyPunishment() { wx.navigateTo({ url: '/pages/cfss/cfss/cfss' }) },
|
||
goToRecharge() { wx.navigateTo({ url: '/pages/dashouchongzhi/dashouchongzhi' }) },
|
||
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' });
|
||
},
|
||
|
||
quickRegisterAsPlatform() {
|
||
const that = this;
|
||
wx.showModal({
|
||
title: '提示',
|
||
content: '使用此功能后,您将不属于任何管事,确认注册吗?',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
that.setData({ inviteCode: PLATFORM_INVITE_CODE });
|
||
that.onRegister();
|
||
}
|
||
}
|
||
});
|
||
},
|
||
|
||
checkAndRedirectToJinpai() {
|
||
const isJinpai = wx.getStorageSync('isJinpai');
|
||
if (isJinpai === 1) {
|
||
wx.redirectTo({ url: '/pages/jinpaids/jinpaids' });
|
||
}
|
||
},
|
||
|
||
handleJinpaiStatus(chenghao) {
|
||
const isJinpai = (chenghao === '金牌选手') ? 1 : 0;
|
||
wx.setStorageSync('isJinpai', isJinpai);
|
||
if (isJinpai) {
|
||
wx.redirectTo({ url: '/pages/jinpaids/jinpaids' });
|
||
}
|
||
}
|
||
}) |