123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import {computed, readonly, watchEffect} from "vue";
- import {createEventHook, createGlobalState, useLocalStorage} from "@vueuse/core";
- import mxConst from "@/common/mxConst";
- import mxConfig from "@/common/mxConfig";
- import {getInfo, login, logout, logoutPhysical} from "@/api/login";
- import {useCacheStore} from "@/hooks/useCacheStore";
- import {mobile} from "@/uni_modules/uv-ui-tools/libs/function/test";
- import defaultAvatar from "@/static/personal/avatar_default.png";
- export const useUserStore = createGlobalState(() => {
- // user data
- const token = useLocalStorage(mxConst.keyToken, "")
- const data = useLocalStorage(mxConst.keyUserInfo, {})
- const appConfig = useLocalStorage(mxConst.keyAppConfig, {})
- const agreeProtocolUserName = useLocalStorage(mxConst.keyUserAgreed, "")
- const userInfoUpdate = createEventHook()
- // computed
- const isLogin = computed(() => !!token.value)
- const isBind = computed(() => data.value.isBind == 1) // 表示卡登陆/关联,但手机信息不一定完善了
- const isMobileBind = computed(() => isBind.value || mobile(data.value.phonenumber)) // 手机信息已完善情况
- const isCardBind = computed(() => isBind.value || !isMobileBind.value) // 手机信息未完善情况
- const isScoreLocked = computed(() => data.value.scoreLock == mxConst.enum.scoreLock.locked)
- const isScoreUnlocked = computed(() => data.value.scoreLock == mxConst.enum.scoreLock.unlock)
- const isScoreLocking = computed(() => data.value.scoreLock == mxConst.enum.scoreLock.locking)
- const isCultural = computed(() => data.value.examType == mxConst.keyCulturalExamType)
- const enableAuthModify = computed(() => data.value.enableAuthModify)
- const period = computed(() => data.value.period) // 只是为了妆容旧结构,理论上这个值已经没有用了
- // 同意协议需要严格判定,必须和当前用户挂钩
- const isAgreeProtocol = computed(() => data.value.userName == agreeProtocolUserName.value)
- // isK9Sensitive 是旧的store.getters上的属性,继续保留
- const isK9Sensitive = computed(() => data.value.isK9Sensitive)
- const avatar = computed(() => data.value.avatar || defaultAvatar)
- // hooks
- watchEffect(() => mergeAppConfig())
- // methods
- function mergeAppConfig() {
- const overrideConfig = appConfig.value;
- const mergedConfig = uni.$uv.deepMerge(mxConfig, overrideConfig);
- Object.assign(mxConfig, mergedConfig);
- console.log("merge app config: to mx config", overrideConfig, mxConfig);
- }
- const Login = async function (data) {
- const loginRes = await login(data);
- token.value = loginRes.token;
- const infoRes = await GetInfo();
- agreeProtocolUserName.value = infoRes.data.userName;
- };
- const SyncToken = async function (val) {
- // 注册时,注册接口会返回token
- token.value = val
- const infoRes = await GetInfo()
- agreeProtocolUserName.value = infoRes.data.userName
- }
- const GetInfo = async function () {
- const infoRes = await getInfo()
- data.value = infoRes.data
- appConfig.value = infoRes[mxConst.propAppConfig]
- // 每次重新登陆,主动清空所有缓存
- const {clearCache} = useCacheStore()
- clearCache()
- await userInfoUpdate.trigger()
- return infoRes
- };
- const Logout = async function () {
- await logout()
- token.value = ""
- data.value = Object.create(null)
- };
- const LogoutPhysical = async function () {
- await logoutPhysical()
- token.value = ""
- data.value = Object.create(null)
- };
- const clearToken = function () {
- token.value = ''
- data.value = Object.create(null)
- }
- return {
- token: readonly(token),
- currentUser: data,
- appConfig: appConfig,
- isLogin,
- isBind,
- isMobileBind,
- isCardBind,
- isScoreLocked,
- isScoreUnlocked,
- isScoreLocking,
- isCultural,
- enableAuthModify,
- period,
- isAgreeProtocol,
- isK9Sensitive,
- avatar,
- Login,
- SyncToken,
- GetInfo,
- Logout,
- LogoutPhysical,
- clearToken,
- onUserInfoUpdate: userInfoUpdate.on
- };
- });
|