import { defineStore } from 'pinia' import { ref } from 'vue' import { Base64 } from 'js-base64' import defHead from '@img/icons/turnk_number_head.png' interface TUser extends Token认证用户实体 { /** 令牌 */ token?: string /** 组织机构id */ orgId?: string /** 角色id */ roleId?: string /** 请求时携带的标识符 */ Identifier?: string mobileDes?: string } const service = 'miniprogram' const initState = { Identifier: Base64.encode(service + ':org:user:role'), head_url: defHead, user_name: '登录/注册', } const useUserStore = defineStore( 'user', () => { const userInfo = ref({ ...initState }) const isLogined = computed(() => !!userInfo.value.token) /** 初始化用户信息 */ const initUserInfo = (val: Token认证返回实体) => { const data = { ...val.user } delete data.authorities if (!data.head_url) { data.head_url = defHead } userInfo.value = data userInfo.value.mobileDes = func.convert.mobileDes(data.mobile) if (store.common.data.mockScenes === config.common.mockScenes.examine) { userInfo.value.mobileDes = '' } userInfo.value.token = val.access_token userInfo.value.orgId = val.user.authorities[0].orgId userInfo.value.roleId = val.user.authorities[0].roles[0].roleId userInfo.value.Identifier = Base64.encode( `${service}:${userInfo.value.orgId}:${userInfo.value.user_id}:${userInfo.value.roleId}`, ) } /** 设置部分用户信息 */ const setUserInfo = (ui: User对象) => { if (ui.userName) { userInfo.value.user_name = ui.userName } if (ui.headUrl) { userInfo.value.head_url = ui.headUrl } } const clearUserInfo = (type = 0) => { userInfo.value = { ...initState } ay.goHome() } const Authorization = computed(() => { if (isLogined.value) { return 'Bearer ' + userInfo.value.token } else { return 'Basic ' + Base64.encode(service + ':123456') } }) return { userInfo, initUserInfo, setUserInfo, /** 清理身份信息-跳登录页面 * @parmas type 0:手机号快捷 1:账号、密码 */ clearUserInfo, /** 已登录 */ isLogined, /** 授权信息 */ Authorization, /** 小程序类型标识 */ service, } }, { persist: true, }, ) export default useUserStore