118 lines
3.6 KiB
JavaScript
118 lines
3.6 KiB
JavaScript
/** 三端固定:normal | dashou | shangjia,认证后不可回退 */
|
||
|
||
import { ensurePhoneAuth } from './phone-auth.js';
|
||
|
||
const VALID = ['normal', 'dashou', 'shangjia'];
|
||
const LEGACY_CENTER_ROLES = ['guanshi', 'zuzhang', 'kaoheguan'];
|
||
|
||
/** 旧版管事/组长/考核官主端标识 → 统一回落打手 Tab */
|
||
export function migrateLegacyCenterRole(app) {
|
||
app = app || getApp();
|
||
const cur = wx.getStorageSync('currentRole') || app.globalData.currentRole || '';
|
||
const pri = wx.getStorageSync('primaryRole') || '';
|
||
const isLegacy = LEGACY_CENTER_ROLES.includes(cur) || LEGACY_CENTER_ROLES.includes(pri);
|
||
if (!isLegacy) return false;
|
||
|
||
const hasDashouSide =
|
||
isRoleStatusActive(wx.getStorageSync('dashoustatus'))
|
||
|| isRoleStatusActive(wx.getStorageSync('guanshistatus'))
|
||
|| isRoleStatusActive(wx.getStorageSync('zuzhangstatus'))
|
||
|| isRoleStatusActive(wx.getStorageSync('kaoheguanstatus'));
|
||
|
||
if (hasDashouSide) {
|
||
lockPrimaryRole('dashou', app);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
export function isRoleStatusActive(status) {
|
||
return Number(status) === 1;
|
||
}
|
||
|
||
/** 读取主端(兼容旧 currentRole / 管事组长落地页) */
|
||
export function getPrimaryRole(app) {
|
||
app = app || getApp();
|
||
const stored = wx.getStorageSync('primaryRole');
|
||
if (VALID.includes(stored)) {
|
||
return stored;
|
||
}
|
||
const legacy = wx.getStorageSync('currentRole') || app.globalData.currentRole || 'normal';
|
||
if (legacy === 'dashou' || legacy === 'shangjia') {
|
||
return legacy;
|
||
}
|
||
if (legacy === 'guanshi' || legacy === 'zuzhang' || legacy === 'kaoheguan') {
|
||
if (isRoleStatusActive(wx.getStorageSync('dashoustatus'))) {
|
||
return 'dashou';
|
||
}
|
||
if (isRoleStatusActive(wx.getStorageSync('shangjiastatus'))) {
|
||
return 'shangjia';
|
||
}
|
||
}
|
||
if (isRoleStatusActive(wx.getStorageSync('dashoustatus'))) {
|
||
return 'dashou';
|
||
}
|
||
if (isRoleStatusActive(wx.getStorageSync('shangjiastatus'))) {
|
||
return 'shangjia';
|
||
}
|
||
return 'normal';
|
||
}
|
||
|
||
/** 锁定主端并同步 TabBar 角色 */
|
||
export function lockPrimaryRole(role, app) {
|
||
if (!VALID.includes(role)) return;
|
||
app = app || getApp();
|
||
wx.setStorageSync('primaryRole', role);
|
||
wx.setStorageSync('currentRole', role);
|
||
app.globalData.primaryRole = role;
|
||
app.globalData.currentRole = role;
|
||
if (app.emitEvent) {
|
||
app.emitEvent('currentRoleChanged', { role });
|
||
}
|
||
}
|
||
|
||
/** TabBar / IM 使用的有效角色(仅三端) */
|
||
export function getTabRole(app) {
|
||
return getPrimaryRole(app);
|
||
}
|
||
|
||
export function clearPrimaryRole(app) {
|
||
app = app || getApp();
|
||
wx.removeStorageSync('primaryRole');
|
||
lockPrimaryRole('normal', app);
|
||
}
|
||
|
||
export const PRIMARY_DEFAULT_PAGES = {
|
||
normal: '/pages/mine/mine',
|
||
dashou: '/pages/accept-order/accept-order',
|
||
shangjia: '/pages/merchant-orders/merchant-orders',
|
||
};
|
||
|
||
/** 锁定主端并跳转到该端默认首页,同时建立 IM 长连接 */
|
||
function finishEnterLockedRole(role, app) {
|
||
app = app || getApp();
|
||
lockPrimaryRole(role, app);
|
||
wx.reLaunch({ url: PRIMARY_DEFAULT_PAGES[role] });
|
||
setTimeout(() => {
|
||
if (app.switchRoleAndReconnect) {
|
||
app.switchRoleAndReconnect(role).catch(() => {
|
||
if (app.connectForCurrentRole) app.connectForCurrentRole();
|
||
});
|
||
} else if (app.connectForCurrentRole) {
|
||
app.connectForCurrentRole();
|
||
}
|
||
}, 600);
|
||
return true;
|
||
}
|
||
|
||
export function enterLockedRole(role, app) {
|
||
if (!VALID.includes(role) || role === 'normal') return false;
|
||
if (role === 'dashou') {
|
||
ensurePhoneAuth({ redirect: true, role: 'dashou' }).then((ok) => {
|
||
if (ok) finishEnterLockedRole(role, app);
|
||
});
|
||
return true;
|
||
}
|
||
return finishEnterLockedRole(role, app);
|
||
}
|