Просмотр исходного кода

😎完善动态修改前端标题版权等、系统参数禁止删除

zuohuaijun 1 год назад
Родитель
Сommit
46c094e8b0

+ 16 - 12
Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs

@@ -19,17 +19,21 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData<SysConfig>
     {
         return new[]
         {
-            new SysConfig{ Id=1300000000101, Name="演示环境", Code="sys_demo", Value="False", SysFlag=YesNoEnum.Y, Remark="演示环境", OrderNo=1, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000102, Name="默认密码", Code="sys_password", Value="123456", SysFlag=YesNoEnum.Y, Remark="默认密码", OrderNo=2, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000103, Name="记录操作日志", Code="sys_oplog", Value="True", SysFlag=YesNoEnum.Y, Remark="是否记录操作日志", OrderNo=3, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000104, Name="开启单设备登录", Code="sys_single_login", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启单设备登录", OrderNo=4, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000105, Name="开启登录二次验证", Code="sys_second_ver", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启登录二次验证", OrderNo=5, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000106, Name="开启图形验证码", Code="sys_captcha", Value="True", SysFlag=YesNoEnum.Y, Remark="是否开启图形验证码", OrderNo=6, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000107, Name="开启水印", Code="sys_watermark", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启水印", OrderNo=7, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000108, Name="Token过期时间", Code="sys_token_expire", Value="10080", SysFlag=YesNoEnum.Y, Remark="Token过期时间(分钟)", OrderNo=8, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000109, Name="刷新Token过期时间", Code="sys_refresh_token_expire", Value="20160", SysFlag=YesNoEnum.Y, Remark="刷新Token过期时间(分钟)(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)", OrderNo=9, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000110, Name="发送异常日志邮件", Code="sys_error_mail", Value="True", SysFlag=YesNoEnum.Y, Remark="是否发送异常日志邮件", OrderNo=10, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000111, Name="开启域登录验证", Code="sys_domain_login", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启域登录验证", OrderNo=11, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-        };
+            new SysConfig{ Id=1300000000101, Name="演示环境", Code="sys_demo", Value="False", SysFlag=YesNoEnum.Y, Remark="演示环境", OrderNo=10, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000111, Name="默认密码", Code="sys_password", Value="123456", SysFlag=YesNoEnum.Y, Remark="默认密码", OrderNo=20, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000121, Name="记录操作日志", Code="sys_oplog", Value="True", SysFlag=YesNoEnum.Y, Remark="是否记录操作日志", OrderNo=30, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000131, Name="开启单设备登录", Code="sys_single_login", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启单设备登录", OrderNo=40, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000141, Name="开启登录二次验证", Code="sys_second_ver", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启登录二次验证", OrderNo=50, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000151, Name="开启图形验证码", Code="sys_captcha", Value="True", SysFlag=YesNoEnum.Y, Remark="是否开启图形验证码", OrderNo=60, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000161, Name="Token过期时间", Code="sys_token_expire", Value="10080", SysFlag=YesNoEnum.Y, Remark="Token过期时间(分钟)", OrderNo=70, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000171, Name="刷新Token过期时间", Code="sys_refresh_token_expire", Value="20160", SysFlag=YesNoEnum.Y, Remark="刷新Token过期时间(分钟)(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)", OrderNo=80, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000181, Name="发送异常日志邮件", Code="sys_error_mail", Value="True", SysFlag=YesNoEnum.Y, Remark="是否发送异常日志邮件", OrderNo=90, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000191, Name="开启域登录验证", Code="sys_domain_login", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启域登录验证", OrderNo=100, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000211, Name="系统主标题", Code="sys_web_title", Value="Admin.NET", SysFlag=YesNoEnum.Y, Remark="系统主标题", OrderNo=110, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000221, Name="系统副标题", Code="sys_web_viceTitle", Value="Admin.NET", SysFlag=YesNoEnum.Y, Remark="系统副标题", OrderNo=120, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000231, Name="系统描述", Code="sys_web_viceDesc", Value="站在巨人肩膀上的 .NET 通用权限开发框架", SysFlag=YesNoEnum.Y, Remark="系统描述", OrderNo=130, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000241, Name="水印内容", Code="sys_web_watermark", Value="Admin.NET", SysFlag=YesNoEnum.Y, Remark="水印内容", OrderNo=140, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000251, Name="版权说明", Code="sys_web_copyright", Value="Copyright © 2021-2014 Admin.NET All rights reserved.", SysFlag=YesNoEnum.Y, Remark="版权说明", OrderNo=150, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+    };
     }
 }

+ 1 - 12
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -196,17 +196,6 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("获取前端配置")]
     public async Task<dynamic> GetWebConfig()
     {
-        return await _sysConfigRep.AsQueryable().Where(u => u.GroupCode == "Web").Select(u => new { u.Code, u.Value }).ToListAsync();
-    }
-
-    /// <summary>
-    /// 获取后台配置
-    /// </summary>
-    /// <returns></returns>
-    [AllowAnonymous]
-    [DisplayName("获取后台配置")]
-    public async Task<dynamic> GetBackendConfig()
-    {
-        return await _sysConfigRep.AsQueryable().Where(u => u.GroupCode == "Backend").Select(u => new { u.Code, u.Value }).ToListAsync();
+        return await _sysConfigRep.AsQueryable().Where(u => u.GroupCode == "WebConfig").Select(u => new { u.Code, u.Value }).ToListAsync();
     }
 }

