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

Bug:
1、SysCodeGenService生成文件时,没有按填写的命名空间的文件夹来保存,都保存在了Admin.NET.Application
2、如果有两个”外键”类型的控件,对应同一个表,会生成两次同名的接口函数。导致需要修改代码
优化:
1、生成index.vue时,根据字段描述的字符串个数预计列宽。
2、生成Service.cs时,如果有“外键”字段,自动生成LeftJoin相关代码,使得不需要修改代码就可以完成查询

yzp 3 лет назад
Родитель
Сommit
5d711ad48a

+ 7 - 5
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -1,4 +1,4 @@
-// 麻省理工学院许可证
+// 麻省理工学院许可证
 //
 // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
 //
@@ -558,7 +558,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// <returns></returns>
     private List<string> GetTargetPathList(SysCodeGen input)
     {
-        var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, _codeGenOptions.BackendApplicationNamespace, "Service", input.TableName);
+        //var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, _codeGenOptions.BackendApplicationNamespace, "Service", input.TableName);
+        var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, input.NameSpace, "Service", input.TableName);
         var servicePath = Path.Combine(backendPath, input.TableName + "Service.cs");
         var inputPath = Path.Combine(backendPath, "Dto", input.TableName + "Input.cs");
         var outputPath = Path.Combine(backendPath, "Dto", input.TableName + "Output.cs");
@@ -587,9 +588,10 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// <returns></returns>
     private List<string> GetZipPathList(SysCodeGen input)
     {
-        var zipPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "CodeGen", input.TableName);
-
-        var backendPath = Path.Combine(zipPath, _codeGenOptions.BackendApplicationNamespace, "Service", input.TableName);
+        var zipPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "CodeGen", input.TableName);
+
+        //var backendPath = Path.Combine(zipPath, _codeGenOptions.BackendApplicationNamespace, "Service", input.TableName);
+        var backendPath = Path.Combine(zipPath, input.NameSpace, "Service", input.TableName);
         var servicePath = Path.Combine(backendPath, input.TableName + "Service.cs");
         var inputPath = Path.Combine(backendPath, "Dto", input.TableName + "Input.cs");
         var outputPath = Path.Combine(backendPath, "Dto", input.TableName + "Output.cs");

+ 4 - 4
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/Manage.js.vm

