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.5 KiB
59 lines
1.5 KiB
import type { LockInfo } from '#/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({
|
|
id: '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 () => {
|
|
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();
|
|
},
|
|
},
|
|
});
|
|
|