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

!767 加强“代码生成”模块
Merge pull request !767 from koy0755/优化代码调整功能0913

zuohuaijun пре 2 година
родитељ
комит
5b8744098b

+ 14 - 1
Admin.NET/Admin.NET.Core/Entity/SysCodeGenConfig.cs

@@ -27,7 +27,20 @@ public class SysCodeGenConfig : EntityBase
     /// </summary>
     [SugarColumn(ColumnDescription = "字段名称", Length = 128)]
     [Required, MaxLength(128)]
-    public virtual string ColumnName { get; set; }
+    public virtual string ColumnName { get; set; }
+
+    /// <summary>
+    /// 实体属性名
+    /// </summary>
+    [SugarColumn(ColumnDescription = "属性名称", Length = 128)]
+    [Required, MaxLength(128)]
+    public virtual string PropertyName { get; set; }
+
+    /// <summary>
+    /// 字段数据长度
+    /// </summary>
+    [SugarColumn(ColumnDescription = "字段数据长度", DefaultValue = "0")]
+    public virtual int ColumnLength { get; set; }
 
     /// <summary>
     /// 字段描述

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

@@ -28,12 +28,22 @@ public class CodeGenConfig
     /// 数据库字段名
     /// </summary>
     public string ColumnName { get; set; }
+
+    /// <summary>
+    /// 实体的Property名
+    /// </summary>
+    public string PropertyName { get; set; }
+
+    /// <summary>
+    /// 字段数据长度
+    /// </summary>
+    public int ColumnLength { get; set; }
 
     /// <summary>
     /// 数据库字段名(首字母小写)
     /// </summary>
-    public string LowerColumnName =>
-        string.IsNullOrWhiteSpace(ColumnName) ? null : ColumnName[..1].ToLower() + ColumnName[1..];
+    public string LowerPropertyName =>
+        string.IsNullOrWhiteSpace(PropertyName) ? null : PropertyName[..1].ToLower() + PropertyName[1..];
 
     /// <summary>
     /// 字段描述
@@ -146,7 +156,7 @@ public class CodeGenConfig
             }
             else if (EffectType == "Upload")
             {
-                str = "sysFile_FK_" + LowerColumnName;
+                str = "sysFile_FK_" + LowerPropertyName;
             }
             return str;
         }

+ 53 - 38
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/ColumnOuput.cs

@@ -1,46 +1,61 @@
-// 麻省理工学院许可证
-//
-// 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
-//
-// 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
-//
-// 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
-// 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
-
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 数据库表列
-/// </summary>
-public class ColumnOuput
-{
-    /// <summary>
-    /// 字段名
-    /// </summary>
+// 麻省理工学院许可证
+//
+// 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
+//
+// 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
+//
+// 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
+// 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
+
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 数据库表列
+/// </summary>
+public class ColumnOuput
+{
+    /// <summary>
+    /// 字段名
+    /// </summary>
     public string ColumnName { get; set; }
 
-    /// <summary>
-    /// 实体的Property名
-    /// </summary>
+    /// <summary>
+    /// 实体的Property名
+    /// </summary>
     public string PropertyName { get; set; }
 
-    /// <summary>
-    /// 数据库中类型
-    /// </summary>
+    /// <summary>
+    /// 字段数据长度
+    /// </summary>
+    public int ColumnLength { get; set; }
+
+    /// <summary>
+    /// 数据库中类型
+    /// </summary>
     public string DataType { get; set; }
 
-    /// <summary>
-    /// .NET字段类型
-    /// </summary>
-    public string NetType { get; set; }
-
-    /// <summary>
-    /// 字段描述
-    /// </summary>
-    public string ColumnComment { get; set; }
+    /// <summary>
+    /// 是否为主键
+    /// </summary>
+    public bool IsPrimarykey { get; set; }
 
-    /// <summary>
-    /// 主外键
-    /// </summary>
-    public string ColumnKey { get; set; }
+    /// <summary>
+    /// 是否允许为空
+    /// </summary>
+    public bool IsNullable { get; set; }
+
+    /// <summary>
+    /// .NET字段类型
+    /// </summary>
+    public string NetType { get; set; }
+
+    /// <summary>
+    /// 字段描述
+    /// </summary>
+    public string ColumnComment { get; set; }
+
+    /// <summary>
+    /// 主外键
+    /// </summary>
+    public string ColumnKey { get; set; }
 }

+ 10 - 6
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs

@@ -31,16 +31,16 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
     public async Task<List<CodeGenConfig>> GetList([FromQuery] CodeGenConfig input)
     {
         var whetherCommon = YesNoEnum.Y.ToString();
-        return await _db.Queryable<SysCodeGenConfig>()
+        var result = await _db.Queryable<SysCodeGenConfig>()
             .Where(u => u.CodeGenId == input.CodeGenId && u.WhetherCommon != whetherCommon)
             .Select<CodeGenConfig>()
             .Mapper(u =>
             {
                 u.NetType = (u.EffectType == "EnumSelector" || u.EffectType == "ConstSelector" ? u.DictTypeCode : u.NetType);
             })
-
             .OrderBy(u => u.OrderNo)
             .ToListAsync();
+        return result;
     }
 
     /// <summary>
@@ -53,7 +53,9 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
     public async Task UpdateCodeGenConfig(List<CodeGenConfig> inputList)
     {
         if (inputList == null || inputList.Count < 1) return;
-        await _db.Updateable(inputList.Adapt<List<SysCodeGenConfig>>()).ExecuteCommandAsync();
+        await _db.Updateable(inputList.Adapt<List<SysCodeGenConfig>>())
+            .IgnoreColumns(u => new { u.ColumnLength, u.ColumnName, u.PropertyName })
+            .ExecuteCommandAsync();
     }
 
     /// <summary>
@@ -111,13 +113,15 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
             }
 
             codeGenConfig.CodeGenId = codeGenerate.Id;
-            // 这里不能用 ColumnName,应该用 PropertyName (因为Oracle是不区分大小写的,还有个别业务的实体的字段名与Propertty名不一定一样)
-            codeGenConfig.ColumnName = tableColumn.PropertyName; // tableColumn.ColumnName;
+            codeGenConfig.ColumnName = tableColumn.ColumnName; // 字段名
+            codeGenConfig.PropertyName = tableColumn.PropertyName;// 实体属性名
+            codeGenConfig.ColumnLength = tableColumn.ColumnLength;// 长度
             codeGenConfig.ColumnComment = tableColumn.ColumnComment;
             codeGenConfig.NetType = tableColumn.DataType;
             codeGenConfig.WhetherRetract = YesNoEnum.N.ToString();
 
