396 lines
12 KiB
TypeScript
396 lines
12 KiB
TypeScript
// 定义组合式API仓库
|
||
import { defineStore } from 'pinia'
|
||
import { computed } from 'vue'
|
||
import { getPrefixName } from '@/config'
|
||
import { goToPage } from '@/utils/util'
|
||
import storage from '@/utils/storage'
|
||
import constant from '@/utils/constant'
|
||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||
import { login, logout, getInfo, getrefreshtoken } from '@/apis/longin'
|
||
// import { getUserProfile } from '@/apis/systemuser'
|
||
import defAvar from '@/static/avatar-zfsiZCFH.gif'
|
||
interface userInfoStoreInt {
|
||
token: string
|
||
refreshtoken: string
|
||
avatar: string
|
||
username: string
|
||
password: string
|
||
name: string
|
||
roles: any
|
||
permissions: any
|
||
dept: any
|
||
deptInfo: any
|
||
parentmenutitle: string
|
||
childrenmenutitle: string
|
||
urlip: string
|
||
urlpro: string
|
||
allurl: string
|
||
xththid: string
|
||
xththstr: string
|
||
projectid: string
|
||
projectname: string
|
||
androidappVersion: string
|
||
}
|
||
|
||
// 创建小仓库
|
||
export default defineStore(
|
||
getPrefixName('user'),
|
||
() => {
|
||
const userInfo = ref<userInfoStoreInt>({
|
||
token: '',
|
||
refreshtoken: '',
|
||
avatar: '',
|
||
username: '',
|
||
password: '',
|
||
name: '',
|
||
roles: [],
|
||
permissions: [],
|
||
dept: null,
|
||
deptInfo: null,
|
||
parentmenutitle: '',
|
||
childrenmenutitle: '',
|
||
urlip: '',
|
||
urlpro: '',
|
||
allurl: '',
|
||
xththid: '',
|
||
xththstr: '',
|
||
projectid: '',
|
||
projectname: '',
|
||
androidappVersion: ''
|
||
})
|
||
//debugger
|
||
userInfo.value.token = getToken()
|
||
userInfo.value.refreshtoken = storage.get(constant.refresh_token)
|
||
userInfo.value.username = storage.get(constant.username)
|
||
userInfo.value.password = storage.get(constant.password)
|
||
userInfo.value.name = storage.get(constant.name)
|
||
userInfo.value.avatar = storage.get(constant.avatar)
|
||
userInfo.value.roles = storage.get(constant.roles)
|
||
userInfo.value.permissions = storage.get(constant.permissions)
|
||
userInfo.value.dept = storage.get(constant.dept)
|
||
userInfo.value.parentmenutitle = storage.get(constant.parentmenutitle)
|
||
userInfo.value.childrenmenutitle = storage.get(constant.childrenmenutitle)
|
||
userInfo.value.urlip = storage.get(constant.urlip)
|
||
userInfo.value.urlpro = storage.get(constant.urlpro)
|
||
userInfo.value.allurl = storage.get(constant.allurl)
|
||
userInfo.value.xththstr = storage.get(constant.xththstr)
|
||
userInfo.value.xththid = storage.get(constant.xththid)
|
||
userInfo.value.projectid = storage.get(constant.projectid)
|
||
userInfo.value.projectname = storage.get(constant.projectname)
|
||
userInfo.value.androidappVersion = storage.get(constant.androidappVersion)
|
||
|
||
const token = computed(() => {
|
||
// debugger
|
||
return userInfo.value.token || ''
|
||
})
|
||
const refreshtoken = computed(() => {
|
||
// debugger
|
||
return userInfo.value.refreshtoken || ''
|
||
})
|
||
const name = computed(() => {
|
||
return userInfo.value.name
|
||
})
|
||
const avatar = computed(() => {
|
||
return userInfo.value.avatar
|
||
})
|
||
const username = computed(() => {
|
||
return userInfo.value.username
|
||
})
|
||
const password = computed(() => {
|
||
return userInfo.value.password
|
||
})
|
||
const roles = computed(() => {
|
||
return userInfo.value.roles
|
||
})
|
||
const permissions = computed(() => {
|
||
return userInfo.value.permissions
|
||
})
|
||
const dept = computed(() => {
|
||
return userInfo.value.permissions
|
||
})
|
||
|
||
const deptInfo = computed(() => {
|
||
return userInfo.value.deptInfo
|
||
})
|
||
const urlip = computed(() => {
|
||
return userInfo.value.urlip
|
||
})
|
||
const urlpro = computed(() => {
|
||
return userInfo.value.urlpro
|
||
})
|
||
const allurl = computed(() => {
|
||
return userInfo.value.allurl
|
||
})
|
||
const xththid = computed(() => {
|
||
return userInfo.value.xththid
|
||
})
|
||
const xththstr = computed(() => {
|
||
return userInfo.value.xththstr
|
||
})
|
||
|
||
const projectid = computed(() => {
|
||
return userInfo.value.projectid
|
||
})
|
||
const projectname = computed(() => {
|
||
return userInfo.value.projectname
|
||
})
|
||
const androidappVersion = computed(() => {
|
||
return userInfo.value.androidappVersion
|
||
})
|
||
|
||
const parentmenutitle = computed(() => {
|
||
return userInfo.value.parentmenutitle
|
||
})
|
||
const childrenmenutitle = computed(() => {
|
||
return userInfo.value.childrenmenutitle
|
||
})
|
||
|
||
function setallurl(allurl: any) {
|
||
userInfo.value.allurl = allurl
|
||
storage.set(constant.allurl, allurl)
|
||
}
|
||
function setxtht(xththid: any, xththstr: any) {
|
||
userInfo.value.xththid = xththid
|
||
userInfo.value.xththstr = xththstr
|
||
storage.set(constant.xththid, xththid)
|
||
storage.set(constant.xththstr, xththstr)
|
||
}
|
||
function setproject(projectid: any, projectname: any) {
|
||
userInfo.value.projectid = projectid
|
||
userInfo.value.projectname = projectname
|
||
storage.set(constant.projectid, projectid)
|
||
storage.set(constant.projectname, projectname)
|
||
}
|
||
|
||
function seturlip(urlip: any) {
|
||
userInfo.value.urlip = urlip
|
||
storage.set(constant.urlip, urlip)
|
||
}
|
||
function seturlpro(urlpro: any) {
|
||
userInfo.value.urlpro = urlpro
|
||
storage.set(constant.urlpro, urlpro)
|
||
}
|
||
|
||
function setavatar(avatar: any) {
|
||
userInfo.value.avatar = avatar
|
||
storage.set(constant.avatar, avatar)
|
||
}
|
||
|
||
function setparentmenutitle(parentmenutitle: any) {
|
||
userInfo.value.parentmenutitle = parentmenutitle
|
||
storage.set(constant.parentmenutitle, parentmenutitle)
|
||
}
|
||
function setchildrenmenutitle(childrenmenutitle: any) {
|
||
userInfo.value.childrenmenutitle = childrenmenutitle
|
||
storage.set(constant.childrenmenutitle, childrenmenutitle)
|
||
}
|
||
function setandroidappVersion(androidappVersion: any) {
|
||
userInfo.value.androidappVersion = androidappVersion
|
||
storage.set(constant.androidappVersion, androidappVersion)
|
||
}
|
||
|
||
// 登录
|
||
function userLogin(dataInfo: { username: string; password: string; code: string; uuid: string; mianlogin: boolean }) {
|
||
return new Promise((resolve, reject) => {
|
||
login(dataInfo)
|
||
.then((res: any) => {
|
||
// debugger
|
||
// userInfo.value = res.data
|
||
// userInfo.value.userpassword = params.password ? params.password : ''
|
||
// // getUserProfile({}).then((res1: any) => {
|
||
// // debugger
|
||
// // })
|
||
|
||
setToken(res.data.access_token)
|
||
userInfo.value.token = res.data.access_token
|
||
userInfo.value.refreshtoken = res.data.refresh_token
|
||
userInfo.value.username = dataInfo.username
|
||
userInfo.value.password = dataInfo.password
|
||
storage.set(constant.refresh_token, res.data.refresh_token)
|
||
storage.set(constant.username, dataInfo.username)
|
||
storage.set(constant.password, dataInfo.password)
|
||
|
||
resolve(res)
|
||
})
|
||
.catch((err) => {
|
||
reject(err)
|
||
})
|
||
})
|
||
}
|
||
|
||
// 刷新token
|
||
function setrefreshtoken() {
|
||
return new Promise((resolve, reject) => {
|
||
getrefreshtoken(userInfo.value.refreshtoken)
|
||
.then((res: any) => {
|
||
//debugger
|
||
if (res.code === 200) {
|
||
setToken(res.data)
|
||
userInfo.value.token = res.data
|
||
}
|
||
|
||
resolve(res)
|
||
})
|
||
.catch((err) => {
|
||
reject(err)
|
||
})
|
||
})
|
||
}
|
||
|
||
// 个人信息
|
||
function userinfo() {
|
||
return new Promise((resolve, reject) => {
|
||
getInfo()
|
||
.then((res: any) => {
|
||
if (res.code === 200) {
|
||
// const data = res.data;
|
||
const user = res.data
|
||
// prettier-ignore
|
||
// const avatar = user.avatar == "" || user.avatar == null ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar;
|
||
const avatar = (user == null || user.avatar == "" || user.avatar == null) ? defAvar : import.meta.env.VITE_APP_BASE_PRE + user.avatar
|
||
|
||
if (user.roles && user.roles.length > 0) {
|
||
// 验证返回的roles是否是一个非空数组
|
||
userInfo.value.roles = user.roles
|
||
//userInfo.value.permissions = user.permissions
|
||
} else {
|
||
userInfo.value.roles = ['ROLE_DEFAULT']
|
||
}
|
||
// this.deptInfo = {
|
||
// deptId: user.dept.deptId,
|
||
// deptName: user.dept.deptName,
|
||
// deptType: user.dept.deptType
|
||
// }
|
||
userInfo.value.name = user.nickName
|
||
userInfo.value.avatar = avatar
|
||
userInfo.value.permissions = user.permissions
|
||
storage.set(constant.permissions, user.permissions)
|
||
storage.set(constant.name, user.nickName)
|
||
storage.set(constant.avatar, userInfo.value.avatar)
|
||
storage.set(constant.roles, userInfo.value.roles)
|
||
storage.set(constant.permissions, userInfo.value.permissions)
|
||
}
|
||
|
||
resolve(res)
|
||
})
|
||
.catch((err) => {
|
||
reject(err)
|
||
})
|
||
})
|
||
}
|
||
|
||
// 退出登录
|
||
function userlogOut() {
|
||
return new Promise<void>((resolve, reject) => {
|
||
logout()
|
||
.then(() => {
|
||
uni.showToast({
|
||
icon: 'none',
|
||
title: '退出成功',
|
||
mask: true,
|
||
success() {
|
||
setTimeout(() => {
|
||
userInfo.value = {
|
||
token: '',
|
||
refreshtoken: '',
|
||
avatar: '',
|
||
username: '',
|
||
password: '',
|
||
name: '',
|
||
roles: [],
|
||
permissions: [],
|
||
dept: null,
|
||
deptInfo: null,
|
||
parentmenutitle: '',
|
||
childrenmenutitle: '',
|
||
urlip: '',
|
||
urlpro: '',
|
||
allurl: '',
|
||
xththid: '',
|
||
xththstr: '',
|
||
projectid: '',
|
||
projectname: '',
|
||
androidappVersion: ''
|
||
}
|
||
uni.clearStorageSync()
|
||
goToPage({
|
||
url: 'pages/login/login',
|
||
mode: 'reLaunch'
|
||
})
|
||
}, 1000)
|
||
}
|
||
})
|
||
storage.clean()
|
||
removeToken()
|
||
resolve()
|
||
})
|
||
.catch((error) => {
|
||
reject(error)
|
||
})
|
||
})
|
||
}
|
||
return {
|
||
token,
|
||
refreshtoken,
|
||
avatar,
|
||
username,
|
||
password,
|
||
name,
|
||
roles,
|
||
permissions,
|
||
dept,
|
||
deptInfo,
|
||
userLogin,
|
||
userinfo,
|
||
userlogOut,
|
||
setavatar,
|
||
setparentmenutitle,
|
||
setchildrenmenutitle,
|
||
parentmenutitle,
|
||
childrenmenutitle,
|
||
setrefreshtoken,
|
||
urlip,
|
||
urlpro,
|
||
seturlip,
|
||
seturlpro,
|
||
setallurl,
|
||
allurl,
|
||
setxtht,
|
||
xththid,
|
||
xththstr,
|
||
projectid,
|
||
projectname,
|
||
setproject,
|
||
androidappVersion,
|
||
setandroidappVersion
|
||
}
|
||
},
|
||
{
|
||
// unistorage: {
|
||
// serializer: {
|
||
// // 序列化,默认为 JSON.stringify
|
||
// serialize(v) {
|
||
// return JSON.stringify(v)
|
||
// },
|
||
// // 反序列化,默认为 JSON.parse
|
||
// deserialize(v) {
|
||
// return JSON.parse(v)
|
||
// }
|
||
// }
|
||
// }
|
||
// 开启后对 state 的数据读写都将持久化
|
||
// unistorage: {
|
||
// key: 'userInfo', // 缓存的键,默认为该 store 的 id,这里是 main,
|
||
// paths: ['userInfo.token'], // 需要缓存的路径,这里设置 foo 和 nested 下的 data 会被缓存
|
||
// // 初始化恢复前触发
|
||
// beforeRestore(ctx: any) {
|
||
// console.log(ctx)
|
||
// },
|
||
// // 初始化恢复后触发
|
||
// afterRestore(ctx: any) {
|
||
// console.log('ctx', ctx)
|
||
// }
|
||
// }
|
||
}
|
||
)
|