ソースを参照

!1489 代码优化
Merge pull request !1489 from 喵你个汪/next

zuohuaijun 1 年間 前
コミット
f9997ae9d4
44 ファイル変更207 行追加514 行削除
  1. 10 10
      Admin.NET/Admin.NET.Core/SeedData/SysDictDataSeedData.cs
  2. 1 1
      Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenConfig.cs
  3. 1 1
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs
  4. 6 6
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs
  5. 1 1
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Dto.cs.vm
  6. 1 1
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Input.cs.vm
  7. 2 2
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Manage.js.vm
  8. 3 3
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Output.cs.vm
  9. 13 13
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Service.cs.vm
  10. 10 10
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/data.data.ts.vm
  11. 7 7
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/editDialog.vue.vm
  12. 11 11
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/index.vue.vm
  13. 1 1
      Web/src/components/table/dictLabel.vue
  14. 7 98
      Web/src/stores/userInfo.ts
  15. 0 1
      Web/src/types/pinia.d.ts
  16. 0 48
      Web/src/utils/dict-utils.ts
  17. 16 29
      Web/src/views/system/codeGen/component/editCodeGenDialog.vue
  18. 27 121
      Web/src/views/system/codeGen/component/genConfigDialog.vue
  19. 1 0
      Web/src/views/system/codeGen/index.vue
  20. 6 10
      Web/src/views/system/database/component/genEntity.vue
  21. 2 8
      Web/src/views/system/database/component/genSeedData.vue
  22. 1 1
      Web/src/views/system/dict/component/editDictData.vue
  23. 3 5
      Web/src/views/system/dict/index.vue
  24. 3 3
      Web/src/views/system/job/component/editJobDetail.vue
  25. 2 3
      Web/src/views/system/job/index.vue
  26. 2 2
      Web/src/views/system/ldap/index.vue
  27. 4 4
      Web/src/views/system/menu/component/editMenu.vue
  28. 6 8
      Web/src/views/system/menu/index.vue
  29. 3 2
      Web/src/views/system/notice/component/editNotice.vue
  30. 6 6
      Web/src/views/system/notice/index.vue
  31. 3 9
      Web/src/views/system/openAccess/component/generateSign.vue
  32. 5 8
      Web/src/views/system/org/component/editOrg.vue
  33. 12 15
      Web/src/views/system/org/index.vue
  34. 2 2
      Web/src/views/system/plugin/index.vue
  35. 2 2
      Web/src/views/system/pos/index.vue
  36. 3 4
      Web/src/views/system/print/component/editPrint.vue
  37. 2 2
      Web/src/views/system/print/index.vue
  38. 4 9
      Web/src/views/system/role/component/grantData.vue
  39. 3 8
      Web/src/views/system/role/index.vue
  40. 3 2
      Web/src/views/system/tenant/component/editTenant.vue
  41. 2 2
      Web/src/views/system/tenant/index.vue
  42. 6 25
      Web/src/views/system/user/component/editUser.vue
  43. 2 4
      Web/src/views/system/user/index.vue
  44. 2 6
      Web/src/views/system/weChatUser/index.vue

+ 10 - 10
Admin.NET/Admin.NET.Core/SeedData/SysDictDataSeedData.cs

