Переглянути джерело

!1378 调整登录配置到系统配置,减少接口请求
Merge pull request !1378 from 冰魄少年/next

zuohuaijun 1 рік тому
батько
коміт
cb5a60c4fe

+ 2 - 2
Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs

@@ -25,8 +25,8 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData<SysConfig>
             new SysConfig{ Id=1300000000131, Name="日志保留天数", Code=ConfigConst.SysLogRetentionDays, Value="180", SysFlag=YesNoEnum.Y, Remark="日志保留天数(天)", OrderNo=40, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000141, Name="记录操作日志", Code=ConfigConst.SysOpLog, Value="True", SysFlag=YesNoEnum.Y, Remark="是否记录操作日志", OrderNo=50, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000151, Name="单设备登录", Code=ConfigConst.SysSingleLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启单设备登录", OrderNo=60, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000161, Name="登录二次验证", Code=ConfigConst.SysSecondVer, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启登录二次验证", OrderNo=70, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000171, Name="图形验证码", Code=ConfigConst.SysCaptcha, Value="True", SysFlag=YesNoEnum.Y, Remark="是否开启图形验证码", OrderNo=80, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000161, Name="登录二次验证", Code=ConfigConst.SysSecondVer, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启登录二次验证", OrderNo=70, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000171, Name="图形验证码", Code=ConfigConst.SysCaptcha, Value="True", SysFlag=YesNoEnum.Y, Remark="是否开启图形验证码", OrderNo=80, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000181, Name="Token过期时间", Code=ConfigConst.SysTokenExpire, Value="10080", SysFlag=YesNoEnum.Y, Remark="Token过期时间(分钟)", OrderNo=90, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000191, Name="RefreshToken过期时间", Code=ConfigConst.SysRefreshTokenExpire, Value="20160", SysFlag=YesNoEnum.Y, Remark="刷新Token过期时间(分钟)(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)", OrderNo=100, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000201, Name="发送异常日志邮件", Code=ConfigConst.SysErrorMail, Value="True", SysFlag=YesNoEnum.Y, Remark="是否发送异常日志邮件", OrderNo=110, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },

+ 0 - 14
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -324,20 +324,6 @@ public class SysAuthService : IDynamicApiController, ITransient
         _httpContextAccessor.HttpContext.SignoutToSwagger();
     }
 
-    /// <summary>
-    /// 获取登录配置 🔖
-    /// </summary>
-    /// <returns></returns>
-    [AllowAnonymous]
-    [SuppressMonitor]
-    [DisplayName("获取登录配置")]
-    public async Task<dynamic> GetLoginConfig()
-    {
-        var secondVerEnabled = await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysSecondVer);
-        var captchaEnabled = await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysCaptcha);
-        return new { SecondVerEnabled = secondVerEnabled, CaptchaEnabled = captchaEnabled };
-    }
-
     /// <summary>
     /// 获取验证码 🔖
     /// </summary>

+ 10 - 0
Admin.NET/Admin.NET.Core/Service/Config/Dto/InfoInput.cs

@@ -55,4 +55,14 @@ public class InfoSaveInput
     /// ICP地址
     /// </summary>
     public string SysIcpUrl { get; set; }
+
+    /// <summary>
+    /// 登录二次验证
+    /// </summary>
+    public bool? SysSecondVer { get; set; }
+
+    /// <summary>
+    /// 图形验证码
+    /// </summary>
+    public bool? SysCaptcha { get; set; }
 }

+ 8 - 2
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -245,7 +245,9 @@ public class SysConfigService : IDynamicApiController, ITransient
         var sysCopyright = await GetConfigValue<string>(ConfigConst.SysWebCopyright);
         var sysIcp = await GetConfigValue<string>(ConfigConst.SysWebIcp);
         var sysIcpUrl = await GetConfigValue<string>(ConfigConst.SysWebIcpUrl);
