56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { createApp } from 'vue'
|
|
import App from './App.vue'
|
|
import router from './router'
|
|
import pinia from './store'
|
|
import { getLaunchParams, onNativeMessage, UniEvents } from '@/utils/uniapp-bridge'
|
|
import { useAvatarStore } from '@/store/avatar'
|
|
import { useUserStore } from '@/store/user'
|
|
import { setAuthToken } from '@/api'
|
|
|
|
const app = createApp(App)
|
|
app.use(router)
|
|
app.use(pinia)
|
|
|
|
// —— 混合架构:在挂载前注入 uniapp 壳传入的认证与会会资料 ——
|
|
const params = getLaunchParams()
|
|
const avatarStore = useAvatarStore(pinia)
|
|
const userStore = useUserStore(pinia)
|
|
|
|
// 恢复本地短信登录会话(会会 userId ↔ 本系统用户)
|
|
userStore.loadFromStorage()
|
|
if (userStore.isLogin && userStore.user) {
|
|
setAuthToken(userStore.token)
|
|
avatarStore.setNativeProfile({
|
|
userId: (userStore.user as any).huihuiUserId || '',
|
|
nickname: userStore.user.nickname || '',
|
|
avatarUrl: userStore.user.avatarUrl || ''
|
|
})
|
|
}
|
|
|
|
if (params.token) {
|
|
setAuthToken(params.token)
|
|
}
|
|
if (params.userId || params.nickname || params.avatar) {
|
|
avatarStore.setNativeProfile({
|
|
userId: params.userId || '',
|
|
nickname: params.nickname || '',
|
|
avatarUrl: params.avatar || ''
|
|
})
|
|
}
|
|
|
|
// 原生 → H5:注册消息处理(壳通过 web-view.evalJS 调用)
|
|
onNativeMessage((msg) => {
|
|
if (!msg || !msg.type) return
|
|
if (msg.type === 'tokenRefresh' && msg.token) {
|
|
setAuthToken(msg.token)
|
|
}
|
|
if (msg.type === 'userUpdate' && msg.user) {
|
|
avatarStore.setNativeProfile(msg.user)
|
|
}
|
|
})
|
|
|
|
app.mount('#app')
|
|
|
|
// 通知原生壳:H5 已就绪
|
|
UniEvents.ready()
|