-            codeGenConfig.WhetherRequired = YesNoEnum.N.ToString();
+            // 生成代码时,主键并不是必要输入项,所以下面句一定要排除主键字段
+            codeGenConfig.WhetherRequired = (tableColumn.IsNullable || tableColumn.IsPrimarykey) ? YesNoEnum.N.ToString() : YesNoEnum.Y.ToString();
             codeGenConfig.QueryWhether = YesOrNo;
             codeGenConfig.WhetherAddUpdate = YesOrNo;
             codeGenConfig.WhetherTable = YesOrNo;

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

@@ -156,6 +156,13 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             });
         }
         return tableOutputList;
+        //return entityInfos.Where(u => dbTableNames.Contains(config.EnableUnderLine ? UtilMethods.ToUnderLine(u.DbTableName) : u.DbTableName.ToLower())).Select(u => new TableOutput()
+        //{
+        //    ConfigId = configId,
+        //    EntityName = u.EntityName,
+        //    TableName = config.EnableUnderLine ? UtilMethods.ToUnderLine(u.DbTableName) : u.DbTableName,
+        //    TableComment = u.TableDescription
+        //}).ToList();
     }
 
     /// <summary>
@@ -203,26 +210,31 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         var columnInfos = provider.DbMaintenance.GetColumnInfosByTableName(dbTableName, false);
         var result = columnInfos.Select(u => new ColumnOuput
         {
-            // 转下划线后的列名需要再转回来(暂时不转)
+            // 转下划线后的列名需要再转回来,2023/9/11,后面会根据字段名获取对应Property,所以这里不用转换了,以后面转换。
             //ColumnName = config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(u.DbColumnName, entityBasePropertyNames) : u.DbColumnName,
             ColumnName = u.DbColumnName,
+            ColumnLength = u.Length,
+            IsPrimarykey = u.IsPrimarykey,
+            IsNullable = u.IsNullable,
             ColumnKey = u.IsPrimarykey.ToString(),
             NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
             DataType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
             ColumnComment = string.IsNullOrWhiteSpace(u.ColumnDescription) ? u.DbColumnName : u.ColumnDescription
         }).ToList();
-        // 获取实体的属性信息,并赋值给PropertyName属性
+
+        // 获取实体的属性信息,并赋值给PropertyName属性(因为CodeFirst模式,应该以PropertyName为实际使用名称)
         var entityProperties = entityType.Type.GetProperties();
-        for (int i = result.Count - 1; i >= 0; i--)
+        
+        for (int i= result.Count-1;i>=0;i--)
         {
             var columnOutput = result[i];
             var propertyName = entityProperties.FirstOrDefault(p =>
-                p.Name == (config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(columnOutput.ColumnName, entityBasePropertyNames) : columnOutput.ColumnName) ||
+                p.Name == (config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(columnOutput.ColumnName, entityBasePropertyNames) : columnOutput.ColumnName) || 
                 p.GetCustomAttribute<SugarColumn>()?.ColumnName?.ToLower() == columnOutput.ColumnName.ToLower()).Name;
             if (propertyName != null)
                 columnOutput.PropertyName = propertyName;
             else
-                result.RemoveAt(i);// 移除没有定义此属性的字段
+                result.RemoveAt(i);// 如果实体中都没有定义这个属性,那么显示字段也没有意义,所以这里移除它
         }
         return result;
     }
@@ -367,7 +379,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         string lowerStr = ""; //(o, i, c)
         foreach (var item in uploads)
         {
-            lowerStr += "sysFile_FK_" + item.LowerColumnName + ",";
+            lowerStr += "sysFile_FK_" + item.LowerPropertyName + ",";
             str += "SysFile,";
         }
         foreach (var item in fks)
@@ -508,7 +520,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
 
         var menuList = new List<SysMenu>() { menuType2, menuType2_1, menuType2_2, menuType2_3, menuType2_4 };
         // 加入fk、Upload、ApiTreeSelect 等接口的权限
-        var fkTableList = tableFieldList.Where(u => u.EffectType == "fk").ToList();
+        var fkTableList = tableFieldList.Where(u => u.EffectType == "fk").ToList(); 
         foreach (var @column in fkTableList)
         {
             var menuType = new SysMenu

+ 22 - 15
Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

@@ -137,25 +137,32 @@ public class SysDatabaseService : IDynamicApiController, ITransient
 
         var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId == input.ConfigId);
 
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        var typeBilder = db.DynamicBuilder().CreateClass(input.TableName, new SugarTable() { TableName = input.TableName, TableDescription = input.Description });
         input.DbColumnInfoList.ForEach(m =>
         {
-            var dbColumnName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName.Trim()) : m.DbColumnName.Trim();
-            var isPrimarykey = columns.Any(m => m.IsPrimarykey);
-            // 虚拟类都默认String,具体以列数据类型为准
-            typeBilder.CreateProperty(dbColumnName, typeof(string), new SugarColumn()
+            columns.Add(new DbColumnInfo
             {
-                IsPrimaryKey = isPrimarykey,
-                IsIdentity = m.IsIdentity == 1,
-                ColumnDataType = m.DataType,
+                DbColumnName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName.Trim()) : m.DbColumnName.Trim(),
+                DataType = m.DataType,
                 Length = m.Length,
-                IsNullable = m.IsNullable == 1,
-                DecimalDigits = m.DecimalDigits,
                 ColumnDescription = m.ColumnDescription,
+                IsNullable = m.IsNullable == 1,
+                IsIdentity = m.IsIdentity == 1,
+                IsPrimarykey = m.IsPrimarykey == 1,
+                DecimalDigits = m.DecimalDigits
             });
         });
-        db.CodeFirst.InitTables(typeBilder.BuilderType());
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        db.DbMaintenance.CreateTable(input.TableName, columns, false);
+
+        if (columns.Any(m => m.IsPrimarykey))
+            db.DbMaintenance.AddPrimaryKey(input.TableName, columns.FirstOrDefault(m => m.IsPrimarykey).DbColumnName);
+
+        db.DbMaintenance.AddTableRemark(input.TableName, input.Description);
+        input.DbColumnInfoList.ForEach(m =>
+        {
+            m.DbColumnName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName) : m.DbColumnName;
+            db.DbMaintenance.AddColumnRemark(m.DbColumnName, input.TableName, string.IsNullOrWhiteSpace(m.ColumnDescription) ? m.DbColumnName : m.ColumnDescription);
+        });
     }
 
     /// <summary>
@@ -203,8 +210,8 @@ public class SysDatabaseService : IDynamicApiController, ITransient
         var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId == input.ConfigId);
         input.Position = string.IsNullOrWhiteSpace(input.Position) ? "Admin.NET.Application" : input.Position;
         input.EntityName = string.IsNullOrWhiteSpace(input.EntityName) ? (config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(input.TableName, null) : input.TableName) : input.EntityName;
