UnisKB/ui/src/stores/modules/user.ts

184 lines
5.5 KiB
TypeScript
Raw Normal View History

2025-04-16 11:10:00 +00:00
import { defineStore } from 'pinia'
import { type Ref } from 'vue'
2025-04-25 08:27:13 +00:00
import type { User } from '@/api/type/user'
2025-04-16 11:10:00 +00:00
import { cloneDeep } from 'lodash'
2025-04-25 08:27:13 +00:00
import UserApi from '@/api/user/user'
2025-04-16 11:10:00 +00:00
// import ThemeApi from '@/api/theme'
// import { useElementPlusTheme } from 'use-element-plus-theme'
// import { defaultPlatformSetting } from '@/utils/theme'
import { useLocalStorage } from '@vueuse/core'
import { localeConfigKey, getBrowserLang } from '@/locales/index'
export interface userStateTypes {
userType: number // 1 系统操作者 2 对话用户
2025-04-25 08:27:13 +00:00
userInfo: User | null
2025-04-16 11:10:00 +00:00
version?: string
XPACK_LICENSE_IS_VALID: false
isXPack: false
themeInfo: any
}
const useLoginStore = defineStore('user', {
state: (): userStateTypes => ({
2025-04-25 08:27:13 +00:00
userType: 1, // 1 系统操作者 2 对话用户
userInfo: null,
2025-04-16 11:10:00 +00:00
version: '',
XPACK_LICENSE_IS_VALID: false,
isXPack: false,
2025-04-25 08:27:13 +00:00
themeInfo: null,
2025-04-16 11:10:00 +00:00
}),
actions: {
getLanguage() {
return this.userType === 1
? localStorage.getItem('MaxKB-locale') || getBrowserLang()
: sessionStorage.getItem('language') || getBrowserLang()
},
isDefaultTheme() {
return !this.themeInfo?.theme || this.themeInfo?.theme === '#3370FF'
},
2025-04-28 07:23:25 +00:00
async profile(loading?: Ref<boolean>) {
2025-04-28 10:14:16 +00:00
return UserApi.getUserProfile(loading).then((ok) => {
2025-05-06 02:13:52 +00:00
this.userInfo = ok.data
useLocalStorage<string>(localeConfigKey, 'en-US').value =
ok?.data?.language || this.getLanguage()
2025-04-25 08:27:13 +00:00
// return this.asyncGetProfile()
})
},
2025-04-16 11:10:00 +00:00
// async asyncGetProfile() {
// return new Promise((resolve, reject) => {
// UserApi.getProfile()
// .then(async (ok) => {
// this.version = ok.data?.version || '-'
// this.isXPack = ok.data?.IS_XPACK
// this.XPACK_LICENSE_IS_VALID = ok.data?.XPACK_LICENSE_IS_VALID
// if (this.isEnterprise()) {
// await this.theme()
// } else {
// this.themeInfo = {
// ...defaultPlatformSetting
// }
// }
// resolve(ok)
// })
// .catch((error) => {
// reject(error)
// })
// })
// },
2025-04-25 08:27:13 +00:00
getPermissions() {
if (this.userInfo) {
return this.isXPack && this.XPACK_LICENSE_IS_VALID
? [...this.userInfo?.permissions, 'x-pack']
: this.userInfo?.permissions
} else {
return this.userInfo?.permissions
2025-04-25 08:27:13 +00:00
}
},
getRole() {
if (this.userInfo) {
return this.userInfo?.role
} else {
return ''
}
},
// showXpack() {
// return this.isXPack
// },
// setTheme(data: any) {
// const { changeTheme } = useElementPlusTheme(this.themeInfo?.theme)
// changeTheme(data?.['theme'])
// this.themeInfo = cloneDeep(data)
// },
// isExpire() {
// return this.isXPack && !this.XPACK_LICENSE_IS_VALID
// },
// isEnterprise() {
// return this.isXPack && this.XPACK_LICENSE_IS_VALID
// },
// changeUserType(num: number, token?: string) {
// this.userType = num
// this.userAccessToken = token
// },
2025-04-16 11:10:00 +00:00
// async theme(loading?: Ref<boolean>) {
// return await ThemeApi.getThemeInfo(loading).then((ok) => {
// this.setTheme(ok.data)
// // window.document.title = this.themeInfo['title'] || 'MaxKB'
// // const link = document.querySelector('link[rel="icon"]') as any
// // if (link) {
// // link['href'] = this.themeInfo['icon'] || '/favicon.ico'
// // }
// })
// },
// async dingCallback(code: string) {
// return UserApi.getDingCallback(code).then((ok) => {
// this.token = ok.data
// localStorage.setItem('token', ok.data)
// return this.profile()
// })
// },
// async dingOauth2Callback(code: string) {
// return UserApi.getDingOauth2Callback(code).then((ok) => {
// this.token = ok.data
// localStorage.setItem('token', ok.data)
// return this.profile()
// })
// },
// async wecomCallback(code: string) {
// return UserApi.getWecomCallback(code).then((ok) => {
// this.token = ok.data
// localStorage.setItem('token', ok.data)
// return this.profile()
// })
// },
// async larkCallback(code: string) {
// return UserApi.getlarkCallback(code).then((ok) => {
// this.token = ok.data
// localStorage.setItem('token', ok.data)
// return this.profile()
// })
// },
// async logout() {
// return UserApi.logout().then(() => {
// localStorage.removeItem('token')
// return true
// })
// },
// async getAuthType() {
// return UserApi.getAuthType().then((ok) => {
// return ok.data
// })
// },
// async getQrType() {
// return UserApi.getQrType().then((ok) => {
// return ok.data
// })
// },
// async getQrSource() {
// return UserApi.getQrSource().then((ok) => {
// return ok.data
// })
// },
// async postUserLanguage(lang: string, loading?: Ref<boolean>) {
// return new Promise((resolve, reject) => {
// UserApi.postLanguage({ language: lang }, loading)
// .then(async (ok) => {
// useLocalStorage(localeConfigKey, 'en-US').value = lang
// window.location.reload()
// resolve(ok)
// })
// .catch((error) => {
// reject(error)
// })
// })
// }
2025-04-25 08:27:13 +00:00
},
2025-04-16 11:10:00 +00:00
})
export default useLoginStore