You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.4 KiB
59 lines
1.4 KiB
2 years ago
|
import type { LockInfo } from '@/types/store'
|
||
|
|
||
|
import { defineStore } from 'pinia'
|
||
|
|
||
|
import { LOCK_INFO_KEY } from '@/enums/cacheEnum'
|
||
|
import { Persistent } from '@/utils/cache/persistent'
|
||
|
import { useUserStore } from './user'
|
||
|
|
||
|
interface LockState {
|
||
|
lockInfo: Nullable<LockInfo>
|
||
|
}
|
||
|
|
||
|
export const useLockStore = defineStore('app-lock', {
|
||
|
state: (): LockState => ({
|
||
|
lockInfo: Persistent.getLocal(LOCK_INFO_KEY)
|
||
|
}),
|
||
|
getters: {
|
||
|
getLockInfo(): Nullable<LockInfo> {
|
||
|
return this.lockInfo
|
||
|
}
|
||
|
},
|
||
|
actions: {
|
||
|
setLockInfo(info: LockInfo) {
|
||
|
this.lockInfo = Object.assign({}, this.lockInfo, info)
|
||
|
Persistent.setLocal(LOCK_INFO_KEY, this.lockInfo, true)
|
||
|
},
|
||
|
resetLockInfo() {
|
||
|
Persistent.removeLocal(LOCK_INFO_KEY, true)
|
||
|
this.lockInfo = null
|
||
|
},
|
||
|
// Unlock
|
||
|
async unLock(password?: string) {
|
||
|
const userStore = useUserStore()
|
||
|
if (this.lockInfo?.pwd === password) {
|
||
|
this.resetLockInfo()
|
||
|
return true
|
||
|
}
|
||
|
const tryLogin = async () => {
|
||
|
try {
|
||
|
const username = userStore.getUserInfo?.username
|
||
|
const res = await userStore.login({
|
||
|
username,
|
||
|
password: password!,
|
||
|
goHome: false,
|
||
|
mode: 'none'
|
||
|
})
|
||
|
if (res) {
|
||
|
this.resetLockInfo()
|
||
|
}
|
||
|
return res
|
||
|
} catch (error) {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return await tryLogin()
|
||
|
}
|
||
|
}
|
||
|
})
|