Files
consumer-front/src/App.vue
T

95 lines
2.3 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')
2026-07-09 18:49:56 +08:00
// 0. Mock 模式:清除登录状态,强制走登录/注册流程
if (config.mockWechatLogin) {
uni.removeStorageSync('token');
uni.removeStorageSync('user_info');
uni.removeStorageSync('temp_token');
uni.removeStorageSync('auth_info');
}
// 1. 环境检测 + 缓存 app_no/platform
initEnv();
// #ifdef H5
2026-07-02 18:25:23 +08:00
// 2. 解析 URL 路径中的设备编号(如 /A1036)
let 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)) {
2026-07-02 18:25:23 +08:00
deviceId = last;
}
}
2026-07-02 18:25:23 +08:00
// 3. 检查 URL 中是否有授权回调的 code
const urlParams = new URLSearchParams(window.location.search);
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. 检查 JWT
const token = uni.getStorageSync('token');
if (token) {
// 有 JWT → 直接进入首页
const homeUrl = deviceId
? `/pages/index/index?device_id=${deviceId}`
: '/pages/index/scan';
uni.redirectTo({ url: homeUrl });
} 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>