Files
consumer-front/src/App.vue
T

116 lines
3.2 KiB
Vue
Raw Normal View History

<script>
import { initEnv } from '@/utils/env.js';
2026-07-09 18:49:56 +08:00
import config from '@/config/env.js';
export default {
onLaunch: function(options) {
console.log('App Launch')
// 0. Mock 模式:仅首次进入时清除登录状态(刷新时保留)
2026-07-09 18:49:56 +08:00
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] 刷新页面,保留登录状态');
}
2026-07-09 18:49:56 +08:00
}
// 1. 环境检测 + 缓存 app_no/platform
initEnv();
// #ifdef H5
// 2. 解析设备编号:优先从 query 参数获取,其次从路径解析
2026-07-02 18:25:23 +08:00
let deviceId = '';
const urlParams = new URLSearchParams(window.location.search);
deviceId = urlParams.get('device_id') || '';
// 兜底:从路径解析(如 /pages/index/index/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;
}
}
}
2026-07-02 18:25:23 +08:00
// 3. 检查 URL 中是否有授权回调的 code
const code = urlParams.get('code');
if (code) {
2026-07-02 19:32:07 +08:00
// 有 code → 进入授权 Loading 页处理,保留 code 参数
let loadingUrl = '/pages/auth/loading?code=' + encodeURIComponent(code);
if (deviceId) {
loadingUrl += '&device_id=' + deviceId;
}
2026-07-02 18:25:23 +08:00
uni.redirectTo({ url: loadingUrl });
return;
}
// 4. 判断是否为根路径或设备编号路径(如 / 或 /N1154)
const currentPath = window.location.pathname;
const isRootOrDevice = currentPath === '/' || /^\/[A-Z][A-Z0-9]+$/.test(currentPath);
// 5. 检查 JWT
2026-07-02 18:25:23 +08:00
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] 已登录,保留在当前页面');
}
2026-07-02 18:25:23 +08:00
} 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>