+ 2 - 2
Web/package.json

@@ -42,7 +42,7 @@
 		"push.js": "^1.0.12",
 		"qrcodejs2-fixes": "^0.0.2",
 		"qs": "^6.12.1",
-		"relation-graph": "^2.2.0",
+		"relation-graph": "^2.2.1",
 		"screenfull": "^6.0.2",
 		"sm-crypto-v2": "^1.9.0",
 		"sortablejs": "^1.15.2",
@@ -84,7 +84,7 @@
 		"typescript": "^5.4.5",
 		"vite": "^5.2.11",
 		"vite-plugin-cdn-import": "^1.0.1",
-		"vite-plugin-compression2": "^1.1.0",
+		"vite-plugin-compression2": "^1.1.1",
 		"vite-plugin-vue-setup-extend-plus": "^0.1.0",
 		"vue-eslint-parser": "^9.4.2"
 	},

+ 38 - 3
Web/src/App.vue

@@ -20,7 +20,9 @@ import other from '/@/utils/other';
 import { Local, Session } from '/@/utils/storage';
 import mittBus from '/@/utils/mitt';
 import setIntroduction from '/@/utils/setIconfont';
-// import checkUpdate from '/@/utils/auto-update';
+import Watermark from '/@/utils/watermark';
+import { SysConfigApi } from '/@/api-services';
+import { getAPI } from '/@/utils/axios-utils';
 
 // 引入组件
 const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue'));
@@ -82,8 +84,9 @@ onMounted(() => {
 		});
 		// 获取缓存中的布局配置
 		if (Local.get('themeConfig')) {
-			storesThemeConfig.setThemeConfig({ themeConfig: Local.get('themeConfig') });
-			storesThemeConfig.setWebConfig();
+			var themeConfig = Local.get('themeConfig');
+			setWebConfig(themeConfig);
+			storesThemeConfig.setThemeConfig({ themeConfig: themeConfig });
 			document.documentElement.style.cssText = Local.get('themeConfigStyle');
 		}
 		// 获取缓存中的全屏配置
@@ -106,6 +109,38 @@ watch(
 		deep: true,
 	}
 );
+
+// 获取系统配置
+const setWebConfig = async (themeConfig: any) => {
+	var res = await getAPI(SysConfigApi).apiSysConfigWebConfigGet();
+	var webConfig = res.data.result;
+	for (let index = 0; index < webConfig.length; index++) {
+		const element = webConfig[index];
+		if (element.code == 'sys_web_title') {
+			document.title = element.value;
+			themeConfig.globalTitle = element.value;
+		}
+		if (element.code == 'sys_web_watermark') {
+			if (element.value == 'False') {
+				themeConfig.isWatermark = false;
+				Watermark.del();
+			} else {
+				themeConfig.isWatermark = true;
+				themeConfig.watermarkText = element.value;
+				Watermark.set(element.value);
+			}
+		}
+		if (element.code == 'sys_web_viceTitle') {
+			themeConfig.globalViceTitle = element.value;
+		}
+		if (element.code == 'sys_web_viceDesc') {
+			themeConfig.globalViceTitleMsg = element.value;
+		}
+		if (element.code == 'sys_web_copyright') {
+			themeConfig.copyright = element.value;
+		}
+	}
+};
 </script>
 
 <style lang="scss">

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

@@ -80,49 +80,6 @@ export const SysConfigApiAxiosParamCreator = function (configuration?: Configura
                 options: localVarRequestOptions,
             };
         },
