|
|
|
import { defineStore } from 'pinia'
|
|
|
|
import { useUserStore } from './user'
|
|
|
|
import type { LockInfo } from '@/types/store'
|
|
|
|
|
|
|
|
import { LOCK_INFO_KEY } from '@/enums/cacheEnum'
|
|
|
|
import { Persistent } from '@/utils/cache/persistent'
|
|
|
|
|
|
|
|
interface LockState {
|
|
|
|
lockInfo: Nullable<LockInfo>
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useLockStore = defineStore('app-lock', {
|
|
|
|
state: (): LockState => ({
|
|
|
|
lockInfo: Persistent.getLocal(LOCK_INFO_KEY),
|
|
|
|
}),
|
|
|
|
getters: {
|
|
|
|
getLockInfo(state): Nullable<LockInfo> {
|
|
|
|
return state.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 () => {
|
|
|
|
// TODO 滑块验证码
|
|
|
|
try {
|
|
|
|
const username = userStore.getUserInfo?.user.nickname
|
|
|
|
const res = await userStore.login({
|
|
|
|
username,
|
|
|
|
password: password!,
|
|
|
|
goHome: false,
|
|
|
|
mode: 'none',
|
|
|
|
captchaVerification: '',
|
|
|
|
})
|
|
|
|
if (res)
|
|
|
|
this.resetLockInfo()
|
|
|
|
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
catch (error) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return await tryLogin()
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|