Pārlūkot izejas kodu

!757 自动生成代码时,如果有用到fk、treeselect、upload等接口,只生成了接口代码,没有生成菜单权限配置项。
Merge pull request !757 from koy0755/代码生成有BUG

zuohuaijun 2 gadi atpakaļ
vecāks
revīzija
5e6aa8f30d

+ 13 - 3
Admin.NET/Admin.NET.Core/Service/CodeGen/CustomViewEngine.cs

@@ -1,4 +1,4 @@
-// 麻省理工学院许可证
+// 麻省理工学院许可证
 //
 // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
 //
@@ -68,8 +68,18 @@ public class CustomViewEngine : ViewEngineModel
         var provider = _db.AsTenant().GetConnectionScope(ConfigId != SqlSugarConst.ConfigId ? ConfigId : SqlSugarConst.ConfigId);
 
         // 获取实体类型属性
-        var entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
-        if (entityType == null) return null;
+        var entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
+
+        // 因为ConfigId的表通常也会用到主库的表来做连接,所以这里如果在ConfigId中找不到实体也尝试一下在主库中查找
+        if (ConfigId == SqlSugarConst.ConfigId && entityType == null) return null;
+        if (ConfigId != SqlSugarConst.ConfigId)
+        {
+            provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
+            entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
+            if (entityType == null) return null;
+        }
+
+        
 
         // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
         return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput

+ 62 - 9
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -297,7 +297,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").ToList(); // 需要连表查询的字段
+        var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "fk" || u.EffectType == "ApiTreeSelect").ToList(); // 需要连表查询的字段
         (string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList); // 获取连表的实体名和别名
 
         var data = new CustomViewEngine(_db)
@@ -330,7 +330,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             File.WriteAllText(targetPathList[i], tResult, Encoding.UTF8);
         }
 
-        await AddMenu(input.TableName, input.BusName, input.MenuPid);
+        await AddMenu(input.TableName, input.BusName, input.MenuPid, tableFieldList);
         // 非ZIP压缩返回空
         if (!input.GenerateType.StartsWith('1'))
             return null;
@@ -376,7 +376,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// <param name="busName"></param>
     /// <param name="pid"></param>
     /// <returns></returns>
-    private async Task AddMenu(string className, string busName, long pid)
+    private async Task AddMenu(string className, string busName, long pid, List<CodeGenConfig> tableFieldList)
     {
         var pPath = string.Empty;
         // 若 pid=0 为顶级则创建菜单目录
@@ -441,53 +441,106 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             await _db.Deleteable<SysRoleMenu>().Where(e => listIds.Contains(e.MenuId)).ExecuteCommandAsync();
         }
         var pid1 = (await _db.Insertable(menuType1).ExecuteReturnEntityAsync()).Id;
-
+        int menuOrder = 101;
         // 按钮-page
         var menuType2 = new SysMenu
         {
             Pid = pid1,
-            Title = busName + "查询",
+            Title = "查询",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":page",
+            OrderNo = menuOrder
         };
+        menuOrder += 3;
 
         // 按钮-detail
         var menuType2_1 = new SysMenu
         {
             Pid = pid1,
-            Title = busName + "详情",
+            Title = "详情",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":detail",
+            OrderNo = menuOrder
         };
+        menuOrder += 3;
 
         // 按钮-add
         var menuType2_2 = new SysMenu
         {
             Pid = pid1,
-            Title = busName + "增加",
+            Title = "增加",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":add",
+            OrderNo = menuOrder
         };
+        menuOrder += 3;
 
         // 按钮-delete
         var menuType2_3 = new SysMenu
         {
             Pid = pid1,
-            Title = busName + "删除",
+            Title = "删除",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":delete",
+            OrderNo = menuOrder
         };
+        menuOrder += 3;
 
         // 按钮-edit
         var menuType2_4 = new SysMenu
         {
             Pid = pid1,
-            Title = busName + "编辑",
+            Title = "编辑",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":edit",
+            OrderNo = menuOrder
         };
+        menuOrder += 3;
 
         var menuList = new List<SysMenu>() { menuType2, menuType2_1, menuType2_2, menuType2_3, menuType2_4 };
+        // 加入fk、Upload、ApiTreeSelect 等接口的权限
+        var fkTableList = tableFieldList.Where(u => u.EffectType == "fk").ToList(); 
+        foreach (var @column in fkTableList)
+        {
+            var menuType = new SysMenu
+            {
+                Pid = pid1,
+                Title = "外键" + @column.ColumnName,
+                Type = MenuTypeEnum.Btn,
+                Permission = className[..1].ToLower() + className[1..] + ":" + column.FkEntityName + column.ColumnName + "Dropdown",
+                OrderNo = menuOrder
+            };
+            menuOrder += 3;
+            menuList.Add(menuType);
+        }
+        var treeSelectTableList = tableFieldList.Where(u => u.EffectType == "ApiTreeSelect").ToList();
+        foreach (var @column in treeSelectTableList)
+        {
+            var menuType = new SysMenu
+            {
+                Pid = pid1,
+                Title = "树型" + @column.ColumnName,
+                Type = MenuTypeEnum.Btn,
+                Permission = className[..1].ToLower() + className[1..] + ":" + column.FkEntityName + "Tree",
+                OrderNo = menuOrder
+            };
+            menuOrder += 3;
+            menuList.Add(menuType);
+        }
+        var uploadTableList = tableFieldList.Where(u => u.EffectType == "Upload").ToList();
+        foreach (var @column in uploadTableList)
+        {
+            var menuType = new SysMenu
+            {
+                Pid = pid1,
+                Title = "上传" + @column.ColumnName,
+                Type = MenuTypeEnum.Btn,
+                Permission = className[..1].ToLower() + className[1..] + ":Upload" + column.ColumnName,
+                OrderNo = menuOrder
+            };
+            menuOrder += 3;
+            menuList.Add(menuType);
+        }
         await _db.Insertable(menuList).ExecuteCommandAsync();
     }
 

+ 2 - 2
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/editDialog.vue.vm

@@ -1,4 +1,4 @@
-@{Dictionary<string, int> definedObjects = new Dictionary<string, int>();}
+@{Dictionary<string, int> definedObjects = new Dictionary<string, int>();}
 <template>
 	<div class="@(@Model.LowerClassName)-container">
 		<el-dialog v-model="isShowDialog" :title="props.title" :width="800" draggable="">
@@ -31,7 +31,7 @@
 								placeholder="请选择@(column.ColumnComment)"
 								clearable=""
 								class="w100"
-								@:v-model="ruleForm.@(column.LowerColumnName)"
+								v-model="ruleForm.@(@column.LowerColumnName)"
 							>
 								<template #default="{ node, data }">
 									<span>{{ data.name }}</span>

+ 1 - 1
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/index.vue.vm

@@ -232,7 +232,7 @@
 
         @foreach (var column in Model.QueryWhetherList){
         if(@column.EffectType == "fk"){
-		  @:const @LowerFirstLetter(@column.FkEntityName)@(@column.ColumnName)DropdownList = ref<any>([]); 
+        @:const @LowerFirstLetter(@column.FkEntityName)@(@column.ColumnName)DropdownList = ref<any>([]); 
 @:const get@(@column.FkEntityName)@(@column.ColumnName)DropdownList = async () => {
     @:let list = await get@(@column.FkEntityName)@(@column.ColumnName)Dropdown();
     @:@LowerFirstLetter(@column.FkEntityName)@(@column.ColumnName)DropdownList.value = list.data.result ?? [];