-
+        var sysSecondVer = await GetConfigValue<bool>(ConfigConst.SysSecondVer);
+        var sysCaptcha = await GetConfigValue<bool>(ConfigConst.SysCaptcha);
+        
         return new
         {
             SysLogo = sysLogo,
@@ -255,7 +257,9 @@ public class SysConfigService : IDynamicApiController, ITransient
             SysWatermark = sysWatermark,
             SysCopyright = sysCopyright,
             SysIcp = sysIcp,
-            SysIcpUrl = sysIcpUrl
+            SysIcpUrl = sysIcpUrl,
+            SysSecondVer = sysSecondVer,
+            SysCaptcha = sysCaptcha
         };
     }
 
@@ -308,5 +312,7 @@ public class SysConfigService : IDynamicApiController, ITransient
         await UpdateConfigValue(ConfigConst.SysWebCopyright, input.SysCopyright);
         await UpdateConfigValue(ConfigConst.SysWebIcp, input.SysIcp);
         await UpdateConfigValue(ConfigConst.SysWebIcpUrl, input.SysIcpUrl);
+        await UpdateConfigValue(ConfigConst.SysSecondVer, (input.SysSecondVer??true).ToString());
+        await UpdateConfigValue(ConfigConst.SysCaptcha, (input.SysCaptcha??true).ToString());
     }
 }

+ 2 - 0
Web/src/App.vue

@@ -133,6 +133,8 @@ const loadSysInfo = () => {
 			themeConfig.value.watermarkText = data.sysWatermark;
 			// 版权说明
 			themeConfig.value.copyright = data.sysCopyright;
+			themeConfig.value.secondVer = data.sysSecondVer;
+			themeConfig.value.captcha = data.sysCaptcha;
 
 			// 更新 favicon
 			updateFavicon(data.sysLogo);

+ 0 - 75
Web/src/api-services/apis/sys-auth-api.ts

@@ -173,49 +173,6 @@ export const SysAuthApiAxiosParamCreator = function (configuration?: Configurati
                 options: localVarRequestOptions,
             };
         },
-        /**
-         * 
-         * @summary 获取登录配置 🔖
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        apiSysAuthLoginConfigGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysAuth/loginConfig`;
-            // use dummy base URL string because the URL constructor only accepts absolute URLs.
-            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication Bearer required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? await configuration.accessToken()
-                    : await configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            const query = new URLSearchParams(localVarUrlObj.search);
-            for (const key in localVarQueryParameter) {
-                query.set(key, localVarQueryParameter[key]);
-            }
-            for (const key in options.params) {
-                query.set(key, options.params[key]);
-            }
-            localVarUrlObj.search = (new URLSearchParams(query)).toString();
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
-                options: localVarRequestOptions,
-            };
-        },
         /**
          * 
          * @summary 手机号登录 🔖
@@ -556,19 +513,6 @@ export const SysAuthApiFp = function(configuration?: Configuration) {
                 return axios.request(axiosRequestArgs);
             };
         },
-        /**
-         * 
-         * @summary 获取登录配置 🔖
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysAuthLoginConfigGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
-            const localVarAxiosArgs = await SysAuthApiAxiosParamCreator(configuration).apiSysAuthLoginConfigGet(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
         /**
          * 
          * @summary 手机号登录 🔖
@@ -689,15 +633,6 @@ export const SysAuthApiFactory = function (configuration?: Configuration, basePa
         async apiSysAuthCaptchaGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
             return SysAuthApiFp(configuration).apiSysAuthCaptchaGet(options).then((request) => request(axios, basePath));
         },
-        /**
-         * 
-         * @summary 获取登录配置 🔖
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysAuthLoginConfigGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
-            return SysAuthApiFp(configuration).apiSysAuthLoginConfigGet(options).then((request) => request(axios, basePath));
-        },
         /**
          * 
          * @summary 手机号登录 🔖
@@ -798,16 +733,6 @@ export class SysAuthApi extends BaseAPI {
     public async apiSysAuthCaptchaGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
         return SysAuthApiFp(this.configuration).apiSysAuthCaptchaGet(options).then((request) => request(this.axios, this.basePath));
     }
-    /**
-     * 
-     * @summary 获取登录配置 🔖
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SysAuthApi
-     */
-    public async apiSysAuthLoginConfigGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
-        return SysAuthApiFp(this.configuration).apiSysAuthLoginConfigGet(options).then((request) => request(this.axios, this.basePath));
-    }
     /**
      * 
      * @summary 手机号登录 🔖

+ 16 - 0
Web/src/api-services/models/info-save-input.ts

@@ -91,4 +91,20 @@ export interface InfoSaveInput {
      * @memberof InfoSaveInput
      */
     sysIcpUrl?: string | null;
