flat: 注入全局弹窗

This commit is contained in:
Apcallover
2025-12-17 18:27:59 +08:00
19 changed files with 3132 additions and 509 deletions

68
App.vue
View File

@@ -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(); // 恢复监听
}
// 一体机环境判断