flat: 注入全局弹窗
This commit is contained in:
68
App.vue
68
App.vue
@@ -5,13 +5,16 @@ import { IncreaseRevie } from '@/common/all-in-one-listen.js';
|
||||
import useUserStore from './stores/useUserStore';
|
||||
import usePageAnimation from './hook/usePageAnimation';
|
||||
import useDictStore from './stores/useDictStore';
|
||||
import { useGlobalInactivity } from '@/hook/useGlobalInactivity';
|
||||
import { GlobalInactivityManager } from '@/utils/GlobalInactivityManager';
|
||||
const { $api, navTo, appendScriptTagElement, aes_Decrypt, sm2_Decrypt, safeReLaunch } = inject('globalFunction');
|
||||
import config from '@/config.js';
|
||||
import baseDB from '@/utils/db.js';
|
||||
import { $confirm } from '@/utils/modal.js';
|
||||
usePageAnimation();
|
||||
const appword = 'aKd20dbGdFvmuwrt'; // 固定值
|
||||
let uQRListen = null;
|
||||
let inactivityManager = null;
|
||||
let inactivityModalTimer = null;
|
||||
|
||||
onLaunch((options) => {
|
||||
useDictStore().getDictData();
|
||||
@@ -22,13 +25,15 @@ onLaunch((options) => {
|
||||
useUserStore().changMachineEnv(false);
|
||||
return;
|
||||
}
|
||||
if (isY9MachineType()) {
|
||||
if (!isY9MachineType()) {
|
||||
console.warn('求职一体机环境');
|
||||
baseDB.resetAndReinit(); // 清空indexdb
|
||||
useUserStore().logOutApp();
|
||||
useUserStore().changMiniProgramAppStatus(true);
|
||||
useUserStore().changMachineEnv(true);
|
||||
uQRListen = new IncreaseRevie();
|
||||
inactivityManager = new GlobalInactivityManager(handleInactivity, 60 * 1000);
|
||||
inactivityManager.start();
|
||||
return;
|
||||
}
|
||||
// 正式上线去除此方法
|
||||
@@ -58,30 +63,49 @@ onHide(() => {
|
||||
console.log('App Hide');
|
||||
});
|
||||
|
||||
const { resume, pause } = useGlobalInactivity(() => {
|
||||
console.warn('【全局】60秒无操作,执行安全登出...');
|
||||
uni.showModal({
|
||||
title: '会话即将过期',
|
||||
content: '长时间无操作,是否继续使用?',
|
||||
showCancel: true,
|
||||
cancelText: '退出',
|
||||
confirmText: '继续',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
resume();
|
||||
} else {
|
||||
handleLogout();
|
||||
}
|
||||
},
|
||||
});
|
||||
}, 60 * 1000);
|
||||
async function handleInactivity() {
|
||||
console.log('【全局】60秒无操作,执行安全逻辑');
|
||||
if (inactivityModalTimer) {
|
||||
clearTimeout(inactivityModalTimer);
|
||||
inactivityModalTimer = null;
|
||||
}
|
||||
if (useUserStore().hasLogin) {
|
||||
// 示例:弹窗确认
|
||||
await $confirm({
|
||||
title: '会话即将过期',
|
||||
content: '长时间无操作,是否继续使用?',
|
||||
success: (res) => {
|
||||
if (inactivityModalTimer) {
|
||||
clearTimeout(inactivityModalTimer);
|
||||
inactivityModalTimer = null;
|
||||
}
|
||||
if (res.confirm) {
|
||||
inactivityManager?.resume(); // 恢复监听
|
||||
} else {
|
||||
performLogout();
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
if (inactivityModalTimer) clearTimeout(inactivityModalTimer);
|
||||
performLogout();
|
||||
},
|
||||
});
|
||||
} else {
|
||||
inactivityManager?.resume(); // 恢复监听
|
||||
}
|
||||
// 启动 10 秒自动登出定时器
|
||||
inactivityModalTimer = setTimeout(() => {
|
||||
inactivityModalTimer = null;
|
||||
console.log('【自动登出】用户10秒未操作');
|
||||
performLogout();
|
||||
}, 10000); // 10秒
|
||||
}
|
||||
|
||||
function handleLogout() {
|
||||
// 清除 token、跳转登录页
|
||||
function performLogout() {
|
||||
uni.clearStorageSync();
|
||||
baseDB.resetAndReinit();
|
||||
useUserStore().logOutApp();
|
||||
pause();
|
||||
inactivityManager?.resume(); // 恢复监听
|
||||
}
|
||||
|
||||
// 一体机环境判断
|
||||
|
||||
Reference in New Issue
Block a user