2020-10-30 21:32:05 +08:00
|
|
|
import type { ProjectConfig } from '/@/types/config';
|
|
|
|
|
|
2020-09-28 20:19:10 +08:00
|
|
|
import { VuexModule, getModule, Module, Mutation, Action } from 'vuex-module-decorators';
|
2020-10-30 21:32:05 +08:00
|
|
|
import store from '/@/store';
|
2020-09-28 20:19:10 +08:00
|
|
|
|
|
|
|
|
import { PROJ_CFG_KEY, LOCK_INFO_KEY } from '/@/enums/cacheEnum';
|
|
|
|
|
|
2020-10-30 21:32:05 +08:00
|
|
|
import { hotModuleUnregisterModule } from '/@/utils/helper/vuexHelper';
|
2020-09-28 20:19:10 +08:00
|
|
|
import { setLocal, getLocal, removeLocal } from '/@/utils/helper/persistent';
|
|
|
|
|
import { deepMerge } from '/@/utils';
|
2020-10-30 21:32:05 +08:00
|
|
|
|
2020-09-28 20:19:10 +08:00
|
|
|
import { userStore } from './user';
|
|
|
|
|
|
|
|
|
|
export interface LockInfo {
|
|
|
|
|
pwd: string | undefined;
|
|
|
|
|
isLock: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let timeId: ReturnType<typeof setTimeout>;
|
|
|
|
|
const NAME = 'app';
|
|
|
|
|
hotModuleUnregisterModule(NAME);
|
|
|
|
|
@Module({ dynamic: true, namespaced: true, store, name: NAME })
|
|
|
|
|
class App extends VuexModule {
|
2020-10-30 21:32:05 +08:00
|
|
|
// Page loading status
|
2020-09-28 20:19:10 +08:00
|
|
|
private pageLoadingState = false;
|
|
|
|
|
|
2020-10-30 21:32:05 +08:00
|
|
|
// project config
|
2020-09-28 20:19:10 +08:00
|
|
|
private projectConfigState: ProjectConfig | null = getLocal(PROJ_CFG_KEY);
|
|
|
|
|
|
2020-10-30 21:32:05 +08:00
|
|
|
// lock info
|
2020-09-28 20:19:10 +08:00
|
|
|
private lockInfoState: LockInfo | null = getLocal(LOCK_INFO_KEY);
|
|
|
|
|
|
2020-10-30 21:32:05 +08:00
|
|
|
// set main overflow hidden
|
2020-09-28 20:19:10 +08:00
|
|
|
private lockMainScrollState = false;
|
|
|
|
|
|
|
|
|
|
get getPageLoading() {
|
|
|
|
|
return this.pageLoadingState;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get getLockMainScrollState() {
|
|
|
|
|
return this.lockMainScrollState;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get getLockInfo(): LockInfo {
|
|
|
|
|
return this.lockInfoState || ({} as LockInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get getProjectConfig(): ProjectConfig {
|
|
|
|
|
return this.projectConfigState || ({} as ProjectConfig);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Mutation
|
|
|
|
|
commitPageLoadingState(loading: boolean): void {
|
|
|
|
|
this.pageLoadingState = loading;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Mutation
|
|
|
|
|
commitLockMainScrollState(lock: boolean): void {
|
|
|
|
|
this.lockMainScrollState = lock;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Mutation
|
|
|
|
|
commitProjectConfigState(proCfg: DeepPartial<ProjectConfig>): void {
|
|
|
|
|
this.projectConfigState = deepMerge(this.projectConfigState || {}, proCfg);
|
|
|
|
|
setLocal(PROJ_CFG_KEY, this.projectConfigState);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Mutation
|
|
|
|
|
commitLockInfoState(info: LockInfo): void {
|
|
|
|
|
this.lockInfoState = Object.assign({}, this.lockInfoState, info);
|
|
|
|
|
setLocal(LOCK_INFO_KEY, this.lockInfoState);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Mutation
|
|
|
|
|
resetLockInfo(): void {
|
|
|
|
|
removeLocal(LOCK_INFO_KEY);
|
|
|
|
|
this.lockInfoState = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Action
|
|
|
|
|
public async setPageLoadingAction(loading: boolean): Promise<void> {
|
|
|
|
|
if (loading) {
|
|
|
|
|
clearTimeout(timeId);
|
|
|
|
|
// 防止闪动
|
|
|
|
|
timeId = setTimeout(() => {
|
|
|
|
|
this.commitPageLoadingState(loading);
|
|
|
|
|
}, 100);
|
|
|
|
|
} else {
|
|
|
|
|
this.commitPageLoadingState(loading);
|
|
|
|
|
clearTimeout(timeId);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// /**
|
2020-10-30 21:32:05 +08:00
|
|
|
// * @description: unlock page
|
2020-09-28 20:19:10 +08:00
|
|
|
// */
|
|
|
|
|
@Action
|
|
|
|
|
public async unLockAction({ password, valid = true }: { password: string; valid?: boolean }) {
|
|
|
|
|
if (!valid) {
|
|
|
|
|
this.resetLockInfo();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
const tryLogin = async () => {
|
|
|
|
|
try {
|
|
|
|
|
const username = userStore.getUserInfoState.username;
|
|
|
|
|
const res = await userStore.login({ username, password }, false);
|
|
|
|
|
if (res) {
|
|
|
|
|
this.resetLockInfo();
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (this.getLockInfo) {
|
|
|
|
|
if (this.getLockInfo.pwd === password) {
|
|
|
|
|
this.resetLockInfo();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
const res = await tryLogin();
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
const res = await tryLogin();
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
export { App };
|
|
|
|
|
export const appStore = getModule<App>(App);
|