-        string[] dbColumnNames = Array.Empty<string>();
-        // 允许创建没有基类的实体
+        string[] dbColumnNames = new string[0];
+        // Entity.cs.vm中是允许创建没有基类的实体的,所以这里也要做出相同的判断
         if (!string.IsNullOrWhiteSpace(input.BaseClassName))
         {
             _codeGenOptions.EntityBaseColumn.TryGetValue(input.BaseClassName, out dbColumnNames);
@@ -218,7 +225,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
         List<DbColumnInfo> dbColumnInfos = db.DbMaintenance.GetColumnInfosByTableName(input.TableName, false);
         dbColumnInfos.ForEach(u =>
         {
-            u.DbColumnName = config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(u.DbColumnName, dbColumnNames) : u.DbColumnName; // 转下划线后的列名需要再转回来
+            u.PropertyName = config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(u.DbColumnName, dbColumnNames) : u.DbColumnName; // 转下划线后的列名需要再转回来
             u.DataType = CodeGenUtil.ConvertDataType(u, config.DbType);
         });
         if (_codeGenOptions.BaseEntityNames.Contains(input.BaseClassName, StringComparer.OrdinalIgnoreCase))

+ 2 - 2
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/Dto.cs.vm

@@ -10,7 +10,7 @@ if(@column.EffectType == "fk" && @column.FkEntityName != "" && @column.FkColumnN
         @:/// <summary>
         @:/// @column.ColumnComment
         @:/// </summary>
-        @:public @(@column.FkColumnNetType) @(@column.FkEntityName)@(@column.FkColumnName) { get; set; }
+        @:public @(@column.FkColumnNetType) @(@column.PropertyName)@(@column.FkColumnName) { get; set; }
         @:
 }
 }
@@ -18,7 +18,7 @@ if(@column.EffectType == "fk" && @column.FkEntityName != "" && @column.FkColumnN
         @:/// <summary>
         @:/// @column.ColumnComment
         @:/// </summary>
-        @:public @column.NetType @column.ColumnName { get; set; }
+        @:public @column.NetType @column.PropertyName { get; set; }
         @:
 }
     }

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

@@ -26,7 +26,7 @@ if(@Model.BaseClassName=="" && @column.IsPrimarykey){
     else{
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true)]
     }
-    @:public @column.DataType @column.DbColumnName { get; set; }
+    @:public @column.DataType @column.PropertyName { get; set; }
     @:
 }
 else if(@Model.BaseClassName=="" && !@column.IsPrimarykey){
@@ -45,7 +45,7 @@ else if(@Model.BaseClassName=="" && !@column.IsPrimarykey){
     else{
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription")]
     }
-    @:public @column.DataType @column.DbColumnName { get; set; }
+    @:public @column.DataType @column.PropertyName { get; set; }
     @:
 }
 else if(@Model.BaseClassName!="" && @column.IsPrimarykey && @column.DbColumnName.ToLower()!="id"){
@@ -64,7 +64,7 @@ else if(@Model.BaseClassName!="" && @column.IsPrimarykey && @column.DbColumnName
     else{
     @:[SugarColumn(ColumnName = "@column.DbColumnName", IsIdentity = @column.IsIdentity.ToString().ToLower(), ColumnDescription = "@column.ColumnDescription", IsPrimaryKey = true)]
     }
-    @:public @column.DataType @column.DbColumnName { get; set; }
+    @:public @column.DataType @column.PropertyName { get; set; }
     @:
 }
 else if(@Model.BaseClassName!="" && !@column.IsPrimarykey && @column.DbColumnName.ToLower()!="id"){
@@ -83,7 +83,7 @@ else if(@Model.BaseClassName!="" && !@column.IsPrimarykey && @column.DbColumnNam
     else{
     @:[SugarColumn(ColumnName = "@column.DbColumnName", ColumnDescription = "@column.ColumnDescription")]
     }
-    @:public @column.DataType @column.DbColumnName { get; set; }
+    @:public @column.DataType @column.PropertyName { get; set; }
     @:
 }
 }

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

@@ -13,7 +13,7 @@ if (@column.ColumnKey != "True"){
         @:/// <summary>
         @:/// @column.ColumnComment
         @:/// </summary>
-        @:public virtual @column.NetType @column.ColumnName { get; set; }
+        @:public virtual @column.NetType @column.PropertyName { get; set; }
         @:
 }
 }
@@ -30,14 +30,14 @@ if (@column.QueryWhether == "Y"){
         @:/// <summary>
         @:/// @column.ColumnComment
         @:/// </summary>
-        @:public @column.NetType @column.ColumnName { get; set; }
+        @:public @column.NetType @column.PropertyName { get; set; }
         @:
 
 if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
         @:/// <summary>
         @: /// @(@column.ColumnComment)范围
         @: /// </summary>
-        @: public List<DateTime?> @(@column.ColumnName)Range { get; set; } 
+        @: public List<DateTime?> @(@column.PropertyName)Range { get; set; } 
 
 }
 
@@ -56,7 +56,7 @@ if (@column.WhetherRequired == "Y"){
         @:/// @column.ColumnComment
         @:/// </summary>
         @:[Required(ErrorMessage = "@(@column.ColumnComment)不能为空")]
-        @:public override @column.NetType @column.ColumnName { get; set; }
+        @:public override @column.NetType @column.PropertyName { get; set; }
         @:
 }
 }
