新增登录页图形验证码功能,支持通过Redis全局配置控制验证码的启用状态,优化登录流程以提升用户体验。新增相关API接口和前端配置项,确保验证码逻辑与后端同步。
This commit is contained in:
@@ -21,12 +21,28 @@ import { primaryColor } from '../../build/config/themeConfig';
|
||||
import { Persistent } from '/@/utils/cache/persistent';
|
||||
import { deepMerge } from '/@/utils';
|
||||
import { ThemeEnum } from '/@/enums/appEnum';
|
||||
import { getLoginCaptchaServerConfig } from '/@/api/sys/user';
|
||||
|
||||
/** 解析 GET /sys/loginCaptchaConfig 的 result(兼容 boolean / 字符串) */
|
||||
function parseLoginCaptchaEnabledFromServer(raw: unknown): boolean {
|
||||
if (raw === true || raw === 'true' || raw === 1 || raw === '1') {
|
||||
return true;
|
||||
}
|
||||
if (raw === false || raw === 'false' || raw === 0 || raw === '0') {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Initial project configuration
|
||||
export function initAppConfigStore() {
|
||||
const localeStore = useLocaleStore();
|
||||
const appStore = useAppStore();
|
||||
let projCfg: ProjectConfig = Persistent.getLocal(PROJ_CFG_KEY) as ProjectConfig;
|
||||
// 合并前判断是否已在本地持久化过「验证码登录」键;有则不再用接口覆盖,避免侧边栏已选「开」却被同步成「关」
|
||||
const persistedHadLoginCaptchaKey = !!(
|
||||
projCfg && Object.prototype.hasOwnProperty.call(projCfg, 'loginCaptchaEnabled')
|
||||
);
|
||||
projCfg = deepMerge(projectSetting, projCfg || {});
|
||||
const darkMode = appStore.getDarkMode;
|
||||
const {
|
||||
@@ -48,6 +64,15 @@ export function initAppConfigStore() {
|
||||
console.log(error);
|
||||
}
|
||||
appStore.setProjectConfig(projCfg);
|
||||
// 仅当本地从未保存过该开关时,用后端 Redis/防火墙 初始化一次;用户一旦在侧边栏保存过,完全信任本地持久化
|
||||
getLoginCaptchaServerConfig()
|
||||
.then((enabled) => {
|
||||
if (persistedHadLoginCaptchaKey) {
|
||||
return;
|
||||
}
|
||||
appStore.setProjectConfig({ loginCaptchaEnabled: parseLoginCaptchaEnabledFromServer(enabled) });
|
||||
})
|
||||
.catch(() => {});
|
||||
|
||||
// init dark mode
|
||||
updateDarkTheme(darkMode);
|
||||
|
||||
Reference in New Issue
Block a user