Bladeren bron

!754 主要修改了“代码生成”工具的几个小BUG和优化生成文件的功能。
Merge pull request !754 from koy0755/修改代码生成BUG

zuohuaijun 2 jaren geleden
bovenliggende
commit
df31ee792b

+ 5 - 3
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs

@@ -1,4 +1,4 @@
-// 麻省理工学院许可证
+// 麻省理工学院许可证
 //
 //
 // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
 // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
 //
 //
@@ -89,7 +89,7 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
         if (tableColumnOuputList == null) return;
         if (tableColumnOuputList == null) return;
 
 
         var codeGenConfigs = new List<SysCodeGenConfig>();
         var codeGenConfigs = new List<SysCodeGenConfig>();
-
+        int orderNo = 100;
         foreach (var tableColumn in tableColumnOuputList)
         foreach (var tableColumn in tableColumnOuputList)
         {
         {
             var codeGenConfig = new SysCodeGenConfig();
             var codeGenConfig = new SysCodeGenConfig();
@@ -125,7 +125,9 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
 
 
             codeGenConfig.DataType = tableColumn.DataType;
             codeGenConfig.DataType = tableColumn.DataType;
             codeGenConfig.EffectType = CodeGenUtil.DataTypeToEff(codeGenConfig.NetType);
             codeGenConfig.EffectType = CodeGenUtil.DataTypeToEff(codeGenConfig.NetType);
-            codeGenConfig.QueryType = GetDefaultQueryType(codeGenConfig); // QueryTypeEnum.eq.ToString();
+            codeGenConfig.QueryType = GetDefaultQueryType(codeGenConfig); // QueryTypeEnum.eq.ToString();
+            codeGenConfig.OrderNo = orderNo;
+            orderNo += 3;//这里加3,方便调整个别控件的排序时,需要配置太多的不相关控件,加3后,每个控件之前预留了两个位置给其它控件“插队”
             codeGenConfigs.Add(codeGenConfig);
             codeGenConfigs.Add(codeGenConfig);
         }
         }
         // 多库代码生成---这里要切回主库
         // 多库代码生成---这里要切回主库

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

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

+ 3 - 3
Admin.NET/Admin.NET.Core/Util/CodeGenUtil.cs

@@ -1,4 +1,4 @@
-// 麻省理工学院许可证
+// 麻省理工学院许可证
 //
 //
 // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
 // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
 //
 //
