Forráskód Böngészése

chore: 优化代码生成模板

喵你个旺呀 1 éve
szülő
commit
dabf2c2b2e

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

@@ -7,16 +7,16 @@
 namespace @Model.NameSpace;
 
 /// <summary>
-/// @(@Model.BusName)输出参数
+/// @(Model.BusName)输出参数
 /// </summary>
-public class @(@Model.ClassName)Dto
+public class @(Model.ClassName)Dto
 {
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "fk" && @column.FkEntityName != "" && @column.FkColumnName != ""){
+if(column.EffectType == "fk" && column.FkEntityName != "" && column.FkColumnName != ""){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-    @:public @(@column.FkColumnNetType) @(@column.PropertyName)@(@column.FkColumnName) { get; set; }
+    @:public @(column.FkColumnNetType) @(column.PropertyName)@(column.FkColumnName) { get; set; }
     @:
 }
 }

+ 25 - 36
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Entity.cs.vm

@@ -4,90 +4,79 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-@if(@Model.BaseClassName!=""){
+@if(Model.BaseClassName!=""){
 @:using Admin.NET.Core;
 }
 namespace @Model.NameSpace;
 
 /// <summary>
-/// @(@Model.Description)
+/// @(Model.Description)
 /// </summary>
-[SugarTable("@(@Model.TableName)","@(@Model.Description)")]
-[Tenant("@(@Model.ConfigId)")]
-public class @(@Model.EntityName) @Model.BaseClassName
+[SugarTable("@(Model.TableName)","@(Model.Description)")]
+[Tenant("@(Model.ConfigId)")]
+public class @(Model.EntityName) @Model.BaseClassName
 {
 @foreach (var column in Model.TableField){
-if(@Model.BaseClassName=="" && @column.IsPrimarykey){
+if(Model.BaseClassName=="" && column.IsPrimarykey){
     @:/// <summary>
     @:/// @column.ColumnDescription
     @:/// </summary>
-    if(!@column.IsNullable){
+    if(!column.IsNullable){
     @:[Required]
     }
-    if(@column.DataType=="string"||@column.DataType=="string?"){
+    if(column.DataType.TrimEnd('?') == "string"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true, Length = @column.Length)]
-    }
-    else if(@column.DataType=="decimal"||@column.DataType=="decimal?"){
+    } else if (column.DataType.TrimEnd('?') == "decimal"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true, Length = @column.Length, DecimalDigits=@column.DecimalDigits )]
-    }    
-    else{
+    } else {
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true)]
     }
     @:public @column.DataType @column.PropertyName { get; set; }
     @:
-}
-else if(@Model.BaseClassName=="" && !@column.IsPrimarykey){
+} else if(Model.BaseClassName == "" && !column.IsPrimarykey){
     @:/// <summary>
     @:/// @column.ColumnDescription
     @:/// </summary>
-    if(!@column.IsNullable){
+    if(!column.IsNullable){
     @:[Required]
     }
-    if(@column.DataType=="string"||@column.DataType=="string?"){
+    if(column.DataType.TrimEnd('?') == "string"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription", Length = @column.Length)]
-    }
-    else if(@column.DataType=="decimal"||@column.DataType=="decimal?"){
+    } else if (column.DataType.TrimEnd('?') == "decimal"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription", Length = @column.Length, DecimalDigits=@column.DecimalDigits )]
-    } 
-    else{
+    } else {
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription")]
     }
     @:public @column.DataType @column.PropertyName { get; set; }
     @:
-}
-else if(@Model.BaseClassName!="" && @column.IsPrimarykey && @column.DbColumnName.ToLower()!="id"){
+} else if(Model.BaseClassName != "" && column.IsPrimarykey && column.DbColumnName.ToLower() != "id"){
     @:/// <summary>
     @:/// @column.ColumnDescription
     @:/// </summary>
-    if(!@column.IsNullable){
+    if(!column.IsNullable){
     @:[Required]
     }
-    if(@column.DataType=="string"||@column.DataType=="string?"){
+    if(column.DataType.TrimEnd('?') == "string"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true, Length = @column.Length)]
-    }
-    else if(@column.DataType=="decimal"||@column.DataType=="decimal?"){
+    } else if (column.DataType.TrimEnd('?') == "decimal"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true, Length = @column.Length, DecimalDigits=@column.DecimalDigits )]
-    } 
-    else{
+    } else {
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true)]
     }
     @:public @column.DataType @column.PropertyName { get; set; }
     @:
