fix: 未登录固定进登录页防卡死;普通展示邀请码,清缓存仅一键登录

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQueandCursor committed 2026-07-27 04:52:42 +08:00
1 parent ada903de07
commit fdfd3a9524
6 files changed
+73 -42

No files matched your search

+1 -1
View File
@@ -216,7 +216,7 @@ App({
refreshDashouMembership(this).catch(() => {});
}
// 纯打手端:始终 reLaunch 到抢单池或注册页;不再停在点单商城
// 纯打手端:未登录必进登录页;已认证进抢单池
const targetPage = isFighterOnly()
? resolveFighterOnlyLaunchUrl()
: (roleDefaultPage[savedRole] || '/pages/index/index');
+1 -1
View File
@@ -1,9 +1,9 @@
{
"pages": [
"pages/fighter/fighter",
"pages/accept-order/accept-order",
"pages/team-hall/team-hall",
"pages/fighter-orders/fighter-orders",
"pages/fighter/fighter",
"pages/messages/messages",
"pages/index/index",
"pages/category/category",
+8 -3
View File
@@ -12,7 +12,7 @@ import { fetchGonggaoLunbo, isGonggaoCacheValid, getCachedGonggaoLunbo } from '.
import { checkPenaltyForGrab } from '../../utils/grab-order-gate.js';
import { ensureRoleAgreement } from '../../utils/role-agreement-gate.js';
import { fetchMyZhidingOrders, submitZhidingResponse, processZhidingList, filterZhidingBannerList, ZHIDING_HF_MAP } from '../../utils/zhiding-order.js';
import { isFighterOnly, FIGHTER_MINE, isDashouCertified } from '../../utils/fighter-only.js';
import { isFighterOnly, FIGHTER_MINE, isDashouCertified, canEnterAcceptOrder } from '../../utils/fighter-only.js';
/** 抢单池轮播 page_key(勿与点单页 order_pool 混用) */
const ACCEPT_ORDER_PAGE_KEY = 'accept_order';
@@ -77,6 +77,12 @@ Page({
},
async onLoad(options) {
// 未登录 / 未认证:立刻去登录页,禁止在抢单池空转卡死
if (isFighterOnly() && !canEnterAcceptOrder()) {
wx.reLaunch({ url: FIGHTER_MINE });
return;
}
const defAvatar = getDefaultAvatarUrl(app);
const highlight = (options && options.highlight) ? String(options.highlight) : '';
this.setData({ defaultAvatarUrl: defAvatar, highlightOrderId: highlight });
@@ -157,8 +163,7 @@ Page({
},
async onShow() {
// 纯打手端:未认证时引导到「我的」完成自动注册,不在抢单池空转
if (isFighterOnly() && !isDashouCertified()) {
if (isFighterOnly() && !canEnterAcceptOrder()) {
wx.reLaunch({ url: FIGHTER_MINE });
return;
}
+43 -30
View File
@@ -47,6 +47,7 @@ Page(createPage({
inviteCode: '',
guanshiInviteCode: '',
zuzhangInviteCode: '',
showInviteForm: true,
uid: '',
touxiang: '',
avatarUrl: '',
@@ -163,23 +164,31 @@ Page(createPage({
const registerType = parsed.registerType || 'dashou';
const { inviteCode } = parsed;
this.checkDashouStatus();
// 清缓存后:只留一键登录,不展示邀请码、不自动注册
// 普通进入:展示邀请码输入框,默认填入硬编码(可改)
// 扫码带邀请码:保持原逻辑自动登录注册
const skipAuto = shouldSkipAutoAuth();
if (inviteCode) {
// 扫码 / 带参:与原先一模一样,自动走邀请注册
this.setData({ showInviteForm: false, inviteCode });
if (registerType === 'guanshi') {
this.setData({ guanshiInviteCode: inviteCode });
setTimeout(() => {
this.handleGuanshiInviteCodeWithLoginCheck(inviteCode);
}, 500);
} else {
this.setData({ inviteCode });
setTimeout(() => {
this.handleInviteCodeWithLoginCheck(inviteCode);
}, 500);
}
} else if (isFighterOnly()) {
// 无邀请码进入:自动用硬编码管事邀请码注册(清缓存后跳过,需手动登录)
setTimeout(() => {
this.tryAutoRegisterDefaultInvite();
}, 600);
} else if (skipAuto) {
this.setData({ showInviteForm: false, inviteCode: '' });
} else {
this.setData({
showInviteForm: true,
inviteCode: PLATFORM_INVITE_CODE,
});
}
this.checkColdStartPopup('dashouduan');
this.syncConfiguredAssets();
@@ -275,11 +284,8 @@ Page(createPage({
this.handleInviteCodeWithLoginCheck(options.inviteCode);
}, 300);
}
} else if (isFighterOnly() && !isCenterPageActive(this, 'isDashou', 'dashoustatus')) {
setTimeout(() => {
this.tryAutoRegisterDefaultInvite();
}, 400);
}
// 非扫码:不再自动注册,避免未登录卡死/乱跳
if (app.startImWhenReady) app.startImWhenReady();
},
@@ -940,38 +946,27 @@ Page(createPage({
if (!that.data.isDashou) {
wx.showLoading({ title: '自动注册中...', mask: true });
that.setData({ isAutoRegistering: true, inviteCode: inviteCode || that.data.inviteCode });
that.onRegister();
that.doDashouRegisterApi(inviteCode || that.data.inviteCode);
} else {
wx.showToast({ title: '您已是接单员', icon: 'success', duration: 2000 });
}
}
},
/** 纯打手端:无邀请码时自动绑定默认管事(硬编码 inviteCode 正常传后端) */
/** 已废弃自动注册;保留空实现避免外部误调 */
tryAutoRegisterDefaultInvite() {
if (!isFighterOnly()) return;
if (shouldSkipAutoAuth()) return;
if (this.data.isDashou || this.data.isGuanshi || this.data.isZuzhang || this.data.isKaoheguan) return;
if (this.data.isAutoRegistering) return;
if (Number(wx.getStorageSync('dashoustatus')) === 1) return;
const code = PLATFORM_INVITE_CODE;
if (!code) {
console.error('默认邀请码缺失,无法自动注册');
return;
}
this.setData({ inviteCode: code, isAutoRegistering: true });
this.handleInviteCodeWithLoginCheck(code);
return;
},
/** 一键登录:不依赖输入框,固定用硬编码邀请码传后端 */
handleWechatLogin() {
// 用户主动登录:清掉「跳过自动登录」标记,并用硬编码邀请码走后端注册
clearSkipAutoAuth();
const code = PLATFORM_INVITE_CODE;
if (!code) {
wx.showToast({ title: '注册配置异常', icon: 'none' });
return;
}
this.setData({ inviteCode: code, isAutoRegistering: true });
this.setData({ inviteCode: code, isAutoRegistering: true, showInviteForm: this.data.showInviteForm });
this.handleInviteCodeWithLoginCheck(code);
},
@@ -1184,22 +1179,37 @@ Page(createPage({
},
async onRegister() {
// 立即注册:优先用输入框;空则回落硬编码
const inviteCode = (this.data.inviteCode || PLATFORM_INVITE_CODE || '').trim();
if (!inviteCode) {
wx.showToast({ title: '邀请码缺失,无法注册', icon: 'none', duration: 2000 });
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, inviteCode });
clearSkipAutoAuth();
this.setData({ inviteCode, isAutoRegistering: true });
this.handleInviteCodeWithLoginCheck(inviteCode);
},
/** 已登录用户:调用打手注册接口(扫码/一键登录复用) */
async doDashouRegisterApi(inviteCode) {
const code = (inviteCode || this.data.inviteCode || PLATFORM_INVITE_CODE || '').trim();
if (!code) {
wx.hideLoading();
this.setData({ isLoading: false, isAutoRegistering: false });
wx.showToast({ title: '邀请码缺失,无法注册', icon: 'none' });
return;
}
this.setData({ isLoading: true, inviteCode: code });
try {
console.log('[fighter-auth] dashouzhuce inviteCode=', inviteCode);
console.log('[fighter-auth] dashouzhuce inviteCode=', code);
const res = await request({
url: '/yonghu/dashouzhuce',
method: 'POST',
data: { inviteCode: inviteCode }
data: { inviteCode: code }
});
if (res && res.data.code == 200) {
const data = res.data.data || {};
@@ -1242,15 +1252,18 @@ Page(createPage({
ensureRoleOnCenterPage(this, 'dashou');
lockPrimaryRole('dashou');
clearSkipAutoAuth();
wx.hideLoading();
wx.showToast({ title: '注册成功!', icon: 'success', duration: 2000 });
this._updateTotalAssets();
this._goFighterHomeAfterRegister();
} else {
wx.hideLoading();
this.setData({ isLoading: false, isAutoRegistering: false });
wx.showToast({ title: (res.data && res.data.message) || '注册失败', icon: 'error', duration: 2000 });
}
} catch (error) {
console.error('注册失败:', error);
wx.hideLoading();
this.setData({ isLoading: false, isAutoRegistering: false });
wx.showToast({ title: error.message || '注册失败', icon: 'error', duration: 2000 });
}
+12 -3
View File
@@ -1,6 +1,6 @@
<!-- 打手端个人中心 - 逍遥梦布局,逻辑/事件不变 -->
<!-- 未注册 -->
<!-- 未注册 / 未登录 -->
<block wx:if="{{!isDashou && !isGuanshi && !isZuzhang && !isKaoheguan}}">
<view class="user-page unreg-page">
<view class="page-header">
@@ -9,8 +9,17 @@
</view>
<view class="unreg-area">
<view class="panel shadow unreg-card">
<text class="unreg-title">{{isAutoRegistering ? '正在登录注册...' : '接单员'}}</text>
<text class="unreg-tip">{{isAutoRegistering ? '请稍候' : '点击下方登录即可进入'}}</text>
<text class="unreg-title">{{isAutoRegistering ? '正在登录注册...' : '接单员登录'}}</text>
<text class="unreg-tip" wx:if="{{isAutoRegistering}}">请稍候</text>
<text class="unreg-tip" wx:elif="{{showInviteForm}}">可填写邀请码,也可直接用默认邀请码登录</text>
<text class="unreg-tip" wx:else>请点击一键登录</text>
<!-- 普通进入:展示邀请码(默认硬编码,可改);清缓存后不展示 -->
<block wx:if="{{showInviteForm && !isAutoRegistering}}">
<input class="unreg-input" type="text" placeholder="邀请码" maxlength="100" value="{{inviteCode}}" bindinput="onInviteCodeInput" placeholder-class="ph" />
<view class="btn-bg unreg-btn" bindtap="onRegister"><text class="unreg-btn-text">立即注册</text></view>
</block>
<view class="btn-bg unreg-btn" bindtap="handleWechatLogin" wx:if="{{!isAutoRegistering}}">
<text class="unreg-btn-text">一键登录</text>
</view>
+8 -4
View File
@@ -45,15 +45,19 @@ export function shouldSkipAutoAuth() {
}
}
/** 冷启动应去的页面 */
/** 冷启动应去的页面:未登录 / 未认证 → 登录页;已认证 → 抢单池 */
export function resolveFighterOnlyLaunchUrl() {
const token = wx.getStorageSync('token')
if (token && isDashouCertified()) {
return FIGHTER_HOME
}
if (!token) return FIGHTER_MINE
if (isDashouCertified()) return FIGHTER_HOME
return FIGHTER_MINE
}
/** 是否允许进入抢单池(必须已登录且已是接单员) */
export function canEnterAcceptOrder() {
return !!wx.getStorageSync('token') && isDashouCertified()
}
/** 未登录 / 登录失效时的落地页(绝不再回点单端我的) */
export function getLoginPageUrl() {
return isFighterOnly() ? FIGHTER_MINE : '/pages/mine/mine'