Преглед изворни кода

代码生成增加指定前端页面目录

Signed-off-by: IMaster <logole@live.cn>
IMaster пре 1 година
родитељ
комит
edfec59acf

+ 6 - 0
Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs

@@ -103,6 +103,12 @@ public partial class SysCodeGen : EntityBase
     [SugarColumn(ColumnDescription = "菜单编码")]
     public long? MenuPid { get; set; }
 
+    /// <summary>
+    /// 页面目录
+    /// </summary>
+    [SugarColumn(ColumnDescription = "页面目录", Length = 32)]
+    public string PagePath { get; set; }
+
     /// <summary>
     /// 支持打印类型
     /// </summary>

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

@@ -1,4 +1,4 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
 //
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
 //
@@ -42,6 +42,8 @@ public class CustomViewEngine : ViewEngineModel
         }
     }
 
+    public string PagePath { get; set; } = "main";
+
     public bool IsJoinTable { get; set; }
 
     public bool IsUpload { get; set; }

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

@@ -1,4 +1,4 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
 //
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
 //
@@ -86,6 +86,11 @@ public class CodeGenInput : BasePageInput
     /// </summary>
     public virtual long? MenuPid { get; set; }
 
+    /// <summary>
+    /// 页面目录
+    /// </summary>
+    public virtual string PagePath { get; set; }
+
     /// <summary>
     /// 支持打印类型
     /// </summary>

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

@@ -1,4 +1,4 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
 //
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
 //

+ 64 - 30
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -335,6 +335,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             BusName = input.BusName,
             NameSpace = input.NameSpace,
             ClassName = input.TableName,
+            PagePath = input.PagePath,
             ProjectLastName = input.NameSpace.Split('.').Last(),
             QueryWhetherList = queryWhetherList,
             TableField = tableFieldList,
@@ -361,7 +362,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             File.WriteAllText(targetPathList[i], tResult, Encoding.UTF8);
         }
         if (input.GenerateMenu)
-            await AddMenu(input.TableName, input.BusName, input.MenuPid ?? 0, input.MenuIcon, tableFieldList);
+            await AddMenu(input.TableName, input.BusName, input.MenuPid ?? 0, input.MenuIcon, input.PagePath, tableFieldList);
         // 非ZIP压缩返回空
         if (!input.GenerateType.StartsWith('1'))
             return null;
@@ -409,7 +410,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// <param name="menuIcon"></param>
     /// <param name="tableFieldList"></param>
     /// <returns></returns>
-    private async Task AddMenu(string className, string busName, long pid, string menuIcon, List<CodeGenConfig> tableFieldList)
+    private async Task AddMenu(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList)
     {
         var pPath = string.Empty;
         // 若 pid=0 为顶级则创建菜单目录
@@ -449,7 +450,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         }
 
         // 菜单
-        var menuType1 = new SysMenu
+        var menuType = new SysMenu
         {
             Pid = pid,
             Title = busName + "管理",
@@ -457,30 +458,30 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             Type = MenuTypeEnum.Menu,
             Icon = menuIcon,
             Path = pPath + "/" + className.ToLower(),
-            Component = "/main/" + className[..1].ToLower() + className[1..] + "/index",
+            Component = "/" + pagePath + "/" + className[..1].ToLower() + className[1..] + "/index",
         };
         // 若先前存在则删除本级和下级
-        var menuList1 = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType1.Title && u.Type == menuType1.Type).ToListAsync();
-        if (menuList1.Count > 0)
+        var menuListCurrent = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType.Title && u.Type == menuType.Type).ToListAsync();
+        if (menuListCurrent.Count > 0)
         {
-            var listIds = menuList1.Select(u => u.Id).ToList();
-            var childlistIds = new List<long>();
+            var listIds = menuListCurrent.Select(u => u.Id).ToList();
+            var childListIds = new List<long>();
             foreach (var item in listIds)
             {
-                var childlist = await _db.Queryable<SysMenu>().ToChildListAsync(u => u.Pid, item);
-                childlistIds.AddRange(childlist.Select(u => u.Id).ToList());
+                var childList = await _db.Queryable<SysMenu>().ToChildListAsync(u => u.Pid, item);
+                childListIds.AddRange(childList.Select(u => u.Id).ToList());
             }
-            listIds.AddRange(childlistIds);
+            listIds.AddRange(childListIds);
             await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
             await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
         }
 