@@ -68,12 +68,12 @@ if (@column.WhetherRequired == "Y"){
     public class Delete@(@Model.ClassName)Input : BaseIdInput
     {
 @foreach (var column in Model.TableField){
-if (@column.ColumnKey == "True" && @column.ColumnName != "Id"){
+if (@column.ColumnKey == "True" && @column.PropertyName != "Id"){
         @:/// <summary>
         @:/// @column.ColumnComment
         @:/// </summary>
         @:[Required(ErrorMessage = "@(@column.ColumnComment)不能为空")]
-        @:public @column.NetType @column.ColumnName { get; set; }
+        @:public @column.NetType @column.PropertyName { get; set; }
         @:
 }
 }
@@ -90,7 +90,7 @@ if (@column.ColumnKey == "True"){
         @:/// @column.ColumnComment
         @:/// </summary>
         @:[Required(ErrorMessage = "@(@column.ColumnComment)不能为空")]
-        @:public @column.NetType @column.ColumnName { get; set; }
+        @:public @column.NetType @column.PropertyName { get; set; }
         @:
 }
 }

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

@@ -7,12 +7,12 @@ enum Api {
   Page@(@Model.ClassName) = '/api/@(@Model.LowerClassName)/page',
   @foreach (var column in Model.TableField){
 if(@column.EffectType == "fk"){
-  @:Get@(@column.FkEntityName)@(@column.ColumnName)Dropdown = '/api/@(@Model.LowerClassName)/@(@column.FkEntityName)@(@column.ColumnName)Dropdown',
+  @: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 = '/@(@Model.LowerClassName)/@(@column.FkEntityName)Tree',
 }else if(@column.EffectType == "Upload"){
-  @:Upload@(@column.ColumnName) = '/api/@(@Model.LowerClassName)/Upload@(@column.ColumnName)',
+  @:Upload@(@column.PropertyName) = '/api/@(@Model.LowerClassName)/Upload@(@column.PropertyName)',
 }
 }
 }
@@ -51,9 +51,9 @@ export const page@(@Model.ClassName) = (params?: any) =>
 
 @foreach (var column in Model.TableField){
 	if(@column.EffectType == "fk"){
-@:export const get@(@column.FkEntityName)@(@column.ColumnName)Dropdown = () =>
+@:export const get@(@column.FkEntityName)@(@column.PropertyName)Dropdown = () =>
 		@:request({
-		@:url: Api.Get@(@column.FkEntityName)@(@column.ColumnName)Dropdown,
+		@:url: Api.Get@(@column.FkEntityName)@(@column.PropertyName)Dropdown,
 		@:method: 'get'
 		@:});
 	}else if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("get@(@column.FkEntityName)Tree")){
@@ -68,8 +68,8 @@ export const page@(@Model.ClassName) = (params?: any) =>
 	@:/**
 	@:* 上传@(@column.ColumnComment) 
 	@:*/
-@:export const upload@(@column.ColumnName) = (params: any) =>
-		@:uploadFileHandle(params, Api.Upload@(@column.ColumnName))
+@:export const upload@(@column.PropertyName) = (params: any) =>
+		@:uploadFileHandle(params, Api.Upload@(@column.PropertyName))
 		}
 }
 

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

@@ -11,25 +11,25 @@
        @:/// </summary>
 if(column.EffectType == "fk")
 {
-       @:public @column.NetType @column.ColumnName { get; set; } 
+       @:public @column.NetType @column.PropertyName { get; set; } 
        @:
        @:/// <summary>
        @:/// @(column.ColumnComment) 描述
        @:/// </summary>
-       @:public @(@column.FkColumnNetType) @(@column.FkEntityName)@(@column.FkColumnName) { get; set; } 
+       @:public @(@column.FkColumnNetType) @(@column.PropertyName)@(@column.FkColumnName) { get; set; } 
 
 }else if(column.EffectType == "Upload"){
-       @:public @column.NetType @column.ColumnName { get; set; }
-       @:public SysFile @(@column.ColumnName)Attachment { get; set; }
+       @:public @column.NetType @column.PropertyName { get; set; }
+       @:public SysFile @(@column.PropertyName)Attachment { get; set; }
 }else if(column.EffectType == "ApiTreeSelect"){
-       @:public @column.NetType @column.ColumnName { get; set; } 
+       @:public @column.NetType @column.PropertyName { get; set; } 
        @:
        @:/// <summary>
        @:/// @(column.ColumnComment) 描述 
        @:/// </summary>
-       @:public string? @(@column.ColumnName)@(@column.DisplayColumn) { get; set; } 
+       @:public string? @(@column.PropertyName)@(@column.DisplayColumn) { get; set; } 
 }else{
-       @:public @column.NetType @column.ColumnName { get; set; }
+       @:public @column.NetType @(@column.PropertyName) { get; set; }
 }
     @:
 }

+ 25 - 24
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/Service.cs.vm

@@ -28,12 +28,12 @@ public class @(@Model.ClassName)Service : IDynamicApiController, ITransient
 if (@column.QueryWhether == "Y"){
     if (@column.NetType?.TrimEnd('?') == "string"){
         if(@column.QueryType == "like"){
-                    @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.ColumnName), u => u.@(@column.ColumnName).Contains(input.@(@column.ColumnName).Trim()))
+                    @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName).Contains(input.@(@column.PropertyName).Trim()))
         }else{
-                    @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.ColumnName), u => u.@(@column.ColumnName) @column.QueryType input.@(@column.ColumnName))
+                    @:.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.ColumnName>0, u => u.@(@column.ColumnName) @column.QueryType input.@(@column.ColumnName))
+                    @:.WhereIF(input.@column.PropertyName>0, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
     }else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
     }
 } 
@@ -42,20 +42,20 @@ if (@column.QueryWhether == "Y"){
                     @://处理外键和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 )
+            joinTableName += ", " + column.PropertyName.ToLower();
+                    @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).Id )
         } else if(@column.EffectType == "ApiTreeSelect"){
-            joinTableName += ", " + column.ColumnName.ToLower();
-                    @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.ColumnName) == @(@column.ColumnName.ToLower()).@(@column.ValueColumn) )
+            joinTableName += ", " + column.PropertyName.ToLower();
+                    @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).@(@column.ValueColumn) )
         }
     }
                     @:.Select((@(@joinTableName))=> new @(@Model.ClassName)Output{
 @foreach (var column in Model.TableField){
-                        @:@(@column.ColumnName) = u.@(@column.ColumnName), 
+                        @:@(@column.PropertyName) = u.@(@column.PropertyName), 
                         if(@column.EffectType == "fk"){   
-                        @:@(@column.FkEntityName)@(@column.FkColumnName) = @(@column.ColumnName.ToLower()).@(@column.FkColumnName),
+                        @:@(@column.PropertyName)@(@column.FkColumnName) = @(@column.PropertyName.ToLower()).@(@column.FkColumnName),
                         } else if(@column.EffectType == "ApiTreeSelect"){   
-                        @:@(@column.ColumnName)@(@column.DisplayColumn) = @(@column.ColumnName.ToLower()).@(@column.DisplayColumn),
+                        @:@(@column.PropertyName)@(@column.DisplayColumn) = @(@column.PropertyName.ToLower()).@(@column.DisplayColumn),
                         }
 }
                     @:})