+    
+    /**
+     * 登录二次验证
+     *
+     * @type {string}
+     * @memberof InfoSaveInput
+     */
+    sysSecondVer?: string | null;
+    
+    /**
+     * 图形验证码
+     *
+     * @type {string}
+     * @memberof InfoSaveInput
+     */
+    sysCaptcha?: string | null;
 }

+ 2 - 0
Web/src/types/pinia.d.ts

@@ -93,6 +93,8 @@ declare interface ThemeConfigState {
 		globalViceTitle: string;
 		globalViceTitleMsg: string;
 		copyright: string;
+		secondVer: boolean;
+		captcha: boolean;
 		globalI18n: string;
 		globalComponentSize: string;
 		logoUrl: string; // 系统 logo 地址

+ 3 - 5
Web/src/views/login/component/account.vue

@@ -139,11 +139,9 @@ onMounted(async () => {
 	if (accessToken != null && accessToken != undefined) {
 		await saveTokenAndInitRoutes(accessToken);
 	}
-
-	// 获取登录配置
-	var res1 = await getAPI(SysAuthApi).apiSysAuthLoginConfigGet();
-	state.secondVerEnabled = res1.data.result.secondVerEnabled ?? true;
-	state.captchaEnabled = res1.data.result.captchaEnabled ?? true;
+	// 获取登录配置	
+	state.secondVerEnabled = themeConfig.value.secondVer ?? true;
+	state.captchaEnabled = themeConfig.value.captcha ?? true;
 
 	// 获取验证码
 	getCaptcha();

+ 21 - 2
Web/src/views/system/infoSetting/index.vue

@@ -37,6 +37,19 @@
 				<el-descriptions-item label="ICP地址">
 					<el-input v-model="state.formData.sysIcpUrl" />
 				</el-descriptions-item>
+				<el-descriptions-item label="登录二次验证">
+					<el-radio-group v-model="state.formData.sysSecondVer">
+								<el-radio :value="true">启用</el-radio>
+								<el-radio :value="false">禁用</el-radio>
+							</el-radio-group>
+				</el-descriptions-item>
+				<el-descriptions-item label="图形验证码">
+					<el-radio-group v-model="state.formData.sysCaptcha">
+								<el-radio :value="true">启用</el-radio>
+								<el-radio :value="false">禁用</el-radio>
+							</el-radio-group>
+				</el-descriptions-item>
+				
 				<template #extra>
 					<el-button type="primary" icon="ele-SuccessFilled" @click="onSave">保存</el-button>
 				</template>
@@ -68,6 +81,8 @@ const state = reactive({
 		sysCopyright: '',
 		sysIcp: '',
 		sysIcpUrl: '',
+		sysSecondVer:undefined,
+		sysCaptcha:undefined,
 	},
 });
 
@@ -100,7 +115,9 @@ const onSave = async () => {
 			sysWatermark: state.formData.sysWatermark,
 			sysCopyright: state.formData.sysCopyright,
 			sysIcp: state.formData.sysIcp,
-			sysIcpUrl: state.formData.sysIcpUrl,
+			sysIcpUrl: state.formData.sysIcpUrl,			
+			sysSecondVer: state.formData.sysSecondVer,
+			sysCaptcha: state.formData.sysCaptcha,
 		});
 		if (res.data!.type !== 'success') return;
 
@@ -133,7 +150,9 @@ const loadData = async () => {
 			sysWatermark: result.sysWatermark,
 			sysCopyright: result.sysCopyright,
 			sysIcp: result.sysIcp,
-			sysIcpUrl: result.sysIcpUrl,
+			sysIcpUrl: result.sysIcpUrl,			
+			sysSecondVer: result.sysSecondVer,
+			sysCaptcha: result.sysCaptcha,
 		};
 	} finally {
 		nextTick(() => {