@@ -1,4 +1,4 @@
-import request from '/@@/utils/request';
+import request from '/@@/utils/request';
 enum Api {
   Add@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/add',
   Delete@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/delete',
@@ -6,7 +6,7 @@ enum Api {
   Page@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/page',
   @foreach (var column in Model.TableField){
 if(@column.EffectType == "fk"){
-  @:Get@(@column.FkEntityName)Dropdown = '/api/@(@Model.LowerClassName)/@(@column.FkEntityName)Dropdown',
+  @:Get@(@column.FkEntityName)@(@column.ColumnName)Dropdown = '/api/@(@Model.LowerClassName)/@(@column.FkEntityName)@(@column.ColumnName)Dropdown',
 }else if(@column.EffectType == "ApiTreeSelect"){
   @:Get@(@column.FkEntityName)Tree = '/@(@Model.LowerClassName)/@(@column.FkEntityName)Tree',
 }else if(@column.EffectType == "Upload"){
@@ -49,9 +49,9 @@ export const page@(@Model.ClassName) = (params?: any) =>
 
 @foreach (var column in Model.TableField){
 	if(@column.EffectType == "fk"){
-@:export const get@(@column.FkEntityName)Dropdown = () =>
+@:export const get@(@column.FkEntityName)@(@column.ColumnName)Dropdown = () =>
 		@:request({
-		@:url: Api.Get@(@column.FkEntityName)Dropdown,
+		@:url: Api.Get@(@column.FkEntityName)@(@column.ColumnName)Dropdown,
 		@:method: 'get'
 		@:});
 	}else if(@column.EffectType == "ApiTreeSelect"){

+ 14 - 7
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/Service.cs.vm

@@ -1,4 +1,4 @@
-using @(@Model.NameSpace).Const;
+using @(@Model.NameSpace).Const;
 
 namespace @Model.NameSpace;
 /// <summary>
@@ -36,14 +36,21 @@ if (@column.QueryWhether == "Y"){
     }else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
     }
 } 
-}          
-
+}
+@{string tableName = "u";}
 @if(Model.IsJoinTable){
-                    @:.Select(u=> new @(@Model.ClassName)Output{
+                    @://处理外键相关字段的连接
+    @foreach (var column in Model.TableField){
+        if(@column.EffectType == "fk"){
+            tableName += ", " + column.ColumnName.ToLower();
+                    @:.LeftJoin<@(@column.FkEntityName)>((@(@tableName)) => u.@(@column.ColumnName) == @(@column.ColumnName.ToLower()).Id )
+        }
+    }
+                    @:.Select((@(@tableName))=> new @(@Model.ClassName)Output{
 @foreach (var column in Model.TableField){
                         @:@(@column.ColumnName) = u.@(@column.ColumnName), 
                         if(@column.EffectType == "fk"){   
-                        @:@(@column.FkEntityName)@(@column.FkColumnName) = u.@(@column.FkEntityName).@(@column.FkColumnName),
+                        @:@(@column.FkEntityName)@(@column.FkColumnName) = @(@column.ColumnName.ToLower()).@(@column.FkColumnName),
                         }
 }
                     @:})
@@ -156,8 +163,8 @@ if(@column.EffectType == "fk"){
     @:/// </summary>
     @:/// <param name="input"></param>
     @:/// <returns></returns>
-    @:[ApiDescriptionSettings(Name = "@(@column.FkEntityName)Dropdown"), HttpGet]
-    @:public async Task<dynamic> @(@column.FkEntityName)Dropdown()
+    @:[ApiDescriptionSettings(Name = "@(@column.FkEntityName)@(@column.ColumnName)Dropdown"), HttpGet]
+    @:public async Task<dynamic> @(@column.FkEntityName)@(@column.ColumnName)Dropdown()
     @:{
         @:return await _rep.Context.Queryable<@(@column.FkEntityName)>()
                 @:.Select(u => new

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

@@ -1,4 +1,4 @@
-<template>
+<template>
 	<div class="@(@Model.LowerClassName)-container">
 		<el-dialog v-model="isShowDialog" :title="props.title" :width="700" draggable="">
 			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="100px" :rules="rules">
@@ -14,7 +14,7 @@
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
 							@:<el-select clearable filterable v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请选择@(@column.ColumnComment)">
-								@:<el-option v-for="(item,index) in @LowerFirstLetter(@column.FkEntityName)DropdownList" :key="index" :value="item.value" :label="item.label" />
+								@:<el-option v-for="(item,index) in @LowerFirstLetter(@column.FkEntityName)@(@column.ColumnName)DropdownList" :key="index" :value="item.value" :label="item.label" />
 								@:
 							</el-select>
 							@:
@@ -124,15 +124,15 @@
 	import { ref,onMounted } from "vue";
 	import { ElMessage } from "element-plus";
 	import type { FormRules } from "element-plus";
-@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.ColumnName).ToList())} from '/@@/api/main/@(@Model.LowerClassName)';
-}
+	@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.ColumnName).ToList())} from '/@@/api/main/@(@Model.LowerClassName)';
+	}
 	import { add@(@Model.ClassName), update@(@Model.ClassName) } from "/@@/api/main/@(@Model.LowerClassName)";
 	@foreach (var column in Model.TableField){
 	if(@column.EffectType == "fk"){
-	@:import { get@(@column.FkEntityName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
+	@:import { get@(@column.FkEntityName)@(@column.ColumnName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
 	}
 	}
 	@if(@Model.TableField.Any(x=>x.EffectType == "Select")){
@@ -218,12 +218,12 @@ const submit = async () => {
 
 @foreach (var column in Model.TableField){
   if(@column.EffectType == "fk"){
-@:const @LowerFirstLetter(@column.FkEntityName)DropdownList = ref<any>([]); 
-@:const get@(@column.FkEntityName)DropdownList = async () => {
-    @:let list = await get@(@column.FkEntityName)Dropdown();
-    @:@LowerFirstLetter(@column.FkEntityName)DropdownList.value = list.data.result ?? [];
+@: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 ?? [];
 @:};
-@:get@(@column.FkEntityName)DropdownList();
+@:get@(@column.FkEntityName)@(@column.ColumnName)DropdownList();
 @:
   }
 }

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

@@ -1,4 +1,4 @@
-<template>
+<template>
   <div class="@(@Model.LowerClassName)-container">
     <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
       @if(Model.QueryWhetherList.Count > 0){
@@ -75,7 +75,7 @@
         @foreach (var column in Model.TableField){
         if(@column.WhetherTable == "Y"){
         if(@column.EffectType == "Upload"||@column.EffectType == "fk"||@column.EffectType == "Switch"||@column.EffectType == "ConstSelector"){
-        @:<el-table-column prop="@column.LowerColumnName" label="@column.ColumnComment" show-overflow-tooltip="">
+        @:<el-table-column prop="@column.LowerColumnName" label="@column.ColumnComment" width="@(column.ColumnComment!=null && column.ColumnComment.Length > 5 ? column.ColumnComment.Length * 15 : 120)" show-overflow-tooltip="">
           @:<template #default="scope">
             if(@column.EffectType == "Upload"){
             @:<el-image
@@ -101,7 +101,7 @@
         </el-table-column>
         }
         else {
-        @: <el-table-column prop="@column.LowerColumnName" label="@column.ColumnComment" fixed="" show-overflow-tooltip="" />
+        @: <el-table-column prop="@column.LowerColumnName" label="@column.ColumnComment" width="@(column.ColumnComment!=null && column.ColumnComment.Length > 5 ? column.ColumnComment.Length * 15 : 120)" fixed="" show-overflow-tooltip="" />
         }
         }
         }