@@ -63,7 +63,7 @@ if (@column.QueryWhether == "Y"){
     if(@column.EffectType == "fk"){   
  
     }else if(@column.EffectType == "Upload"){
-                    @://.Mapper(c => c.@(@column.ColumnName)Attachment, c => c.@(@column.ColumnName))
+                    @://.Mapper(c => c.@(@column.PropertyName)Attachment, c => c.@(@column.PropertyName))
     }
 }
 } else {
@@ -73,14 +73,14 @@ if (@column.QueryWhether == "Y"){
 @foreach (var column in Model.TableField){
 if (@column.QueryWhether == "Y"){
     if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
-        @:if(input.@(@column.ColumnName)Range != null && input.@(@column.ColumnName)Range.Count >0)
+        @:if(input.@(@column.PropertyName)Range != null && input.@(@column.PropertyName)Range.Count >0)
         @:{
-                @:DateTime? start= input.@(@column.ColumnName)Range[0]; 
-                @:query = query.WhereIF(start.HasValue, u => u.@column.ColumnName > start);
-                @:if (input.@(@column.ColumnName)Range.Count >1 && input.@(@column.ColumnName)Range[1].HasValue)
+                @:DateTime? start= input.@(@column.PropertyName)Range[0]; 
+                @:query = query.WhereIF(start.HasValue, u => u.@column.PropertyName > start);
+                @:if (input.@(@column.PropertyName)Range.Count >1 && input.@(@column.PropertyName)Range[1].HasValue)
                 @:{
-                    @:var end = input.@(@column.ColumnName)Range[1].Value.AddDays(1);
-                    @:query = query.Where(u => u.@(@column.ColumnName) < end);
+                    @:var end = input.@(@column.PropertyName)Range[1].Value.AddDays(1);
+                    @:query = query.Where(u => u.@(@column.PropertyName) < end);
                 @:}
         @:} 
     }
@@ -114,10 +114,11 @@ if (@column.QueryWhether == "Y"){
     {
 @foreach (var column in Model.TableField){
 if (@column.ColumnKey == "True"){
-        @:var entity = await _rep.GetFirstAsync(u => u.@(@column.ColumnName) == input.@(@column.ColumnName)) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        @:var entity = await _rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName)) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
 }
 }
         await _rep.FakeDeleteAsync(entity);   //假删除
+        //await _rep.DeleteAsync(entity);   //真删除
     }
 
     /// <summary>
@@ -144,7 +145,7 @@ if (@column.ColumnKey == "True"){
     {
 @foreach (var column in Model.TableField){
 if (@column.ColumnKey == "True"){
-        @:return await _rep.GetFirstAsync(u => u.@(@column.ColumnName) == input.@(@column.ColumnName));
+        @:return await _rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName));
 }   
 }            
     }
@@ -168,8 +169,8 @@ if(@column.EffectType == "fk"){
     @:/// </summary>
     @:/// <param name="input"></param>
     @:/// <returns></returns>
-    @:[ApiDescriptionSettings(Name = "@(@column.FkEntityName)@(@column.ColumnName)Dropdown"), HttpGet]
-    @:public async Task<dynamic> @(@column.FkEntityName)@(@column.ColumnName)Dropdown()
+    @:[ApiDescriptionSettings(Name = "@(@column.FkEntityName)@(@column.PropertyName)Dropdown"), HttpGet]
+    @:public async Task<dynamic> @(@column.FkEntityName)@(@column.PropertyName)Dropdown()
     @:{
         @:return await _rep.Context.Queryable<@(@column.FkEntityName)>()
                 @:.Select(u => new
@@ -189,11 +190,11 @@ if(@column.EffectType == "Upload"){
     @:/// </summary>
     @:/// <param name="file"></param>
     @:/// <returns></returns>
-    @:[ApiDescriptionSettings(Name = "Upload@(@column.ColumnName)"), HttpPost]
-    @:public async Task<FileOutput> Upload@(@column.ColumnName)([Required] IFormFile file)
+    @:[ApiDescriptionSettings(Name = "Upload@(@column.PropertyName)"), HttpPost]
+    @:public async Task<FileOutput> Upload@(@column.PropertyName)([Required] IFormFile file)
     @:{
             @:var service = App.GetService<SysFileService>();
-            @:return await service.UploadFile(file, "upload/@(@column.ColumnName)"); 
+            @:return await service.UploadFile(file, "upload/@(@column.PropertyName)"); 
     @:} 
 }
 }

+ 8 - 8
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/data.data.ts.vm

@@ -20,21 +20,21 @@ export const columns: BasicColumn[] = [
   if(@column.WhetherTable == "Y"){
   @:{
     @:title: '@column.ColumnComment',
-    @:dataIndex: '@column.LowerColumnName',    
+    @:dataIndex: '@column.LowerPropertyName',    
     @:sorter: true,
 if(@column.EffectType == "Upload"){
-    @:slots: { customRender: '@(@column.LowerColumnName)' },
+    @:slots: { customRender: '@(@column.LowerPropertyName)' },
 }else if(@column.EffectType == "fk"){
     @:customRender: ({ record }) => {
-      @:return record.fk@(@column.ColumnName).@(@column.LowerFkColumnName);
+      @:return record.fk@(@column.PropertyName).@(@column.LowerFkColumnName);
     @:},
 }else if(@column.EffectType == "Switch"){
     @:customRender: ({ record }) => {
-      @:return h(@(@column.EffectType), { checked: record.@(@column.LowerColumnName) });
+      @:return h(@(@column.EffectType), { checked: record.@(@column.LowerPropertyName) });
     @:},
 }else if(@column.EffectType == "ConstSelector"){
     @:customRender: ({ record }) => {
-      @:return codeToName(record.@(@column.LowerColumnName), '@(@column.DictTypeCode)');
+      @:return codeToName(record.@(@column.LowerPropertyName), '@(@column.DictTypeCode)');
     @:},
 }
   @:},
@@ -46,7 +46,7 @@ if(@column.EffectType == "Upload"){
 export const searchFormSchema: FormSchema[] = [
 @foreach (var column in Model.QueryWhetherList){  
   @:{
-    @:field: '@column.LowerColumnName',
+    @:field: '@column.LowerPropertyName',
     @:label: '@column.ColumnComment',
     @:colProps: { span: 8 },
 if(@column.EffectType == "fk"){
@@ -99,7 +99,7 @@ export const formSchema: FormSchema[] = [
   @foreach (var column in Model.TableField){
   @:{
     @:label: '@column.ColumnComment',
-    @:field: '@column.LowerColumnName',
+    @:field: '@column.LowerPropertyName',
 if(@column.EffectType == "fk"){
     @:component: 'ApiSelect',
     @:componentProps: {
@@ -151,7 +151,7 @@ if(@column.EffectType == "fk"){
       @:api: uploadFile,
     @:},
     }
-  if(@column.LowerColumnName == "id"){
+  if(@column.LowerPropertyName == "id"){
     @:show: false,
   }
     @:colProps: { span: 12 },

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

@@ -33,9 +33,9 @@
           });
 @foreach (var column in Model.TableField){
 if(@column.EffectType == "Upload"){
-          @:if (data.record.@(@column.LowerColumnName)) {
+          @:if (data.record.@(@column.LowerPropertyName)) {
             @:setFieldsValue({
-              @:@(@column.LowerColumnName): [data.record.@(@column.LowerColumnName)Attachment],
+              @:@(@column.LowerPropertyName): [data.record.@(@column.LowerPropertyName)Attachment],
             @:});
           @:}
 }
@@ -48,8 +48,8 @@ if(@column.EffectType == "Upload"){
           var values = await validate();
 @foreach (var column in Model.TableField){
 if(@column.EffectType == "Upload"){
-          @:if (values.@(@column.LowerColumnName)) {
-            @:values = { ...values, @(@column.LowerColumnName): values.@(@column.LowerColumnName)[0].id };
+          @:if (values.@(@column.LowerPropertyName)) {
+            @:values = { ...values, @(@column.LowerPropertyName): values.@(@column.LowerPropertyName)[0].id };
           @:}
 }
 }

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

@@ -1,6 +1,6 @@
 @{Dictionary<string, int> definedObjects = new Dictionary<string, int>();}
 @{var pkField = Model.TableField.Where(c => c.ColumnKey == "True").FirstOrDefault();}
-@{string pkFieldName = LowerFirstLetter(pkField.ColumnName);}
+@{string pkFieldName = LowerFirstLetter(pkField.PropertyName);}
 <template>
 	<div class="@(@Model.LowerClassName)-container">
 		<el-dialog v-model="isShowDialog" :title="props.title" :width="800" draggable="">
@@ -9,15 +9,15 @@
 					@foreach (var column in Model.TableField){
 					if(@column.ColumnKey == "True"){
 					@:<el-form-item v-show="false">
-						<el-input v-model="ruleForm.@(@column.LowerColumnName)" />
+						<el-input v-model="ruleForm.@(@column.LowerPropertyName)" />
 					</el-form-item>
 					}else{
 					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.LowerColumnName)">
-							@:<el-select clearable filterable v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请选择@(@column.ColumnComment)">
-								@:<el-option v-for="(item,index) in @LowerFirstLetter(@column.FkEntityName)@(@column.ColumnName)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>
 							@:
@@ -26,14 +26,14 @@
 					</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-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.LowerColumnName)"
+								v-model="ruleForm.@(@column.LowerPropertyName)"
 							>
 								<template #default="{ node, data }">
 									<span>{{ data.name }}</span>
@@ -46,33 +46,33 @@
 					</el-col>
 					}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.LowerColumnName)">
-							@:<el-input v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请输入@(@column.ColumnComment)" 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"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
-							@:<el-input-number v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请输入@(@column.ColumnComment)" clearable />
+						@:<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"){
 					@:<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
-							@:<el-input v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请输入@(@column.ColumnComment)" type="textarea" clearable />
+						@:<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"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
-							@:<el-select clearable v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请选择@(@column.ColumnComment)">
-								@:<el-option v-for="(item,index) in  getEdit@(@column.LowerColumnName)Data"  :key="index" :value="item.code" :label="item.value"></el-option>
+						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
+							@:<el-select clearable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
+								@:<el-option v-for="(item,index) in  getEdit@(@column.LowerPropertyName)Data"  :key="index" :value="item.code" :label="item.value"></el-option>
 								@:
 							</el-select>
 							@:
@@ -81,8 +81,8 @@
 					</el-col>
 					}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.LowerColumnName)">
-							@:<el-select clearable v-model="ruleForm.@(@column.LowerColumnName)" placeholder="请选择@(@column.ColumnComment)">
+						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
+							@:<el-select clearable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
 								@:<el-option v-for="(item,index) in getConstType('@column.DictTypeCode')" :key="index" :label="item.name" :value="item.code">{{ item.name }}</el-option>
 								@:
 							</el-select>
@@ -92,31 +92,31 @@
 					</el-col>
 					}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.LowerColumnName)">
-							@:<el-switch v-model="ruleForm.@(@column.LowerColumnName)" active-text="是" inactive-text="否" />
+						@:<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"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerColumnName)">
-							@:<el-date-picker v-model="ruleForm.@(@column.LowerColumnName)" type="date" placeholder="@(@column.ColumnComment)" />
+						@:<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"){
 					@:<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.LowerPropertyName)">
 							@:<el-upload
 							@:list-type="picture-card"
 							@::limit="1"
 							@::show-file-list="false"
-							@::http-request="upload@(@column.ColumnName)Handle">
+							@::http-request="upload@(@column.PropertyName)Handle">
 								@:<img
-								@:v-if="ruleForm.@(@column.LowerColumnName)"
-								@::src="ruleForm.@(@column.LowerColumnName)"
+								@:v-if="ruleForm.@(@column.LowerPropertyName)"
+								@::src="ruleForm.@(@column.LowerPropertyName)"
 								@:style="width: 100%; height: 100%; object-fit: contain"/>
 								@:<el-icon v-else><Plus /></el-icon>
 								@:
@@ -153,7 +153,7 @@
 @if(@Model.TableField.Any(x=>x.EffectType == "Upload")){
     @:import { Plus } from "@@element-plus/icons-vue";
     @:import { UploadRequestOptions } from "element-plus";
-    @:import {@string.Join(",",Model.TableField.Where(x=>x.EffectType == "Upload").Select(x=>"upload"+x.ColumnName).ToList())} from '/@@/api/main/@(@Model.LowerClassName)';
+    @:import {@string.Join(",",Model.TableField.Where(x=>x.EffectType == "Upload").Select(x=>"upload"+x.PropertyName).ToList())} from '/@@/api/main/@(@Model.LowerClassName)';
 }
 	import { add@(@Model.ClassName), update@(@Model.ClassName) } from "/@@/api/main/@(@Model.LowerClassName)";
 	@foreach (var column in Model.TableField){
@@ -162,7 +162,7 @@
 	@:import { get@(@column.FkEntityName)Tree } from '/@@/api/main/@(@Model.LowerClassName)';
 	}
 	if(@column.EffectType == "fk"){
-	@:import { get@(@column.FkEntityName)@(@column.ColumnName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
+	@:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
 	}
 	}
 	@if(@Model.TableField.Any(x=>x.EffectType == "Select")){
@@ -171,7 +171,7 @@
 	}
 	@foreach (var column in Model.TableField){
 	if(@column.EffectType == "Select"){
-	@:const getEdit@(@column.LowerColumnName)Data = ref<any>([]);
+	@:const getEdit@(@column.LowerPropertyName)Data = ref<any>([]);
 	}
 	}
 	//父级传递来的参数
@@ -191,9 +191,9 @@
   @foreach (var column in Model.TableField){
 		if(@column.WhetherRequired == "Y"){
 			if(@column.EffectType == "Input" || @column.EffectType == "InputNumber" ||@column.EffectType == "InputTextArea"){
-		@:@column.LowerColumnName: [{required: true, message: '请输入@(@column.ColumnComment)!', trigger: 'blur',},],
+		@:@column.LowerPropertyName: [{required: true, message: '请输入@(@column.ColumnComment)!', trigger: 'blur',},],
 			}else if(@column.EffectType == "DatePicker" || @column.EffectType == "Select" ||@column.EffectType == "ApiTreeSelect"){
-		@:@column.LowerColumnName: [{required: true, message: '请选择@(@column.ColumnComment)!', trigger: 'change',},],
+		@:@column.LowerPropertyName: [{required: true, message: '请选择@(@column.ColumnComment)!', trigger: 'change',},],
 			}
     }
   }
@@ -248,12 +248,12 @@ const submit = async () => {
 
 @foreach (var column in Model.TableField){
   if(@column.EffectType == "fk"){
-@: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 ?? [];
+@: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();
+    @:@LowerFirstLetter(@column.FkEntityName)@(@column.PropertyName)DropdownList.value = list.data.result ?? [];
 @:};
-@:get@(@column.FkEntityName)@(@column.ColumnName)DropdownList();
+@:get@(@column.FkEntityName)@(@column.PropertyName)DropdownList();
 @:
   }
 }
@@ -285,9 +285,9 @@ const submit = async () => {
 @foreach (var column in Model.TableField){ 
 if(column.WhetherAddUpdate=="N") continue;
 if(@column.EffectType == "Upload"){
-@:const upload@(@column.ColumnName)Handle = async (options: UploadRequestOptions) => {
-	@:const res = await upload@(@column.ColumnName)(options);
-	@:ruleForm.value.@(column.LowerColumnName) = res.data.result?.url;
+@:const upload@(@column.PropertyName)Handle = async (options: UploadRequestOptions) => {
+	@:const res = await upload@(@column.PropertyName)(options);
+	@:ruleForm.value.@(column.LowerPropertyName) = res.data.result?.url;
 @:};
 	}
 }
@@ -297,7 +297,7 @@ if(@column.EffectType == "Upload"){
 onMounted(async () => {
 	@foreach (var column in Model.TableField){
 	if(@column.EffectType == "Select"){
-	@:getEdit@(@column.LowerColumnName)Data.value= await dictTypeDataList('@(@column.DictTypeCode)');
+	@:getEdit@(@column.LowerPropertyName)Data.value= await dictTypeDataList('@(@column.DictTypeCode)');
 	 }
 	}
 });

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

@@ -1,5 +1,5 @@
 @{var pkField = Model.TableField.Where(c => c.ColumnKey == "True").FirstOrDefault();}
-@{string pkFieldName = LowerFirstLetter(pkField.ColumnName);}
+@{string pkFieldName = LowerFirstLetter(pkField.PropertyName);}
 <template>
   <div class="@(@Model.LowerClassName)-container">
     <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
@@ -8,31 +8,31 @@
         foreach (var column in Model.QueryWhetherList){
         if(@column.EffectType == "Input" || @column.EffectType == "InputTextArea"){
         @:<el-form-item label="@column.ColumnComment">
-          @:<el-input v-model="queryParams.@(@column.LowerColumnName)" clearable="" placeholder="请输入@(@column.ColumnComment)"/>
+          @:<el-input v-model="queryParams.@(@column.LowerPropertyName)" clearable="" placeholder="请输入@(@column.ColumnComment)"/>
           @:
         </el-form-item>
         }else if(@column.EffectType == "InputTextArea"){
         @:<el-form-item label="@column.ColumnComment">
-          @:<el-input-number v-model="queryParams.@(@column.LowerColumnName)"  clearable="" placeholder="请输入@(@column.ColumnComment)"/>
+          @:<el-input-number v-model="queryParams.@(@column.LowerPropertyName)"  clearable="" placeholder="请输入@(@column.ColumnComment)"/>
           @:
         </el-form-item>
         }else if(@column.EffectType == "InputNumber"){
         @:<el-form-item label="@column.ColumnComment">
-          @:<el-input-number v-model="queryParams.@(@column.LowerColumnName)"  clearable="" placeholder="请输入@(@column.ColumnComment)"/>
+          @:<el-input-number v-model="queryParams.@(@column.LowerPropertyName)"  clearable="" placeholder="请输入@(@column.ColumnComment)"/>
           @:
         </el-form-item>
         }else if(@column.EffectType == "fk"){
         @:<el-form-item label="@column.ColumnComment">
-          @:<el-select clearable="" filterable="" v-model="queryParams.@(@column.LowerColumnName)" placeholder="请选择@(@column.ColumnComment)">
-            @:<el-option v-for="(item,index) in  @LowerFirstLetter(@column.FkEntityName)@(@column.ColumnName)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"){
         @:<el-form-item label="@column.ColumnComment">
-          @:<el-select clearable="" v-model="queryParams.@(@column.LowerColumnName)" placeholder="请选择@(@column.ColumnComment)">
-            @:<el-option v-for="(item,index) in get@(@column.LowerColumnName)Data" :key="index" :value="item.value" :label="item.label" />
+          @:<el-select clearable="" v-model="queryParams.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
+            @:<el-option v-for="(item,index) in get@(@column.LowerPropertyName)Data" :key="index" :value="item.value" :label="item.label" />
             @:
           </el-select>
           @:
@@ -40,10 +40,10 @@
         }else if(@column.EffectType == "DatePicker"){
         @:<el-form-item label="@column.ColumnComment">
           if(@column.QueryType == "~"){
-          @:<el-date-picker placeholder="请选择@(@column.ColumnComment)" value-format="YYYY/MM/DD" type="daterange" v-model="queryParams.@(@column.LowerColumnName)Range" />
+          @:<el-date-picker placeholder="请选择@(@column.ColumnComment)" value-format="YYYY/MM/DD" type="daterange" v-model="queryParams.@(@column.LowerPropertyName)Range" />
           }else
           {
-          @:<el-date-picker placeholder="请选择@(@column.ColumnComment)" value-format="YYYY/MM/DD"  v-model="queryParams.@(@column.LowerColumnName)" />
+          @:<el-date-picker placeholder="请选择@(@column.ColumnComment)" value-format="YYYY/MM/DD"  v-model="queryParams.@(@column.LowerPropertyName)" />
           }
           @:
         </el-form-item>
@@ -77,27 +77,27 @@
         @foreach (var column in Model.TableField){
         if(@column.WhetherTable == "Y"){
         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="">
+        @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" width="@(column.ColumnComment!=null && column.ColumnComment.Length > 5 ? column.ColumnComment.Length * 15 : 120)" show-overflow-tooltip="">
           @:<template #default="scope">
             if(@column.EffectType == "Upload"){
             @:<el-image
             @:style="width: 60px; height: 60px"
-            @::src="scope.row.@column.LowerColumnName"
+            @::src="scope.row.@column.LowerPropertyName"
             @::lazy="true"
             @::hide-on-click-modal="true"
-            @::preview-src-list="[scope.row.@column.LowerColumnName]"
+            @::preview-src-list="[scope.row.@column.LowerPropertyName]"
             @::initial-index="0"
             @:fit="scale-down"
             @:preview-teleported=""/>
             }else if(@column.EffectType == "fk"){
-            @:<span>{{scope.row.@LowerFirstLetter(@column.FkEntityName)@(@column.FkColumnName)}}</span>
+            @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)@(@column.FkColumnName)}}</span>
             }else if(@column.EffectType == "ApiTreeSelect"){
-            @:<span>{{scope.row.@LowerFirstLetter(@column.ColumnName)@(column.DisplayColumn)}}</span>
+            @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)@(column.DisplayColumn)}}</span>
             }else if(@column.EffectType == "Switch"){
-            @:<el-tag v-if="scope.row.@(@column.LowerColumnName)"> 是 </el-tag>
+            @:<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.LowerColumnName), '@(@column.DictTypeCode)')}}</span>
+            @:<span>{{codeToName(scope.row.@(@column.LowerPropertyName), '@(@column.DictTypeCode)')}}</span>
             }
             @:
           </template>
@@ -105,7 +105,7 @@
         </el-table-column>
         }
         else {
-        @:<el-table-column prop="@column.LowerColumnName" label="@column.ColumnComment" width="@(column.ColumnComment!=null && column.ColumnComment.Length > 5 ? column.ColumnComment.Length * 15 : 130)" show-overflow-tooltip="" />
+        @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" width="@(column.ColumnComment!=null && column.ColumnComment.Length > 5 ? column.ColumnComment.Length * 15 : 130)" show-overflow-tooltip="" />
         }
         }
         }
@@ -149,7 +149,7 @@
   import { page@(@Model.ClassName), delete@(@Model.ClassName) } from '/@@/api/main/@(@Model.LowerClassName)';
   @foreach (var column in Model.QueryWhetherList){
   if(@column.EffectType == "fk"){
-  @:import { get@(@column.FkEntityName)@(@column.ColumnName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
+  @:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/main/@(@Model.LowerClassName)';
   }
   }
   @foreach (var column in Model.QueryWhetherList){
@@ -161,7 +161,7 @@
 
   @foreach (var column in Model.QueryWhetherList){
   if(@column.EffectType == "Select"){
-  @:const get@(@column.LowerColumnName)Data = ref<any>([]);
+  @:const get@(@column.LowerPropertyName)Data = ref<any>([]);
     }
     }
 
@@ -188,7 +188,7 @@
         loading.value = false;
         @foreach (var column in Model.QueryWhetherList){
         if(@column.EffectType == "Select"){
-        @:get@(@column.LowerColumnName)Data.value = await dictTypeDataList('@(@column.DictTypeCode)');
+        @:get@(@column.LowerPropertyName)Data.value = await dictTypeDataList('@(@column.DictTypeCode)');
         }
         }
         };
@@ -234,12 +234,12 @@
 
         @foreach (var column in Model.QueryWhetherList){
         if(@column.EffectType == "fk"){
-        @: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 ?? [];
+        @: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();
+    @:@LowerFirstLetter(@column.FkEntityName)@(@column.PropertyName)DropdownList.value = list.data.result ?? [];
 @:};
-@:get@(@column.FkEntityName)@(@column.ColumnName)DropdownList();
+@:get@(@column.FkEntityName)@(@column.PropertyName)DropdownList();
 @:
   }
 }

+ 1 - 2
Web/src/views/system/codeGen/component/fkDialog.vue

@@ -19,7 +19,7 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="数据库表" prop="tableName">
 							<el-select v-model="state.ruleForm.tableName" filterable clearable @change="TableChanged()" class="w100">
-								<el-option v-for="item in state.tableData" :key="item.entityName" :label="item.tableName" :value="item.tableName" />
+								<el-option v-for="item in state.tableData" :key="item.entityName" :label="item.entityName + ' ( ' + item.tableName + ' )'" :value="item.tableName" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -97,7 +97,6 @@ const getColumnInfoList = async () => {
 const openDialog = (row: any) => {
 	rowdata = row;
 	state.isShowDialog = true;
-	ruleFormRef.value?.resetFields();
 };
 
 // 关闭弹窗

+ 2 - 2
Web/src/views/system/codeGen/component/genConfigDialog.vue

@@ -9,13 +9,13 @@
 			</template>
 			<el-table :data="state.tableData" style="width: 100%" v-loading="state.loading" border>
 				<el-table-column type="index" label="序号" width="55" align="center" />
-				<el-table-column prop="columnName" label="字段" width="180" show-overflow-tooltip />
+				<el-table-column prop="propertyName" label="实体属性" width="180" show-overflow-tooltip />
 				<el-table-column prop="columnComment" label="描述" width="180" show-overflow-tooltip>
 					<template #default="scope">
 						<el-input v-model="scope.row.columnComment" autocomplete="off" />
 					</template>
 				</el-table-column>
-				<el-table-column prop="netType" label="数据类型" minWidth="120" show-overflow-tooltip />
+				<el-table-column prop="netType" label="数据类型" minWidth="90" show-overflow-tooltip />
 				<el-table-column prop="effectType" label="作用类型" width="120" show-overflow-tooltip>
 					<template #default="scope">
 						<el-select v-model="scope.row.effectType" class="m-2" placeholder="Select" :disabled="judgeColumns(scope.row)" @change="effectTypeChange(scope.row, scope.$index)">

+ 1 - 5
Web/src/views/system/database/component/genEntity.vue

@@ -28,10 +28,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="存放位置" prop="position">
-							<el-select v-model="state.ruleForm.position" clearable class="w100">
-								<el-option label="Admin.NET.Application" value="Admin.NET.Application" />
-								<el-option label="Admin.NET.Core" value="Admin.NET.Core" />
-							</el-select>
+							<el-input v-model="state.ruleForm.position" placeholder="存放位置" clearable >Admin.NET.Application</el-input>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -72,7 +69,6 @@ const openDialog = (row: any) => {
 	state.ruleForm.baseClassName = 'EntityBase';
 	state.ruleForm.position = 'Admin.NET.Application';
 	state.isShowDialog = true;
-	ruleFormRef.value?.resetFields();
 };
 
 // 关闭弹窗