Files
consumer-front/src/App.vue
T
kk d326912bd3
Uni-app H5 Deploy (Prod + Staging) / deploy (release) Successful in 46s
redirectTo改为reLaunch
2026-07-22 10:03:13 +08:00

120 lines
3.5 KiB
Vue
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.
<script>
import { initEnv } from '@/utils/env.js';
import config from '@/config/env.js';
export default {
onLaunch: function(options) {
console.log('App Launch')
// 0. Mock 模式:仅首次进入时清除登录状态(刷新时保留)
if (config.mockWechatLogin) {
const mockInitialized = uni.getStorageSync('__mock_initialized');
if (!mockInitialized) {
uni.removeStorageSync('token');
uni.removeStorageSync('user_info');
uni.removeStorageSync('temp_token');
uni.removeStorageSync('auth_info');
uni.setStorageSync('__mock_initialized', 'true');
console.log('[Mock] 首次进入,清除登录状态');
} else {
console.log('[Mock] 刷新页面,保留登录状态');
}
}
// 1. 环境检测 + 缓存 app_no/platform
initEnv();
// #ifdef H5
// 2. 解析设备编号:优先从 query 参数获取,其次从路径解析
let deviceId = '';
const urlParams = new URLSearchParams(window.location.search);
deviceId = urlParams.get('device_id') || '';
// 兜底:从路径解析(如 /N1154)
if (!deviceId) {
const path = window.location.pathname;
const segments = path.split('/').filter(Boolean);
if (segments.length > 0) {
const last = segments[segments.length - 1];
if (/^[A-Z][A-Z0-9]+$/.test(last)) {
deviceId = last;
}
}
}
// 3. 检查 URL 中是否有授权回调的 code(支付宝用 auth_code,微信用 code
const code = urlParams.get('code') || urlParams.get('auth_code');
if (code) {
// 有 code → 进入授权 Loading 页处理
// state 为 "base" 或 "userinfo",直接透传
const state = urlParams.get('state') || '';
let loadingUrl = '/pages/auth/loading?code=' + encodeURIComponent(code);
if (state) {
loadingUrl += '&state=' + state;
}
// 必须用 reLaunch:支付宝回调时当前页可能就是 loading 页,
// redirectTo 到同一页面不会重新触发 onLoad,导致请求卡住
uni.reLaunch({ url: loadingUrl });
return;
}
// 4. 判断是否为根路径或设备编号路径(如 / 或 /N1154)
const currentPath = window.location.pathname;
const isRootOrDevice = currentPath === '/' || /^\/[A-Z][A-Z0-9]+$/.test(currentPath);
// 5. 检查 JWT
const token = uni.getStorageSync('token');
if (token) {
if (isRootOrDevice) {
// 根路径/设备编号路径 → 跳转首页
const homeUrl = deviceId
? `/pages/index/index?device_id=${deviceId}`
: '/pages/index/scan';
uni.redirectTo({ url: homeUrl });
} else {
// 其他业务页面 → 留在当前页面
console.log('[App] 已登录,保留在当前页面');
}
} else {
// 无 JWT → 进入授权 Loading 页
const loadingUrl = deviceId
? `/pages/auth/loading?device_id=${deviceId}`
: '/pages/auth/loading';
uni.redirectTo({ url: loadingUrl });
}
// #endif
// #ifndef H5
// 小程序环境:直接进入扫码页
uni.redirectTo({ url: '/pages/index/scan' });
// #endif
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import '@/uni_modules/uni-scss/index.scss';
/* #ifndef APP-NVUE */
@import '@/static/customicons.css';
// 设置整个项目的背景色
page {
background-color: #f5f5f5;
}
/* #endif */
.example-info {
font-size: 14px;
color: #333;
padding: 10px;
}
</style>