-        var pid1 = (await _db.Insertable(menuType1).ExecuteReturnEntityAsync()).Id;
+        var menuPid = (await _db.Insertable(menuType).ExecuteReturnEntityAsync()).Id;
         int menuOrder = 100;
         // 按钮-page
-        var menuType2 = new SysMenu
+        var menuTypePage = new SysMenu
         {
-            Pid = pid1,
+            Pid = menuPid,
             Title = "查询",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":page",
@@ -489,9 +490,9 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         menuOrder += 10;
 
         // 按钮-detail
-        var menuType2_1 = new SysMenu
+        var menuTypeDetail = new SysMenu
         {
-            Pid = pid1,
+            Pid = menuPid,
             Title = "详情",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":detail",
@@ -500,9 +501,9 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         menuOrder += 10;
 
         // 按钮-add
-        var menuType2_2 = new SysMenu
+        var menuTypeAdd = new SysMenu
         {
-            Pid = pid1,
+            Pid = menuPid,
             Title = "增加",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":add",
@@ -511,9 +512,9 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         menuOrder += 10;
 
         // 按钮-delete
-        var menuType2_3 = new SysMenu
+        var menuTypeDelete = new SysMenu
         {
-            Pid = pid1,
+            Pid = menuPid,
             Title = "删除",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":delete",
@@ -522,9 +523,9 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         menuOrder += 10;
 
         // 按钮-update
-        var menuType2_4 = new SysMenu
+        var menuTypeUpdate = new SysMenu
         {
-            Pid = pid1,
+            Pid = menuPid,
             Title = "编辑",
             Type = MenuTypeEnum.Btn,
             Permission = className[..1].ToLower() + className[1..] + ":update",
@@ -532,7 +533,40 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         };
         menuOrder += 10;
 
-        var menuList = new List<SysMenu>() { menuType2, menuType2_1, menuType2_2, menuType2_3, menuType2_4 };
+        // 按钮-print
+        var menuTypePrint = new SysMenu
+        {
+            Pid = menuPid,
+            Title = "打印",
+            Type = MenuTypeEnum.Btn,
+            Permission = className[..1].ToLower() + className[1..] + ":print",
+            OrderNo = menuOrder
+        };
+        menuOrder += 10;
+
+        // 按钮-import
+        var menuTypeImport = new SysMenu
+        {
+            Pid = pid1,
+            Title = "导入",
+            Type = MenuTypeEnum.Btn,
+            Permission = lowerEntityName + ":import",
+            OrderNo = menuOrder
+        };
+        menuOrder += 10;
+
+        // 按钮-export
+        var menuTypeExport = new SysMenu
+        {
+            Pid = pid1,
+            Title = "导出",
+            Type = MenuTypeEnum.Btn,
+            Permission = lowerEntityName + ":export",
+            OrderNo = menuOrder
+        };
+        menuOrder += 10;
+
+        var menuList = new List<SysMenu>() { menuTypePage, menuTypeDetail, menuTypeAdd, menuTypeDelete, menuTypeUpdate, menuTypePrint, menuTypeImport, menuTypeExport };
         // 加入fk、Upload、ApiTreeSelect 等接口的权限
         // 在生成表格时,有些字段只是查询时显示,不需要填写(WhetherAddUpdate),所以这些字段没必要生成相应接口
         var fkTableList = tableFieldList.Where(u => u.EffectType == "fk" && (u.WhetherAddUpdate == "Y" || u.QueryWhether == "Y")).ToList();
@@ -540,7 +574,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         {
             var menuType = new SysMenu
             {
-                Pid = pid1,
+                Pid = menuPid,
                 Title = "外键" + @column.ColumnName,
                 Type = MenuTypeEnum.Btn,
                 Permission = className[..1].ToLower() + className[1..] + ":" + column.FkEntityName + column.ColumnName + "Dropdown",
@@ -554,7 +588,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         {
             var menuType = new SysMenu
             {
-                Pid = pid1,
+                Pid = menuPid,
                 Title = "树型" + @column.ColumnName,
                 Type = MenuTypeEnum.Btn,
                 Permission = className[..1].ToLower() + className[1..] + ":" + column.FkEntityName + "Tree",
@@ -568,7 +602,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         {
             var menuType = new SysMenu
             {
-                Pid = pid1,
+                Pid = menuPid,
                 Title = "上传" + @column.ColumnName,
                 Type = MenuTypeEnum.Btn,
                 Permission = className[..1].ToLower() + className[1..] + ":Upload" + column.ColumnName,
@@ -653,10 +687,10 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         var inputPath = Path.Combine(backendPath, "Dto", input.TableName + "Input.cs");
         var outputPath = Path.Combine(backendPath, "Dto", input.TableName + "Output.cs");
         var viewPath = Path.Combine(backendPath, "Dto", input.TableName + "Dto.cs");
-        var frontendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.Parent.FullName, _codeGenOptions.FrontRootPath, "src", "views", "main");
+        var frontendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.Parent.FullName, _codeGenOptions.FrontRootPath, "src", "views", input.PagePath);
         var indexPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "index.vue");//
         var formModalPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "component", "editDialog.vue");
-        var apiJsPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.Parent.FullName, _codeGenOptions.FrontRootPath, "src", "api", "main", input.TableName[..1].ToLower() + input.TableName[1..] + ".ts");
+        var apiJsPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.Parent.FullName, _codeGenOptions.FrontRootPath, "src", "api", input.PagePath, input.TableName[..1].ToLower() + input.TableName[1..] + ".ts");
 
         if (input.GenerateType.Substring(1, 1).Contains('1'))
         {
@@ -710,10 +744,10 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         var inputPath = Path.Combine(backendPath, "Dto", input.TableName + "Input.cs");
         var outputPath = Path.Combine(backendPath, "Dto", input.TableName + "Output.cs");
         var viewPath = Path.Combine(backendPath, "Dto", input.TableName + "Dto.cs");
-        var frontendPath = Path.Combine(zipPath, _codeGenOptions.FrontRootPath, "src", "views", "main");
+        var frontendPath = Path.Combine(zipPath, _codeGenOptions.FrontRootPath, "src", "views", input.PagePath);
         var indexPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "index.vue");
         var formModalPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "component", "editDialog.vue");
-        var apiJsPath = Path.Combine(zipPath, _codeGenOptions.FrontRootPath, "src", "api", "main", input.TableName[..1].ToLower() + input.TableName[1..] + ".ts");
+        var apiJsPath = Path.Combine(zipPath, _codeGenOptions.FrontRootPath, "src", "api", input.PagePath, input.TableName[..1].ToLower() + input.TableName[1..] + ".ts");
         if (input.GenerateType.StartsWith("11"))
         {
             return new List<string>()

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

@@ -176,16 +176,16 @@
 @if(@Model.TableField.Any(x=>x.EffectType == "Upload")){
     @:import { Plus } from "@@element-plus/icons-vue";
     @:import { UploadRequestOptions } from "element-plus";
-    @:import {@string.Join(",",Model.TableField.Where(x=>x.EffectType == "Upload").Select(x=>"upload"+x.PropertyName).ToList())} from '/@@/api/main/@(@Model.LowerClassName)';
+    @:import {@string.Join(",",Model.TableField.Where(x=>x.EffectType == "Upload").Select(x=>"upload"+x.PropertyName).ToList())} from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
 }
-	import { add@(@Model.ClassName), update@(@Model.ClassName), detail@(@Model.ClassName) } from "/@@/api/main/@(@Model.LowerClassName)";
+	import { add@(@Model.ClassName), update@(@Model.ClassName), detail@(@Model.ClassName) } from "/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)";
 	@foreach (var column in Model.TableField){
 	if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("import__@(@column.FkEntityName)Tree")){
 	@{definedObjects.Add("import__@(@column.FkEntityName)Tree", 1);}
-	@:import { get@(@column.FkEntityName)Tree } from '/@@/api/main/@(@Model.LowerClassName)';
+	@:import { get@(@column.FkEntityName)Tree } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
 	}
 	if(@column.EffectType == "fk" && @column.WhetherAddUpdate == "Y"){
-	@:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
+	@:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
 	}
 	}
 	@if(@Model.TableField.Any(x=>x.EffectType == "EnumSelector")){

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

@@ -229,11 +229,11 @@
   }
 
   import printDialog from '/@@/views/system/print/component/hiprint/preview.vue'
-  import editDialog from '/@@/views/main/@(@Model.LowerClassName)/component/editDialog.vue'
-  import { page@(@Model.ClassName), delete@(@Model.ClassName) } from '/@@/api/main/@(@Model.LowerClassName)';
+  import editDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/editDialog.vue'
+  import { page@(@Model.ClassName), delete@(@Model.ClassName) } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
   @foreach (var column in Model.QueryWhetherList){
   if(@column.EffectType == "fk"){
-  @:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
+  @:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
   }
   }
   @if(@Model.QueryWhetherList.Any(x=>x.EffectType == "EnumSelector")){

+ 7 - 0
Web/src/api-services/models/add-code-gen-input.ts

@@ -131,6 +131,13 @@ export interface AddCodeGenInput {
      * @memberof AddCodeGenInput
      */
     menuPid?: number | null;
+    
+    /**
+     * 页面目录
+     * @type {string}
+     * @memberof AddCodeGenInput
+     */
+    pagePath?: string | null;
 
     /**
      * 支持打印类型

+ 7 - 0
Web/src/api-services/models/code-gen-input.ts

@@ -179,6 +179,13 @@ export interface CodeGenInput {
      * @memberof CodeGenInput
      */
     menuPid?: number | null;
+    
+    /**
+     * 页面目录
+     * @type {string}
+     * @memberof CodeGenInput
+     */
+    pagePath?: string | null;
 
     /**
      * 支持打印类型

+ 7 - 0
Web/src/api-services/models/sys-code-gen.ts

@@ -179,6 +179,13 @@ export interface SysCodeGen {
      * @memberof SysCodeGen
      */
     menuPid?: number | null;
+    
+    /**
+     * 页面目录
+     * @type {string}
+     * @memberof SysCodeGen
+     */
+    pagePath?: string | null;
 
     /**
      * 支持打印类型

+ 7 - 0
Web/src/api-services/models/update-code-gen-input.ts

@@ -179,6 +179,13 @@ export interface UpdateCodeGenInput {
      * @memberof UpdateCodeGenInput
      */
     menuPid?: number | null;
+    
+    /**
+     * 页面目录
+     * @type {string}
+     * @memberof UpdateCodeGenInput
+     */
+    pagePath?: string | null;
 
     /**
      * 支持打印类型

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

@@ -103,6 +103,11 @@
 							</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="pagePath">
+							<el-input v-model="state.ruleForm.pagePath" clearable placeholder="请输入" />
+						</el-form-item>
+					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="作者姓名" prop="authorName">
 							<el-input v-model="state.ruleForm.authorName" clearable placeholder="请输入" />

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

@@ -143,7 +143,7 @@ const handleCurrentChange = (val: number) => {
 // 打开表增加页面
 const openAddDialog = () => {
 	state.editMenuTitle = '增加';
-	EditCodeGenRef.value?.openDialog({ authorName: 'Admin.NET', generateType: '200', nameSpace: state.applicationNamespaces[0], generateMenu: true });
+	EditCodeGenRef.value?.openDialog({ authorName: 'Admin.NET', generateType: '200', printType: 'off', menuIcon: 'ele-Menu', pagePath: 'main', nameSpace: state.applicationNamespaces[0], generateMenu: true });
 };
 
 // 打开表编辑页面