@@ -240,7 +240,7 @@ public static class CodeGenUtil
     {
     {
         return dataType.ToLower() switch
         return dataType.ToLower() switch
         {
         {
-            "text" or "varchar" or "char" or "nvarchar" or "nchar" or "timestamp" => "string",
+            "tinytext" or "mediumtext" or "longtext" or "mid" or "text" or "varchar" or "char" or "nvarchar" or "nchar" or "timestamp" => "string",
             "int" => "int",
             "int" => "int",
             "smallint" => "Int16",
             "smallint" => "Int16",
             //"tinyint" => "byte",
             //"tinyint" => "byte",
@@ -250,7 +250,7 @@ public static class CodeGenUtil
             "money" or "smallmoney" or "numeric" or "decimal" => "decimal",
             "money" or "smallmoney" or "numeric" or "decimal" => "decimal",
             "real" => "Single",
             "real" => "Single",
             "datetime" or "smalldatetime" => "DateTime",
             "datetime" or "smalldatetime" => "DateTime",
-            "float" => "double",
+            "float" or "double" => "double",
             "image" or "binary" or "varbinary" => "byte[]",
             "image" or "binary" or "varbinary" => "byte[]",
             "uniqueidentifier" => "Guid",
             "uniqueidentifier" => "Guid",
             _ => "object",
             _ => "object",

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

@@ -1,3 +1,4 @@
+@{Dictionary<string, int> definedObjects = new Dictionary<string, int>();}
 import request from '/@@/utils/request';
 import request from '/@@/utils/request';
 enum Api {
 enum Api {
   Add@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/add',
   Add@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/add',
@@ -6,8 +7,9 @@ enum Api {
   Page@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/page',
   Page@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/page',
   @foreach (var column in Model.TableField){
   @foreach (var column in Model.TableField){
 if(@column.EffectType == "fk"){
 if(@column.EffectType == "fk"){
-  @:Get@(@column.FkEntityName)Dropdown = '/api/@(@Model.LowerClassName)/@(@column.FkEntityName)Dropdown',
-}else if(@column.EffectType == "ApiTreeSelect"){
+  @:Get@(@column.FkEntityName)@(@column.ColumnName)Dropdown = '/api/@(@Model.LowerClassName)/@(@column.FkEntityName)@(@column.ColumnName)Dropdown',
+}else if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("Get@(@column.FkEntityName)Tree")){
+  @{definedObjects.Add("Get@(@column.FkEntityName)Tree", 1);}
   @:Get@(@column.FkEntityName)Tree = '/@(@Model.LowerClassName)/@(@column.FkEntityName)Tree',
   @:Get@(@column.FkEntityName)Tree = '/@(@Model.LowerClassName)/@(@column.FkEntityName)Tree',
 }else if(@column.EffectType == "Upload"){
 }else if(@column.EffectType == "Upload"){
   @:Upload@(@column.ColumnName) = '/api/@(@Model.LowerClassName)/Upload@(@column.ColumnName)',
   @:Upload@(@column.ColumnName) = '/api/@(@Model.LowerClassName)/Upload@(@column.ColumnName)',
@@ -49,12 +51,13 @@ export const page@(@Model.ClassName) = (params?: any) =>
 
 
 @foreach (var column in Model.TableField){
 @foreach (var column in Model.TableField){
 	if(@column.EffectType == "fk"){
 	if(@column.EffectType == "fk"){
-@:export const get@(@column.FkEntityName)Dropdown = () =>
+@:export const get@(@column.FkEntityName)@(@column.ColumnName)Dropdown = () =>
 		@:request({
 		@:request({
-		@:url: Api.Get@(@column.FkEntityName)Dropdown,
+		@:url: Api.Get@(@column.FkEntityName)@(@column.ColumnName)Dropdown,
 		@:method: 'get'
 		@:method: 'get'
 		@:});
 		@:});
-	}else if(@column.EffectType == "ApiTreeSelect"){
+	}else if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("get@(@column.FkEntityName)Tree")){
+		@{definedObjects.Add("get@(@column.FkEntityName)Tree", 1);}
 @:export const get@(@column.FkEntityName)Tree = () =>
 @:export const get@(@column.FkEntityName)Tree = () =>
 		@:request({
 		@:request({
 		@:url: Api.Get@(@column.FkEntityName)Tree,
 		@:url: Api.Get@(@column.FkEntityName)Tree,

+ 14 - 4
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/Output.cs.vm

@@ -1,4 +1,4 @@
-namespace @Model.NameSpace;
+namespace @Model.NameSpace;
 
 
     /// <summary>
     /// <summary>
     /// @(@Model.BusName)输出参数
     /// @(@Model.BusName)输出参数
@@ -14,13 +14,20 @@ if(column.EffectType == "fk")
        @:public @column.NetType @column.ColumnName { get; set; } 
        @:public @column.NetType @column.ColumnName { get; set; } 
        @:
        @:
        @:/// <summary>
        @:/// <summary>
-       @:/// @column.ColumnComment
+       @:/// @(column.ColumnComment) 描述
        @:/// </summary>
        @:/// </summary>
        @:public @(@column.FkColumnNetType) @(@column.FkEntityName)@(@column.FkColumnName) { get; set; } 
        @:public @(@column.FkColumnNetType) @(@column.FkEntityName)@(@column.FkColumnName) { get; set; } 
 
 
 }else if(column.EffectType == "Upload"){
 }else if(column.EffectType == "Upload"){
-        @:public @column.NetType @column.ColumnName { get; set; }
-        @:public SysFile @(@column.ColumnName)Attachment { get; set; }
+       @:public @column.NetType @column.ColumnName { get; set; }
+       @:public SysFile @(@column.ColumnName)Attachment { get; set; }
+}else if(column.EffectType == "ApiTreeSelect"){
+       @:public @column.NetType @column.ColumnName { get; set; } 
+       @:
+       @:/// <summary>
+       @:/// @(column.ColumnComment) 描述 
+       @:/// </summary>
+       @:public string? @(@column.ColumnName)@(@column.DisplayColumn) { get; set; } 
 }else{
 }else{
        @:public @column.NetType @column.ColumnName { get; set; }
        @:public @column.NetType @column.ColumnName { get; set; }
 }
 }
@@ -31,6 +38,8 @@ if(column.EffectType == "fk")
 
 
 @foreach (var column in Model.TableField){
 @foreach (var column in Model.TableField){
 if (@column.EffectType == "ApiTreeSelect"){
 if (@column.EffectType == "ApiTreeSelect"){
+    @:// 使用实际实体@(@column.FkTableName),所以这里就删了
+    @:/*
     @:[SugarTable("@(@column.FkTableName)")]
     @:[SugarTable("@(@column.FkTableName)")]
     @:public class @(@column.FkEntityName)TreeOutput: EntityBaseId
     @:public class @(@column.FkEntityName)TreeOutput: EntityBaseId
     @:{
     @:{
@@ -44,5 +53,6 @@ if (@column.EffectType == "ApiTreeSelect"){
         @:[SugarColumn(IsIgnore = true)]
         @:[SugarColumn(IsIgnore = true)]
         @:public List<@(@column.FkEntityName)TreeOutput> Children { get; set; }
         @:public List<@(@column.FkEntityName)TreeOutput> Children { get; set; }
     @:}
     @:}
+    @:*/
 }
 }
 }
 }

+ 23 - 10
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/Service.cs.vm

@@ -1,5 +1,6 @@
-using @(@Model.NameSpace).Const;
-
+using @(@Model.NameSpace).Const;
+@{string joinTableName = "u";}
+@{Dictionary<string, int> definedObjects = new Dictionary<string, int>();}
 namespace @Model.NameSpace;
 namespace @Model.NameSpace;
 /// <summary>
 /// <summary>
 /// @(@Model.BusName)服务
 /// @(@Model.BusName)服务
@@ -36,14 +37,25 @@ if (@column.QueryWhether == "Y"){
     }else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
     }else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
     }
     }
 } 
 } 
-}          
-
+}
 @if(Model.IsJoinTable){
 @if(Model.IsJoinTable){
-                    @:.Select(u=> new @(@Model.ClassName)Output{
+                    @://处理外键和TreeSelector相关字段的连接
+    @foreach (var column in Model.TableField){
+        if(@column.EffectType == "fk"){
+            joinTableName += ", " + column.ColumnName.ToLower();
+                    @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.ColumnName) == @(@column.ColumnName.ToLower()).Id )
+        } else if(@column.EffectType == "ApiTreeSelect"){
+            joinTableName += ", " + column.ColumnName.ToLower();
+                    @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.ColumnName) == @(@column.ColumnName.ToLower()).@(@column.ValueColumn) )
+        }
+    }
+                    @:.Select((@(@joinTableName))=> new @(@Model.ClassName)Output{
 @foreach (var column in Model.TableField){
 @foreach (var column in Model.TableField){
                         @:@(@column.ColumnName) = u.@(@column.ColumnName), 
                         @:@(@column.ColumnName) = u.@(@column.ColumnName), 
                         if(@column.EffectType == "fk"){   
                         if(@column.EffectType == "fk"){   
-                        @:@(@column.FkEntityName)@(@column.FkColumnName) = u.@(@column.FkEntityName).@(@column.FkColumnName),
+                        @:@(@column.FkEntityName)@(@column.FkColumnName) = @(@column.ColumnName.ToLower()).@(@column.FkColumnName),
+                        } else if(@column.EffectType == "ApiTreeSelect"){   
+                        @:@(@column.ColumnName)@(@column.DisplayColumn) = @(@column.ColumnName.ToLower()).@(@column.DisplayColumn),
                         }
                         }
 }
 }
                     @:})
                     @:})
@@ -156,8 +168,8 @@ if(@column.EffectType == "fk"){
     @:/// </summary>
     @:/// </summary>
     @:/// <param name="input"></param>
     @:/// <param name="input"></param>
     @:/// <returns></returns>
     @:/// <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)>()
         @:return await _rep.Context.Queryable<@(@column.FkEntityName)>()
                 @:.Select(u => new
                 @:.Select(u => new
@@ -188,11 +200,12 @@ if(@column.EffectType == "Upload"){
 
 
 
 
 @foreach (var column in Model.TableField){
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "ApiTreeSelect"){
+if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(@column.FkEntityName)Tree")){
+    @{definedObjects.Add("@(@column.FkEntityName)Tree", 1);}
     @:[HttpGet("/@(@Model.LowerClassName)/@(@column.FkEntityName)Tree")]
     @:[HttpGet("/@(@Model.LowerClassName)/@(@column.FkEntityName)Tree")]
     @:public async Task<dynamic> @(@column.FkEntityName)Tree()
     @:public async Task<dynamic> @(@column.FkEntityName)Tree()
     @:{
     @:{
-        @:return await _rep.Context.Queryable<@(@column.FkEntityName)TreeOutput>().ToTreeAsync(u => u.Children, u => u.@(@column.PidColumn), 0);
+        @:return await _rep.Context.Queryable<@(@column.FkEntityName)>().ToTreeAsync(u => u.Children, u => u.@(@column.PidColumn), 0);
     @:}
     @:}
 }
 }
 }
 }

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

@@ -1,7 +1,8 @@
+@{Dictionary<string, int> definedObjects = new Dictionary<string, int>();}
 <template>
 <template>
 	<div class="@(@Model.LowerClassName)-container">
 	<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">
+		<el-dialog v-model="isShowDialog" :title="props.title" :width="800" draggable="">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="130px" :rules="rules">
 				<el-row :gutter="35">
 				<el-row :gutter="35">
 					@foreach (var column in Model.TableField){
 					@foreach (var column in Model.TableField){
 					if(@column.ColumnKey == "True"){
 					if(@column.ColumnKey == "True"){
@@ -14,13 +15,33 @@
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
 							@:<el-select clearable filterable v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请选择@(@column.ColumnComment)">
 							@:<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>
 							</el-select>
 							@:
 							@:
 						</el-form-item>
 						</el-form-item>
 						@:
 						@:
 					</el-col>
 					</el-col>
+					}else if(@column.EffectType == "ApiTreeSelect"){
+					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
+							<el-cascader
+								@:options="@LowerFirstLetter(@column.FkEntityName)TreeData"
+								@:props="{ checkStrictly: true, emitPath: false, value: '@LowerFirstLetter(@column.ValueColumn)', label: '@LowerFirstLetter(@column.DisplayColumn)' }"
+								placeholder="请选择@(column.ColumnComment)"
+								clearable=""
+								class="w100"
+								@:v-model="ruleForm.@(column.LowerColumnName)"
+							>
+								<template #default="{ node, data }">
+									<span>{{ data.name }}</span>
+									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
+								</template>
+							</el-cascader>
+							@:
+						</el-form-item>
+						@:
+					</el-col>
 					}else if(@column.EffectType == "Input"){
 					}else if(@column.EffectType == "Input"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
@@ -134,8 +155,12 @@
 }
 }
 	import { add@(@Model.ClassName), update@(@Model.ClassName) } from "/@@/api/main/@(@Model.LowerClassName)";
 	import { add@(@Model.ClassName), update@(@Model.ClassName) } from "/@@/api/main/@(@Model.LowerClassName)";
 	@foreach (var column in Model.TableField){
 	@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)';
+	}
 	if(@column.EffectType == "fk"){
 	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")){
 	@if(@Model.TableField.Any(x=>x.EffectType == "Select")){
@@ -221,12 +246,25 @@ const submit = async () => {
 
 
 @foreach (var column in Model.TableField){
 @foreach (var column in Model.TableField){
   if(@column.EffectType == "fk"){
   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)@(@column.ColumnName)DropdownList();
+@:
+  }
+}
+
+@foreach (var column in Model.TableField){
+  if(@column.EffectType == "ApiTreeSelect" && !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 () => {
+    @:let list = await get@(@column.FkEntityName)Tree();
+    @:@LowerFirstLetter(@column.FkEntityName)TreeData.value = list.data.result ?? [];
 @:};
 @:};
-@:get@(@column.FkEntityName)DropdownList();
+@:get@(@column.FkEntityName)TreeData();
 @:
 @:
   }
   }
   else if(@column.EffectType == "ConstSelector"){   
   else if(@column.EffectType == "ConstSelector"){   
@@ -257,7 +295,7 @@ if(@column.EffectType == "Upload"){
 onMounted(async () => {
 onMounted(async () => {
 	@foreach (var column in Model.TableField){
 	@foreach (var column in Model.TableField){
 	if(@column.EffectType == "Select"){
 	if(@column.EffectType == "Select"){
-	     @:getEdit@(@column.LowerColumnName)Data.value= await dictTypeDataList('@(@column.DictTypeCode)');
+	@:getEdit@(@column.LowerColumnName)Data.value= await dictTypeDataList('@(@column.DictTypeCode)');
 	 }
 	 }
 	}
 	}
 });
 });

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

@@ -1,4 +1,4 @@
-<template>
+<template>
   <div class="@(@Model.LowerClassName)-container">
   <div class="@(@Model.LowerClassName)-container">
     <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
     <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
       @if(Model.QueryWhetherList.Count > 0){
       @if(Model.QueryWhetherList.Count > 0){
@@ -74,8 +74,8 @@
         <el-table-column type="index" label="序号" width="55" align="center"/>
         <el-table-column type="index" label="序号" width="55" align="center"/>
         @foreach (var column in Model.TableField){
         @foreach (var column in Model.TableField){
         if(@column.WhetherTable == "Y"){
         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="">
+        if(@column.EffectType == "Upload"||@column.EffectType == "fk"||@column.EffectType == "ApiTreeSelect"||@column.EffectType == "Switch"||@column.EffectType == "ConstSelector"){
+        @:<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">
           @:<template #default="scope">
             if(@column.EffectType == "Upload"){
             if(@column.EffectType == "Upload"){
             @:<el-image
             @:<el-image
@@ -89,6 +89,8 @@
             @:preview-teleported=""/>
             @:preview-teleported=""/>
             }else if(@column.EffectType == "fk"){
             }else if(@column.EffectType == "fk"){
             @:<span>{{scope.row.@LowerFirstLetter(@column.FkEntityName)@(@column.FkColumnName)}}</span>
             @:<span>{{scope.row.@LowerFirstLetter(@column.FkEntityName)@(@column.FkColumnName)}}</span>
+            }else if(@column.EffectType == "ApiTreeSelect"){
+            @:<span>{{scope.row.@LowerFirstLetter(@column.ColumnName)@(column.DisplayColumn)}}</span>
             }else if(@column.EffectType == "Switch"){
             }else if(@column.EffectType == "Switch"){
             @:<el-tag v-if="scope.row.@(@column.LowerColumnName)"> 是 </el-tag>
             @:<el-tag v-if="scope.row.@(@column.LowerColumnName)"> 是 </el-tag>
             @:<el-tag type="danger" v-else=""> 否 </el-tag>
             @:<el-tag type="danger" v-else=""> 否 </el-tag>
@@ -101,7 +103,7 @@
         </el-table-column>
         </el-table-column>
         }
         }
         else {
         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)" show-overflow-tooltip="" />
         }
         }
         }
         }
         }
         }