马梓彭 b157e73eb2 新增检录进度页面
新增裁判认证页面
对接检录页面
对接成绩查询页面
2026-09-01 23:13:21 +08:00

212 lines
6.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const auth = require('../../utils/auth');
const competition = require('../../utils/competition');
const { ROLE, ROLE_META, getProfileRole, updateEventTabBar } = require('../../utils/role');
function normalizeAuthStatus(v) {
if (v == null || v === '') return 0;
const n = Number(v);
return Number.isNaN(n) ? 0 : n;
}
/** 0 未认证 | 1 审核中 | 2 审核通过 | 3 审核失败 | 4 已取消 */
function authStatusText(status) {
const map = {
0: '未认证',
1: '审核中',
2: '审核通过',
3: '审核失败',
4: '已取消'
};
return map[normalizeAuthStatus(status)] || '未认证';
}
/** 裁判资料审核状态:0 待提交 | 1 待审核 | 2 通过 | 3 拒绝 | 4 已取消 */
function refereeAuditStatusText(status) {
const map = {
0: '未认证',
1: '待审核',
2: '审核通过',
3: '审核未通过',
4: '已取消'
};
return map[normalizeAuthStatus(status)] || '未认证';
}
function authDescText(isReferee, status, remark) {
const st = normalizeAuthStatus(status);
if (!isReferee) return st === 2 ? '已完成实名认证' : '点击进行身份认证';
if (st === 1) return '裁判资料审核中,请耐心等待';
if (st === 2) return '认证已通过,可报名赛事执裁';
if (st === 3) return remark ? `审核未通过:${remark}` : '审核未通过,点击修改后重新提交';
if (st === 4) return '认证已取消,点击重新提交';
return '完成认证后可参与赛事执裁';
}
function maskPhone(phone) {
if (!phone || phone.length < 7) return phone || '';
return phone.substring(0, 3) + '****' + phone.substring(7);
}
Page({
data: {
loggedIn: false,
profile: {},
maskedPhone: '',
authStatus: 0,
authStatusText: '未认证',
authDesc: '点击进行身份认证',
role: ROLE.PARTICIPANT,
roleLabel: ROLE_META.participant.label,
isParticipant: true,
isReferee: false,
isChecker: false
},
onShow() {
const accessToken = wx.getStorageSync('accessToken') || '';
if (!accessToken) {
updateEventTabBar(ROLE.PARTICIPANT);
this.setData({ loggedIn: false, profile: {}, maskedPhone: '', authStatus: 0, authStatusText: '未认证', authDesc: '点击进行身份认证' });
return;
}
this.setData({ loggedIn: true });
this.loadProfile();
},
onPullDownRefresh() {
this.loadProfile().finally(() => wx.stopPullDownRefresh());
},
loadProfile() {
return auth
.fetchMyProfile()
.then((profile) => {
const p = profile || {};
const st = normalizeAuthStatus(p.authStatus != null ? p.authStatus : p.AuthStatus);
const phone = p.mobile || p.phone || '';
const role = getProfileRole(p);
const roleMeta = ROLE_META[role] || ROLE_META.participant;
updateEventTabBar(role);
this.setData({
profile: p,
maskedPhone: maskPhone(phone),
authStatusText: authStatusText(st),
authStatus: st,
authDesc: authDescText(role === ROLE.REFEREE, st, ''),
role,
roleLabel: roleMeta.label,
isParticipant: role === ROLE.PARTICIPANT,
isReferee: role === ROLE.REFEREE,
isChecker: role === ROLE.CHECKER
});
// 裁判的认证入口指向裁判资料页,徽章须显示裁判资料的审核状态,
if (role === ROLE.REFEREE) return this.loadRefereeAuditStatus();
return null;
})
.catch(() => {});
},
loadRefereeAuditStatus() {
return competition
.fetchRefereeProfile()
.then((p) => {
const st = normalizeAuthStatus(p && p.auditStatus);
this.setData({
authStatus: st,
authStatusText: (p && p.auditStatusText) || refereeAuditStatusText(st),
authDesc: authDescText(true, st, (p && p.auditRemark) || '')
});
})
.catch((err) => {
wx.showToast({ title: (err && err.message) || '裁判认证状态加载失败', icon: 'none' });
});
},
goToLogin() {
wx.navigateTo({ url: '/subpackages/mine/login/login' });
},
goToPoints() {
wx.navigateTo({ url: '/subpackages/mine/points/points' });
},
goToCert() {
wx.navigateTo({ url: '/subpackages/mine/cert/cert' });
},
goToRecords() {
wx.navigateTo({ url: '/subpackages/mine/records/records' });
},
goToAuth() {
wx.navigateTo({ url: this.data.isReferee ? '/subpackages/mine/referee-profile/referee-profile' : '/subpackages/mine/auth/auth' });
},
goToOrders() {
wx.navigateTo({ url: '/subpackages/mine/order/order' });
},
goToTeam() {
wx.navigateTo({ url: '/subpackages/mine/team/team' });
},
goToScores() {
wx.navigateTo({ url: '/subpackages/mine/scores/scores' });
},
goToCheckin() {
wx.navigateTo({ url: '/subpackages/mine/checkin/checkin' });
},
onLogout() {
wx.showModal({
title: '提示',
content: '确定要退出登录吗?',
confirmText: '退出',
confirmColor: '#e53935',
success: (res) => {
if (!res.confirm) return;
wx.clearStorageSync();
updateEventTabBar(ROLE.PARTICIPANT);
this.setData({ loggedIn: false, profile: {}, maskedPhone: '', authStatus: 0, authStatusText: '未认证', authDesc: '点击进行身份认证' });
}
});
},
onChooseAvatar(e) {
const tempFilePath = e.detail.avatarUrl;
if (!tempFilePath) return;
// 先展示本地预览
// this.setData({ 'profile.avatar': tempFilePath });
wx.showLoading({ title: '上传中...', mask: true });
auth
.uploadFile(tempFilePath)
.then((url) => {
return auth.updateProfile({ "avatarUrl": url }).then(() => url);
})
.then((url) => {
this.setData({ 'profile.avatar': url });
wx.showToast({ title: '头像更新成功', icon: 'success' });
})
.catch((err) => {
wx.showToast({ title: (err && err.message) || '头像更新失败', icon: 'none' });
// 回滚预览,重新加载 profile
this.loadProfile();
})
.finally(() => {
wx.hideLoading();
});
},
onFetchOpenId() {
wx.login({
success: (res) => {
console.log('res', res);
}
});
}
});