@@ -20,16 +20,16 @@ public class SysDictDataSeedData : ISqlSugarEntitySeedData<SysDictData>
         return new[]
         {
             new SysDictData{ Id=1300000000101, DictTypeId=1300000000101, Value="输入框", Code="Input", OrderNo=100, Remark="输入框", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000102, DictTypeId=1300000000101, Value="外键", Code="fk", OrderNo=100, Remark="外键", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000103, DictTypeId=1300000000101, Value="时间选择", Code="DatePicker", OrderNo=100, Remark="时间选择", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000104, DictTypeId=1300000000101, Value="字典选择器", Code="Select", OrderNo=100, Remark="字典选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000105, DictTypeId=1300000000101, Value="数字输入框", Code="InputNumber", OrderNo=100, Remark="数字输入框", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000106, DictTypeId=1300000000101, Value="文本域", Code="InputTextArea", OrderNo=100, Remark="文本域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000107, DictTypeId=1300000000101, Value="上传", Code="Upload", OrderNo=100, Remark="上传", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000108, DictTypeId=1300000000101, Value="树选择", Code="ApiTreeSelect", OrderNo=100, Remark="树选择", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000109, DictTypeId=1300000000101, Value="开关", Code="Switch", OrderNo=100, Remark="开关", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000110, DictTypeId=1300000000101, Value="常量选择器", Code="ConstSelector", OrderNo=100, Remark="常量选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000111, DictTypeId=1300000000101, Value="枚举选择器", Code="EnumSelector", OrderNo=100, Remark="枚举选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000102, DictTypeId=1300000000101, Value="字典选择器", Code="DictSelector", OrderNo=100, Remark="字典选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000103, DictTypeId=1300000000101, Value="常量选择器", Code="ConstSelector", OrderNo=100, Remark="常量选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000104, DictTypeId=1300000000101, Value="枚举选择器", Code="EnumSelector", OrderNo=100, Remark="枚举选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000105, DictTypeId=1300000000101, Value="树选择器", Code="ApiTreeSelector", OrderNo=100, Remark="树选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000106, DictTypeId=1300000000101, Value="外键", Code="ForeignKey", OrderNo=100, Remark="外键", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000107, DictTypeId=1300000000101, Value="数字输入框", Code="InputNumber", OrderNo=100, Remark="数字输入框", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000108, DictTypeId=1300000000101, Value="时间选择", Code="DatePicker", OrderNo=100, Remark="时间选择", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000109, DictTypeId=1300000000101, Value="文本域", Code="InputTextArea", OrderNo=100, Remark="文本域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000110, DictTypeId=1300000000101, Value="上传", Code="Upload", OrderNo=100, Remark="上传", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000111, DictTypeId=1300000000101, Value="开关", Code="Switch", OrderNo=100, Remark="开关", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
 
             new SysDictData{ Id=1300000000201, DictTypeId=1300000000102, Value="等于", Code="==", OrderNo=1, Remark="等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysDictData{ Id=1300000000202, DictTypeId=1300000000102, Value="模糊", Code="like", OrderNo=1, Remark="模糊", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenConfig.cs

@@ -166,7 +166,7 @@ public class CodeGenConfig
         get
         {
             string str = "";
-            if (EffectType == "fk")
+            if (EffectType == "ForeignKey")
             {
                 str = LowerFkEntityName + "_FK_" + LowerFkColumnName;
             }

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs

@@ -134,7 +134,7 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
             {
                 codeGenConfig.QueryType = "==";
                 codeGenConfig.DictTypeCode = tableColumn.DictTypeCode;
-                codeGenConfig.EffectType = tableColumn.DictTypeCode.EndsWith("Enum") ? "EnumSelector" : "Select";
+                codeGenConfig.EffectType = tableColumn.DictTypeCode.EndsWith("Enum") ? "EnumSelector" : "DictSelector";
             }
 
             orderNo += 10; // 每个配置排序间隔10

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -346,7 +346,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
 
         var tableFieldList = await _codeGenConfigService.GetList(new CodeGenConfig() { CodeGenId = input.Id }); // 字段集合
         var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合
-        var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "fk" || u.EffectType == "ApiTreeSelect").ToList(); // 需要连表查询的字段
+        var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector").ToList(); // 需要连表查询的字段
         (string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList); // 获取连表的实体名和别名
 
         var data = new CustomViewEngine(_db)
@@ -414,7 +414,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     {
         var tableFieldList = await _codeGenConfigService.GetList(new CodeGenConfig() { CodeGenId = input.Id }); // 字段集合
         var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合
-        var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "fk" || u.EffectType == "ApiTreeSelect").ToList(); // 需要连表查询的字段
+        var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector").ToList(); // 需要连表查询的字段
         (string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList); // 获取连表的实体名和别名
 
         var data = new CustomViewEngine(_db)
@@ -468,7 +468,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     private static (string, string) GetJoinTableStr(List<CodeGenConfig> configs)
     {
         var uploads = configs.Where(u => u.EffectType == "Upload").ToList();
-        var fks = configs.Where(u => u.EffectType == "fk").ToList();
+        var fks = configs.Where(u => u.EffectType == "ForeignKey").ToList();
         string str = ""; // <Order, OrderItem, Custom>
         string lowerStr = ""; // (o, i, c)
         foreach (var item in uploads)
@@ -673,9 +673,9 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         menuOrder += 10;
 
         var menuList = new List<SysMenu> { menuTypePage, menuTypeDetail, menuTypeAdd, menuTypeStatus, menuTypeDelete, menuTypeBatchDelete, menuTypeUpdate, menuTypePrint, menuTypeImport, menuTypeExport };
-        // 加入fk、Upload、ApiTreeSelect 等接口的权限
+        // 加入ForeignKey、Upload、ApiTreeSelector 等接口的权限
         // 在生成表格时,有些字段只是查询时显示,不需要填写(WhetherAddUpdate),所以这些字段没必要生成相应接口
-        var fkTableList = tableFieldList.Where(u => u.EffectType == "fk" && (u.WhetherAddUpdate == "Y" || u.QueryWhether == "Y")).ToList();
+        var fkTableList = tableFieldList.Where(u => u.EffectType == "ForeignKey" && (u.WhetherAddUpdate == "Y" || u.QueryWhether == "Y")).ToList();
         foreach (var @column in fkTableList)
         {
             var menuType1 = new SysMenu
@@ -689,7 +689,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             menuOrder += 10;
             menuList.Add(menuType1);
         }
-        var treeSelectTableList = tableFieldList.Where(u => u.EffectType == "ApiTreeSelect").ToList();
+        var treeSelectTableList = tableFieldList.Where(u => u.EffectType == "ApiTreeSelector").ToList();
         foreach (var @column in treeSelectTableList)
         {
             var menuType1 = new SysMenu

+ 1 - 1
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Dto.cs.vm

@@ -12,7 +12,7 @@ namespace @(Model.NameSpace);
 public class @(Model.ClassName)Dto
 {
 @foreach (var column in Model.TableField){
-if(column.EffectType == "fk" && column.FkEntityName != "" && column.FkColumnName != ""){
+if(column.EffectType == "ForeignKey" && column.FkEntityName != "" && column.FkColumnName != ""){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Input.cs.vm

@@ -135,7 +135,7 @@ public class QueryById@(Model.ClassName)Input : Delete@(Model.ClassName)Input
 @:{
     foreach (var column in Model.TableField.Where(x => x.WhetherImport == "Y")){
     var prefix = column.WhetherRequired == "Y" || column.NetType.TrimEnd('?').EndsWith("Enum") ? "*" : "";
-    if(column.EffectType == "fk" || column.EffectType == "ApiTreeSelect") {
+    if(column.EffectType == "ForeignKey" || column.EffectType == "ApiTreeSelector") {
     @:/// <summary>
     @:/// @column.ColumnComment 关联值
     @:/// </summary>

+ 2 - 2
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Manage.js.vm

@@ -35,7 +35,7 @@ export const use@(Model.ClassName)Api = () => {
 		if (column.EffectType == "Upload") {
 		@:// 上传@(column.ColumnComment)
 		@:upload@(column.PropertyName): (params: any) => baseApi.uploadFile(params, baseApi.baseUrl + 'upload@(column.PropertyName)'),
-		} else if (column.EffectType == "fk" && (column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")) {
+		} else if (column.EffectType == "ForeignKey" && (column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")) {
 		var dropdownName = $"{column.FkEntityName}{Regex.Replace(column.PropertyName, "[iI]d$", "")}Dropdown";
 		@:// 获取@(column.ColumnComment)选择数据
 		@:get@(dropdownName): (all: Boolean = false) => baseApi.request({
@@ -43,7 +43,7 @@ export const use@(Model.ClassName)Api = () => {
 			@:params: { all },
 			@:method: 'get',
 		@:}),
-		} else if (column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("get@(column.FkEntityName)Tree")) {
+		} else if (column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("get@(column.FkEntityName)Tree")) {
 		definedObjects.Add("get@(column.FkEntityName)Tree", 1);
 		@:// 获取@(column.ColumnComment)选择数据
 		@:get@(column.FkEntityName)Tree: (all: Boolean = false) => baseApi.request({

+ 3 - 3
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Output.cs.vm

@@ -18,7 +18,7 @@ public class @(Model.ClassName)Output
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-if(column.EffectType == "fk")
+if(column.EffectType == "ForeignKey")
 {
     @:public @column.NetType @column.PropertyName { get; set; } 
     @:
@@ -29,7 +29,7 @@ if(column.EffectType == "fk")
 }else if(column.EffectType == "Upload"){
     @:public @column.NetType @column.PropertyName { get; set; }
     @:public SysFile @(column.PropertyName)Attachment { get; set; }
-}else if(column.EffectType == "ApiTreeSelect"){
+}else if(column.EffectType == "ApiTreeSelector"){
     @:public @column.NetType @column.PropertyName { get; set; } 
     @:
     @:/// <summary>
@@ -43,7 +43,7 @@ if(column.EffectType == "fk")
 }
 }
 @foreach (var column in Model.TableField){
-if (column.EffectType == "ApiTreeSelect"){
+if (column.EffectType == "ApiTreeSelector"){
 @:
 @:/// <summary>
 @:/// @(Model.BusName)树选择器输出参数

+ 13 - 13
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Service.cs.vm

@@ -14,7 +14,7 @@ using Microsoft.AspNetCore.Http;
 
     var injectServices = new List<string>();
     if (Model.TableField.Any(u => u.EffectType == "Upload")) injectServices.Add("SysFileService");
-    if (Model.TableField.Any(x => x.WhetherImport == "Y" && x.EffectType == "Select")) injectServices.Add("SysDictTypeService");
+    if (Model.TableField.Any(x => x.WhetherImport == "Y" && x.EffectType == "DictSelector")) injectServices.Add("SysDictTypeService");
 }
 namespace @(Model.NameSpace);
 
@@ -69,21 +69,21 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
           }
           // 联表
           if (Model.IsJoinTable) {
-            @foreach (var column in Model.TableField.Where(u => u.EffectType == "fk" || u.EffectType == "ApiTreeSelect")){
+            @foreach (var column in Model.TableField.Where(u => u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector")){
             var joinTableAlias = Regex.Replace(column.LowerPropertyName, "[iI]d$", "");
             joinTableName += ", " + joinTableAlias;
-            @:.LeftJoin<@column.FkEntityName>((@joinTableName) => u.@(column.PropertyName) == @joinTableAlias.@(column.EffectType == "fk" ? column.FkLinkColumnName : column.ValueColumn))
+            @:.LeftJoin<@column.FkEntityName>((@joinTableName) => u.@(column.PropertyName) == @joinTableAlias.@(column.EffectType == "ForeignKey" ? column.FkLinkColumnName : column.ValueColumn))
           }
             // 查询列表
             @:.Select((@joinTableName) => new @(Model.ClassName)Output
             @:{
             foreach (var column in Model.TableField) {
                 var joinTableAlias = Regex.Replace(column.LowerPropertyName, "[iI]d$", "");
-                if (column.EffectType == "fk") {
+                if (column.EffectType == "ForeignKey") {
                 var columnList = column.FkColumnName.Split(",").Select(n => $"{{{joinTableAlias}.{n}}}").ToList();
                 @:@(column.PropertyName) = u.@(column.PropertyName), 
                 @:@(column.PropertyName)FkColumn = $"@(string.Join("-", columnList))",
-                } else if (column.EffectType == "ApiTreeSelect") {
+                } else if (column.EffectType == "ApiTreeSelector") {
                 var columnList = column.DisplayColumn.Split(",").Select(n => $"{{{joinTableAlias}.{n}}}").ToList();
                 @:@(column.PropertyName) = u.@(column.PropertyName),  
                 @:@(column.PropertyName)Display = $"@(string.Join("-", columnList))",
@@ -201,7 +201,7 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
     {
         return await _@(Model.LowerClassName)Rep.AsQueryable().Select<@(Model.ClassName)Output>().ToListAsync();
     }
-@foreach (var column in Model.TableField.Where(u => u.EffectType == "fk" && (u.WhetherAddUpdate == "Y" || u.QueryWhether == "Y"))){
+@foreach (var column in Model.TableField.Where(u => u.EffectType == "ForeignKey" && (u.WhetherAddUpdate == "Y" || u.QueryWhether == "Y"))){
 @:
     var dropdownName = $"{column.FkEntityName}{Regex.Replace(column.PropertyName, "[iI]d$", "")}Dropdown";
     @:/// <summary>
@@ -225,7 +225,7 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
 }
 @{
 var definedObjects = new Dictionary<string, object>();
-@foreach (var column in Model.TableField.Where(u => u.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(u.FkEntityName)Tree"))){
+@foreach (var column in Model.TableField.Where(u => u.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("@(u.FkEntityName)Tree"))){
 @:
     definedObjects.Add("@(column.FkEntityName)Tree", 1);
     @:/// <summary>
@@ -269,12 +269,12 @@ var definedObjects = new Dictionary<string, object>();
     @:[ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
     @:public IActionResult DownloadTemplate()
     @:{
-        var fieldsList = importFields.Where(u => u.EffectType == "fk" || u.EffectType == "ApiTreeSelect").ToList();
+        var fieldsList = importFields.Where(u => u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector").ToList();
         if (fieldsList.Any()) {
         @:return ExcelHelper.ExportTemplate(new List<Export@(Model.ClassName)Output>(), "@(Model.BusName)导入模板", (_, info) =>
         @:{
             foreach (var column in fieldsList) {
-            var columnList = (column.EffectType == "fk" ? column.FkColumnName : column.DisplayColumn).Split(",").Select(n => $"{{u.{n}}}").ToList();
+            var columnList = (column.EffectType == "ForeignKey" ? column.FkColumnName : column.DisplayColumn).Split(",").Select(n => $"{{u.{n}}}").ToList();
             @:if (nameof(Export@(Model.ClassName)Output.@(column.PropertyName)Label) == info.Name) return _@(Model.LowerClassName)Rep.Context.Queryable<@(column.FkEntityName)>().Select(u => $"@(string.Join("-", columnList))").Distinct().ToList();
             }
             @:return null;
@@ -294,7 +294,7 @@ var definedObjects = new Dictionary<string, object>();
     @:{
         @:lock (this)
         @:{
-            var dictTableField = Model.TableField.Where(x => x.WhetherImport == "Y" && x.EffectType == "Select") ?? default;
+            var dictTableField = Model.TableField.Where(x => x.WhetherImport == "Y" && x.EffectType == "DictSelector") ?? default;
             foreach (var column in dictTableField){
             @:var @(column.LowerPropertyName)DictMap = _sysDictTypeService.GetDataList(new GetDataDictTypeInput { Code = "@(column.DictTypeCode)" }).Result.ToDictionary(x => x.Value, x => x.Code);
             }
@@ -303,12 +303,12 @@ var definedObjects = new Dictionary<string, object>();
             @:{
                 @:_@(Model.LowerClassName)Rep.Context.Utilities.PageEach(list, 2048, pageItems =>
                 @:{
-                    foreach (var column in importFields.Where(u => u.EffectType == "fk" || u.EffectType == "ApiTreeSelect")) {
+                    foreach (var column in importFields.Where(u => u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector")) {
                     @:// 链接 @(column.ColumnComment)
                     @:var @(column.LowerPropertyName)LabelList = pageItems.Where(x => x.@(column.PropertyName)Label != null).Select(x => x.@(column.PropertyName)Label).Distinct().ToList();
                     @:if (@(column.LowerPropertyName)LabelList.Any()) {
-                        var valueColumn = column.EffectType == "fk" ? column.FkLinkColumnName : column.ValueColumn;
-                        var columnList = (column.EffectType == "fk" ? column.FkColumnName : column.DisplayColumn).Split(",").Select(n => $"{{u.{n}}}").ToList();
+                        var valueColumn = column.EffectType == "ForeignKey" ? column.FkLinkColumnName : column.ValueColumn;
+                        var columnList = (column.EffectType == "ForeignKey" ? column.FkColumnName : column.DisplayColumn).Split(",").Select(n => $"{{u.{n}}}").ToList();
                         @:var @(column.LowerPropertyName)LinkMap = _@(Model.LowerClassName)Rep.Context.Queryable<@(column.FkEntityName)>().Where(u => @(column.LowerPropertyName)LabelList.Contains($"@(string.Join("-", columnList))")).ToList().ToDictionary(u => $"@(string.Join("-", columnList))", u => u.@(valueColumn));
                         @:pageItems.ForEach(e => e.@(column.PropertyName) = @(column.LowerPropertyName)LinkMap?.GetValueOrDefault(e.@(column.PropertyName)Label, default));
                     @:}

+ 10 - 10
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/data.data.ts.vm

@@ -3,11 +3,11 @@ import { BasicColumn, FormSchema } from '/@@/components/Table';
 @foreach (var column in Model.TableField){
 if(column.EffectType == "Upload"){
 @:import { uploadFile } from '/@@/api/sys/admin';
-}else if(column.EffectType == "fk"){
+}else if(column.EffectType == "ForeignKey"){
 @:import { get@(column.FkEntityName)Dropdown } from '/@@/api/main/@(Model.ClassName)';
-}else if(column.EffectType == "Select"){
+}else if(column.EffectType == "DictSelector"){
 @:import { getDataList } from '/@@/api/sys/admin';
-}else if(column.EffectType == "ApiTreeSelect"){
+}else if(column.EffectType == "ApiTreeSelector"){
 @:import { get@(column.FkEntityName)Tree } from '/@@/api/main/@(Model.ClassName)';
 }else if(column.EffectType == "ConstSelector"){
 @:import { codeToName, getSelector } from '/@@/utils/helper/constSelectorHelper';
@@ -24,7 +24,7 @@ export const columns: BasicColumn[] = [
     @:sorter: true,
 if(column.EffectType == "Upload"){
     @:slots: { customRender: '@(column.LowerPropertyName)' },
-}else if(column.EffectType == "fk"){
+}else if(column.EffectType == "ForeignKey"){
     @:customRender: ({ record }) => {
       @:return record.fk@(column.PropertyName).@(column.LowerFkColumnName);
     @:},
@@ -49,14 +49,14 @@ export const searchFormSchema: FormSchema[] = [
     @:field: '@column.LowerPropertyName',
     @:label: '@column.ColumnComment',
     @:colProps: { span: 8 },
-if(column.EffectType == "fk"){
+if(column.EffectType == "ForeignKey"){
     @:component: 'ApiSelect',
     @:componentProps: {
       @:api: get@(column.FkEntityName)Dropdown,
       @:labelField: 'label',
       @:valueField: 'value',
     @:},
-}else if(column.EffectType == "Select"){
+}else if(column.EffectType == "DictSelector"){
     @:component: 'ApiSelect',
     @:componentProps: {
       @:api: getDataList,
@@ -75,7 +75,7 @@ if(column.EffectType == "fk"){
         @:value: 'code',
       @:},
     @:},
-}else if(column.EffectType == "ApiTreeSelect"){
+}else if(column.EffectType == "ApiTreeSelector"){
     @:component: '@(column.EffectType)',
     @:componentProps: {
       @:api: get@(column.FkEntityName)Tree,
@@ -99,14 +99,14 @@ export const formSchema: FormSchema[] = [
   @:{
     @:label: '@column.ColumnComment',
     @:field: '@column.LowerPropertyName',
-if(column.EffectType == "fk"){
+if(column.EffectType == "ForeignKey"){
     @:component: 'ApiSelect',
     @:componentProps: {
       @:api: get@(column.FkEntityName)Dropdown,
       @:labelField: 'label',
       @:valueField: 'value',
     @:},
-}else if(column.EffectType == "Select"){
+}else if(column.EffectType == "DictSelector"){
     @:component: 'ApiSelect',
     @:componentProps: {
       @:api: getDataList,
@@ -125,7 +125,7 @@ if(column.EffectType == "fk"){
         @:value: 'code',
       @:},
     @:},
-}else if(column.EffectType == "ApiTreeSelect"){
+}else if(column.EffectType == "ApiTreeSelector"){
     @:component: '@(column.EffectType)',
     @:componentProps: {
       @:api: get@(column.FkEntityName)Tree,

+ 7 - 7
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/editDialog.vue.vm

@@ -24,7 +24,7 @@
 					</el-form-item>
 					}else{
 					if (column.WhetherAddUpdate == "Y"){
-					if(column.EffectType == "fk"){
+					if(column.EffectType == "ForeignKey"){
 					var dropdownName = $"{column.FkEntityName}{Regex.Replace(column.PropertyName, "[iI]d$", "")}Dropdown";
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
@@ -33,7 +33,7 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
-					}else if(column.EffectType == "ApiTreeSelect"){
+					}else if(column.EffectType == "ApiTreeSelector"){
 					displayColumnList = column.DisplayColumn.Split(",").Select(u => $"${{data.{LowerFirstLetter(u)}}}").ToList();
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
@@ -71,7 +71,7 @@
 							@:<el-input v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请输入@(column.ColumnComment)" type="textarea" maxlength="@(column.ColumnLength)" show-word-limit clearable />
 						</el-form-item>
 					</el-col>
-					}else if(column.EffectType == "Select" || column.EffectType == "EnumSelector"){
+					}else if(column.EffectType == "DictSelector" || column.EffectType == "EnumSelector"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" @(IsStatusEnum(column) ? $"v-if='!ruleForm.{pkFieldName}'" : "")>
 						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
 							if (IsStatusEnum(column)) {
@@ -147,7 +147,7 @@
 @if(Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
 	@:import { getConstType } from "/@@/utils/constHelper";
 } 
-@if(Model.TableField.Any(x=>x.EffectType == "Select") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
+@if(Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
 	@:import { getDictDataItem as di, getDictDataList as dl } from '/@@/utils/dict-utils';
 }
 @if(Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@@ -185,7 +185,7 @@
 	if(column.WhetherRequired == "Y"){
 		if(column.EffectType == "Input" || @column.EffectType == "InputNumber" || @column.EffectType == "InputTextArea"){
 		@:@column.LowerPropertyName: [{required: true, message: '请输入@(column.ColumnComment)!', trigger: 'blur',},],
-		}else if(column.EffectType == "DatePicker" || @column.EffectType == "Select" || @column.EffectType == "EnumSelector" || @column.EffectType == "ApiTreeSelect"){
+		}else if(column.EffectType == "DatePicker" || @column.EffectType == "DictSelector" || @column.EffectType == "EnumSelector" || @column.EffectType == "ApiTreeSelector"){
 		@:@column.LowerPropertyName: [{required: true, message: '请选择@(column.ColumnComment)!', trigger: 'change',},],
 		}
     }
@@ -241,7 +241,7 @@
 	};
 	
 	@foreach (var column in Model.TableField) {
-	if (column.EffectType == "fk" && column.WhetherAddUpdate == "Y") {
+	if (column.EffectType == "ForeignKey" && column.WhetherAddUpdate == "Y") {
 		var dropdownName = $"{column.FkEntityName}{Regex.Replace(column.PropertyName, "[iI]d$", "")}Dropdown";
 	@:const @LowerFirstLetter(dropdownName)List = ref<any>([]);
 	@:const get@(dropdownName)List = async () => {
@@ -250,7 +250,7 @@
 	@:};
 	@:get@(dropdownName)List();
 	@:
-	} else if (column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("define_get@(column.FkEntityName)TreeData")) {
+	} else if (column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("define_get@(column.FkEntityName)TreeData")) {
 		definedObjects.Add("define_get@(column.FkEntityName)TreeData", 1);
 	@:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref<any>([]);
 	@:const get@(column.FkEntityName)TreeData = async () => {

+ 11 - 11
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/index.vue.vm

@@ -43,19 +43,19 @@
             @:<el-form-item label="@column.ColumnComment">
               @:<el-input-number v-model="queryParams.@(column.LowerPropertyName)"  clearable placeholder="请输入@(column.ColumnComment)"/>
             @:</el-form-item>
-            }else if(column.EffectType == "fk"){
+            }else if(column.EffectType == "ForeignKey"){
             @:<el-form-item label="@column.ColumnComment">
               @:<el-select clearable filterable v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
                 @:<el-option v-for="(item,index) in @LowerFirstLetter(@column.FkEntityName)@(column.PropertyName)DropdownList" :key="index" :value="item.value" :label="item.label" />
               @:</el-select>
             @:</el-form-item>
-            }else if(column.EffectType == "Select" || column.EffectType == "EnumSelector"){
+            }else if(column.EffectType == "DictSelector" || column.EffectType == "EnumSelector"){
             @:<el-form-item label="@column.ColumnComment">
               @:<el-select clearable filterable v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
                 @:<el-option v-for="(item,index) in dl('@(column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
               @:</el-select>
             @:</el-form-item>
-            }else if(column.EffectType == "ApiTreeSelect"){
+            }else if(column.EffectType == "ApiTreeSelector"){
             @:<el-form-item label="@column.ColumnComment">
               @:<el-cascader
                   @::options="@LowerFirstLetter(@column.FkEntityName)TreeData"
@@ -120,7 +120,7 @@
         <el-table-column type="selection" width="40" align="center" v-auth="'@(Model.LowerClassName):batchDelete'" />
         <el-table-column type="index" label="序号" width="55" align="center"/>
         @foreach (var column in Model.TableField.Where(u => u.WhetherTable == "Y")){
-        if(column.EffectType == "Upload"||@column.EffectType == "fk"||@column.EffectType == "ApiTreeSelect"||@column.EffectType == "Switch"||@column.EffectType == "ConstSelector"){
+        if(column.EffectType == "Upload"||@column.EffectType == "ForeignKey" || @column.EffectType == "ApiTreeSelector" || @column.EffectType == "Switch" || @column.EffectType == "ConstSelector"){
         @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" @(column.WhetherSortable == "Y" ? "sortable='custom'" : "") show-overflow-tooltip="">
           @:<template #default="scope">
             if(column.EffectType == "Upload"){
@@ -134,9 +134,9 @@
             @::initial-index="0"
             @:fit="scale-down"
             @:preview-teleported=""/>
-            }else if(column.EffectType == "fk"){
+            }else if(column.EffectType == "ForeignKey"){
             @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)FkColumn}}</span>
-            }else if(column.EffectType == "ApiTreeSelect"){
+            }else if(column.EffectType == "ApiTreeSelector"){
             @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)Display}}</span>
             }else if(column.EffectType == "Switch"){
             @:<el-tag v-if="scope.row.@(column.LowerPropertyName)"> 是 </el-tag>
@@ -146,7 +146,7 @@
             }
           @:</template>
         @:</el-table-column>
-        } else if (column.EffectType == "Select" || column.EffectType == "EnumSelector") {
+        } else if (column.EffectType == "DictSelector" || column.EffectType == "EnumSelector") {
         isStatus = column.NetType == "StatusEnum" && column.PropertyName == "Status";
         @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" @(column.WhetherSortable == "Y" ? "sortable='custom'" : "") show-overflow-tooltip="" @(isStatus ? $"v-auth=\"'{@Model.LowerClassName}:setStatus'\"": "")>
           @:<template #default="scope">
@@ -220,7 +220,7 @@
   @if(Model.TableField.Any(x => x.EffectType == "ConstSelector")) {
   @:import { codeToName, getConstType } from '/@@/utils/constHelper';
   }
-  @if(Model.TableField.Any(x => x.EffectType == "Select" || x.EffectType == "EnumSelector")) {
+  @if(Model.TableField.Any(x => x.EffectType == "DictSelector" || x.EffectType == "EnumSelector")) {
   @:import { getDictDataList as dl } from '/@@/utils/dict-utils';
   }
   @if(Model.PrintType == "custom") {
@@ -229,7 +229,7 @@
   @:import { SysPrintApi } from '/@@/api-services/api';
   @:import { SysPrint } from '/@@/api-services/models';
   }
-  @if(Model.TableField.Any(x => x.EffectType == "Select" || x.EffectType == "EnumSelector")) {
+  @if(Model.TableField.Any(x => x.EffectType == "DictSelector" || x.EffectType == "EnumSelector")) {
   @:import DictLabel from "/@@/components/table/dictLabel.vue";
   }
   @if(hasImport) {
@@ -366,7 +366,7 @@
   };
 
 @foreach (var column in Model.TableField) {
-  if (column.EffectType == "fk") {
+  if (column.EffectType == "ForeignKey") {
     var dropdownName = $"{column.FkEntityName}{Regex.Replace(column.PropertyName, "[iI]d$", "")}Dropdown";
   @:const @LowerFirstLetter(dropdownName)List = ref<any>([]);
   @:const get@(dropdownName)List = async () => {
@@ -375,7 +375,7 @@
   @:};
   @:get@(dropdownName)List();
   @:
-  } else if (column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("define_get@(column.FkEntityName)TreeData")) {
+  } else if (column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("define_get@(column.FkEntityName)TreeData")) {
   definedObjects.Add("define_get@(column.FkEntityName)TreeData", 1);
   @:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref<any>([]);
   @:const get@(column.FkEntityName)TreeData = async () => {

+ 1 - 1
Web/src/components/table/dictLabel.vue

@@ -29,7 +29,7 @@ const state = reactive({
 });
 
 onMounted(() => {
-	const dictList = useUserInfo().getDictDatasByCode(props.code as string);
+	const dictList = useUserInfo().getDictDataByCode(props.code as string);
 	const dict = dictList?.find((x: any) => x[props.propValue] == props.value + "") ?? {};
 	if (dict) {
 		state.label = dict[props.propLabel] || props.defaultValue;

+ 7 - 98
Web/src/stores/userInfo.ts

@@ -15,7 +15,6 @@ export const useUserInfo = defineStore('userInfo', {
 		userInfos: {} as any,
 		constList: [] as any,
 		dictList: {} as any,
-		dictListInt: {} as any,
 	}),
 	getters: {
 		// // 获取系统常量列表
@@ -28,36 +27,19 @@ export const useUserInfo = defineStore('userInfo', {
 	actions: {
 		// 存储用户信息到浏览器缓存
 		async setUserInfos() {
-			if (Session.get('userInfo')) {
-				this.userInfos = Session.get('userInfo');
-			} else {
-				const userInfos = <UserInfos>await this.getApiUserInfo();
-				this.userInfos = userInfos;
-			}
+			this.userInfos = Session.get('userInfo') ?? <UserInfos>await this.getApiUserInfo();
 		},
 
 		// 存储常量信息到浏览器缓存
 		async setConstList() {
-			if (Session.get('constList')) {
-				this.constList = Session.get('constList');
-			} else {
-				const constList = <any[]>await this.getSysConstList();
-				Session.set('constList', constList);
-				this.constList = constList;
-			}
+			this.constList = Session.get('constList') ?? <any[]>await this.getSysConstList();
+			if (!Session.get('constList')) Session.set('constList', this.constList);
 		},
 
 		// 存储字典信息到浏览器缓存
 		async setDictList() {
-			var res = await getAPI(SysDictTypeApi).apiSysDictTypeAllDictListGet();
-			this.dictList = res.data.result;
-			// if (Session.get('dictList')) {
-			// 	this.dictList = Session.get('dictList');
-			// } else {
-			//	const dictList = <any[]>await this.getAllDictList();
-			//	Session.set('dictList', dictList);
-			//	this.dictList = dictList;
-			// }
+			this.dictList = await getAPI(SysDictTypeApi).apiSysDictTypeAllDictListGet().then(res => res.data.result ?? {});
+			for (const key in this.dictList) if (key.endsWith("Enum")) this.dictList[key].forEach(e => e.code = Number(e.code));
 		},
 
 		// 获取当前用户信息
@@ -115,82 +97,9 @@ export const useUserInfo = defineStore('userInfo', {
 			});
 		},
 
-		// 获取字典集合
-		getAllDictList() {
-			return new Promise((resolve) => {
-				if (this.dictList) {
-					resolve(this.dictList);
-				} else {
-					getAPI(SysDictTypeApi)
-						.apiSysDictTypeAllDictListGet()
-						.then((res: any) => {
-							resolve(res.data.result ?? []);
-						});
-				}
-			});
-		},
-
-		// 根据字典类型和代码取字典项
-		getDictItemByCode(typePCode: string, val: string) {
-			if (val != undefined && val !== '') {
-				const _val = val.toString();
-				const ds = this.getDictDatasByCode(typePCode);
-				for (const element of ds) {
-					if (element.code === _val) {
-						return element;
-					}
-				}
-			}
-			return {};
-		},
-
-		// 根据字典类型和值取描述
-		getDictLabelByVal(typePCode: string, val: string) {
-			if (val != undefined && val !== '') {
-				const _val = val.toString();
-				const ds = this.getDictDatasByCode(typePCode);
-				for (const element of ds) {
-					if (element.value === _val) {
-						return element;
-					}
-				}
-			}
-			return {};
-		},
-
-		// 根据字典类型和描述取值
-		getDictValByLabel(typePCode: string, label: string) {
-			if (!label) return '';
-			const ds = this.getDictDatasByCode(typePCode);
-			for (const element of ds) {
-				if (element.name === label) {
-					return element;
-				}
-			}
-			return ''; // 明确返回空字符串
-		},
-
 		// 根据字典类型获取字典数据
-		getDictDatasByCode(dictTypeCode: string) {
+		getDictDataByCode(dictTypeCode: string) {
 			return this.dictList[dictTypeCode] || [];
-		},
-
-		// 根据字典类型获取字典数据(值转为数字类型)
-		getDictIntDatasByCode(dictTypeCode: string) {
-			let ds = this.dictListInt[dictTypeCode];
-			if (ds) {
-				return ds;
-			}
-
-			const dictList = this.dictList[dictTypeCode];
-			if (dictList) {
-				ds = dictList.map((element: { code: any }) => {
-					return { ...element, code: Number(element.code) };
-				});
-				this.dictListInt[dictTypeCode] = ds;
-			}
-
-			return ds;
-		},
+		}
 	},
 });

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

@@ -15,7 +15,6 @@ declare interface UserInfosState {
 	userInfos: UserInfos;
 	constList: T[];
 	dictList: T;
-	dictListInt: T;
 }
 
 // 路由缓存列表

+ 0 - 48
Web/src/utils/dict-utils.ts

@@ -1,48 +0,0 @@
-import { useUserInfo } from '/@/stores/userInfo';
-
-const stores = useUserInfo();
-
-// 用于在 Table 中把字段的代码转换为名称,示例如下:
-/*
-import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
-
-<el-table-column prop="字段名" label="描述" width="140">
-    <template #default="scope">
-    <el-tag :type="di('字典名代码', scope.row.credentialsType)?.tagType"> [{{di("字典名代码", scope.row.credentialsType)?.code}}]{{di("字典名代码", scope.row.credentialsType)?.value}} </el-tag>
-    </template>
-</el-table-column>
-*/
-
-export function getDictDataItem(dicName: string, dicItemCode: any): any {
-	return stores.getDictItemByCode(dicName, dicItemCode);
-}
-
-export function getDictValByLabel(dicName: string, dicItemCode: any): any {
-	return stores.getDictValByLabel(dicName, dicItemCode);
-}
-
-export function getDictLabelByVal(dicName: string, dicItemCode: any): any {
-	return stores.getDictLabelByVal(dicName, dicItemCode);
-}
-
-// select 控件使用,用于获取字典列表,示例如下:
-/*
-import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
-
-<el-select clearable v-model="ruleForm.字段" placeholder="请选择证件提示">
-    <el-option v-for="(item,index) in  dl('字段名名码')"  :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
-</el-select>
-*/
-
-export function getDictType(dicName: string): any {
-	return stores.dictList[dicName];
-}
-
-export function getDictDataList(dicName: string): any {
-	return stores.getDictDatasByCode(dicName);
-}
-
-// 获取数字类型的
-export function getDictDataListInt(dicName: string): any {
-	return stores.getDictIntDatasByCode(dicName);
-}

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

@@ -118,14 +118,14 @@
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="生成方式" prop="generateType">
 							<el-select v-model="state.ruleForm.generateType" filterable class="w100">
-								<el-option v-for="item in state.codeGenTypeList" :key="item.value" :label="item.value" :value="item.code" />
+								<el-option v-for="item in getDictDataByCode('code_gen_create_type')" :key="item.value" :label="item.value" :value="item.code" />
 							</el-select>
 						</el-form-item>
 					</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-option v-for="item in state.printTypeList" :key="item.value" :label="item.value" :value="item.code" />
+								<el-option v-for="item in getDictDataByCode('code_gen_print_type')" :key="item.value" :label="item.value" :value="item.code" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -182,10 +182,12 @@ import { computed, onMounted, reactive, ref } from 'vue';
 import IconSelector from '/@/components/iconSelector/index.vue';
 import other from '/@/utils/other';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
-import { SysCodeGenApi, SysDictDataApi, SysMenuApi, SysPrintApi } from '/@/api-services/api';
+import { SysCodeGenApi, SysMenuApi, SysPrintApi } from '/@/api-services/api';
 import { UpdateCodeGenInput, AddCodeGenInput, SysMenu, SysPrint } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo().getDictDataByCode;
 const props = defineProps({
 	title: String,
 	applicationNamespaces: Array<String>,
@@ -194,44 +196,26 @@ const emits = defineEmits(['handleQuery']);
 const ruleFormRef = ref();
 const state = reactive({
 	isShowDialog: false,
-	ruleForm: {} as UpdateCodeGenInput,
+	ruleForm: {} as any,
 	tableData: [] as any,
 	dbData: [] as any,
 	columnData: [] as any,
 	menuData: [] as Array<SysMenu>,
-	codeGenTypeList: [] as any,
-	printTypeList: [] as any,
 	printList: [] as Array<SysPrint>,
 });
 // 级联选择器配置选项
 const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'title' };
 
 onMounted(async () => {
-	var resDb = await getAPI(SysCodeGenApi).apiSysCodeGenDatabaseListGet();
-	state.dbData = resDb.data.result;
-
-	let resMenu = await getAPI(SysMenuApi).apiSysMenuListGet();
-	state.menuData = resMenu.data.result ?? [];
-
-	let resDicData = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_create_type');
-	state.codeGenTypeList = resDicData.data.result;
-
-	let printTypeResDicData = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_print_type');
-	state.printTypeList = printTypeResDicData.data.result;
-
-	let resPrintIdData = await getAPI(SysPrintApi).apiSysPrintPagePost();
-	state.printList = resPrintIdData.data.result?.items ?? [];
-
-	// 默认使用第一个库
-	//state.ruleForm.configId = state.dbData[0].configId;
-	//await dbChanged();
+  state.dbData = await getAPI(SysCodeGenApi).apiSysCodeGenDatabaseListGet().then(res => res.data.result ?? []);
+  state.printList = await getAPI(SysPrintApi).apiSysPrintPagePost().then(res => res.data.result?.items ?? []);
+  state.menuData = await getAPI(SysMenuApi).apiSysMenuListGet().then(res => res.data.result ?? []);
 });
 
 // db改变
 const dbChanged = async () => {
 	if (state.ruleForm.configId === '') return;
-	let res = await getAPI(SysCodeGenApi).apiSysCodeGenTableListConfigIdGet(state.ruleForm.configId as string);
-	state.tableData = res.data.result ?? [];
+  state.tableData = await getAPI(SysCodeGenApi).apiSysCodeGenTableListConfigIdGet(state.ruleForm.configId as string).then(res => res.data.result ?? []);
 
 	let db = state.dbData.filter((u: any) => u.configId == state.ruleForm.configId);
 	state.ruleForm.connectionString = db[0].connectionString;
@@ -242,6 +226,7 @@ const dbChanged = async () => {
 const tableChanged = (item: any) => {
 	state.ruleForm.tableName = item.entityName;
 	state.ruleForm.busName = item.tableComment;
+  state.ruleForm.tableUniqueList = [];
 	getColumnInfoList();
 };
 
@@ -254,8 +239,10 @@ const changeTableUniqueColumn = (value: any, index: number) => {
 
 const getColumnInfoList = async () => {
 	if (state.ruleForm.configId == '' || state.ruleForm.tableName == '') return;
-	var res = await getAPI(SysCodeGenApi).apiSysCodeGenColumnListByTableNameTableNameConfigIdGet(state.ruleForm.tableName, state.ruleForm.configId);
-	state.columnData = res.data.result;
+  state.columnData = await getAPI(SysCodeGenApi)
+      .apiSysCodeGenColumnListByTableNameTableNameConfigIdGet(state.ruleForm.tableName, state.ruleForm.configId)
+      .then(res => res.data.result)
+      ?? [];
 };
 
 // 菜单改变
@@ -278,9 +265,9 @@ const getGlobalComponentSize = computed(() => {
 const openDialog = (row: any) => {
 	state.ruleForm = JSON.parse(JSON.stringify(row));
 	state.ruleForm.tableUniqueList = JSON.parse(row.tableUniqueConfig ?? "[]");
+  dbChanged().then(() => getColumnInfoList());
 	state.isShowDialog = true;
 	ruleFormRef.value?.resetFields();
-	getColumnInfoList();
 };
 
 // 关闭弹窗

+ 27 - 121
Web/src/views/system/codeGen/component/genConfigDialog.vue

@@ -20,10 +20,10 @@
 					<template #default="scope">
 						<div class="effect-type-container">
 							<el-select v-model="scope.row.effectType" class="m-2" placeholder="Select" :disabled="judgeColumns(scope.row)" @change="effectTypeChange(scope.row, scope.$index)">
-								<el-option v-for="item in state.effectTypeList" :key="item.code" :label="item.value" :value="item.code" />
+								<el-option v-for="item in getDictDataByCode('code_gen_effect_type')" :key="item.code" :label="item.value" :value="item.code" />
 							</el-select>
 							<el-button
-								v-if="scope.row.effectType === 'ApiTreeSelect' || scope.row.effectType === 'fk'"
+								v-if="scope.row.effectType === 'ApiTreeSelector' || scope.row.effectType === 'ForeignKey'"
 								:icon="Edit"
 								type="dashed"
 								title="修改"
@@ -37,12 +37,9 @@
 					<template #default="scope">
 						<el-select v-model="scope.row.dictTypeCode" class="m-2" :disabled="effectTypeEnable(scope.row)">
 							<el-option
-							v-for="item in scope.row.effectType == 'Select' ? state.dictDataAll :
-								scope.row.effectType == 'EnumSelector' ? state.allEnumSelector :
-								scope.row.effectType == 'ConstSelector' ? allConstSelector :
-								state.dictTypeCodeList" 
+							v-for="item in state.selectDataMap[scope.row.effectType] ?? []"
 							:key="item.code"
-							:label="item.name" 
+							:label="item.name"
 							:value="item.code" />
 						</el-select>
 					</template>
@@ -81,7 +78,7 @@
 				<el-table-column prop="queryType" label="查询方式" min-width="120" align="center" show-overflow-tooltip>
 					<template #default="scope">
 						<el-select v-model="scope.row.queryType" class="m-2" placeholder="Select" :disabled="!scope.row.queryWhether">
-							<el-option v-for="item in state.queryTypeList" :key="item.code" :label="item.value" :value="item.code" />
+							<el-option v-for="item in getDictDataByCode('code_gen_query_type')" :key="item.code" :label="item.value" :value="item.code" />
 						</el-select>
 					</template>
 				</el-table-column>
@@ -105,53 +102,34 @@
 </template>
 
 <script lang="ts" setup name="sysCodeGenConfig">
-import { onMounted, onUnmounted, reactive, ref } from 'vue';
-import mittBus from '/@/utils/mitt';
+import { onMounted, reactive, ref } from 'vue';
 import { Edit } from '@element-plus/icons-vue';
 
 import fkDialog from '/@/views/system/codeGen/component/fkDialog.vue';
 import treeDialog from '/@/views/system/codeGen/component/treeDialog.vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
-import { SysCodeGenConfigApi, SysConstApi, SysDictDataApi, SysDictTypeApi, SysEnumApi } from '/@/api-services/api';
+import { SysCodeGenConfigApi, SysDictTypeApi } from '/@/api-services/api';
 import { CodeGenConfig } from '/@/api-services/models/code-gen-config';
 
+const getDictDataByCode = useUserInfo().getDictDataByCode;
 const emits = defineEmits(['handleQuery']);
 const fkDialogRef = ref();
 const treeDialogRef = ref();
 const state = reactive({
 	isShowDialog: false,
 	loading: false,
-	tableData: [] as CodeGenConfig[],
-	dbData: [] as any,
-	effectTypeList: [] as any,
-	dictTypeCodeList: [] as any,
-	dictDataAll: [] as any,
-	queryTypeList: [] as any,
-	allConstSelector: [] as any,
-	allEnumSelector: [] as any,
+  selectDataMap: {} as any,
+  tableData: [] as CodeGenConfig[]
 });
 
 onMounted(async () => {
-	var res = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_effect_type');
-	state.effectTypeList = res.data.result;
-
-	var res1 = await getAPI(SysDictTypeApi).apiSysDictTypeListGet();
-	state.dictTypeCodeList = res1.data.result.filter(x => !x.code.endsWith("Enum"));
-	state.dictDataAll = state.dictTypeCodeList;
-
-	var res2 = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_query_type');
-	state.queryTypeList = res2.data.result;
-
-	var res3 = await getAPI(SysConstApi).apiSysConstListGet();
-	state.allConstSelector = res3.data.result;
-
-	let resEnum = await getAPI(SysEnumApi).apiSysEnumEnumTypeListGet();
-	state.allEnumSelector = resEnum.data.result?.map((item) => ({ ...item, name: `${item.typeDescribe} [${item.typeName?.replace('Enum', '')}]`, code: item.typeName }));
-
-	mittBus.on('submitRefreshFk', (data: any) => {
-		state.tableData[data.index] = data;
-	});
+  state.selectDataMap.DictSelector = [];
+  state.selectDataMap.EnumSelector = [];
+  state.selectDataMap.ConstSelector = useUserInfo().constList;
+  const dictList = await getAPI(SysDictTypeApi).apiSysDictTypeListGet().then(res => res.data.result ?? []);
+  for (const item of dictList) state.selectDataMap[item.code?.endsWith('Enum') ? 'EnumSelector' : 'DictSelector'].push(item);
 });
 
 // 更新主键
@@ -159,41 +137,28 @@ const submitRefreshFk = (data: any) => {
 	state.tableData[data.index] = data;
 };
 
-onUnmounted(() => {
-	mittBus.off('submitRefresh', () => {});
-	mittBus.off('submitRefreshFk', () => {});
-});
 // 控件类型改变
 const effectTypeChange = (data: any, index: number) => {
 	let value = data.effectType;
-	if (value === 'fk') {
+	if (value === 'ForeignKey') {
 		openFkDialog(data, index);
-	} else if (value === 'ApiTreeSelect') {
+	} else if (value === 'ApiTreeSelector') {
 		openTreeDialog(data, index);
-	} else if (value === 'Select') {
-		data.dictTypeCode = '';
-		state.dictTypeCodeList = state.dictDataAll;
-	} else if (value === 'ConstSelector') {
-		data.dictTypeCode = '';
-		state.dictTypeCodeList = state.allConstSelector;
-	} else if (value == 'EnumSelector') {
+	} else if (['DictSelector', 'ConstSelector', 'EnumSelector'].some(key => value === key)) {
 		data.dictTypeCode = '';
-		state.dictTypeCodeList = state.allEnumSelector;
 	}
 };
 
 // 查询操作
 const handleQuery = async (row: any) => {
 	state.loading = true;
-	var res = await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigListGet(undefined, row.id);
-	var data = res.data.result ?? [];
-	let lstWhetherColumn = ['whetherTable', 'whetherAddUpdate', 'whetherImport', 'whetherRequired', 'whetherSortable']; //列表显示的checkbox
-	data.forEach((item: any) => {
+	const data = await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigListGet(undefined, row.id).then(res => res.data.result ?? []);
+  const lstWhetherColumn = ['whetherTable', 'whetherAddUpdate', 'whetherImport', 'whetherRequired', 'whetherSortable']; //列表显示的checkbox
+  data.forEach((item: any) => {
 		for (const key in item) {
 			if (item[key] === 'Y') {
 				item[key] = true;
-			}
-			if (item[key] === 'N' || (lstWhetherColumn.includes(key) && item[key] === null)) {
+			} else if (item[key] === 'N' || (lstWhetherColumn.includes(key) && item[key] === null)) {
 				item[key] = false;
 			}
 		}
@@ -208,8 +173,7 @@ function judgeColumns(data: any) {
 }
 
 function effectTypeEnable(data: any) {
-	var lst = ['Radio', 'Select', 'Checkbox', 'ConstSelector', 'EnumSelector'];
-	return lst.indexOf(data.effectType) === -1;
+  return !['Radio', 'Checkbox', 'DictSelector', 'ConstSelector', 'EnumSelector'].some((e: any) => e === data.effectType)
 }
 
 // 打开弹窗
@@ -244,15 +208,10 @@ const cancel = () => {
 const submit = async () => {
 	state.loading = true;
 	var lst = state.tableData;
-	lst.forEach((item: CodeGenConfig) => {
-		// 必填那一项转换
+  const whetherMap = { true: 'Y', false: 'N' } as any;
+	lst.forEach((item: any) => { // 转换是否字段值
 		for (var key in item) {
-			if (item[key] === true) {
-				item[key] = 'Y';
-			}
-			if (item[key] === false) {
-				item[key] = 'N';
-			}
+      item[key] = whetherMap[item[key]] || item[key];
 		}
 	});
 	await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigUpdatePost(lst);
@@ -260,59 +219,6 @@ const submit = async () => {
 	closeDialog();
 };
 
-const convertDbType = (dbType: number) => {
-	let result = '';
-	switch (dbType) {
-		case 0:
-			result = 'MySql';
-			break;
-		case 1:
-			result = 'SqlServer';
-			break;
-		case 2:
-			result = 'Sqlite';
-			break;
-		case 3:
-			result = 'Oracle';
-			break;
-		case 4:
-			result = 'PostgreSql';
-			break;
-		case 5:
-			result = 'Dm';
-			break;
-		case 6:
-			result = 'Kdbndp';
-			break;
-		case 7:
-			result = 'Oscar';
-			break;
-		case 8:
-			result = 'MySqlConnector';
-			break;
-		case 9:
-			result = 'Access';
-			break;
-		default:
-			result = 'Custom';
-			break;
-	}
-	return result;
-};
-
-const isOrNotSelect = () => {
-	return [
-		{
-			label: '是',
-			value: 1,
-		},
-		{
-			label: '否',
-			value: 0,
-		},
-	];
-};
-
 // 导出对象
 defineExpose({ openDialog });
 </script>

+ 1 - 0
Web/src/views/system/codeGen/index.vue

@@ -174,6 +174,7 @@ const openCopyDialog = (row: any) => {
 	copyRow.id = 0;
 	copyRow.busName = '';
 	copyRow.tableName = '';
+  copyRow.tableUniqueConfig = undefined;
 	EditCodeGenRef.value?.openDialog(copyRow);
 };
 

+ 6 - 10
Web/src/views/system/database/component/genEntity.vue

@@ -22,7 +22,7 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="基类" prop="baseClassName">
 							<el-select v-model="state.ruleForm.baseClassName" clearable class="w100">
-								<el-option v-for="item in state.codeGenBaseClassName" :key="item.code" :label="item.value" :value="item.code" />
+								<el-option v-for="item in getDictDataByCode('code_gen_base_class') ?? []" :key="item.code" :label="item.value" :value="item.code" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -47,28 +47,24 @@
 </template>
 
 <script lang="ts" setup name="sysGenEntity">
-import { onMounted, reactive, ref } from 'vue';
+import { reactive, ref } from 'vue';
 import { camelCase, upperFirst } from 'lodash-es';
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
-import { SysDatabaseApi, SysDictTypeApi } from '/@/api-services/api';
+import { SysDatabaseApi } from '/@/api-services/api';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const emits = defineEmits(['handleQueryColumn']);
 const ruleFormRef = ref();
 const state = reactive({
 	isShowDialog: false,
-	ruleForm: {} as any,
-	codeGenBaseClassName: [] as any,
+	ruleForm: {} as any
 });
 
 const props = defineProps({
 	applicationNamespaces: { type: Array },
 });
 
-onMounted(async () => {
-	let resDicData = await getAPI(SysDictTypeApi).apiSysDictTypeDataListGet('code_gen_base_class');
-	state.codeGenBaseClassName = resDicData.data.result;
-});
-
 // 打开弹窗
 const openDialog = (row: any) => {
 	state.ruleForm.configId = row.configId;

+ 2 - 8
Web/src/views/system/database/component/genSeedData.vue

@@ -45,10 +45,10 @@
 </template>
 
 <script lang="ts" setup name="sysGenEntity">
-import { onMounted, reactive, ref } from 'vue';
+import { reactive, ref } from 'vue';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysDatabaseApi, SysDictTypeApi } from '/@/api-services/api';
+import { SysDatabaseApi } from '/@/api-services/api';
 
 const emits = defineEmits(['handleQueryColumn']);
 
@@ -60,15 +60,9 @@ const ruleFormRef = ref();
 const state = reactive({
 	isShowDialog: false,
 	ruleForm: {} as any,
-	codeGenBaseClassName: [] as any,
 	rules: { position: [{ required: true, message: '请选择存放位置', trigger: 'blur' }] },
 });
 
-onMounted(async () => {
-	let resDicData = await getAPI(SysDictTypeApi).apiSysDictTypeDataListGet('code_gen_base_class');
-	state.codeGenBaseClassName = resDicData.data.result;
-});
-
 // 打开弹窗
 const openDialog = (row: any) => {
 	state.ruleForm.configId = row.configId;

+ 1 - 1
Web/src/views/system/dict/component/editDictData.vue

@@ -31,7 +31,7 @@
 								<el-radio value="success"><el-tag type="success">success</el-tag></el-radio>
 								<el-radio value="info"><el-tag type="info">info</el-tag></el-radio>
 								<el-radio value="warning"><el-tag type="warning">warning</el-tag></el-radio>
-								<el-radio value="danger"><el-tag type="danger" style="font:">danger</el-tag></el-radio>
+								<el-radio value="danger"><el-tag type="danger">danger</el-tag></el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>

+ 3 - 5
Web/src/views/system/dict/index.vue

@@ -30,8 +30,7 @@
 						<el-table-column prop="code" label="字典编码" min-width="140" header-align="center" show-overflow-tooltip />
 						<el-table-column prop="status" label="状态" width="70" align="center" show-overflow-tooltip>
 							<template #default="scope">
-								<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-								<el-tag type="danger" v-else>禁用</el-tag>
+                <DictLabel :value="scope.row.status" code="StatusEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column prop="orderNo" label="排序" width="60" align="center" show-overflow-tooltip />
@@ -108,8 +107,7 @@
 						</el-table-column>
 						<el-table-column prop="status" label="状态" width="70" align="center" show-overflow-tooltip>
 							<template #default="scope">
-								<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-								<el-tag type="danger" v-else>禁用</el-tag>
+                <DictLabel :value="scope.row.status" code="StatusEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column prop="orderNo" label="排序" width="60" align="center" show-overflow-tooltip />
@@ -160,10 +158,10 @@ import EditDictData from '/@/views/system/dict/component/editDictData.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { Session } from '/@/utils/storage';
 import { useUserInfo } from '/@/stores/userInfo';
 import { SysDictTypeApi, SysDictDataApi } from '/@/api-services/api';
 import { SysDictType, SysDictData, UpdateDictDataInput } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editDictTypeRef = ref<InstanceType<typeof EditDictType>>();
 const editDictDataRef = ref<InstanceType<typeof EditDictData>>();

+ 3 - 3
Web/src/views/system/job/component/editJobDetail.vue

@@ -24,9 +24,7 @@
 							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 								<el-form-item label="创建类型">
 									<el-radio-group v-model="state.ruleForm.createType" :disabled="isEdit">
-										<el-radio :value="JobCreateTypeEnum.NUMBER_0" v-show="isEdit">内置</el-radio>
-										<el-radio :value="JobCreateTypeEnum.NUMBER_1">脚本</el-radio>
-										<el-radio :value="JobCreateTypeEnum.NUMBER_2">Http请求</el-radio>
+										<el-radio :value="item.code" v-show="item.code == JobCreateTypeEnum.NUMBER_0 ? isEdit : true" v-for="(item, index) in getDictDataByCode('JobCreateTypeEnum') ?? []" :key="index">{{item.value}}</el-radio>
 									</el-radio-group>
 								</el-form-item>
 							</el-col>
@@ -106,10 +104,12 @@ import { reactive, ref, computed } from 'vue';
 import * as monaco from 'monaco-editor';
 import { JobScriptCode } from './JobScriptCode';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysJobApi } from '/@/api-services/api';
 import { JobCreateTypeEnum, UpdateJobDetailInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 // HttpMethod 定义,来源后端 HttpMethod 对象的序列化
 // 下面定义内容【不要】加空格,否则 getHttpJobMessage 中 JSON.stringify(httpJobMessageNet.HttpMethod) 后无法匹配
 const httpMethodDef = {

+ 2 - 3
Web/src/views/system/job/index.vue

@@ -142,9 +142,7 @@
 				</el-table-column>
 				<el-table-column prop="jobDetail.createType" label="作业创建类型" width="110" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="info" v-if="(scope.row as JobDetailOutput).jobDetail?.createType == JobCreateTypeEnum.NUMBER_0"> 内置 </el-tag>
-						<el-tag type="warning" v-if="(scope.row as JobDetailOutput).jobDetail?.createType == JobCreateTypeEnum.NUMBER_1"> 脚本 </el-tag>
-						<el-tag type="success" v-if="(scope.row as JobDetailOutput).jobDetail?.createType == JobCreateTypeEnum.NUMBER_2"> HTTP请求 </el-tag>
+            <DictLabel :value="(scope.row as JobDetailOutput).jobDetail?.createType ?? ''" code="JobCreateTypeEnum" />
 					</template>
 				</el-table-column>
 				<!-- <el-table-column prop="jobDetail.includeAnnotations" label="扫描特性触发器" align="center" show-overflow-tooltip>
@@ -281,6 +279,7 @@ import JobCluster from '/@/views/system/job/component/jobCluster.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysJobApi } from '/@/api-services/api';
 import { JobCreateTypeEnum, JobDetailOutput, SysJobTrigger } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const router = useRouter();
 const editJobDetailRef = ref<InstanceType<typeof EditJobDetail>>();

+ 2 - 2
Web/src/views/system/ldap/index.vue

@@ -32,8 +32,7 @@
 				<el-table-column prop="version" label="Ldap版本" show-overflow-tooltip="" />
 				<el-table-column prop="status" label="状态" width="80" align="center" show-overflow-tooltip="">
 					<template #default="scope">
-						<el-tag v-if="scope.row.status"> 是 </el-tag>
-						<el-tag type="danger" v-else> 否 </el-tag>
+            <DictLabel :value="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -76,6 +75,7 @@ import EditLdap from './component/editLdap.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysLdapApi } from '/@/api-services/api';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editLdapRef = ref<InstanceType<typeof EditLdap>>();
 const state = reactive({

+ 4 - 4
Web/src/views/system/menu/component/editMenu.vue

@@ -22,9 +22,7 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="菜单类型" prop="type" :rules="[{ required: true, message: '菜单类型不能为空', trigger: 'blur' }]">
 							<el-radio-group v-model="state.ruleForm.type">
-								<el-radio :value="1">目录</el-radio>
-								<el-radio :value="2">菜单</el-radio>
-								<el-radio :value="3">按钮</el-radio>
+								<el-radio :value="item.code" v-for="(item, index) in getDictDataByCode('MenuTypeEnum') ?? []" :key="index">{{item.value}}</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>
@@ -143,11 +141,13 @@
 import { computed, reactive, ref } from 'vue';
 import IconSelector from '/@/components/iconSelector/index.vue';
 
-import { getAPI } from '/@/utils/axios-utils';
 import other from '/@/utils/other';
+import {useUserInfo} from "/@/stores/userInfo";
+import { getAPI } from '/@/utils/axios-utils';
 import { SysMenuApi } from '/@/api-services/api';
 import { SysMenu, UpdateMenuInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const props = defineProps({
 	title: String,
 	menuData: Array<SysMenu>,

+ 6 - 8
Web/src/views/system/menu/index.vue

@@ -7,9 +7,7 @@
 				</el-form-item>
 				<el-form-item label="类型">
 					<el-select v-model="state.queryParams.type" placeholder="类型" clearable>
-						<el-option label="目录" :value="1" />
-						<el-option label="菜单" :value="2" />
-						<el-option label="按钮" :value="3" />
+            <el-option :value="item.value" :label="item.name" v-for="(item, index) in getDictDataByCode('MenuTypeEnum')" :key="index" />
 					</el-select>
 				</el-form-item>
 				<el-form-item>
@@ -34,9 +32,7 @@
 				</el-table-column>
 				<el-table-column label="类型" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="warning" v-if="scope.row.type === 1">目录</el-tag>
-						<el-tag v-else-if="scope.row.type === 2">菜单</el-tag>
-						<el-tag type="info" v-else>按钮</el-tag>
+            <DictLabel :value="scope.row.type" code="MenuTypeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="path" label="路由路径" header-align="center" show-overflow-tooltip />
@@ -45,8 +41,7 @@
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="80" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-						<el-tag type="danger" v-else>禁用</el-tag>
+            <DictLabel :value="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -77,7 +72,10 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysMenuApi } from '/@/api-services/api';
 import { SysMenu, UpdateMenuInput } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
+import {useUserInfo} from "/@/stores/userInfo";
 
+const getDictDataByCode = useUserInfo().getDictDataByCode;
 const editMenuRef = ref<InstanceType<typeof EditMenu>>();
 const state = reactive({
 	loading: false,

+ 3 - 2
Web/src/views/system/notice/component/editNotice.vue

@@ -17,8 +17,7 @@
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="类型" prop="type" :rules="[{ required: true, message: '类型不能为空', trigger: 'blur' }]">
 							<el-select v-model="state.ruleForm.type" placeholder="类型" filterable allow-create default-first-option style="width: 100%">
-								<el-option label="通知" :value="1" />
-								<el-option label="公告" :value="2" />
+                <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('NoticeTypeEnum') ?? []" :key="index" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -43,10 +42,12 @@
 import { reactive, ref } from 'vue';
 import Editor from '/@/components/editor/index.vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysNoticeApi } from '/@/api-services/api';
 import { UpdateNoticeInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const props = defineProps({
 	title: String,
 });

+ 6 - 6
Web/src/views/system/notice/index.vue

@@ -7,8 +7,7 @@
 				</el-form-item>
 				<el-form-item label="类型">
 					<el-select v-model="state.queryParams.type" placeholder="类型" clearable>
-						<el-option label="通知" :value="1" />
-						<el-option label="公告" :value="2" />
+            <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('NoticeTypeEnum') ?? []" :key="index" />
 					</el-select>
 				</el-form-item>
 				<el-form-item>
@@ -32,15 +31,13 @@
 				</el-table-column>
 				<el-table-column prop="type" label="类型" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag v-if="scope.row.type === 1"> 通知 </el-tag>
-						<el-tag type="warning" v-else> 公告 </el-tag>
+            <DictLabel :value="scope.row.type" code="NoticeTypeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="createTime" label="创建时间" align="center" show-overflow-tooltip />
 				<el-table-column prop="status" label="状态" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="info" v-if="scope.row.status === 1"> 已发布 </el-tag>
-						<el-tag type="warning" v-else> 未发布 </el-tag>
+            <DictLabel :value="scope.row.status" code="NoticeStatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="publicUserName" label="发布者" align="center" show-overflow-tooltip />
@@ -76,10 +73,13 @@ import { ElMessageBox, ElMessage } from 'element-plus';
 import commonFunction from '/@/utils/commonFunction';
 import EditNotice from '/@/views/system/notice/component/editNotice.vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysNoticeApi } from '/@/api-services/api';
 import { SysNotice } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const editNoticeRef = ref<InstanceType<typeof EditNotice>>();
 const { removeHtml } = commonFunction();
 const state = reactive({

+ 3 - 9
Web/src/views/system/openAccess/component/generateSign.vue

@@ -24,15 +24,7 @@
 							<el-input v-model="state.ruleForm.url" placeholder="接口请求地址" class="input-with-select" clearable>
 								<template #prepend>
 									<el-select v-model="state.ruleForm.method" placeholder="请求方法" style="width: 100px">
-										<el-option label="Get" :value="HttpMethodEnum.NUMBER_0" />
-										<el-option label="Post" :value="HttpMethodEnum.NUMBER_1" />
-										<el-option label="Put" :value="HttpMethodEnum.NUMBER_2" />
-										<el-option label="Delete" :value="HttpMethodEnum.NUMBER_3" />
-										<el-option label="Patch" :value="HttpMethodEnum.NUMBER_4" />
-										<el-option label="Head" :value="HttpMethodEnum.NUMBER_5" />
-										<el-option label="Options" :value="HttpMethodEnum.NUMBER_6" />
-										<el-option label="Trace" :value="HttpMethodEnum.NUMBER_7" />
-										<el-option label="Connect" :value="HttpMethodEnum.NUMBER_8" />
+                    <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('HttpMethodEnum') ?? []" :key="index" />
 									</el-select>
 								</template>
 							</el-input>
@@ -70,10 +62,12 @@
 <script lang="ts" setup name="sysOpenAccessEdit">
 import { reactive, ref, watch } from 'vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysOpenAccessApi } from '/@/api-services/api';
 import { GenerateSignatureInput, HttpMethodEnum } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const props = defineProps({
 	title: String,
 });

+ 5 - 8
Web/src/views/system/org/component/editOrg.vue

@@ -37,7 +37,7 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="机构类型">
 							<el-select v-model="state.ruleForm.type" filterable clearable class="w100">
-								<el-option v-for="item in state.orgTypeList" :key="item.value" :label="item.value" :value="item.code" />
+                <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('org_type') ?? []" :key="index" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -72,12 +72,14 @@
 </template>
 
 <script lang="ts" setup name="sysEditOrg">
-import { onMounted, reactive, ref } from 'vue';
+import { reactive, ref } from 'vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
-import { SysOrgApi, SysDictDataApi } from '/@/api-services/api';
+import { SysOrgApi } from '/@/api-services/api';
 import { SysOrg, UpdateOrgInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const props = defineProps({
 	title: String,
 	orgData: Array<SysOrg>,
@@ -92,11 +94,6 @@ const state = reactive({
 // 级联选择器配置选项
 const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'name' };
 
-onMounted(async () => {
-	let resDicData = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('org_type');
-	state.orgTypeList = resDicData.data.result;
-});
-
 // 打开弹窗
 const openDialog = (row: any) => {
 	state.ruleForm = JSON.parse(JSON.stringify(row));

+ 12 - 15
Web/src/views/system/org/index.vue

@@ -15,7 +15,7 @@
 						</el-form-item> -->
 						<el-form-item label="机构类型">
 							<el-select v-model="state.queryParams.type" filterable clearable>
-								<el-option v-for="item in state.orgTypeList" :key="item.value" :label="item.value" :value="item.code" />
+                <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('org_type') ?? []" :key="index" />
 							</el-select>
 						</el-form-item>
 						<el-form-item>
@@ -35,12 +35,15 @@
 						<el-table-column prop="name" label="机构名称" min-width="160" header-align="center" show-overflow-tooltip />
 						<el-table-column prop="code" label="机构编码" align="center" show-overflow-tooltip />
 						<el-table-column prop="level" label="级别" width="70" align="center" show-overflow-tooltip />
-						<el-table-column prop="type" label="机构类型" align="center" :formatter="dictFormatter" show-overflow-tooltip />
+						<el-table-column prop="type" label="机构类型" align="center" show-overflow-tooltip>
+              <template #default="scope">
+                <DictLabel :value="scope.row.type" code="org_type" />
+              </template>
+            </el-table-column>
 						<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 						<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 							<template #default="scope">
-								<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-								<el-tag type="danger" v-else>禁用</el-tag>
+                <DictLabel :value="scope.row.status" code="StatusEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -74,10 +77,13 @@ import OrgTree from '/@/views/system/org/component/orgTree.vue';
 import EditOrg from '/@/views/system/org/component/editOrg.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
-import { SysOrgApi, SysDictDataApi } from '/@/api-services/api';
+import { SysOrgApi } from '/@/api-services/api';
 import { SysOrg, UpdateOrgInput } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const editOrgRef = ref<InstanceType<typeof EditOrg>>();
 const orgTreeRef = ref<InstanceType<typeof OrgTree>>();
 const state = reactive({
@@ -90,15 +96,11 @@ const state = reactive({
 		code: undefined,
 		type: undefined,
 	},
-	editOrgTitle: '',
-	orgTypeList: [] as any,
+	editOrgTitle: ''
 });
 
 onMounted(async () => {
 	handleQuery();
-
-	let resDicData = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('org_type');
-	state.orgTypeList = resDicData.data.result;
 });
 
 // 查询操作
@@ -173,9 +175,4 @@ const nodeClick = async (node: any) => {
 	state.queryParams.type = undefined;
 	handleQuery();
 };
-
-// 字典转换
-const dictFormatter = (row: any, column: any, cellValue: any) => {
-	return state.orgTypeList.find((u: any) => u.code == cellValue)?.value;
-};
 </script>

+ 2 - 2
Web/src/views/system/plugin/index.vue

@@ -25,8 +25,7 @@
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-						<el-tag type="danger" v-else>禁用</el-tag>
+            <DictLabel :value="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -67,6 +66,7 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPluginApi } from '/@/api-services/api';
 import { SysPlugin } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editPluginRef = ref<InstanceType<typeof EditPlugin>>();
 const state = reactive({

+ 2 - 2
Web/src/views/system/pos/index.vue

@@ -28,8 +28,7 @@
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-						<el-tag type="danger" v-else>禁用</el-tag>
+            <DictLabel :value="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -60,6 +59,7 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPosApi } from '/@/api-services/api';
 import { SysPos, UpdatePosInput } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editPosRef = ref<InstanceType<typeof EditPos>>();
 const state = reactive({

+ 3 - 4
Web/src/views/system/print/component/editPrint.vue

@@ -51,8 +51,7 @@
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="打印类型">
 							<el-radio-group v-model="state.ruleForm.printType">
-								<el-radio :value="1">浏览器打印</el-radio>
-								<el-radio :value="2">客户端打印</el-radio>
+                <el-radio :value="item.code" v-for="(item, index) in getDictDataByCode('PrintTypeEnum') ?? []" :key="index">{{item.value}}</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>
@@ -87,14 +86,14 @@
 import { onMounted, reactive, ref, nextTick } from 'vue';
 import HiprintDesign from '/@/views/system/print/component/hiprint/index.vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPrintApi } from '/@/api-services/api';
 import { UpdatePrintInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const hiprintDesignRef = ref<InstanceType<typeof HiprintDesign>>();
-
 const mode = ref(0);
-
 const props = defineProps({
 	title: String,
 });

+ 2 - 2
Web/src/views/system/print/index.vue

@@ -25,8 +25,7 @@
 				<el-table-column prop="orderNo" label="排序" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-						<el-tag type="danger" v-else>禁用</el-tag>
+            <DictLabel :value="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -67,6 +66,7 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPrintApi } from '/@/api-services/api';
 import { SysPrint } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editPrintRef = ref<InstanceType<typeof EditPrint>>();
 const state = reactive({

+ 4 - 9
Web/src/views/system/role/component/grantData.vue

@@ -12,7 +12,7 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl1="24" class="mb20">
 						<el-form-item label="数据范围:">
 							<el-select v-model="state.ruleForm.dataScope" placeholder="数据范围" style="width: 100%">
-								<el-option v-for="d in state.dataScopeType" :key="d.value" :label="d.label" :value="d.value" />
+                <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('DataScopeEnum') ?? []" :key="index" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -37,22 +37,17 @@
 import { reactive, ref } from 'vue';
 import OrgTree from '/@/views/system/org/component/orgTree.vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysRoleApi } from '/@/api-services/api';
 import { RoleOrgInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const emits = defineEmits(['handleQuery']);
 const orgTreeRef = ref();
 const state = reactive({
 	isShowDialog: false,
-	ruleForm: {} as RoleOrgInput,
-	dataScopeType: [
-		{ value: 1, label: '全部数据' },
-		{ value: 2, label: '本部门及以下数据' },
-		{ value: 3, label: '本部门数据' },
-		{ value: 4, label: '仅本人数据' },
-		{ value: 5, label: '自定义数据' },
-	],
+	ruleForm: {} as RoleOrgInput
 });
 
 // 打开弹窗

+ 3 - 8
Web/src/views/system/role/index.vue

@@ -27,18 +27,13 @@
 				<el-table-column prop="code" label="角色编码" align="center" show-overflow-tooltip />
 				<el-table-column label="数据范围" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag effect="plain" v-if="scope.row.dataScope === 1">全部数据</el-tag>
-						<el-tag effect="plain" v-else-if="scope.row.dataScope === 2">本部门及以下数据</el-tag>
-						<el-tag effect="plain" v-else-if="scope.row.dataScope === 3">本部门数据</el-tag>
-						<el-tag effect="plain" v-else-if="scope.row.dataScope === 4">仅本人数据</el-tag>
-						<el-tag effect="plain" v-else-if="scope.row.dataScope === 5">自定义数据</el-tag>
+            <DictLabel :value="scope.row.dataScope" code="DataScopeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
-						<el-tag type="danger" v-else>禁用</el-tag>
+            <DictLabel :value="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -75,7 +70,6 @@
 <script lang="ts" setup name="sysRole">
 import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
-import { auth } from '/@/utils/authFunction';
 import EditRole from '/@/views/system/role/component/editRole.vue';
 import GrantData from '/@/views/system/role/component/grantData.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
@@ -83,6 +77,7 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysRoleApi } from '/@/api-services/api';
 import { SysRole } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editRoleRef = ref<InstanceType<typeof EditRole>>();
 const grantDataRef = ref<InstanceType<typeof GrantData>>();

+ 3 - 2
Web/src/views/system/tenant/component/editTenant.vue

@@ -12,8 +12,7 @@
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="租户类型" :rules="[{ required: true, message: '租户类型不能为空', trigger: 'blur' }]">
 							<el-radio-group v-model="state.ruleForm.tenantType" :disabled="state.ruleForm.id != undefined">
-								<el-radio :value="0">ID隔离</el-radio>
-								<el-radio :value="1">库隔离</el-radio>
+                <el-radio :value="item.code" v-for="(item, index) in getDictDataByCode('TenantTypeEnum') ?? []" :key="index">{{item.value}}</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>
@@ -119,10 +118,12 @@
 <script lang="ts" setup name="sysEditTenant">
 import { reactive, ref } from 'vue';
 
+import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysTenantApi } from '/@/api-services/api';
 import { UpdateTenantInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const props = defineProps({
 	title: String,
 });

+ 2 - 2
Web/src/views/system/tenant/index.vue

@@ -30,8 +30,7 @@
 				<!-- <el-table-column prop="email" label="邮箱" show-overflow-tooltip /> -->
 				<el-table-column prop="tenantType" label="租户类型" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag v-if="scope.row.tenantType === 0"> ID隔离 </el-tag>
-						<el-tag type="danger" v-else> 库隔离 </el-tag>
+            <DictLabel :value="scope.row.status" code="TenantTypeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
@@ -122,6 +121,7 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysTenantApi } from '/@/api-services/api';
 import { TenantOutput } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editTenantRef = ref<InstanceType<typeof EditTenant>>();
 const grantMenuRef = ref<InstanceType<typeof GrantMenu>>();

+ 6 - 25
Web/src/views/system/user/component/editUser.vue

@@ -41,9 +41,7 @@
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="账号类型" prop="accountType" :rules="[{ required: true, message: '账号类型不能为空', trigger: 'blur' }]">
 									<el-select v-model="state.ruleForm.accountType" placeholder="账号类型" collapse-tags collapse-tags-tooltip class="w100">
-										<el-option label="系统管理员" :value="888" :disabled="userInfos.accountType != 888 && userInfos.accountType != 999" />
-										<el-option label="普通账号" :value="777" />
-										<el-option label="会员" :value="666" />
+                    <el-option :disabled="item.name == 'SysAdmin' && ![888, 999].some(x => x == userInfos.accountType)" :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('AccountTypeEnum').filter(x => x.name != 'SuperAdmin') ?? []" :key="index" />
 									</el-select>
 								</el-form-item>
 							</el-col>
@@ -136,11 +134,7 @@
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="证件类型" prop="cardType">
 									<el-select v-model="state.ruleForm.cardType" placeholder="证件类型" class="w100">
-										<el-option label="身份证" :value="0" />
-										<el-option label="护照" :value="1" />
-										<el-option label="出生证" :value="2" />
-										<el-option label="港澳台通行证" :value="3" />
-										<el-option label="外国人居留证" :value="4" />
+                    <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('CardTypeEnum') ?? []" :key="index" />
 									</el-select>
 								</el-form-item>
 							</el-col>
@@ -157,11 +151,8 @@
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="性别">
 									<el-radio-group v-model="state.ruleForm.sex">
-										<el-radio :value="1">男</el-radio>
-										<el-radio :value="2">女</el-radio>
-										<el-radio :value="0">未知</el-radio>
-										<el-radio :value="9">未说明</el-radio>
-									</el-radio-group>
+                    <el-radio :value="item.code" v-for="(item, index) in getDictDataByCode('GenderEnum') ?? []" :key="index">{{item.value}}</el-radio>
+                  </el-radio-group>
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb5">
@@ -187,18 +178,7 @@
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="文化程度">
 									<el-select v-model="state.ruleForm.cultureLevel" placeholder="文化程度" class="w100">
-										<el-option label="其他" :value="0" />
-										<el-option label="小学" :value="1" />
-										<el-option label="初中" :value="2" />
-										<el-option label="普通高中" :value="3" />
-										<el-option label="技工学校" :value="4" />
-										<el-option label="职业教育" :value="5" />
-										<el-option label="职业高中" :value="6" />
-										<el-option label="中等专科" :value="7" />
-										<el-option label="大学专科" :value="8" />
-										<el-option label="大学本科" :value="9" />
-										<el-option label="硕士研究生" :value="10" />
-										<el-option label="博士研究生" :value="11" />
+                    <el-option :label="item.value" :value="item.code" v-for="(item, index) in getDictDataByCode('CultureLevelEnum') ?? []" :key="index" />
 									</el-select>
 								</el-form-item>
 							</el-col>
@@ -255,6 +235,7 @@ import { getAPI } from '/@/utils/axios-utils';
 import { SysPosApi, SysRoleApi, SysUserApi } from '/@/api-services/api';
 import { RoleOutput, SysOrg, SysPos, UpdateUserInput } from '/@/api-services/models';
 
+const getDictDataByCode = useUserInfo.getDictDataByCode;
 const props = defineProps({
 	title: String,
 	orgData: Array<SysOrg>,

+ 2 - 4
Web/src/views/system/user/index.vue

@@ -58,10 +58,7 @@
 						</el-table-column> -->
 						<el-table-column label="账号类型" width="110" align="center" show-overflow-tooltip>
 							<template #default="scope">
-								<el-tag v-if="scope.row.accountType === 888"> 系统管理员 </el-tag>
-								<el-tag v-else-if="scope.row.accountType === 777"> 普通账号 </el-tag>
-								<el-tag v-else-if="scope.row.accountType === 666"> 会员 </el-tag>
-								<el-tag v-else> 其他 </el-tag>
+                <DictLabel :value="scope.row.status" code="AccountTypeEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column prop="roleName" label="角色集合" min-width="150" align="center" show-overflow-tooltip />
@@ -128,6 +125,7 @@ import 'splitpanes/dist/splitpanes.css';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysUserApi, SysOrgApi } from '/@/api-services/api';
 import { SysUser, SysOrg, UpdateUserInput } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const orgTreeRef = ref<InstanceType<typeof OrgTree>>();
 const editUserRef = ref<InstanceType<typeof EditUser>>();

+ 2 - 6
Web/src/views/system/weChatUser/index.vue

@@ -24,12 +24,7 @@
 				<el-table-column prop="unionId" label="UnionId" align="center" show-overflow-tooltip />
 				<el-table-column prop="platformType" label="平台类型" width="110" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag v-if="scope.row.platformType === 1"> 微信公众号 </el-tag>
-						<el-tag v-else-if="scope.row.platformType === 2"> 微信小程序 </el-tag>
-						<el-tag v-else-if="scope.row.platformType === 3"> QQ </el-tag>
-						<el-tag v-else-if="scope.row.platformType === 4"> Alipay </el-tag>
-						<el-tag v-else-if="scope.row.platformType === 5"> Gitee </el-tag>
-						<el-tag v-else> 未知 </el-tag>
+            <DictLabel :value="scope.row.platformType" code="PlatformTypeEnum" default-value="其他" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="nickName" label="昵称" align="center" show-overflow-tooltip />
@@ -80,6 +75,7 @@ import EditWeChatUser from '/@/views/system/weChatUser/component/editWeChatUser.
 import { getAPI } from '/@/utils/axios-utils';
 import { SysWechatUserApi } from '/@/api-services/api';
 import { SysWechatUser } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editWeChatUserRef = ref<InstanceType<typeof EditWeChatUser>>();
 const state = reactive({