-}
-else if(@Model.BaseClassName!="" && !@column.IsPrimarykey && @column.DbColumnName.ToLower()!="id"){
+} else if(Model.BaseClassName != "" && !column.IsPrimarykey && column.DbColumnName.ToLower() != "id"){
     @:/// <summary>
     @:/// @column.ColumnDescription
     @:/// </summary>
-    if(!@column.IsNullable){
+    if(!column.IsNullable){
     @:[Required]
     }
-    if(@column.DataType=="string"||@column.DataType=="string?"){
+    if(column.DataType.TrimEnd('?') == "string"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription", Length = @column.Length)]
-    }
-    else if(@column.DataType=="decimal"||@column.DataType=="decimal?"){
+    } else if (column.DataType.TrimEnd('?') == "decimal"){
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription", Length = @column.Length, DecimalDigits=@column.DecimalDigits )]
-    }
-    else{
+    } else {
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription")]
     }
     @:public @column.DataType @column.PropertyName { get; set; }

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

@@ -10,13 +10,12 @@ using System.ComponentModel.DataAnnotations;
 namespace @Model.NameSpace;
 
 /// <summary>
-/// @(@Model.BusName)基础输入参数
+/// @(Model.BusName)基础输入参数
 /// </summary>
-public class @(@Model.ClassName)BaseInput
+public class @(Model.ClassName)BaseInput
 {
 @foreach (var column in Model.TableField){
-if (@column.ColumnKey != "True" && @column.WhetherAddUpdate == "Y" && !(@column.NetType == "StatusEnum" && @column.PropertyName == "Status")){
-
+if (column.ColumnKey != "True" && column.WhetherAddUpdate == "Y" && !(column.NetType == "StatusEnum" && column.PropertyName == "Status")){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
@@ -27,48 +26,43 @@ if (@column.ColumnKey != "True" && @column.WhetherAddUpdate == "Y" && !(@column.
 }
 
 /// <summary>
-/// @(@Model.BusName)分页查询输入参数
+/// @(Model.BusName)分页查询输入参数
 /// </summary>
-public class Page@(@Model.ClassName)Input : BasePageInput
+public class Page@(Model.ClassName)Input : BasePageInput
 {
 @foreach (var column in Model.TableField){
-    if (@column.QueryWhether == "Y"){
-
+    if (column.QueryWhether == "Y"){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-    if(@column.NetType?.EndsWith("?") == true){
-    @:public @column.NetType @column.PropertyName { get; set; }
-    }else {
-    @:public @(@column.NetType)? @column.PropertyName { get; set; }
+    @:public @column.NetType.TrimEnd('?')? @column.PropertyName { get; set; }
     }
-    @:
 
-    if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
+    if(column.NetType?.TrimEnd('?') == "DateTime" && column.QueryType == "~"){
     @:/// <summary>
-    @: /// @(@column.ColumnComment)范围
+    @: /// @(column.ColumnComment)范围
     @: /// </summary>
-    @: public DateTime?[] @(@column.PropertyName)Range { get; set; } 
-
-}
+    @: public DateTime?[] @(column.PropertyName)Range { get; set; }
+    }
+    @:
 }
 }
 }
 
 /// <summary>
-/// @(@Model.BusName)增加输入参数
+/// @(Model.BusName)增加输入参数
 /// </summary>
-public class Add@(@Model.ClassName)Input
+public class Add@(Model.ClassName)Input
 {
 @foreach (var column in Model.TableField){
-if (@column.WhetherAddUpdate == "Y"){
+if (column.WhetherAddUpdate == "Y"){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-if (@column.WhetherRequired == "Y") {
-    @:[Required(ErrorMessage = "@(@column.ColumnComment)不能为空")]
+if (column.WhetherRequired == "Y") {
+    @:[Required(ErrorMessage = "@(column.ColumnComment)不能为空")]
 }
-if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
+if (Regex.IsMatch(column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
     @:public @column.NetType.TrimEnd('?')? @column.PropertyName { get; set; }
 }else{
     @:public @column.NetType @column.PropertyName { get; set; }
@@ -79,16 +73,16 @@ if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
 }
 
 /// <summary>
-/// @(@Model.BusName)删除输入参数
+/// @(Model.BusName)删除输入参数
 /// </summary>
-public class Delete@(@Model.ClassName)Input
+public class Delete@(Model.ClassName)Input
 {
 @foreach (var column in Model.TableField.Where(u => u.ColumnKey == "True")){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-    @:[Required(ErrorMessage = "@(@column.ColumnComment)不能为空")]
-if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
+    @:[Required(ErrorMessage = "@(column.ColumnComment)不能为空")]
+if (Regex.IsMatch(column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
     @:public @column.NetType.TrimEnd('?')? @column.PropertyName { get; set; }
 }else{
     @:public @column.NetType @column.PropertyName { get; set; }
@@ -98,38 +92,38 @@ if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
 }
 
 /// <summary>
-/// @(@Model.BusName)批量删除输入参数
+/// @(Model.BusName)批量删除输入参数
 /// </summary>
-public class BatchDelete@(@Model.ClassName)Input
+public class BatchDelete@(Model.ClassName)Input
 {
 @foreach (var column in Model.TableField.Where(u => u.ColumnKey == "True")){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-    @:[Required(ErrorMessage = "@(@column.ColumnComment)列表不能为空")]
-if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
-    @:public List<@column.NetType.TrimEnd('?')?> @(@column.PropertyName)List { get; set; }
+    @:[Required(ErrorMessage = "@(column.ColumnComment)列表不能为空")]
+if (Regex.IsMatch(column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
+    @:public List<@column.NetType.TrimEnd('?')?> @(column.PropertyName)List { get; set; }
 }else{
-    @:public List<@column.NetType> @(@column.PropertyName)List { get; set; }
+    @:public List<@column.NetType> @(column.PropertyName)List { get; set; }
 }
     @:
 }
 }
 
 /// <summary>
-/// @(@Model.BusName)更新输入参数
+/// @(Model.BusName)更新输入参数
 /// </summary>
-public class Update@(@Model.ClassName)Input
+public class Update@(Model.ClassName)Input
 {
 @foreach (var column in Model.TableField){
-if (@column.ColumnKey == "True" || @column.WhetherAddUpdate == "Y" && !(@column.NetType == "StatusEnum" && @column.PropertyName == "Status")){
+if (column.ColumnKey == "True" || column.WhetherAddUpdate == "Y" && !(column.NetType == "StatusEnum" && column.PropertyName == "Status")){
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-if (@column.WhetherRequired == "Y" || @column.ColumnKey == "True") {
-    @:[Required(ErrorMessage = "@(@column.ColumnComment)不能为空")]
+if (column.WhetherRequired == "Y" || column.ColumnKey == "True") {
+    @:[Required(ErrorMessage = "@(column.ColumnComment)不能为空")]
 }
-if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
+if (Regex.IsMatch(column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
     @:public @column.NetType.TrimEnd('?')? @column.PropertyName { get; set; }
 }else{
     @:public @column.NetType @column.PropertyName { get; set; }
@@ -140,35 +134,35 @@ if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
 }
 
 /// <summary>
-/// @(@Model.BusName)主键查询输入参数
+/// @(Model.BusName)主键查询输入参数
 /// </summary>
-public class QueryById@(@Model.ClassName)Input : Delete@(@Model.ClassName)Input
+public class QueryById@(Model.ClassName)Input : Delete@(Model.ClassName)Input
 {
 
 }
 
 @if (Model.TableField.Any(x => x.WhetherImport == "Y")){
 @:/// <summary>
-@:/// @(@Model.BusName)数据导入实体
+@:/// @(Model.BusName)数据导入实体
 @:/// </summary>
 @:[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
-@:public class Import@(@Model.ClassName)Input : BaseImportInput
+@:public class Import@(Model.ClassName)Input : BaseImportInput
 @:{
     foreach (var column in Model.TableField.Where(x => x.WhetherImport == "Y")){
-    if (@column.WhetherAddUpdate == "Y") {
+    if (column.WhetherAddUpdate == "Y") {
     @:/// <summary>
     @:/// @column.ColumnComment
     @:/// </summary>
-    if (@column.WhetherRequired == "Y" || @column.NetType.TrimEnd('?').EndsWith("Enum")){
-    @:[ImporterHeader(Name = "*@(@column.ColumnComment)")]
-    @:[ExporterHeader("*@(@column.ColumnComment)", Format = "@", Width = 25, IsBold = true)]
-    }else{
-    @:[ImporterHeader(Name = "@(@column.ColumnComment)")]
-    @:[ExporterHeader("@(@column.ColumnComment)", Format = "@", Width = 25, IsBold = true)]
+    if (column.WhetherRequired == "Y" || column.NetType.TrimEnd('?').EndsWith("Enum")){
+    @:[ImporterHeader(Name = "*@(column.ColumnComment)")]
+    @:[ExporterHeader("*@(column.ColumnComment)", Format = "@", Width = 25, IsBold = true)]
+    } else {
+    @:[ImporterHeader(Name = "@(column.ColumnComment)")]
+    @:[ExporterHeader("@(column.ColumnComment)", Format = "@", Width = 25, IsBold = true)]
     }
-    if (Regex.IsMatch(@column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
+    if (Regex.IsMatch(column.NetType, "(.*?Enum|int|long|double|float|bool)[?]?")){
     @:public @column.NetType.TrimEnd('?')? @column.PropertyName { get; set; }
-    }else{
+    } else {
     @:public @column.NetType @column.PropertyName { get; set; }
     }
     @:

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

@@ -4,103 +4,105 @@
 }
 import request from '/@@/utils/request';
 enum Api {
-  Add@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/add',
-  Delete@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/delete',
-  BatchDelete@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/batchDelete',
-  Update@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/update',
-  Page@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/page',
-  Detail@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/detail',
+  Add@(Model.ClassName) = '/api/@(Model.LowerClassName)/add',
+  Delete@(Model.ClassName) = '/api/@(Model.LowerClassName)/delete',
+  BatchDelete@(Model.ClassName) = '/api/@(Model.LowerClassName)/batchDelete',
+  Update@(Model.ClassName) = '/api/@(Model.LowerClassName)/update',
+  Page@(Model.ClassName) = '/api/@(Model.LowerClassName)/page',
+  Detail@(Model.ClassName) = '/api/@(Model.LowerClassName)/detail',
 @if (Model.TableField.Any(x => x.WhetherImport == "Y")) {
-  @:Import@(@Model.ClassName)Data = '/api/@(@Model.LowerClassName)/import',
-  @:Download@(@Model.ClassName)Template = '/api/@(@Model.LowerClassName)/import',
+  @:Import@(Model.ClassName)Data = '/api/@(Model.LowerClassName)/import',
+  @:Download@(Model.ClassName)Template = '/api/@(Model.LowerClassName)/import',
+}
+@if (hasSetStatus) {
+  @:Set@(Model.ClassName)Status = '/api/@(Model.LowerClassName)/setStatus',
 }
-@if (hasSetStatus) @:  Set@(@Model.ClassName)Status = '/api/@(@Model.LowerClassName)/setStatus',
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "fk" && (@column.WhetherAddUpdate == "Y" || @column.QueryWhether == "Y")){
-  @:Get@(@column.FkEntityName)@(@column.PropertyName)Dropdown = '/api/@(@Model.LowerClassName)/@(@column.FkEntityName)@(@column.PropertyName)Dropdown',
-}else if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("Get@(@column.FkEntityName)Tree")){
-  @{definedObjects.Add("Get@(@column.FkEntityName)Tree", 1);}
-  @:Get@(@column.FkEntityName)Tree = '/api/@(@Model.LowerClassName)/@(@column.FkEntityName)Tree',
-}else if(@column.EffectType == "Upload"){
-  @:Upload@(@column.PropertyName) = '/api/@(@Model.LowerClassName)/Upload@(@column.PropertyName)',
+if(column.EffectType == "fk" && (column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
+  @:Get@(column.FkEntityName)@(column.PropertyName)Dropdown = '/api/@(Model.LowerClassName)/@(column.FkEntityName)@(column.PropertyName)Dropdown',
+}else if(column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("Get@(column.FkEntityName)Tree")){
+  @{definedObjects.Add("Get@(column.FkEntityName)Tree", 1);}
+  @:Get@(column.FkEntityName)Tree = '/api/@(Model.LowerClassName)/@(column.FkEntityName)Tree',
+}else if(column.EffectType == "Upload"){
+  @:Upload@(column.PropertyName) = '/api/@(Model.LowerClassName)/Upload@(column.PropertyName)',
 }
 }
 }
 
-// 增加@(@Model.BusName)
-export const add@(@Model.ClassName) = (params?: any) =>
+// 增加@(Model.BusName)
+export const add@(Model.ClassName) = (params?: any) =>
 	request({
-		url: Api.Add@(@Model.ClassName),
+		url: Api.Add@(Model.ClassName),
 		method: 'post',
 		data: params,
 	});
 
-// 删除@(@Model.BusName)
-export const delete@(@Model.ClassName) = (params?: any) => 
+// 删除@(Model.BusName)
+export const delete@(Model.ClassName) = (params?: any) => 
 	request({
-			url: Api.Delete@(@Model.ClassName),
+			url: Api.Delete@(Model.ClassName),
 			method: 'post',
 			data: params,
 		});
 
-// 批量删除@(@Model.BusName)
-export const batchDelete@(@Model.ClassName) = (params?: any) =>
+// 批量删除@(Model.BusName)
+export const batchDelete@(Model.ClassName) = (params?: any) =>
 	request({
-		url: Api.BatchDelete@(@Model.ClassName),
+		url: Api.BatchDelete@(Model.ClassName),
 		method: 'post',
 		data: params,
 	});
 
-// 编辑@(@Model.BusName)
-export const update@(@Model.ClassName) = (params?: any) => 
+// 编辑@(Model.BusName)
+export const update@(Model.ClassName) = (params?: any) => 
 	request({
-			url: Api.Update@(@Model.ClassName),
+			url: Api.Update@(Model.ClassName),
 			method: 'post',
 			data: params,
 		});
 @if (hasSetStatus) {
 @:
-@:// 设置@(@Model.BusName)状态
-@:export const set@(@Model.ClassName)Status = (params?: any) =>
+@:// 设置@(Model.BusName)状态
+@:export const set@(Model.ClassName)Status = (params?: any) =>
 	@:request({
-		@:url: Api.Set@(@Model.ClassName)Status,
+		@:url: Api.Set@(Model.ClassName)Status,
 		@:method: 'post',
 		@:data: params,
 	@:});
 }
 
-// 分页查询@(@Model.BusName)
-export const page@(@Model.ClassName) = (params?: any) => 
+// 分页查询@(Model.BusName)
+export const page@(Model.ClassName) = (params?: any) => 
 	request({
-			url: Api.Page@(@Model.ClassName),
+			url: Api.Page@(Model.ClassName),
 			method: 'post',
 			data: params,
 		});
 
-// 详情@(@Model.BusName)
-export const detail@(@Model.ClassName) = (id: any) => 
+// 详情@(Model.BusName)
+export const detail@(Model.ClassName) = (id: any) => 
 	request({
-			url: Api.Detail@(@Model.ClassName),
+			url: Api.Detail@(Model.ClassName),
 			method: 'get',
 			data: { id },
 		});
 
 @if (Model.TableField.Any(x => x.WhetherImport == "Y")) {
-@:// 下载@(@Model.BusName)数据导入模板
-@:export const download@(@Model.ClassName)Template = () =>
+@:// 下载@(Model.BusName)数据导入模板
+@:export const download@(Model.ClassName)Template = () =>
 	@:request({
-		@:url: Api.Download@(@Model.ClassName)Template,
+		@:url: Api.Download@(Model.ClassName)Template,
 		@:responseType: 'arraybuffer',
 		@:method: 'get',
 	@:});
 @:
-@:// 导入@(@Model.BusName)记录
-@:export const import@(@Model.ClassName)Data = (file: any) => {
+@:// 导入@(Model.BusName)记录
+@:export const import@(Model.ClassName)Data = (file: any) => {
 	@:const formData = new FormData();
 	@:formData.append('file', file);
 	@:return request({
 		@:headers: { 'Content-Type': 'multipart/form-data' },
-		@:url: Api.Import@(@Model.ClassName)Data,
+		@:url: Api.Import@(Model.ClassName)Data,
 		@:responseType: 'arraybuffer',
 		@:method: 'post',
 		@:data: formData,
@@ -109,31 +111,31 @@ export const detail@(@Model.ClassName) = (id: any) =>
 }
 
 @foreach (var column in Model.TableField){
-	if(@column.EffectType == "fk" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
-@:export const get@(@column.FkEntityName)@(@column.PropertyName)Dropdown = () =>
+	if(column.EffectType == "fk" && (column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
+@:export const get@(column.FkEntityName)@(column.PropertyName)Dropdown = () =>
 		@:request({
-		@:url: Api.Get@(@column.FkEntityName)@(@column.PropertyName)Dropdown,
+		@:url: Api.Get@(column.FkEntityName)@(column.PropertyName)Dropdown,
 		@:method: 'get'
 		@:});
-	}else if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("get@(@column.FkEntityName)Tree")){
-		@{definedObjects.Add("get@(@column.FkEntityName)Tree", 1);}
-@:export const get@(@column.FkEntityName)Tree = () =>
+	}else if(column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("get@(column.FkEntityName)Tree")){
+		@{definedObjects.Add("get@(column.FkEntityName)Tree", 1);}
+@:export const get@(column.FkEntityName)Tree = () =>
 		@:request({
-		@:url: Api.Get@(@column.FkEntityName)Tree,
+		@:url: Api.Get@(column.FkEntityName)Tree,
 		@:method: 'get'
 		@:});
-    }else if(@column.EffectType == "Upload"){
+    }else if(column.EffectType == "Upload"){
 	
 	@:/**
-	@:* 上传@(@column.ColumnComment) 
+	@:* 上传@(column.ColumnComment) 
 	@:*/
-@:export const upload@(@column.PropertyName) = (params: any) =>
-		@:uploadFileHandle(params, Api.Upload@(@column.PropertyName))
+@:export const upload@(column.PropertyName) = (params: any) =>
+		@:uploadFileHandle(params, Api.Upload@(column.PropertyName))
 		}
 }
 
 @foreach (var column in Model.TableField){
-	if(@column.EffectType == "Upload"){
+	if(column.EffectType == "Upload"){
 	@:export const uploadFileHandle = (params: any, url: string) => { 
 	@:const formData = new window.FormData();
 	@:formData.append('file', params.file);

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

@@ -7,9 +7,9 @@
 namespace @Model.NameSpace;
 
 /// <summary>
-/// @(@Model.BusName)输出参数
+/// @(Model.BusName)输出参数
 /// </summary>
-public class @(@Model.ClassName)Output
+public class @(Model.ClassName)Output
 {
 @foreach (var column in Model.TableField){
     @:/// <summary>
@@ -22,41 +22,41 @@ if(column.EffectType == "fk")
     @:/// <summary>
     @:/// @(column.ColumnComment) 描述
     @:/// </summary>
-    @:public @(@column.FkColumnNetType) @(@column.PropertyName)@(@column.FkColumnName) { get; set; } 
+    @:public @(column.FkColumnNetType) @(column.PropertyName)@(column.FkColumnName) { get; set; } 
 
 }else if(column.EffectType == "Upload"){
     @:public @column.NetType @column.PropertyName { get; set; }
-    @:public SysFile @(@column.PropertyName)Attachment { get; set; }
+    @:public SysFile @(column.PropertyName)Attachment { get; set; }
 }else if(column.EffectType == "ApiTreeSelect"){
     @:public @column.NetType @column.PropertyName { get; set; } 
     @:
     @:/// <summary>
     @:/// @(column.ColumnComment) 描述 
     @:/// </summary>
-    @:public string? @(@column.PropertyName)@(@column.DisplayColumn) { get; set; } 
+    @:public string? @(column.PropertyName)@(column.DisplayColumn) { get; set; } 
 }else{
-    @:public @column.NetType @(@column.PropertyName) { get; set; }
+    @:public @column.NetType @(column.PropertyName) { get; set; }
 }
     @:
 }
 }
 @foreach (var column in Model.TableField){
-if (@column.EffectType == "ApiTreeSelect"){
+if (column.EffectType == "ApiTreeSelect"){
 @:
-    @:// 使用实际实体@(@column.FkTableName),所以这里就删了
+    @:// 使用实际实体@(column.FkTableName),所以这里就删了
     @:/*
-    @:[SugarTable("@(@column.FkTableName)")]
-    @:public class @(@column.FkEntityName)TreeOutput: EntityBaseId
+    @:[SugarTable("@(column.FkTableName)")]
+    @:public class @(column.FkEntityName)TreeOutput: EntityBaseId
     @:{
-        @:[SugarColumn(ColumnName = "@(@column.DisplayColumn)")]
-        @:public @(@Model.GetColumnNetType(@column.FkTableName,@column.DisplayColumn)) Label { get; set; }
+        @:[SugarColumn(ColumnName = "@(column.DisplayColumn)")]
+        @:public @(Model.GetColumnNetType(@column.FkTableName,@column.DisplayColumn)) Label { get; set; }
 
-        @:[SugarColumn(ColumnName = "@(@column.ValueColumn)", IsPrimaryKey = true, IsIdentity = false)]
-        @:public @(@Model.GetColumnNetType(@column.FkTableName,@column.ValueColumn))  Value { get; set; }
+        @:[SugarColumn(ColumnName = "@(column.ValueColumn)", IsPrimaryKey = true, IsIdentity = false)]
+        @:public @(Model.GetColumnNetType(@column.FkTableName,@column.ValueColumn))  Value { get; set; }
 
-        @:public @(@Model.GetColumnNetType(@column.FkTableName,@column.PidColumn)) @column.PidColumn { get; set; }
+        @:public @(Model.GetColumnNetType(@column.FkTableName,@column.PidColumn)) @column.PidColumn { get; set; }
         @:[SugarColumn(IsIgnore = true)]
-        @:public List<@(@column.FkEntityName)TreeOutput> Children { get; set; }
+        @:public List<@(column.FkEntityName)TreeOutput> Children { get; set; }
     @:}
     @:*/
 }
@@ -64,9 +64,9 @@ if (@column.EffectType == "ApiTreeSelect"){
 @if (Model.TableField.Any(x => x.WhetherImport == "Y")) {
 @:
 @:/// <summary>
-@:/// @(@Model.BusName)数据导入模板实体
+@:/// @(Model.BusName)数据导入模板实体
 @:/// </summary>
-@:public class Export@(@Model.ClassName)Output : Import@(@Model.ClassName)Input
+@:public class Export@(Model.ClassName)Output : Import@(Model.ClassName)Input
 @:{
 @:    [ImporterHeader(IsIgnore = true)]
 @:    [ExporterHeader(IsIgnore = true)]

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

@@ -8,6 +8,7 @@ using Admin.NET.Core.Service;
 using Microsoft.AspNetCore.Http;
 @{
     string joinTableName = "u";
+    string joinTableAlias = "";
     Dictionary<string, int> definedObjects = new Dictionary<string, int>();
     bool haveLikeCdt = false;
     foreach (var column in Model.TableField){
@@ -23,261 +24,257 @@ using Microsoft.AspNetCore.Http;
 namespace @Model.NameSpace;
 
 /// <summary>
-/// @(@Model.BusName)服务
+/// @(Model.BusName)服务
 /// </summary>
-[ApiDescriptionSettings(@(@Model.ProjectLastName)Const.GroupName, Order = 100)]
-public class @(@Model.ClassName)Service : IDynamicApiController, ITransient
+[ApiDescriptionSettings(@(Model.ProjectLastName)Const.GroupName, Order = 100)]
+public class @(Model.ClassName)Service : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<@(@Model.ClassName)> _@(@Model.LowerClassName)Rep;
+    private readonly SqlSugarRepository<@(Model.ClassName)> _@(Model.LowerClassName)Rep;
 @if (hasdictService) {
     @:private readonly SysDictTypeService _sysDictTypeService;
 }
-    public @(@Model.ClassName)Service(SqlSugarRepository<@(@Model.ClassName)> @(@Model.LowerClassName)Rep
+    public @(Model.ClassName)Service(SqlSugarRepository<@(Model.ClassName)> @(Model.LowerClassName)Rep
 @if (hasdictService) {
         @:,SysDictTypeService sysDictTypeService
 }
     ){
-        _@(@Model.LowerClassName)Rep = @(@Model.LowerClassName)Rep;
+        _@(Model.LowerClassName)Rep = @(Model.LowerClassName)Rep;
 @if (hasdictService) {
         @:_sysDictTypeService = sysDictTypeService;
 }
     }
 
     /// <summary>
-    /// 分页查询@(@Model.BusName)
+    /// 分页查询@(Model.BusName)
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
     [ApiDescriptionSettings(Name = "Page")]
-    [DisplayName("分页查询@(@Model.BusName)")]
-    public async Task<SqlSugarPagedList<@(@Model.ClassName)Output>> Page(Page@(@Model.ClassName)Input input)
+    [DisplayName("分页查询@(Model.BusName)")]
+    public async Task<SqlSugarPagedList<@(Model.ClassName)Output>> Page(Page@(Model.ClassName)Input input)
     {
 @if (haveLikeCdt) {
 		@:input.Keyword = input.Keyword?.Trim();
 }
-        var query = _@(@Model.LowerClassName)Rep.AsQueryable()
+        var query = _@(Model.LowerClassName)Rep.AsQueryable()
 @{string conditionFlag = "";}
 @if (haveLikeCdt) {
             @:.WhereIF(!string.IsNullOrEmpty(input.Keyword), u =>
     @foreach (var column in Model.TableField){
-        if (@column.QueryWhether == "Y" && column.QueryType == "like"){
-                @:@(conditionFlag)u.@(@column.PropertyName).Contains(input.Keyword)
+        if (column.QueryWhether == "Y" && column.QueryType == "like"){
+                @:@(conditionFlag)u.@(column.PropertyName).Contains(input.Keyword)
             conditionFlag="|| ";
         }
     }
             @:)
 }
 @foreach (var column in Model.TableField){
-if (@column.QueryWhether == "Y"){
-    if (@column.NetType?.TrimEnd('?') == "string"){
-        if(@column.QueryType == "like"){
-            @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName).Contains(input.@(@column.PropertyName).Trim()))
+if (column.QueryWhether == "Y"){
+    if (column.NetType?.TrimEnd('?') == "string"){
+        if(column.QueryType == "like"){
+            @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(column.PropertyName).Contains(input.@(column.PropertyName).Trim()))
         }else{
-            @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
+            @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(column.PropertyName) @column.QueryType input.@(column.PropertyName))
         }
-    }else if(@column.NetType?.TrimEnd('?') == "int" || @column.NetType?.TrimEnd('?') == "long"){
-            @:.WhereIF(input.@column.PropertyName>0, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
-    }else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
-            @:.WhereIF(input.@(@column.PropertyName)Range != null && input.@(@column.PropertyName)Range.Length == 2, u => u.@(@column.PropertyName) >= input.@(@column.PropertyName)Range[0] && u.@(@column.PropertyName) <= input.@(@column.PropertyName)Range[1])
-    }else if(@column.NetType?.TrimEnd('?').EndsWith("Enum") == true) {
-            @:.WhereIF(input.@(@column.PropertyName).HasValue, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
+    }else if(column.NetType?.TrimEnd('?') == "int" || column.NetType?.TrimEnd('?') == "long"){
+            @:.WhereIF(input.@column.PropertyName != null, u => u.@(column.PropertyName) @column.QueryType input.@(column.PropertyName))
+    }else if(column.NetType?.TrimEnd('?') == "DateTime" && column.QueryType == "~"){
+            @:.WhereIF(input.@(column.PropertyName)Range != null && input.@(column.PropertyName)Range.Length == 2, u => u.@(column.PropertyName) >= input.@(column.PropertyName)Range[0] && u.@(column.PropertyName) <= input.@(column.PropertyName)Range[1])
+    }else if(column.NetType?.TrimEnd('?').EndsWith("Enum") == true) {
+            @:.WhereIF(input.@(column.PropertyName).HasValue, u => u.@(column.PropertyName) @column.QueryType input.@(column.PropertyName))
     }
 } 
 }
 @if(Model.IsJoinTable){
-            @://处理外键和TreeSelector相关字段的连接
-    @foreach (var column in Model.TableField){
-        if(@column.EffectType == "fk"){
-            joinTableName += ", " + column.PropertyName.ToLower();
-            @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).@(@column.FkLinkColumnName) )
-        } else if(@column.EffectType == "ApiTreeSelect"){
-            joinTableName += ", " + column.PropertyName.ToLower();
-            @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).@(@column.ValueColumn) )
-        }
+            @:// 处理外键和TreeSelector相关字段的连接
+    @foreach (var column in Model.TableField.Where(u => u.EffectType == "fk" || u.EffectType == "ApiTreeSelect")){
+            joinTableAlias = Regex.Replace(column.LowerPropertyName, "[iI]d$", "");
+            joinTableName += ", " + joinTableAlias;
+            @:.LeftJoin<@column.FkEntityName>((@joinTableName) => u.@(column.PropertyName) == @joinTableAlias.@(column.EffectType == "fk" ? column.FkLinkColumnName : column.ValueColumn))
     }
-            @:.Select((@(@joinTableName)) => new @(@Model.ClassName)Output
+            @:.Select((@joinTableName) => new @(Model.ClassName)Output
             @:{
 @foreach (var column in Model.TableField){
-                if(@column.EffectType == "fk"){   
-                @:@(@column.PropertyName) = u.@(@column.PropertyName), 
-                @:@(@column.PropertyName)@(@column.FkColumnName) = @(@column.PropertyName.ToLower()).@(@column.FkColumnName),
-                } else if(@column.EffectType == "ApiTreeSelect"){  
-                @:@(@column.PropertyName) = u.@(@column.PropertyName),  
-                @:@(@column.PropertyName)@(@column.DisplayColumn) = @(@column.PropertyName.ToLower()).@(@column.DisplayColumn),
-                } else if(@column.NetType?.TrimEnd('?').EndsWith("Enum") == true){
-                @:@(@column.PropertyName) = (@(@column.NetType))u.@(@column.PropertyName),
+                joinTableAlias = Regex.Replace(column.LowerPropertyName, "[iI]d$", "");
+                if(column.EffectType == "fk"){
+                @:@(column.PropertyName) = u.@(column.PropertyName), 
+                @:@(column.PropertyName)@(column.FkColumnName) = @(joinTableAlias).@(column.FkColumnName),
+                } else if(column.EffectType == "ApiTreeSelect"){  
+                @:@(column.PropertyName) = u.@(column.PropertyName),  
+                @:@(column.PropertyName)@(column.DisplayColumn) = @(joinTableAlias).@(column.DisplayColumn),
+                } else if(column.NetType?.TrimEnd('?').EndsWith("Enum") == true){
+                @:@(column.PropertyName) = u.@(column.PropertyName),
                 } else {
-                @:@(@column.PropertyName) = u.@(@column.PropertyName),
+                @:@(column.PropertyName) = u.@(column.PropertyName),
                 }
 }
             @:});
 @foreach (var column in Model.TableField){
-    if(@column.EffectType == "fk"){   
+    if(column.EffectType == "fk"){   
  
-    }else if(@column.EffectType == "Upload"){
-            @://.Mapper(c => c.@(@column.PropertyName)Attachment, c => c.@(@column.PropertyName))
+    }else if(column.EffectType == "Upload"){
+            @://.Mapper(c => c.@(column.PropertyName)Attachment, c => c.@(column.PropertyName))
     }
 }
 } else {
-            @:.Select<@(@Model.ClassName)Output>();
+            @:.Select<@(Model.ClassName)Output>();
 }
 		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
     }
 
     /// <summary>
-    /// 增加@(@Model.BusName)
+    /// 增加@(Model.BusName)
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
     [ApiDescriptionSettings(Name = "Add")]
-    [DisplayName("增加@(@Model.BusName)")]
-    public async Task<long> Add(Add@(@Model.ClassName)Input input)
+    [DisplayName("增加@(Model.BusName)")]
+    public async Task<long> Add(Add@(Model.ClassName)Input input)
     {
-        var entity = input.Adapt<@(@Model.ClassName)>();
-        await _@(@Model.LowerClassName)Rep.InsertAsync(entity);
+        var entity = input.Adapt<@(Model.ClassName)>();
+        await _@(Model.LowerClassName)Rep.InsertAsync(entity);
         return entity.Id;
     }
 
     /// <summary>
-    /// 删除@(@Model.BusName)
+    /// 删除@(Model.BusName)
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
     [ApiDescriptionSettings(Name = "Delete")]
-    [DisplayName("删除@(@Model.BusName)")]
-    public async Task Delete(Delete@(@Model.ClassName)Input input)
+    [DisplayName("删除@(Model.BusName)")]
+    public async Task Delete(Delete@(Model.ClassName)Input input)
     {
 @foreach (var column in Model.TableField.Where(u => u.ColumnKey == "True")){
-        @:var entity = await _@(@Model.LowerClassName)Rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName)) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        @:var entity = await _@(Model.LowerClassName)Rep.GetFirstAsync(u => u.@(column.PropertyName) == input.@(column.PropertyName)) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
 }
-        await _@(@Model.LowerClassName)Rep.FakeDeleteAsync(entity);   //假删除
-        //await _@(@Model.LowerClassName)Rep.DeleteAsync(entity);   //真删除
+        await _@(Model.LowerClassName)Rep.FakeDeleteAsync(entity);   //假删除
+        //await _@(Model.LowerClassName)Rep.DeleteAsync(entity);   //真删除
     }
 
     /// <summary>
-    /// 批量删除@(@Model.BusName)
+    /// 批量删除@(Model.BusName)
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
     [ApiDescriptionSettings(Name = "BatchDelete")]
-    [DisplayName("批量删除@(@Model.BusName)")]
-    public async Task<int> BatchDelete(BatchDelete@(@Model.ClassName)Input input)
+    [DisplayName("批量删除@(Model.BusName)")]
+    public async Task<int> BatchDelete(BatchDelete@(Model.ClassName)Input input)
     {
 @foreach (var column in Model.TableField.Where(u => u.ColumnKey == "True")){
-        @:var list = await _@(@Model.LowerClassName)Rep.AsQueryable().Where(u => input.@(@column.PropertyName)List.Contains(u.@(@column.PropertyName))).ToListAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        @:var list = await _@(Model.LowerClassName)Rep.AsQueryable().Where(u => input.@(column.PropertyName)List.Contains(u.@(column.PropertyName))).ToListAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
 }
-        return await _@(@Model.LowerClassName)Rep.FakeDeleteAsync(list);   //假删除
-        //return await _@(@Model.LowerClassName)Rep.DeleteAsync(list);   //真删除
+        return await _@(Model.LowerClassName)Rep.FakeDeleteAsync(list);   //假删除
+        //return await _@(Model.LowerClassName)Rep.DeleteAsync(list);   //真删除
     }
 
     /// <summary>
-    /// 更新@(@Model.BusName)
+    /// 更新@(Model.BusName)
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
     [ApiDescriptionSettings(Name = "Update")]
-    [DisplayName("更新@(@Model.BusName)")]
-    public async Task Update(Update@(@Model.ClassName)Input input)
+    [DisplayName("更新@(Model.BusName)")]
+    public async Task Update(Update@(Model.ClassName)Input input)
     {
-        var entity = input.Adapt<@(@Model.ClassName)>();
-        await _@(@Model.LowerClassName)Rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+        var entity = input.Adapt<@(Model.ClassName)>();
+        await _@(Model.LowerClassName)Rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
     }
 @if (hasSetStatus) {
 @:
     @:/// <summary>
-    @:/// 设置@(@Model.BusName)状态
+    @:/// 设置@(Model.BusName)状态
     @:/// </summary>
     @:/// <param name="input"></param>
     @:/// <returns></returns>
     @:[ApiDescriptionSettings(Name = "SetStatus"), HttpPost]
-    @:[DisplayName("设置@(@Model.BusName)状态")]
+    @:[DisplayName("设置@(Model.BusName)状态")]
     @:public async Task SetStatus(BaseStatusInput input)
     @:{
-        @:await _@(@Model.LowerClassName)Rep.AsUpdateable().SetColumns(u => u.Status, input.Status).Where(u => u.Id == input.Id).ExecuteCommandAsync();
+        @:await _@(Model.LowerClassName)Rep.AsUpdateable().SetColumns(u => u.Status, input.Status).Where(u => u.Id == input.Id).ExecuteCommandAsync();
     @:} 
 }
 
     /// <summary>
-    /// 获取@(@Model.BusName)
+    /// 获取@(Model.BusName)
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpGet]
     [ApiDescriptionSettings(Name = "Detail")]
-    [DisplayName("获取@(@Model.BusName)")]
-    public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input)
+    [DisplayName("获取@(Model.BusName)")]
+    public async Task<@(Model.ClassName)> Detail([FromQuery] QueryById@(Model.ClassName)Input input)
     {
 @foreach (var column in Model.TableField){
 if (@column.ColumnKey == "True"){
-        @:return await _@(@Model.LowerClassName)Rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName));
+        @:return await _@(Model.LowerClassName)Rep.GetFirstAsync(u => u.@(column.PropertyName) == input.@(column.PropertyName));
 }   
 }            
     }
 
     /// <summary>
-    /// 获取@(@Model.BusName)列表
+    /// 获取@(Model.BusName)列表
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpGet]
     [ApiDescriptionSettings(Name = "List")]
-    [DisplayName("获取@(@Model.BusName)列表")]
-    public async Task<List<@(@Model.ClassName)Output>> List([FromQuery] Page@(@Model.ClassName)Input input)
+    [DisplayName("获取@(Model.BusName)列表")]
+    public async Task<List<@(Model.ClassName)Output>> List([FromQuery] Page@(Model.ClassName)Input input)
     {
-        return await _@(@Model.LowerClassName)Rep.AsQueryable().Select<@(@Model.ClassName)Output>().ToListAsync();
+        return await _@(Model.LowerClassName)Rep.AsQueryable().Select<@(Model.ClassName)Output>().ToListAsync();
     }
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "fk" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
+if(column.EffectType == "fk" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
 @:
     @:/// <summary>
-    @:/// 获取@(@column.ColumnComment)列表
+    @:/// 获取@(column.ColumnComment)列表
     @:/// </summary>
     @:/// <returns></returns>
-    @:[ApiDescriptionSettings(Name = "@(@column.FkEntityName)@(@column.PropertyName)Dropdown"), HttpGet]
-    @:[DisplayName("获取@(@column.ColumnComment)列表")]
-    @:public async Task<dynamic> @(@column.FkEntityName)@(@column.PropertyName)Dropdown()
+    @:[ApiDescriptionSettings(Name = "@(column.FkEntityName)@(column.PropertyName)Dropdown"), HttpGet]
+    @:[DisplayName("获取@(column.ColumnComment)列表")]
+    @:public async Task<dynamic> @(column.FkEntityName)@(column.PropertyName)Dropdown()
     @:{
-        @:return await _@(@Model.LowerClassName)Rep.Context.Queryable<@(@column.FkEntityName)>()
-                @:.Select(u => new
-                @:{
-                    @:Label = u.@(@column.FkColumnName),
-                    @:Value = u.@(@column.FkLinkColumnName)
-                @:}
-                @:).ToListAsync();
+        @:return await _@(Model.LowerClassName)Rep.Context.Queryable<@(column.FkEntityName)>().Select(u => new
+            @:{
+                @:Label = u.@(column.FkColumnName),
+                @:Value = u.@(column.FkLinkColumnName)
+            @:}
+        @:).ToListAsync();
     @:}
 }
 }
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "Upload"){
+if(column.EffectType == "Upload"){
 @:
     @:/// <summary>
-    @:/// 上传@(@column.ColumnComment)
+    @:/// 上传@(column.ColumnComment)
     @:/// </summary>
     @:/// <param name="file"></param>
     @:/// <returns></returns>
-    @:[ApiDescriptionSettings(Name = "Upload@(@column.PropertyName)"), HttpPost]
-    @:[DisplayName("上传@(@column.ColumnComment)")]
-    @:public async Task<SysFile> Upload@(@column.PropertyName)([Required] IFormFile file)
+    @:[ApiDescriptionSettings(Name = "Upload@(column.PropertyName)"), HttpPost]
+    @:[DisplayName("上传@(column.ColumnComment)")]
+    @:public async Task<SysFile> Upload@(column.PropertyName)([Required] IFormFile file)
     @:{
             @:var service = App.GetRequiredService<SysFileService>();
-            @:return await service.UploadFile(new FileUploadInput { File = file, Path = "upload/@(@column.PropertyName)" }); 
+            @:return await service.UploadFile(new FileUploadInput { File = file, Path = "upload/@(column.PropertyName)" }); 
     @:} 
 }
 }
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(@column.FkEntityName)Tree")){
+if(column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(column.FkEntityName)Tree")){
 @:
-    @{definedObjects.Add("@(@column.FkEntityName)Tree", 1);}
-    @:[HttpGet("@(@column.FkEntityName)Tree")]
-    @:[DisplayName("获取@(@column.FkEntityName)Tree")]
-    @:public async Task<dynamic> @(@column.FkEntityName)Tree()
+    @{definedObjects.Add("@(column.FkEntityName)Tree", 1);}
+    @:[HttpGet("@(column.FkEntityName)Tree")]
+    @:[DisplayName("获取@(column.FkEntityName)Tree")]
+    @:public async Task<dynamic> @(column.FkEntityName)Tree()
     @:{
-        @:return await _@(@Model.LowerClassName)Rep.Context.Queryable<@(@column.FkEntityName)>().ToTreeAsync(u => u.Children, u => u.@(@column.PidColumn), 0);
+        @:return await _@(Model.LowerClassName)Rep.Context.Queryable<@(column.FkEntityName)>().ToTreeAsync(u => u.Children, u => u.@(column.PidColumn), 0);
     @:}
 }
 }
@@ -296,21 +293,21 @@ if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(@colu
 @if (importField?.Count() > 0) {
 @:
     @:/// <summary>
-    @:/// 下载@(@Model.BusName)数据导入模板
+    @:/// 下载@(Model.BusName)数据导入模板
     @:/// </summary>
     @:/// <returns></returns>
-    @:[DisplayName("下载@(@Model.BusName)数据导入模板")]
+    @:[DisplayName("下载@(Model.BusName)数据导入模板")]
     @:[ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
     @:public IActionResult DownloadTemplate()
     @:{
-        @:return ExcelHelper.ExportTemplate(new List<Export@(@Model.ClassName)Output>(), "@(@Model.BusName)导入模板");
+        @:return ExcelHelper.ExportTemplate(new List<Export@(Model.ClassName)Output>(), "@(Model.BusName)导入模板");
     @:}
 @:
     @:/// <summary>
-    @:/// 导入@(@Model.BusName)记录 📃
+    @:/// 导入@(Model.BusName)记录 📃
     @:/// </summary>
     @:/// <returns></returns>
-    @:[DisplayName("导入@(@Model.BusName)记录")]
+    @:[DisplayName("导入@(Model.BusName)记录")]
     @:[ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
     @:public IActionResult ImportData([Required] IFormFile file)
     @:{
@@ -344,9 +341,9 @@ if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(@colu
                     @:var storageable = _@(@Model.LowerClassName)Rep.Context.Storageable(rows)
                         foreach (var column in importField){
                         if (@column.WhetherRequired == "Y"){
-                        if(@column.NetType.TrimEnd('?') == "string"){
+                        if(column.NetType.TrimEnd('?') == "string"){
                         @:.SplitError(it => string.IsNullOrWhiteSpace(it.Item.@(@column.PropertyName)), "@(@column.ColumnComment)不能为空")
-                        } else if(@column.NetType.EndsWith('?') == true){
+                        } else if(column.NetType.EndsWith('?') == true){
                         @:.SplitError(it => it.Item.@(@column.PropertyName) == null, "@(@column.ColumnComment)不能为空")
                         }}
                         if (@column.NetType?.TrimEnd('?') == "string"){

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

@@ -1,40 +1,40 @@
 import { h } from 'vue';
 import { BasicColumn, FormSchema } from '/@@/components/Table';
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "Upload"){
+if(column.EffectType == "Upload"){
 @:import { uploadFile } from '/@@/api/sys/admin';
-}else if(@column.EffectType == "fk"){
-@:import { get@(@column.FkEntityName)Dropdown } from '/@@/api/main/@(@Model.ClassName)';
-}else if(@column.EffectType == "Select"){
+}else if(column.EffectType == "fk"){
+@:import { get@(column.FkEntityName)Dropdown } from '/@@/api/main/@(Model.ClassName)';
+}else if(column.EffectType == "Select"){
 @:import { getDataList } from '/@@/api/sys/admin';
-}else if(@column.EffectType == "ApiTreeSelect"){
-@:import { get@(@column.FkEntityName)Tree } from '/@@/api/main/@(@Model.ClassName)';
-}else if(@column.EffectType == "ConstSelector"){
+}else if(column.EffectType == "ApiTreeSelect"){
+@:import { get@(column.FkEntityName)Tree } from '/@@/api/main/@(Model.ClassName)';
+}else if(column.EffectType == "ConstSelector"){
 @:import { codeToName, getSelector } from '/@@/utils/helper/constSelectorHelper';
-}else if(@column.EffectType == "Switch"){
+}else if(column.EffectType == "Switch"){
 @:import { Switch } from 'ant-design-vue';
 }
 }
 export const columns: BasicColumn[] = [
   @foreach (var column in Model.TableField){
-  if(@column.WhetherTable == "Y"){
+  if(column.WhetherTable == "Y"){
   @:{
     @:title: '@column.ColumnComment',
     @:dataIndex: '@column.LowerPropertyName',    
     @:sorter: true,
-if(@column.EffectType == "Upload"){
-    @:slots: { customRender: '@(@column.LowerPropertyName)' },
-}else if(@column.EffectType == "fk"){
+if(column.EffectType == "Upload"){
+    @:slots: { customRender: '@(column.LowerPropertyName)' },
+}else if(column.EffectType == "fk"){
     @:customRender: ({ record }) => {
-      @:return record.fk@(@column.PropertyName).@(@column.LowerFkColumnName);
+      @:return record.fk@(column.PropertyName).@(column.LowerFkColumnName);
     @:},
-}else if(@column.EffectType == "Switch"){
+}else if(column.EffectType == "Switch"){
     @:customRender: ({ record }) => {
-      @:return h(@(@column.EffectType), { checked: record.@(@column.LowerPropertyName) });
+      @:return h(@(column.EffectType), { checked: record.@(column.LowerPropertyName) });
     @:},
-}else if(@column.EffectType == "ConstSelector"){
+}else if(column.EffectType == "ConstSelector"){
     @:customRender: ({ record }) => {
-      @:return codeToName(record.@(@column.LowerPropertyName), '@(@column.DictTypeCode)');
+      @:return codeToName(record.@(column.LowerPropertyName), '@(column.DictTypeCode)');
     @:},
 }
   @:},
@@ -49,45 +49,44 @@ export const searchFormSchema: FormSchema[] = [
     @:field: '@column.LowerPropertyName',
     @:label: '@column.ColumnComment',
     @:colProps: { span: 8 },
-if(@column.EffectType == "fk"){
+if(column.EffectType == "fk"){
     @:component: 'ApiSelect',
     @:componentProps: {
-      @:api: get@(@column.FkEntityName)Dropdown,
+      @:api: get@(column.FkEntityName)Dropdown,
       @:labelField: 'label',
       @:valueField: 'value',
     @:},
-}else if(@column.EffectType == "Select"){
+}else if(column.EffectType == "Select"){
     @:component: 'ApiSelect',
     @:componentProps: {
       @:api: getDataList,
-      @:params: '@(@column.DictTypeCode)',
+      @:params: '@(column.DictTypeCode)',
       @:fieldNames: {
         @:label: 'label',
         @:value: 'value',
       @:},
     @:},
-}else if(@column.EffectType == "ConstSelector"){
+}else if(column.EffectType == "ConstSelector"){
     @:component: 'Select',
     @:componentProps: {
-      @:options: getSelector('@(@column.DictTypeCode)'),
+      @:options: getSelector('@(column.DictTypeCode)'),
       @:fieldNames: {
         @:label: 'name',
         @:value: 'code',
       @:},
     @:},
-}else if(@column.EffectType == "ApiTreeSelect"){
-    @:component: '@(@column.EffectType)',
+}else if(column.EffectType == "ApiTreeSelect"){
+    @:component: '@(column.EffectType)',
     @:componentProps: {
-      @:api: get@(@column.FkEntityName)Tree,
+      @:api: get@(column.FkEntityName)Tree,
     @:},
 }
-else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
+else if(column.NetType?.TrimEnd('?') == "DateTime" && column.QueryType == "~"){
     @:component: 'RangePicker',
     @:componentProps: {
     @:  valueFormat:"YYYY-MM-DD"
     @:},
-}
-else{
+} else {
     @:component: 'Input',
 }
 
@@ -100,39 +99,39 @@ export const formSchema: FormSchema[] = [
   @:{
     @:label: '@column.ColumnComment',
     @:field: '@column.LowerPropertyName',
-if(@column.EffectType == "fk"){
+if(column.EffectType == "fk"){
     @:component: 'ApiSelect',
     @:componentProps: {
-      @:api: get@(@column.FkEntityName)Dropdown,
+      @:api: get@(column.FkEntityName)Dropdown,
       @:labelField: 'label',
       @:valueField: 'value',
     @:},
-}else if(@column.EffectType == "Select"){
+}else if(column.EffectType == "Select"){
     @:component: 'ApiSelect',
     @:componentProps: {
       @:api: getDataList,
-      @:params: '@(@column.DictTypeCode)',
+      @:params: '@(column.DictTypeCode)',
       @:fieldNames: {
         @:label: 'label',
         @:value: 'value',
       @:},
     @:},
-}else if(@column.EffectType == "ConstSelector"){
+}else if(column.EffectType == "ConstSelector"){
     @:component: 'Select',
     @:componentProps: {
-      @:options: getSelector('@(@column.DictTypeCode)'),
+      @:options: getSelector('@(column.DictTypeCode)'),
       @:fieldNames: {
         @:label: 'name',
         @:value: 'code',
       @:},
     @:},
-}else if(@column.EffectType == "ApiTreeSelect"){
-    @:component: '@(@column.EffectType)',
+}else if(column.EffectType == "ApiTreeSelect"){
+    @:component: '@(column.EffectType)',
     @:componentProps: {
-      @:api: get@(@column.FkEntityName)Tree,
+      @:api: get@(column.FkEntityName)Tree,
     @:},
-}else if(@column.EffectType == "Switch"){
-    @:component: '@(@column.EffectType)',
+}else if(column.EffectType == "Switch"){
+    @:component: '@(column.EffectType)',
     @:componentProps: {
       @:checkedChildren: '是',
       @:unCheckedChildren: '否',
@@ -140,22 +139,21 @@ if(@column.EffectType == "fk"){
 }else{
     @:component: '@column.EffectType',
 }
-    if(@column.WhetherRequired == "Y"){
+    if(column.WhetherRequired == "Y"){
     @:required: true,
     }else{
     @:required: false,
     }
-    if(@column.EffectType == "Upload"){
+    if(column.EffectType == "Upload"){
     @:componentProps: {
       @:maxNumber: 1,
       @:api: uploadFile,
     @:},
     }
-  if(@column.LowerPropertyName == "id"){
+  if(column.LowerPropertyName == "id"){
     @:show: false,
   }
     @:colProps: { span: 12 },
   @:},
-
   }
 ];

+ 10 - 10
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/dataModal.vue.vm

@@ -8,7 +8,7 @@
   import { BasicModal, useModalInner } from '/@@/components/Modal';
   import { BasicForm, useForm } from '/@@/components/Form/index';
   import { formSchema } from './data.data';
-  import { add@(@Model.ClassName), update@(@Model.ClassName) } from '/@@/api/main/@(@Model.ClassName)';
+  import { add@(Model.ClassName), update@(Model.ClassName) } from '/@@/api/main/@(Model.ClassName)';
 
   export default defineComponent({
     components: { BasicModal, BasicForm },
@@ -32,32 +32,32 @@
             ...data.record,
           });
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "Upload"){
-          @:if (data.record.@(@column.LowerPropertyName)) {
+if(column.EffectType == "Upload"){
+          @:if (data.record.@(column.LowerPropertyName)) {
             @:setFieldsValue({
-              @:@(@column.LowerPropertyName): [data.record.@(@column.LowerPropertyName)Attachment],
+              @:@(column.LowerPropertyName): [data.record.@(column.LowerPropertyName)Attachment],
             @:});
           @:}
 }
 }
         }
       });
-      const getTitle = computed(() => (!unref(isUpdate) ? '新增@(@Model.BusName)' : '编辑@(@Model.BusName)'));
+      const getTitle = computed(() => (!unref(isUpdate) ? '新增@(Model.BusName)' : '编辑@(Model.BusName)'));
       async function handleSubmit() {
         try {
           var values = await validate();
 @foreach (var column in Model.TableField){
-if(@column.EffectType == "Upload"){
-          @:if (values.@(@column.LowerPropertyName)) {
-            @:values = { ...values, @(@column.LowerPropertyName): values.@(@column.LowerPropertyName)[0].id };
+if(column.EffectType == "Upload"){
+          @:if (values.@(column.LowerPropertyName)) {
+            @:values = { ...values, @(column.LowerPropertyName): values.@(column.LowerPropertyName)[0].id };
           @:}
 }
 }
           setModalProps({ confirmLoading: true });
           if (!unref(isUpdate)) {
-            await add@(@Model.ClassName)(values);
+            await add@(Model.ClassName)(values);
           } else {
-            await update@(@Model.ClassName)(values);
+            await update@(Model.ClassName)(values);
           }
           closeModal();
           emit('success');

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

@@ -4,7 +4,7 @@
 	var pkFieldName = LowerFirstLetter(pkField.PropertyName);
 }
 <template>
-	<div class="@(@Model.LowerClassName)-container">
+	<div class="@(Model.LowerClassName)-container">
 		<el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
 			<template #header>
 				<div style="color: #fff">
@@ -15,30 +15,30 @@
 			<el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
 				<el-row :gutter="35">
 					@foreach (var column in Model.TableField){
-					if(@column.ColumnKey == "True"){
+					if(column.ColumnKey == "True"){
 					@:<el-form-item v-show="false">
-						<el-input v-model="ruleForm.@(@column.LowerPropertyName)" />
+						<el-input v-model="ruleForm.@(column.LowerPropertyName)" />
 					</el-form-item>
 					}else{
-					if (@column.WhetherAddUpdate == "Y"){
-					if(@column.EffectType == "fk"){
+					if (column.WhetherAddUpdate == "Y"){
+					if(column.EffectType == "fk"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
-							@:<el-select clearable filterable v-model="ruleForm.@(@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-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
+							@:<el-select clearable filterable v-model="ruleForm.@(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>
 					</el-col>
-					}else if(@column.EffectType == "ApiTreeSelect"){
+					}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.LowerPropertyName)">
+						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
 							<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.LowerPropertyName)"
+								v-model="ruleForm.@(column.LowerPropertyName)"
 							>
 								<template #default="{ node, data }">
 									<span>{{ data.name }}</span>
@@ -47,25 +47,25 @@
 							</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-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
-							@:<el-input v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请输入@(@column.ColumnComment)" maxlength="@(@column.ColumnLength)" show-word-limit clearable />
+						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
+							@:<el-input v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请输入@(column.ColumnComment)" maxlength="@(@column.ColumnLength)" show-word-limit clearable />
 						</el-form-item>
 					</el-col>
-					}else if(@column.EffectType == "InputNumber"){
+					}else if(column.EffectType == "InputNumber"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							@:<el-input-number v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请输入@(@column.ColumnComment)" clearable />
 						</el-form-item>
 					</el-col>
-					}else if(@column.EffectType == "InputTextArea"){
+					}else if(column.EffectType == "InputTextArea"){
 					@:<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							@:<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"){
+					}else if(column.EffectType == "Select"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							@:<el-select clearable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
@@ -73,7 +73,7 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
-					}else if(@column.EffectType == "ConstSelector"){
+					}else if(column.EffectType == "ConstSelector"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							@:<el-select clearable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
@@ -81,19 +81,19 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
-					}else if(@column.EffectType == "Switch"){
+					}else if(column.EffectType == "Switch"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							@:<el-switch v-model="ruleForm.@(@column.LowerPropertyName)" active-text="是" inactive-text="否" />
 						</el-form-item>
 					</el-col>
-					}else if(@column.EffectType == "DatePicker"){
+					}else if(column.EffectType == "DatePicker"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							@:<el-date-picker v-model="ruleForm.@(@column.LowerPropertyName)" type="date" placeholder="@(@column.ColumnComment)" />
 						</el-form-item>
 					</el-col>
-					}else if(@column.EffectType == "Upload"){
+					}else if(column.EffectType == "Upload"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							@:<el-upload
@@ -109,7 +109,7 @@
 							</el-upload>
 						</el-form-item>
 					</el-col>
-					}else if(@column.EffectType == "EnumSelector"){
+					}else if(column.EffectType == "EnumSelector"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" @(@column.NetType == "StatusEnum" && @column.PropertyName == "Status" ? $"v-if=\"!ruleForm.{pkFieldName}\"" : "") >
 						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
 							if (@column.NetType == "StatusEnum" && @column.PropertyName == "Status") {
@@ -146,34 +146,34 @@
 	import { ref,onMounted } from "vue";
 	import { ElMessage } from "element-plus";
 	import type { FormRules } from "element-plus";
-@if(@Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
+@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 == "Select") || @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")){
+@if(Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
 	@:import { getDictLabelByVal as dv } from '/@@/utils/dict-utils';
 }
-@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
+@if(Model.TableField.Any(x=>x.EffectType == "DatePicker")){
   	@:import { formatDate } from '/@@/utils/formatTime';
 }
-@if(@Model.TableField.Any(x=>x.EffectType == "Upload")){
+@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/@(@Model.PagePath)/@(@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")){
+	if(column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("import__@(@column.FkEntityName)Tree")){
 	@{definedObjects.Add("import__@(@column.FkEntityName)Tree", 1);}
 	@:import { get@(@column.FkEntityName)Tree } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
 	}
-	if(@column.EffectType == "fk" && @column.WhetherAddUpdate == "Y"){
+	if(column.EffectType == "fk" && @column.WhetherAddUpdate == "Y"){
 	@:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
 	}
 }
-@if(@Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
+@if(Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
 	@:import { getAPI } from '/@@/utils/axios-utils';
 	@:import { SysEnumApi } from '/@@/api-services/api';
 }
@@ -193,10 +193,10 @@
 	//自行添加其他规则
 	const rules = ref<FormRules>({
 @foreach (var column in Model.TableField){
-	if(@column.WhetherRequired == "Y"){
-		if(@column.EffectType == "Input" || @column.EffectType == "InputNumber" || @column.EffectType == "InputTextArea"){
+	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 == "Select" || @column.EffectType == "EnumSelector" || @column.EffectType == "ApiTreeSelect"){
 		@:@column.LowerPropertyName: [{required: true, message: '请选择@(@column.ColumnComment)!', trigger: 'change',},],
 		}
     }
@@ -252,7 +252,7 @@
 	};
 
 	@foreach (var column in Model.TableField){
-	if(@column.EffectType == "fk" && @column.WhetherAddUpdate == "Y"){
+	if(column.EffectType == "fk" && @column.WhetherAddUpdate == "Y"){
 	@:const @LowerFirstLetter(@column.FkEntityName)@(@column.PropertyName)DropdownList = ref<any>([]); 
 	@:const get@(@column.FkEntityName)@(@column.PropertyName)DropdownList = async () => {
 		@:let list = await get@(@column.FkEntityName)@(@column.PropertyName)Dropdown();
@@ -264,7 +264,7 @@
 	}
 
 	@foreach (var column in Model.TableField){
-	if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("define_get@(@column.FkEntityName)TreeData")){
+	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 () => {
@@ -274,7 +274,7 @@
 	@:get@(@column.FkEntityName)TreeData();
 	@:
 	}
-	else if(@column.EffectType == "ConstSelector"){   
+	else if(column.EffectType == "ConstSelector"){   
 	@:const @LowerFirstLetter(@column.DictTypeCode)DropdownList = ref<any>([]); 
 	@:const get@(@column.DictTypeCode)DropdownList = async () => {
 		@:let list = await getConstSelectorList("@column.DictTypeCode");
@@ -289,7 +289,7 @@
 
 	@foreach (var column in Model.TableField){ 
 	if(column.WhetherAddUpdate=="N") continue;
-	if(@column.EffectType == "Upload"){
+	if(column.EffectType == "Upload"){
 	@:const upload@(@column.PropertyName)Handle = async (options: UploadRequestOptions) => {
 		@:const res = await upload@(@column.PropertyName)(options);
 		@:ruleForm.value.@(column.LowerPropertyName) = res.data.result?.url;

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

@@ -14,7 +14,7 @@
   var isStatus = false;
 }
 <template>
-  <div class="@(@Model.LowerClassName)-container">
+  <div class="@(Model.LowerClassName)-container">
     <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> 
       <el-form :model="queryParams" ref="queryForm" labelWidth="90">
         <el-row>
@@ -28,43 +28,43 @@
           }
           foreach (var column in Model.QueryWhetherList){
           @:<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
-            if(@column.EffectType == "Input" || @column.EffectType == "InputTextArea"){
+            if(column.EffectType == "Input" || column.EffectType == "InputTextArea"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-input v-model="queryParams.@(@column.LowerPropertyName)" clearable="" placeholder="请输入@(@column.ColumnComment)"/>
+              @:<el-input v-model="queryParams.@(column.LowerPropertyName)" clearable="" placeholder="请输入@(column.ColumnComment)"/>
             @:</el-form-item>
-            }else if(@column.EffectType == "InputTextArea"){
+            }else if(column.EffectType == "InputTextArea"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-input-number v-model="queryParams.@(@column.LowerPropertyName)"  clearable="" placeholder="请输入@(@column.ColumnComment)"/>
+              @:<el-input-number v-model="queryParams.@(column.LowerPropertyName)"  clearable="" placeholder="请输入@(column.ColumnComment)"/>
               @:
             @:</el-form-item>
-            }else if(@column.EffectType == "InputNumber"){
+            }else if(column.EffectType == "InputNumber"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-input-number v-model="queryParams.@(@column.LowerPropertyName)"  clearable="" placeholder="请输入@(@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 == "fk"){
             @:<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 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"){
+            }else if(column.EffectType == "Select"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-select clearable="" 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 clearable="" 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 == "EnumSelector"){
+            }else if(column.EffectType == "EnumSelector"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-select clearable="" v-model="queryParams.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
-                @:<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.name} (${item.code}) [${item.value}] `" />
+              @:<el-select clearable="" v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
+                @:<el-option v-for="(item,index) in dl('@(column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.name} (${item.code}) [${item.value}] `" />
               @:</el-select>
             @:</el-form-item>
-            }else if(@column.EffectType == "DatePicker"){
+            }else if(column.EffectType == "DatePicker"){
             @:<el-form-item label="@column.ColumnComment">
-              if(@column.QueryType == "~"){
-              @:<el-date-picker type="daterange" v-model="queryParams.@(@column.LowerPropertyName)Range"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
+              if(column.QueryType == "~"){
+              @:<el-date-picker type="daterange" v-model="queryParams.@(column.LowerPropertyName)Range"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
               } else {
-              @:<el-date-picker placeholder="请选择@(@column.ColumnComment)" value-format="YYYY/MM/DD"  v-model="queryParams.@(@column.LowerPropertyName)" />
+              @:<el-date-picker placeholder="请选择@(column.ColumnComment)" value-format="YYYY/MM/DD"  v-model="queryParams.@(column.LowerPropertyName)" />
               }
             @:</el-form-item>
             }
@@ -74,7 +74,7 @@
           <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
             <el-form-item @(Model.QueryWhetherList.Count > 0?"":"label-width=\"0px\"")>
               <el-button-group style="display: flex; align-items: center;">
-                <el-button type="primary"  icon="ele-Search" @@click="handleQuery" v-auth="'@(@Model.LowerClassName):page'"> @(Model.QueryWhetherList.Count > 0?"查询":"刷新") </el-button>
+                <el-button type="primary"  icon="ele-Search" @@click="handleQuery" v-auth="'@(Model.LowerClassName):page'"> @(Model.QueryWhetherList.Count > 0?"查询":"刷新") </el-button>
                 @if(Model.QueryWhetherList.Count > 0){
                 @:<el-button icon="ele-Refresh" @@click="() => queryParams = {}"> 重置 </el-button>
                 @if(haveLikeCdt){
@@ -82,10 +82,10 @@
                 @:<el-button icon="ele-ZoomOut" @@click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left:5px;"> 隐藏 </el-button>
                 }
                 }
-                <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @@click="batchDel@(@Model.ClassName)" :disabled="selectData.length == 0" v-auth="'@(@Model.LowerClassName):batchDelete'"> 删除 </el-button>
-                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @@click="openAdd@(@Model.ClassName)" v-auth="'@(@Model.LowerClassName):add'"> 新增 </el-button>
+                <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @@click="batchDel@(Model.ClassName)" :disabled="selectData.length == 0" v-auth="'@(Model.LowerClassName):batchDelete'"> 删除 </el-button>
+                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @@click="openAdd@(Model.ClassName)" v-auth="'@(Model.LowerClassName):add'"> 新增 </el-button>
                 @if (hasImport) {
-                @:<el-button type="warning" icon="ele-MostlyCloudy" @@click="importDataRef.openDialog()" v-auth="'@(@Model.LowerClassName):import'"> 导入 </el-button>
+                @:<el-button type="warning" icon="ele-MostlyCloudy" @@click="importDataRef.openDialog()" v-auth="'@(Model.LowerClassName):import'"> 导入 </el-button>
                 }
               </el-button-group>
             </el-form-item>
@@ -95,7 +95,7 @@
         @:<el-row>
           @:<el-col>
             @:<el-button-group style="margin-left:20px;margin-bottom:5px;">
-              @:<el-button type="primary" icon="ele-Plus" @@click="openAdd@(@Model.ClassName)" v-auth="'@(@Model.LowerClassName):add'"> 新增 </el-button>
+              @:<el-button type="primary" icon="ele-Plus" @@click="openAdd@(Model.ClassName)" v-auth="'@(Model.LowerClassName):add'"> 新增 </el-button>
             </el-button-group>
           @:</el-col>
         @:</el-row>
@@ -103,14 +103,14 @@
       </el-form>
     </el-card>
     <el-card class="full-table" shadow="hover" style="margin-top: 5px">
-      <el-table :data="tableData" @@selection-change="(val: any[]) => { selectData = val; }" style="width: 100%" v-loading="loading" tooltip-effect="light" @(@pkFieldName != null ? $"row-key=\"{@pkFieldName}\"" : "") @@sort-change="sortChange" border="">
-        <el-table-column type="selection" width="40" align="center" v-auth="'@(@Model.LowerClassName):batchDelete'" />
+      <el-table :data="tableData" @@selection-change="(val: any[]) => { selectData = val; }" style="width: 100%" v-loading="loading" tooltip-effect="light" @(pkFieldName != null ? $"row-key=\"{@pkFieldName}\"" : "") @@sort-change="sortChange" border="">
+        <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 == "fk"||@column.EffectType == "ApiTreeSelect"||@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"){
+            if(column.EffectType == "Upload"){
             @:<el-image
             @:v-if="scope.row.@column.LowerPropertyName"
             @:style="width: 60px; height: 60px"
@@ -121,15 +121,15 @@
             @::initial-index="0"
             @:fit="scale-down"
             @:preview-teleported=""/>
-            }else if(@column.EffectType == "fk"){
-            @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)@(@column.FkColumnName)}}</span>
-            }else if(@column.EffectType == "ApiTreeSelect"){
+            }else if(column.EffectType == "fk"){
+            @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)@(column.FkColumnName)}}</span>
+            }else if(column.EffectType == "ApiTreeSelect"){
             @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)@(column.DisplayColumn)}}</span>
-            }else if(@column.EffectType == "Switch"){
-            @:<el-tag v-if="scope.row.@(@column.LowerPropertyName)"> 是 </el-tag>
+            }else if(column.EffectType == "Switch"){
+            @:<el-tag v-if="scope.row.@(column.LowerPropertyName)"> 是 </el-tag>
             @:<el-tag type="danger" v-else> 否 </el-tag>
-            }else if(@column.EffectType == "ConstSelector"){
-            @:<span>{{codeToName(scope.row.@(@column.LowerPropertyName), '@(@column.DictTypeCode)')}}</span>
+            }else if(column.EffectType == "ConstSelector"){
+            @:<span>{{codeToName(scope.row.@(column.LowerPropertyName), '@(column.DictTypeCode)')}}</span>
             }
           @:</template>
         @:</el-table-column>
@@ -144,7 +144,7 @@
         @:<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">
           if (isStatus) {
-            @:<el-switch v-model="scope.row.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" @@change="change@(@Model.ClassName)Status(scope.row)" />
+            @:<el-switch v-model="scope.row.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" @@change="change@(Model.ClassName)Status(scope.row)" />
           } else {
             @:<dict-label :value="scope.row.@column.LowerPropertyName" code="@column.DictTypeCode" prop-label="value" prop-value="code" />
           }
@@ -154,7 +154,7 @@
         @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" @(column.WhetherSortable == "Y" ? "sortable='custom'" : "") show-overflow-tooltip="" />
         }
         }
-        <el-table-column label="操作" width="@(@Model.PrintType == "custom" ? "200" : "140")" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('@(@Model.LowerClassName):update') || auth('@(@Model.LowerClassName):delete')">
+        <el-table-column label="操作" width="@(Model.PrintType == "custom" ? "200" : "140")" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('@(@Model.LowerClassName):update') || auth('@(@Model.LowerClassName):delete')">
           <template #default="scope">
             @if (Model.PrintType == "custom"){
             @:<el-button icon="ele-Printer" size="small" text="" type="primary" @@click="openPrint@(@Model.ClassName)(scope.row)" v-auth="'@(@Model.LowerClassName):print'"> 打印 </el-button>
@@ -217,7 +217,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 == "Select" || x.EffectType == "EnumSelector")) {
   @:import DictLabel from "/@@/components/table/dictLabel.vue";
   }
   @if(hasImport) {
@@ -297,7 +297,7 @@
   // 打开打印页面
   const openPrint@(@Model.ClassName) = async (row: any) => {
     print@(@Model.ClassName)Title.value = '打印@(@Model.BusName)';
-    @if(@Model.PrintType == "custom"){
+    @if(Model.PrintType == "custom"){
     @:var res = await getAPI(SysPrintApi).apiSysPrintPrintNameGet('@Model.PrintName');
 	  @:var printTemplate = res.data.result as SysPrint;
     @:var template = JSON.parse(printTemplate.template);