-        /**
-         * 
-         * @summary 获取后台配置
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        apiSysConfigBackendConfigGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysConfig/backendConfig`;
-            // 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 批量删除参数配置 🔖
@@ -519,19 +476,6 @@ export const SysConfigApiFp = function(configuration?: Configuration) {
                 return axios.request(axiosRequestArgs);
             };
         },
-        /**
-         * 
-         * @summary 获取后台配置
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysConfigBackendConfigGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
-            const localVarAxiosArgs = await SysConfigApiAxiosParamCreator(configuration).apiSysConfigBackendConfigGet(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
         /**
          * 
          * @summary 批量删除参数配置 🔖
@@ -660,15 +604,6 @@ export const SysConfigApiFactory = function (configuration?: Configuration, base
         async apiSysConfigAddPost(body?: AddConfigInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
             return SysConfigApiFp(configuration).apiSysConfigAddPost(body, options).then((request) => request(axios, basePath));
         },
-        /**
-         * 
-         * @summary 获取后台配置
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysConfigBackendConfigGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
-            return SysConfigApiFp(configuration).apiSysConfigBackendConfigGet(options).then((request) => request(axios, basePath));
-        },
         /**
          * 
          * @summary 批量删除参数配置 🔖
@@ -767,16 +702,6 @@ export class SysConfigApi extends BaseAPI {
     public async apiSysConfigAddPost(body?: AddConfigInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
         return SysConfigApiFp(this.configuration).apiSysConfigAddPost(body, options).then((request) => request(this.axios, this.basePath));
     }
-    /**
-     * 
-     * @summary 获取后台配置
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SysConfigApi
-     */
-    public async apiSysConfigBackendConfigGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
-        return SysConfigApiFp(this.configuration).apiSysConfigBackendConfigGet(options).then((request) => request(this.axios, this.basePath));
-    }
     /**
      * 
      * @summary 批量删除参数配置 🔖

+ 1 - 27
Web/src/stores/themeConfig.ts

@@ -1,6 +1,4 @@
 import { defineStore } from 'pinia';
-import { SysConfigApi } from '/@/api-services';
-import { getAPI } from '/@/utils/axios-utils';
 
 export const useThemeConfig = defineStore('themeConfig', {
 	state: (): ThemeConfigState => ({
@@ -12,7 +10,7 @@ export const useThemeConfig = defineStore('themeConfig', {
 			 * 全局主题
 			 */
 			// 默认 primary 主题颜色
-			primary: '#0F59A4', //胭脂红:#F03F24 //飞燕草蓝:#0F59A4 //薄荷绿:#207F4C
+			primary: '#F03F24', //胭脂红:#F03F24 //飞燕草蓝:#0F59A4 //薄荷绿:#207F4C
 			// 是否开启深色模式
 			isIsDark: false,
 
@@ -148,29 +146,5 @@ export const useThemeConfig = defineStore('themeConfig', {
 		setThemeConfig(data: ThemeConfigState) {
 			this.themeConfig = data.themeConfig;
 		},
-
-		async setWebConfig() {
-			var res = await getAPI(SysConfigApi).apiSysConfigWebConfigGet();
-			var webConfig = res.data.result;
-			for (let index = 0; index < webConfig.length; index++) {
-				const element = webConfig[index];
-				if (element.code == 'title') {
-					document.title = element.value;
-					this.themeConfig.globalTitle = element.value;
-				}
-				if (element.code == 'watermark_text') {
-					this.themeConfig.globalTitle = element.value;
-				}
-				if (element.code == 'vice_title') {
-					this.themeConfig.globalViceTitle = element.value;
-				}
-				if (element.code == 'vice_title_msg') {
-					this.themeConfig.globalViceTitleMsg = element.value;
-				}
-				if (element.code == 'web_copyright') {
-					this.themeConfig.copyright = 'Copyright © ' + element.value + ' ' + this.themeConfig.globalTitle + ' All rights reserved.';
-				}
-			}
-		},
 	},
 });

+ 1 - 17
Web/src/stores/userInfo.ts

@@ -1,7 +1,5 @@
 import { defineStore } from 'pinia';
-import { Local, Session } from '/@/utils/storage';
-import Watermark from '/@/utils/watermark';
-import { useThemeConfig } from '/@/stores/themeConfig';
+import { Session } from '/@/utils/storage';
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysAuthApi, SysConstApi, SysDictTypeApi } from '/@/api-services/api';
@@ -90,20 +88,6 @@ export const useUserInfo = defineStore('userInfo', {
 						// 增加了下面代码,引起当前会话的用户信息不会刷新,如:重新提交的头像不更新,需要新开一个页面才能正确显示
 						// Session.set('userInfo', userInfos);
 
-						// 水印配置
-						const configRes: any = await getAPI(SysAuthApi).apiSysAuthWatermarkConfigGet();
-						if (configRes.data.result == null) return;
-
-						const configData = configRes.data.result;
-						const storesThemeConfig = useThemeConfig();
-						storesThemeConfig.themeConfig.isWatermark = configData.watermarkEnabled;
-						storesThemeConfig.themeConfig.watermarkText = userInfos.realName;
-						if (storesThemeConfig.themeConfig.isWatermark) Watermark.set(storesThemeConfig.themeConfig.watermarkText);
-						else Watermark.del();
-
-						Local.remove('themeConfig');
-						Local.set('themeConfig', storesThemeConfig.themeConfig);
-
 						resolve(userInfos);
 					});
 			});

+ 1 - 1
Web/src/views/system/config/index.vue

@@ -19,7 +19,7 @@
 				</template>
 				<template #action="scope">
 					<el-button icon="ele-Edit" size="small" text type="primary" @click="openEditConfig(scope.row)" v-auth="'sysConfig:update'"> 编辑 </el-button>
-					<el-button icon="ele-Delete" size="small" text type="danger" @click="delConfig(scope.row)" v-auth="'sysConfig:delete'"> 删除 </el-button>
+					<el-button icon="ele-Delete" size="small" text type="danger" @click="delConfig(scope.row)" v-auth="'sysConfig:delete'" :disabled="scope.row.sysFlag === 1"> 删除 </el-button>
 				</template>
 			</Table>
 		</el-card>