Quellcode durchsuchen

😎代码整理及其他优化(建议赶紧升级到此版本)

zuohuaijun vor 1 Jahr
Ursprung
Commit
e61f733712

+ 1 - 1
.gitignore

@@ -18,7 +18,7 @@ bin-release/
 # information for Eclipse / Flash Builder.
 /Admin.NET/.vs
 /Admin.NET/packages
-/Admin.NET/Admin.NET.Web.Entry/wwwroot/Upload
+# /Admin.NET/Admin.NET.Web.Entry/wwwroot/Upload
 /Admin.NET/Admin.NET.Web.Entry/wwwroot/Avatar
 /Admin.NET/Admin.NET.Web.Entry/wwwroot/Signature
 /Admin.NET/Admin.NET.Web.Entry/wwwroot/CodeGen

+ 1 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -17,7 +17,7 @@
     <PackageReference Include="AngleSharp" Version="1.1.2" />
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
-    <PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.13.12" />
+    <PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.13.15" />
     <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.3.13" />
     <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.3.13" />
     <PackageReference Include="Furion.Pure" Version="4.9.3.13" />

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs

@@ -95,7 +95,7 @@ public partial class SysCodeGen : EntityBase
     /// 菜单图标
     /// </summary>
     [SugarColumn(ColumnDescription = "菜单图标", Length = 32)]
-    public string MenuIcon { get; set; } = "ele-Menu";
+    public string? MenuIcon { get; set; } = "ele-Menu";
 
     /// <summary>
     /// 菜单编码

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

@@ -34,7 +34,7 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData<SysConfig>
             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-present Admin.NET All rights reserved.", SysFlag=YesNoEnum.Y, Remark="版权说明", OrderNo=150, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000261, Name="系统图标", Code="sys_web_logo", Value="Upload/Logo/sys_logo.png", SysFlag=YesNoEnum.Y, Remark="系统图标", OrderNo=160, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000261, Name="系统图标", Code="sys_web_logo", Value="Upload/logo.png", SysFlag=YesNoEnum.Y, Remark="系统图标", OrderNo=160, GroupCode="WebConfig", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
     };
     }
 }

+ 1 - 1
Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs

@@ -163,7 +163,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000000424, Pid=1310000000421, Title="增加", Permission="sysOpenAccess:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000425, Pid=1310000000421, Title="删除", Permission="sysOpenAccess:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
-            new SysMenu{ Id=1310000000431, Pid=1310000000301, Title="系统信息配置", Path="/platform/infoSetting", Name="sysInfoSetting", Component="/system/infoSetting/index", Icon="ele-Postcard", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=220 },
+            new SysMenu{ Id=1310000000431, Pid=1310000000301, Title="系统配置", Path="/platform/infoSetting", Name="sysInfoSetting", Component="/system/infoSetting/index", Icon="ele-Setting", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=220 },
 
             new SysMenu{ Id=1310000000501, Pid=0, Title="日志管理", Path="/log", Name="log", Component="Layout", Icon="ele-DocumentCopy", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=12000 },
             new SysMenu{ Id=1310000000511, Pid=1310000000501, Title="访问日志", Path="/log/vislog", Name="sysVisLog", Component="/system/log/vislog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },

+ 43 - 41
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -31,7 +31,7 @@ public class SysConfigService : IDynamicApiController, ITransient
     public async Task<SqlSugarPagedList<SysConfig>> Page(PageConfigInput input)
     {
         return await _sysConfigRep.AsQueryable()
-            .Where(u => u.GroupCode != "WebConfig"/*不显示 WebConfig 分组*/)
+            .Where(u => u.GroupCode != "WebConfig") // 不显示 WebConfig 分组
             .WhereIF(!string.IsNullOrWhiteSpace(input.Name?.Trim()), u => u.Name.Contains(input.Name))
             .WhereIF(!string.IsNullOrWhiteSpace(input.Code?.Trim()), u => u.Code.Contains(input.Code))
             .WhereIF(!string.IsNullOrWhiteSpace(input.GroupCode?.Trim()), u => u.GroupCode.Equals(input.GroupCode))
@@ -180,17 +180,43 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("获取分组列表")]
     public async Task<List<string>> GetGroupList()
     {
-        return await _sysConfigRep.AsQueryable().Where(u => u.GroupCode != "WebConfig"/*不显示 WebConfig 分组*/).GroupBy(u => u.GroupCode).Select(u => u.GroupCode).ToListAsync();
+        return await _sysConfigRep.AsQueryable()
+            .Where(u => u.GroupCode != "WebConfig") // 不显示 WebConfig 分组
+            .GroupBy(u => u.GroupCode)
+            .Select(u => u.GroupCode).ToListAsync();
     }
 
+    /// <summary>
+    /// 获取 Token 过期时间
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public async Task<int> GetTokenExpire()
+    {
+        var tokenExpireStr = await GetConfigValue<string>(CommonConst.SysTokenExpire);
+        _ = int.TryParse(tokenExpireStr, out var tokenExpire);
+        return tokenExpire == 0 ? 20 : tokenExpire;
+    }
 
     /// <summary>
-    /// 获取系统信息
+    /// 获取 RefreshToken 过期时间
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public async Task<int> GetRefreshTokenExpire()
+    {
+        var refreshTokenExpireStr = await GetConfigValue<string>(CommonConst.SysRefreshTokenExpire);
+        _ = int.TryParse(refreshTokenExpireStr, out var refreshTokenExpire);
+        return refreshTokenExpire == 0 ? 40 : refreshTokenExpire;
+    }
+
+    /// <summary>
+    /// 获取系统信息 🔖
     /// </summary>
     /// <returns></returns>
     [SuppressMonitor]
-    [DisplayName("获取系统信息")]
     [AllowAnonymous]
+    [DisplayName("获取系统信息")]
     public async Task<dynamic> GetSysInfo()
     {
         var sysLogo = await GetConfigValue<string>("sys_web_logo");
@@ -211,16 +237,16 @@ public class SysConfigService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 保存系统信息
+    /// 保存系统信息 🔖
     /// </summary>
     /// <returns></returns>
     [DisplayName("保存系统信息")]
     public async Task SaveSysInfo(InfoSaveInput input)
     {
-        //不为空才保存 SysLogo
+        // logo 不为空才保存
         if (!string.IsNullOrEmpty(input.SysLogoBase64))
         {
-            //旧图标文件相对路径
+            // 旧图标文件相对路径
             var oldSysLogoRelativeFilePath = await GetConfigValue<string>("sys_web_logo") ?? "";
             var oldSysLogoAbsoluteFilePath = Path.Combine(App.WebHostEnvironment.WebRootPath, oldSysLogoRelativeFilePath);
 
@@ -229,26 +255,26 @@ public class SysConfigService : IDynamicApiController, ITransient
             var base64Data = groups["data"].Value;
             var binData = Convert.FromBase64String(base64Data);
 
-            //本地保存图标路径
-            var path = "Upload/Logo";
+            // 本地保存图标路径
+            var path = "Upload";
 
-            //文件路径
+            // 文件路径
             var relativeUrl = $"{path}/logo.{type}";
             var absoluteFilePath = Path.Combine(App.WebHostEnvironment.WebRootPath, path, $"logo.{type}");
 
-            //删除已存在文件
+            // 删除已存在文件
             if (File.Exists(oldSysLogoAbsoluteFilePath))
                 File.Delete(oldSysLogoAbsoluteFilePath);
 
-            //创建文件夹
-            var absoluteFileDir = Path.GetDirectoryName(absoluteFilePath);
-            if (!Directory.Exists(absoluteFileDir))
-                Directory.CreateDirectory(absoluteFileDir);
+            //// 创建文件夹
+            //var absoluteFileDir = Path.GetDirectoryName(absoluteFilePath);
+            //if (!Directory.Exists(absoluteFileDir))
+            //    Directory.CreateDirectory(absoluteFileDir);
 
-            //保存文件
+            // 保存文件
             await File.WriteAllBytesAsync(absoluteFilePath, binData);
 
-            //保存图标配置
+            // 保存图标配置
             await UpdateConfigValue("sys_web_logo", relativeUrl);
         }
 
@@ -258,28 +284,4 @@ public class SysConfigService : IDynamicApiController, ITransient
         await UpdateConfigValue("sys_web_watermark", input.SysWatermark);
         await UpdateConfigValue("sys_web_copyright", input.SysCopyright);
     }
-
-    /// <summary>
-    /// 获取 Token 过期时间
-    /// </summary>
-    /// <returns></returns>
-    [NonAction]
-    public async Task<int> GetTokenExpire()
-    {
-        var tokenExpireStr = await GetConfigValue<string>(CommonConst.SysTokenExpire);
-        _ = int.TryParse(tokenExpireStr, out var tokenExpire);
-        return tokenExpire == 0 ? 20 : tokenExpire;
-    }
-
-    /// <summary>
-    /// 获取 RefreshToken 过期时间
-    /// </summary>
-    /// <returns></returns>
-    [NonAction]
-    public async Task<int> GetRefreshTokenExpire()
-    {
-        var refreshTokenExpireStr = await GetConfigValue<string>(CommonConst.SysRefreshTokenExpire);
-        _ = int.TryParse(refreshTokenExpireStr, out var refreshTokenExpire);
-        return refreshTokenExpire == 0 ? 40 : refreshTokenExpire;
-    }
 }

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs

@@ -339,8 +339,8 @@ public class SysFileService : IDynamicApiController, ITransient
         {
             var contentTypeProvider = FS.GetFileExtensionContentTypeProvider();
             suffix = contentTypeProvider.Mappings.FirstOrDefault(u => u.Value == file.ContentType).Key;
-            // 修改 image/jpeg 类型返回的 .jpeg 后缀
-            if (suffix == ".jpeg")
+            // 修改 image/jpeg 类型返回的 .jpeg、jpe 后缀
+            if (suffix == ".jpeg" || suffix == ".jpe")
                 suffix = ".jpg";
         }
         if (string.IsNullOrWhiteSpace(suffix))

+ 5 - 6
Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -47,16 +47,15 @@
       <CopyToOutputDirectory>Never</CopyToOutputDirectory>
     </EmbeddedResource>
   </ItemGroup>
-
+	
   <ItemGroup>
-    <ProjectReference Include="..\Admin.NET.Web.Core\Admin.NET.Web.Core.csproj" />
+    <Content Update="wwwroot\Upload\logo.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
 
-
   <ItemGroup>
-    <Content Update="wwwroot\Upload\Logo\sys_logo.png">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
+    <ProjectReference Include="..\Admin.NET.Web.Core\Admin.NET.Web.Core.csproj" />
   </ItemGroup>
 
 </Project>

+ 0 - 0
Admin.NET/Admin.NET.Web.Entry/wwwroot/Upload/Logo/sys_logo.png → Admin.NET/Admin.NET.Web.Entry/wwwroot/Upload/logo.png


+ 19 - 16
Web/index.html

@@ -1,23 +1,26 @@
 <!doctype html>
 <html lang="zh-CN">
-	<head>
-		<meta charset="utf-8" />
-		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
-		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-		<link rel="stylesheet" type="text/css" media="print" href="/print-lock.css" />
-		<link rel="icon" id="favicon" href="data:;base64,=" />
-		<title>Admin.NET</title>
-	</head>
-	<body>
-		<div id="app"></div>
-		<script src="/config.js"></script>
-		<script type="module" src="/src/main.ts"></script>
-		<!-- <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=wsijQt8sLXrCW71YesmispvYHitfG9gv&s=1"></script> -->
-		<!-- <script src="https://res.zvo.cn/translate/translate.js"></script>
+
+<head>
+	<meta charset="utf-8" />
+	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+	<link rel="stylesheet" type="text/css" media="print" href="/print-lock.css" />
+	<link rel="icon" id="favicon" href="data:;base64,=" />
+	<title>Admin.NET</title>
+</head>
+
+<body>
+	<div id="app"></div>
+	<script src="/config.js"></script>
+	<script type="module" src="/src/main.ts"></script>
+	<!-- <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=wsijQt8sLXrCW71YesmispvYHitfG9gv&s=1"></script> -->
+	<!-- <script src="https://res.zvo.cn/translate/translate.js"></script>
 		<script>
 			translate.language.setLocal('english'); //设置本地语种。默认是 'chinese_simplified' 简体中文。 可填写如 'english'、'chinese_simplified' 等。
 			translate.listener.start(); // 开启html页面变化的监控,对变化部分会进行自动翻译。这里变化区域是指使用 translate.setDocuments(...) 设置的区域。
 			translate.execute(); // 执行翻译初始化操作,显示出select语言选择
 		</script> -->
-	</body>
-</html>
+</body>
+
+</html>

+ 3 - 3
Web/package.json

@@ -65,7 +65,7 @@
 	"devDependencies": {
 		"@plugin-web-update-notification/vite": "^1.7.1",
 		"@types/lodash-es": "^4.17.12",
-		"@types/node": "^20.12.12",
+		"@types/node": "^20.12.13",
 		"@types/nprogress": "^0.2.3",
 		"@types/sortablejs": "^1.15.8",
 		"@typescript-eslint/eslint-plugin": "^7.11.0",
@@ -79,10 +79,10 @@
 		"less": "^4.2.0",
 		"prettier": "^3.2.5",
 		"rollup-plugin-visualizer": "^5.12.0",
-		"sass": "^1.77.2",
+		"sass": "^1.77.3",
 		"terser": "^5.31.0",
 		"typescript": "^5.4.5",
-		"vite": "^5.2.11",
+		"vite": "^5.2.12",
 		"vite-plugin-cdn-import": "^1.0.1",
 		"vite-plugin-compression2": "^1.1.1",
 		"vite-plugin-vue-setup-extend-plus": "^0.1.0",

+ 5 - 6
Web/src/App.vue

@@ -46,6 +46,7 @@ const setLockScreen = computed(() => {
 	// https://gitee.com/lyt-top/vue-next-admin/issues/I6AF8P
 	return themeConfig.value.isLockScreen ? themeConfig.value.lockScreenTime > 1 : themeConfig.value.lockScreenTime >= 0;
 });
+
 // // 获取版本号
 // const getVersion = computed(() => {
 // 	let isVersion = false;
@@ -84,8 +85,7 @@ onMounted(() => {
 		});
 		// 获取缓存中的布局配置
 		if (Local.get('themeConfig')) {
-			var themeConfig = Local.get('themeConfig');
-			storesThemeConfig.setThemeConfig({ themeConfig: themeConfig });
+			storesThemeConfig.setThemeConfig({ themeConfig: Local.get('themeConfig') });
 			document.documentElement.style.cssText = Local.get('themeConfigStyle');
 		}
 		// 获取缓存中的全屏配置
@@ -109,7 +109,7 @@ watch(
 	}
 );
 
-/** 加载系统信息 */
+// 加载系统信息
 const loadSysInfo = () => {
 	getAPI(SysConfigApi)
 		.apiSysConfigSysInfoGet()
@@ -117,7 +117,6 @@ const loadSysInfo = () => {
 			if (res.data.type != 'success') return;
 
 			const data = res.data.result;
-
 			themeConfig.value.logoUrl = data.sysLogo;
 			themeConfig.value.globalTitle = data.sysTitle;
 			themeConfig.value.globalViceTitle = data.sysViceTitle;
@@ -135,7 +134,7 @@ const loadSysInfo = () => {
 			Local.set('themeConfig', storesThemeConfig.themeConfig);
 		})
 		.catch(() => {
-			// 置空 Logo 地址
+			// 置空 logo 地址
 			themeConfig.value.logoUrl = '';
 			// 保存配置
 			Local.remove('themeConfig');
@@ -144,7 +143,7 @@ const loadSysInfo = () => {
 		});
 };
 
-/** 更新 favicon */
+// 更新 favicon
 const updateFavicon = (url: string): void => {
 	const favicon = document.getElementById('favicon') as HTMLAnchorElement;
 	favicon!.href = url ? url : 'data:;base64,=';

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

@@ -365,7 +365,7 @@ export const SysConfigApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 保存系统信息
+         * @summary 保存系统信息 🔖
          * @param {InfoSaveInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -413,7 +413,7 @@ export const SysConfigApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 获取系统信息
+         * @summary 获取系统信息 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
@@ -609,7 +609,7 @@ export const SysConfigApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 保存系统信息
+         * @summary 保存系统信息 🔖
          * @param {InfoSaveInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -623,7 +623,7 @@ export const SysConfigApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 获取系统信息
+         * @summary 获取系统信息 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
@@ -727,7 +727,7 @@ export const SysConfigApiFactory = function (configuration?: Configuration, base
         },
         /**
          * 
-         * @summary 保存系统信息
+         * @summary 保存系统信息 🔖
          * @param {InfoSaveInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -737,7 +737,7 @@ export const SysConfigApiFactory = function (configuration?: Configuration, base
         },
         /**
          * 
-         * @summary 获取系统信息
+         * @summary 获取系统信息 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
@@ -841,7 +841,7 @@ export class SysConfigApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 保存系统信息
+     * @summary 保存系统信息 🔖
      * @param {InfoSaveInput} [body] 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
@@ -852,7 +852,7 @@ export class SysConfigApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 获取系统信息
+     * @summary 获取系统信息 🔖
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysConfigApi

+ 2 - 2
Web/src/api-services/models/file-output.ts

@@ -47,10 +47,10 @@ export interface FileOutput {
     /**
      * 大小
      *
-     * @type {string}
+     * @type {number}
      * @memberof FileOutput
      */
-    sizeKb?: string | null;
+    sizeKb?: number;
 
     /**
      * 后缀

+ 2 - 2
Web/src/api-services/models/sys-file.ts

@@ -127,10 +127,10 @@ export interface SysFile {
     /**
      * 文件大小KB
      *
-     * @type {string}
+     * @type {number}
      * @memberof SysFile
      */
-    sizeKb?: string | null;
+    sizeKb?: number;
 
     /**
      * 文件大小信息-计算后的

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

@@ -140,7 +140,7 @@ export const useThemeConfig = defineStore('themeConfig', {
 			globalI18n: 'zh-cn',
 			// 默认全局组件大小,可选值"<large|'default'|small>",默认 'large'
 			globalComponentSize: 'small',
-			// 系统 Logo 地址
+			// 系统 logo 地址
 			logoUrl: '',
 		},
 	}),

+ 1 - 1
Web/src/types/pinia.d.ts

@@ -92,6 +92,6 @@ declare interface ThemeConfigState {
 		copyright: string;
 		globalI18n: string;
 		globalComponentSize: string;
-		logoUrl: string; // 系统 Logo 地址
+		logoUrl: string; // 系统 logo 地址
 	};
 }

+ 1 - 1
Web/src/views/system/codeGen/component/editCodeGenDialog.vue

@@ -117,7 +117,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="支持打印" prop="printType">
-							<el-select v-model="state.ruleForm.printType" filterable class="w100" @change="printTypeChanged" >
+							<el-select v-model="state.ruleForm.printType" filterable class="w100" @change="printTypeChanged">
 								<el-option v-for="item in state.printTypeList" :key="item.value" :label="item.value" :value="item.code" />
 							</el-select>
 						</el-form-item>

+ 15 - 3
Web/src/views/system/infoSetting/index.vue

@@ -2,7 +2,15 @@
 	<div>
 		<el-card shadow="hover" v-loading="state.isLoading">
 			<el-descriptions title="系统信息配置" :column="2" :border="true">
+				<template #title>
+					<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Setting /> </el-icon> 系统信息配置
+				</template>
 				<el-descriptions-item label="系统图标" :span="2">
+					<!-- <template #label>
+						<div class="cell-item">
+							<el-icon><ele-PictureRounded /></el-icon> 系统图标
+						</div>
+					</template> -->
 					<el-upload class="avatar-uploader" :showFileList="false" :autoUpload="false" accept=".jpg,.png,.svg" action="" :limit="1" :onChange="handleUploadChange">
 						<img v-if="state.formData.sysLogo" :src="state.formData.sysLogo" class="avatar" />
 						<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus" :size="28" />
@@ -24,12 +32,13 @@
 					<el-input v-model="state.formData.sysCopyright" />
 				</el-descriptions-item>
 				<template #extra>
-					<el-button type="primary" @click="onSave">保存</el-button>
+					<el-button type="primary" icon="ele-SuccessFilled" @click="onSave">保存</el-button>
 				</template>
 			</el-descriptions>
 		</el-card>
 	</div>
 </template>
+
 <script setup lang="ts" name="sysInfoSetting">
 import { nextTick, reactive } from 'vue';
 import { getAPI } from '/@/utils/axios-utils';
@@ -58,7 +67,7 @@ const handleUploadChange = (file: any) => {
 	state.formData.sysLogo = URL.createObjectURL(state.file.raw);
 };
 
-/** 保存 */
+// 保存
 const onSave = async () => {
 	// 如果有选择图标,则转换为 base64
 	let sysLogoBase64 = '';
@@ -89,7 +98,7 @@ const onSave = async () => {
 	}
 };
 
-/** 加载数据 */
+// 加载数据
 const loadData = async () => {
 	try {
 		state.isLoading = true;
@@ -106,6 +115,8 @@ const loadData = async () => {
 			sysWatermark: result.sysWatermark,
 			sysCopyright: result.sysCopyright,
 		};
+
+		console.log(state.formData.sysLogo)
 	} finally {
 		nextTick(() => {
 			state.isLoading = false;
@@ -115,6 +126,7 @@ const loadData = async () => {
 
 loadData();
 </script>
+
 <style lang="scss" scoped>
 .avatar-uploader .avatar {
 	width: 100px;