Prechádzať zdrojové kódy

合并完善代码生成 !501

zuohuaijun 3 rokov pred
rodič
commit
7b3a98b44c

+ 174 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -3281,6 +3281,172 @@
             <param name="defaultValue"></param>
             <returns></returns>
         </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDelete``1(SqlSugar.ISugarRepository,``0)">
+            <summary>
+            实体假删除 _rep.FakeDelete(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="repository"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDelete``1(SqlSugar.ISqlSugarClient,``0)">
+            <summary>
+            实体假删除 db.FakeDelete(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="db"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDeleteAsync``1(SqlSugar.ISugarRepository,``0)">
+            <summary>
+            实体假删除异步 _rep.FakeDeleteAsync(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="repository"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDeleteAsync``1(SqlSugar.ISqlSugarClient,``0)">
+            <summary>
+            实体假删除 db.FakeDelete(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="db"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.OrderBuilder``1(SqlSugar.ISugarQueryable{``0},Admin.NET.Core.BasePageInput,System.String,System.Boolean)">
+            <summary>
+            排序方式(默认降序)
+            </summary>
+            <param name="queryable"></param>
+            <param name="pageInput"> </param>
+            <param name="defualtSortField"> 默认排序字段 </param>
+            <param name="descSort"> 是否降序 </param>
+            <returns> </returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLog``1(SqlSugar.ISugarRepository,``0,System.Boolean)">
+            <summary>
+            更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="repository"></param>
+            <param name="entity"></param>
+            <param name="ignoreAllNullColumns"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLog``1(SqlSugar.ISqlSugarClient,``0,System.Boolean)">
+            <summary>
+            更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="db"></param>
+            <param name="entity"></param>
+            <param name="ignoreAllNullColumns"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLogAsync``1(SqlSugar.ISugarRepository,``0,System.Boolean)">
+            <summary>
+            更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="repository"></param>
+            <param name="entity"></param>
+            <param name="ignoreAllNullColumns"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLogAsync``1(SqlSugar.ISqlSugarClient,``0,System.Boolean)">
+            <summary>
+            更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="db"></param>
+            <param name="entity"></param>
+            <param name="ignoreAllNullColumns"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLog``1(SqlSugar.ISugarRepository,``0)">
+            <summary>
+            新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="repository"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLog``1(SqlSugar.ISqlSugarClient,``0)">
+            <summary>
+            新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="db"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLogAsync``1(SqlSugar.ISugarRepository,``0)">
+            <summary>
+            新增实体并记录差异日志 _rep.InsertWithDiffLogAsync(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="repository"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLogAsync``1(SqlSugar.ISqlSugarClient,``0)">
+            <summary>
+            新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="db"></param>
+            <param name="entity"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.AS``1(SqlSugar.ISugarQueryable{``0})">
+            <summary>
+            多库查询
+            </summary>
+            <param name="queryable"></param>
+            <returns> </returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.AS``2(SqlSugar.ISugarQueryable{``0,``1})">
+            <summary>
+            多库查询
+            </summary>
+            <typeparam name="T"></typeparam>
+            <typeparam name="T2"></typeparam>
+            <param name="queryable"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.AS``1(SqlSugar.IUpdateable{``0})">
+            <summary>
+            多库更新
+            </summary>
+            <param name="updateable"></param>
+            <returns> </returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.AS``1(SqlSugar.IInsertable{``0})">
+            <summary>
+            多库新增
+            </summary>
+            <param name="insertable"></param>
+            <returns> </returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.AS``1(SqlSugar.IDeleteable{``0})">
+            <summary>
+            多库删除
+            </summary>
+            <param name="deleteable"></param>
+            <returns> </returns>
+        </member>
+        <member name="M:Admin.NET.Core.RepositoryExtension.GetTableInfo``1">
+            <summary>
+            根据实体类型获取表信息
+            </summary>
+            <typeparam name="T"></typeparam>
+            <returns></returns>
+        </member>
         <member name="T:Admin.NET.Core.ResultFilter">
             <summary>
             结果筛选器
@@ -4364,7 +4530,7 @@
         </member>
         <member name="P:Admin.NET.Core.Service.TableOutput.TableComment">
             <summary>
-            表名称描述(注释)(功能名)
+            表名称描述(功能名)
             </summary>
         </member>
         <member name="T:Admin.NET.Core.Service.SysCodeGenConfigService">
@@ -4407,6 +4573,13 @@
             <param name="tableColumnOuputList"></param>
             <param name="codeGenerate"></param>
         </member>
+        <member name="M:Admin.NET.Core.Service.SysCodeGenConfigService.GetDefaultQueryType(Admin.NET.Core.SysCodeGenConfig)">
+            <summary>
+            默认查询类型
+            </summary>
+            <param name="codeGenConfig"></param>
+            <returns></returns>
+        </member>
         <member name="T:Admin.NET.Core.Service.SysCodeGenService">
             <summary>
             系统代码生成器服务

+ 267 - 0
Admin.NET/Admin.NET.Core/Extension/RepositoryExtension.cs

@@ -0,0 +1,267 @@
+using MapsterMapper;
+
+namespace Admin.NET.Core;
+
+public static class RepositoryExtension
+{
+    /// <summary>
+    /// 实体假删除 _rep.FakeDelete(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="repository"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static int FakeDelete<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
+    {
+        return repository.Context.FakeDelete(entity);
+    }
+
+    /// <summary>
+    /// 实体假删除 db.FakeDelete(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="db"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static int FakeDelete<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
+    {
+        return db.Updateable(entity).AS().ReSetValue(x => { x.IsDelete = true; })
+            .IgnoreColumns(ignoreAllNullColumns: true)
+            .EnableDiffLogEvent()   // 记录差异日志
+            .UpdateColumns(x => new { x.IsDelete, x.UpdateTime, x.UpdateUserId })  // 允许更新的字段-AOP拦截自动设置UpdateTime、UpdateUserId
+            .ExecuteCommand();
+    }
+
+    /// <summary>
+    /// 实体假删除异步 _rep.FakeDeleteAsync(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="repository"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static Task<int> FakeDeleteAsync<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
+    {
+        return repository.Context.FakeDeleteAsync(entity);
+    }
+
+    /// <summary>
+    /// 实体假删除 db.FakeDelete(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="db"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static Task<int> FakeDeleteAsync<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
+    {
+        return db.Updateable(entity).AS().ReSetValue(x => { x.IsDelete = true; })
+            .IgnoreColumns(ignoreAllNullColumns: true)
+            .EnableDiffLogEvent()   // 记录差异日志
+            .UpdateColumns(x => new { x.IsDelete, x.UpdateTime, x.UpdateUserId })  // 允许更新的字段-AOP拦截自动设置UpdateTime、UpdateUserId
+            .ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 排序方式(默认降序)
+    /// </summary>
+    /// <param name="queryable"></param>
+    /// <param name="pageInput"> </param>
+    /// <param name="defualtSortField"> 默认排序字段 </param>
+    /// <param name="descSort"> 是否降序 </param>
+    /// <returns> </returns>
+    public static ISugarQueryable<T> OrderBuilder<T>(this ISugarQueryable<T> queryable, BasePageInput pageInput, string defualtSortField = "Id", bool descSort = true)
+    {
+        var orderStr = "";
+        // 约定默认每张表都有Id排序
+        if (!string.IsNullOrWhiteSpace(defualtSortField))
+        {
+            orderStr = descSort ? defualtSortField + " Desc" : defualtSortField + " Asc";
+        }
+        TypeAdapterConfig config = new();
+        config.ForType<T, BasePageInput>().IgnoreNullValues(true);
+        Mapper mapper = new(config); // 务必将mapper设为单实例
+        var nowPagerInput = mapper.Map<BasePageInput>(pageInput);
+        // 排序是否可用-排序字段和排序顺序都为非空才启用排序
+        if (!string.IsNullOrEmpty(nowPagerInput.Field) && !string.IsNullOrEmpty(nowPagerInput.Order))
+        {
+            orderStr = $"{nowPagerInput.Field} {(nowPagerInput.Order == nowPagerInput.DescStr ? "Desc" : "Asc")}";
+        }
+        return queryable.OrderByIF(!string.IsNullOrWhiteSpace(orderStr), orderStr);
+    }
+
+    /// <summary>
+    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="repository"></param>
+    /// <param name="entity"></param>
+    /// <param name="ignoreAllNullColumns"></param>
+    /// <returns></returns>
+    public static int UpdateWithDiffLog<T>(this ISugarRepository repository, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
+    {
+        return repository.Context.UpdateWithDiffLog(entity, ignoreAllNullColumns);
+    }
+
+    /// <summary>
+    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="db"></param>
+    /// <param name="entity"></param>
+    /// <param name="ignoreAllNullColumns"></param>
+    /// <returns></returns>
+    public static int UpdateWithDiffLog<T>(this ISqlSugarClient db, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
+    {
+        return db.Updateable(entity).AS()
+            .IgnoreColumns(ignoreAllNullColumns: ignoreAllNullColumns)
+            .EnableDiffLogEvent()
+            .ExecuteCommand();
+    }
+
+    /// <summary>
+    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="repository"></param>
+    /// <param name="entity"></param>
+    /// <param name="ignoreAllNullColumns"></param>
+    /// <returns></returns>
+    public static Task<int> UpdateWithDiffLogAsync<T>(this ISugarRepository repository, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
+    {
+        return repository.Context.UpdateWithDiffLogAsync(entity, ignoreAllNullColumns);
+    }
+
+    /// <summary>
+    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="db"></param>
+    /// <param name="entity"></param>
+    /// <param name="ignoreAllNullColumns"></param>
+    /// <returns></returns>
+    public static Task<int> UpdateWithDiffLogAsync<T>(this ISqlSugarClient db, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
+    {
+        return db.Updateable(entity)
+            .IgnoreColumns(ignoreAllNullColumns: ignoreAllNullColumns)
+            .EnableDiffLogEvent()
+            .ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="repository"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static int InsertWithDiffLog<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
+    {
+        return repository.Context.InsertWithDiffLog(entity);
+    }
+
+    /// <summary>
+    /// 新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="db"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static int InsertWithDiffLog<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
+    {
+        return db.Insertable(entity).AS().EnableDiffLogEvent().ExecuteCommand();
+    }
+
+    /// <summary>
+    /// 新增实体并记录差异日志 _rep.InsertWithDiffLogAsync(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="repository"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static Task<int> InsertWithDiffLogAsync<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
+    {
+        return repository.Context.InsertWithDiffLogAsync(entity);
+    }
+
+    /// <summary>
+    /// 新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="db"></param>
+    /// <param name="entity"></param>
+    /// <returns></returns>
+    public static Task<int> InsertWithDiffLogAsync<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
+    {
+        return db.Insertable(entity).AS().EnableDiffLogEvent().ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 多库查询
+    /// </summary>
+    /// <param name="queryable"></param>
+    /// <returns> </returns>
+    public static ISugarQueryable<T> AS<T>(this ISugarQueryable<T> queryable)
+    {
+        var info = GetTableInfo<T>();
+        return queryable.AS<T>($"{info.Item1}.{info.Item2}");
+    }
+
+    /// <summary>
+    /// 多库查询
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <typeparam name="T2"></typeparam>
+    /// <param name="queryable"></param>
+    /// <returns></returns>
+    public static ISugarQueryable<T, T2> AS<T, T2>(this ISugarQueryable<T, T2> queryable)
+    {
+        var info = GetTableInfo<T2>();
+        return queryable.AS<T2>($"{info.Item1}.{info.Item2}");
+    }
+
+    /// <summary>
+    /// 多库更新
+    /// </summary>
+    /// <param name="updateable"></param>
+    /// <returns> </returns>
+    public static IUpdateable<T> AS<T>(this IUpdateable<T> updateable) where T : EntityBase, new()
+    {
+        var info = GetTableInfo<T>();
+        return updateable.AS($"{info.Item1}.{info.Item2}");
+    }
+
+    /// <summary>
+    /// 多库新增
+    /// </summary>
+    /// <param name="insertable"></param>
+    /// <returns> </returns>
+    public static IInsertable<T> AS<T>(this IInsertable<T> insertable) where T : EntityBase, new()
+    {
+        var info = GetTableInfo<T>();
+        return insertable.AS($"{info.Item1}.{info.Item2}");
+    }
+
+    /// <summary>
+    /// 多库删除
+    /// </summary>
+    /// <param name="deleteable"></param>
+    /// <returns> </returns>
+    public static IDeleteable<T> AS<T>(this IDeleteable<T> deleteable) where T : EntityBase, new()
+    {
+        var info = GetTableInfo<T>();
+        return deleteable.AS($"{info.Item1}.{info.Item2}");
+    }
+
+    /// <summary>
+    /// 根据实体类型获取表信息
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <returns></returns>
+    private static Tuple<string, string> GetTableInfo<T>()
+    {
+        var entityType = typeof(T);
+        var attr = entityType.GetCustomAttribute<TenantAttribute>();
+        var configId = attr == null ? SqlSugarConst.ConfigId : attr.configId.ToString();
+        var tableName = entityType.GetCustomAttribute<SugarTable>().TableName;
+        return new Tuple<string, string>(configId, tableName);
+    }
+}

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

@@ -24,8 +24,7 @@ public class CodeGenConfig
     /// 数据库字段名(首字母小写)
     /// </summary>
     public string LowerColumnName =>
-        string.IsNullOrWhiteSpace(ColumnName)
-        ? null : ColumnName[..1].ToLower() + ColumnName[1..];
+        string.IsNullOrWhiteSpace(ColumnName) ? null : ColumnName[..1].ToLower() + ColumnName[1..];
 
     /// <summary>
     /// 字段描述
@@ -56,8 +55,7 @@ public class CodeGenConfig
     /// 外键实体名称(首字母小写)
     /// </summary>
     public string LowerFkEntityName =>
-        string.IsNullOrWhiteSpace(FkEntityName)
-        ? null : FkEntityName[..1].ToLower() + FkEntityName[1..];
+        string.IsNullOrWhiteSpace(FkEntityName) ? null : FkEntityName[..1].ToLower() + FkEntityName[1..];
 
     /// <summary>
     /// 外键显示字段
@@ -68,8 +66,7 @@ public class CodeGenConfig
     /// 外键显示字段(首字母小写)
     /// </summary>
     public string LowerFkColumnName =>
-        string.IsNullOrWhiteSpace(FkColumnName)
-        ? null : FkColumnName[..1].ToLower() + FkColumnName[1..];
+        string.IsNullOrWhiteSpace(FkColumnName) ? null : FkColumnName[..1].ToLower() + FkColumnName[1..];
 
     /// <summary>
     /// 外键显示字段.NET类型

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

@@ -31,7 +31,7 @@ public class TableOutput
     public string UpdateTime { get; set; }
 
     /// <summary>
-    /// 表名称描述(注释)(功能名)
+    /// 表名称描述(功能名)
     /// </summary>
     public string TableComment { get; set; }
 }

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

@@ -107,11 +107,31 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
 
             codeGenConfig.DataType = tableColumn.DataType;
             codeGenConfig.EffectType = CodeGenUtil.DataTypeToEff(codeGenConfig.NetType);
-            codeGenConfig.QueryType = "=="; // QueryTypeEnum.eq.ToString();
+            codeGenConfig.QueryType = GetDefaultQueryType(codeGenConfig); // QueryTypeEnum.eq.ToString();
             codeGenConfigs.Add(codeGenConfig);
         }
         // 多库代码生成---这里要切回主库
         var provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
         provider.Insertable(codeGenConfigs).ExecuteCommand();
     }
+
+    /// <summary>
+    /// 默认查询类型
+    /// </summary>
+    /// <param name="codeGenConfig"></param>
+    /// <returns></returns>
+    private string GetDefaultQueryType(SysCodeGenConfig codeGenConfig)
+    {
+        switch (codeGenConfig.NetType)
+        {
+            case "string":
+                return "like";
+
+            case "DateTime":
+                return "~";
+
+            default:
+                return "==";
+        }
+    }
 }

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

@@ -36,6 +36,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     {
         return await _db.Queryable<SysCodeGen>()
             .WhereIF(!string.IsNullOrWhiteSpace(input.TableName), u => u.TableName.Contains(input.TableName.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.BusName), u => u.BusName.Contains(input.BusName.Trim()))
             .ToPagedListAsync(input.Page, input.PageSize);
     }
 
@@ -274,6 +275,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// <returns></returns>
     private async Task AddMenu(string className, string busName, long pid)
     {
+        string pPath = null;//父路径
         // 如果 pid 为 0 说明为顶级菜单, 需要创建顶级目录
         if (pid == 0)
         {
@@ -306,8 +308,16 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             pid = (await _db.Insertable(menuType0).ExecuteReturnEntityAsync()).Id;
         }
         // 由于后续菜单会有修改, 需要判断下 pid 是否存在, 不存在报错
-        else if (!await _db.Queryable<SysMenu>().AnyAsync(e => e.Id == pid))
-            throw Oops.Oh(ErrorCodeEnum.D1505);
+        else
+        {
+            var pMenu = await _db.Queryable<SysMenu>().FirstAsync(e => e.Id == pid);
+            if (pMenu == null)
+                throw Oops.Oh(ErrorCodeEnum.D1505);
+            else
+            {
+                pPath = pMenu.Path;
+            }
+        }
 
         // 菜单
         var menuType1 = new SysMenu
@@ -316,7 +326,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             Title = busName + "管理",
             Name = className + "Management",
             Type = MenuTypeEnum.Menu,
-            Path = "/" + className.ToLower(),
+            Path = pPath + "/" + className.ToLower(),
             Component = "/main/" + className + "/index",
         };
         {   // 如果之前存在那么就删除本级和下级

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

@@ -58,11 +58,11 @@ if (@column.QueryWhether == "Y"){
 @foreach (var column in Model.TableField){
 if (@column.QueryWhether == "Y"){
     if(@column.NetType == "DateTime" && @column.QueryType == "~"){
-        @:if(input.@(@column.ColumnName)Range != null && input.@(@column.ColumnName)Range.Count == 2)
+        @:if(input.@(@column.ColumnName)Range != null && input.@(@column.ColumnName)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[1].HasValue)
+                @:if (input.@(@column.ColumnName)Range.Count >1 && input.@(@column.ColumnName)Range[1].HasValue)
                 @:{
                     @:var end = input.@(@column.ColumnName)Range[1].Value.AddDays(1);
                     @:query = query.Where(u => u.@(@column.ColumnName) < end);
@@ -84,7 +84,7 @@ if (@column.QueryWhether == "Y"){
     public async Task Add(Add@(@Model.ClassName)Input input)
     {
         var entity = input.Adapt<@(@Model.ClassName)>();
-        await _rep.InsertWithDiffLogAsync(entity);
+        await _rep.InsertAsync(entity);
     }
 
     /// <summary>
@@ -100,7 +100,7 @@ if (@column.ColumnKey == "True"){
         @:var entity = await _rep.GetFirstAsync(u => u.@(@column.ColumnName) == input.@(@column.ColumnName));
 }
 }
-        await _rep.FakeDeleteAsync(entity);   //假删除
+        await _rep.DeleteAsync(entity);   //假删除
     }
 
     /// <summary>
@@ -112,7 +112,7 @@ if (@column.ColumnKey == "True"){
     public async Task Update(Update@(@Model.ClassName)Input input)
     {
         var entity = input.Adapt<@(@Model.ClassName)>();
-        await _rep.UpdateWithDiffLogAsync(entity);
+        await _rep.UpdateAsync(entity);
     }
 
     /// <summary>

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

@@ -78,7 +78,7 @@
 					}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="datetime" placeholder="@(@column.ColumnComment)"  />
+							@:<el-date-picker v-model="ruleForm.@(@column.LowerColumnName)" type="date" placeholder="@(@column.ColumnComment)"  />
 							@:
 						</el-form-item>
 						@:
@@ -107,7 +107,7 @@
 import { ref } from "vue";
 import { ElMessage } from "element-plus";
 import type { FormRules } from "element-plus";
-import { addComFund, updateComFund } from "/@@/api/main/@(@Model.ClassName)";
+import { add@(@Model.ClassName), update@(@Model.ClassName) } from "/@@/api/main/@(@Model.ClassName)";
 @foreach (var column in Model.TableField){
   if(@column.EffectType == "fk"){
     @:import { get@(@column.FkEntityName)Dropdown } from '/@@/api/main/@(@Model.ClassName)';
@@ -165,9 +165,9 @@ const submit = async () => {
     if (isValid) {
       let values = ruleForm.value;
       if (ruleForm.value.id != undefined && ruleForm.value.id > 0) {
-        await updateComFund(values);
+        await update@(@Model.ClassName)(values);
       } else {
-        await addComFund(values);
+        await add@(@Model.ClassName)(values);
       }
       closeDialog();
     } else {

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

@@ -42,7 +42,12 @@
             }else if(@column.EffectType == "DatePicker"){
               @:<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" >
               @:<el-form-item label="@column.ColumnComment">
-              @:<el-date-picker placeholder="请选择@(@column.ColumnComment)" v-model="queryParams.@(@column.LowerColumnName)Date" />
+				  if(@column.QueryType == "~"){ 
+					@:<el-date-picker placeholder="请选择@(@column.ColumnComment)" value-format="YYYY/MM/DD" type="daterange" v-model="queryParams.@(@column.LowerColumnName)Range" />
+				  }else
+				  {
+					@:<el-date-picker placeholder="请选择@(@column.ColumnComment)" value-format="YYYY/MM/DD"  v-model="queryParams.@(@column.LowerColumnName)" />
+				  }
               @:</el-form-item>
               @:</el-col>      
             }
@@ -104,7 +109,7 @@
 				}
 				<el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('@(@Model.ClassName):edit') || auth('@(@Model.ClassName):delete')">
 					<template #default="scope">
-						<el-button icon="ele-Edit" size="small" text="" type="primary" @@click="openEdit@(@Model.ClassName)(scope.row)" v-auth="'@(@Model.ClassName):update'"> 编辑 </el-button>
+						<el-button icon="ele-Edit" size="small" text="" type="primary" @@click="openEdit@(@Model.ClassName)(scope.row)" v-auth="'@(@Model.ClassName):edit'"> 编辑 </el-button>
 						<el-button icon="ele-Delete" size="small" text="" type="primary" @@click="del@(@Model.ClassName)(scope.row)" v-auth="'@(@Model.ClassName):delete'"> 删除 </el-button>
 					</template>
 				</el-table-column>
@@ -164,7 +169,7 @@ const edit@(@Model.ClassName)Title = ref("");
 // 查询操作
 const handleQuery = async () => {
   loading.value = true;
-  var res = await getComFundPageList(Object.assign(queryParams.value, tableParams.value));
+  var res = await get@(@Model.ClassName)PageList(Object.assign(queryParams.value, tableParams.value));
   tableData.value = res.data.result?.items ?? [];
   tableParams.value.total = res.data.result?.total;
   loading.value = false;

+ 1 - 1
Web/src/router/backEnd.ts

@@ -44,7 +44,7 @@ export async function initBackEndControlRoutes() {
 	// 获取路由菜单数据
 	const res = await getBackEndControlRoutes();
 	// 存储接口原始路由(未处理component),根据需求选择使用
-	useRequestOldRoutes().setRequestOldRoutes(JSON.parse(JSON.stringify(res)));
+	useRequestOldRoutes().setRequestOldRoutes(res as string[]);
 	// 处理路由(component),替换 dynamicRoutes(/@/router/route)第一个顶级 children 的路由
 	dynamicRoutes[0].children = await backEndComponent(res);
 	// 添加动态路由

+ 16 - 9
Web/src/views/system/codeGen/index.vue

@@ -2,7 +2,15 @@
 	<div class="sys-codeGen-container">
 		<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
 			<el-form :model="queryParams" ref="queryForm" :inline="true">
+				<el-form-item label="业务名" prop="busName">
+					<el-input placeholder="业务名" clearable @keyup.enter="handleQuery" v-model="queryParams.busName" />
+				</el-form-item>
+				<el-form-item label="数据库表名" prop="tableName">
+					<el-input placeholder="数据库表名" clearable @keyup.enter="handleQuery" v-model="queryParams.tableName" />
+				</el-form-item>
 				<el-form-item>
+					<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
+					<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysMenu:list'"> 查询 </el-button>
 					<el-button type="primary" icon="ele-Plus" @click="openAddDialog">增加</el-button>
 				</el-form-item>
 			</el-form>
@@ -76,6 +84,7 @@ export default defineComponent({
 				name: undefined,
 				code: undefined,
 				tableName: undefined,
+				busName: undefined,
 			},
 			tableParams: {
 				page: 1,
@@ -84,7 +93,6 @@ export default defineComponent({
 			},
 			editMenuTitle: '',
 		});
-
 		onMounted(async () => {
 			handleQuery();
 
@@ -95,15 +103,19 @@ export default defineComponent({
 				state.tableData;
 			});
 		});
-
 		onUnmounted(() => {
 			mittBus.off('submitRefresh', () => {});
 			mittBus.off('submitRefreshFk', () => {});
 		});
-
 		const openConfigDialog = (row: any) => {
 			CodeConfigRef.value.openDialog(row);
 		};
+		// 重置操作
+		const resetQuery = () => {
+			state.queryParams.busName = undefined;
+			state.queryParams.tableName = undefined;
+			handleQuery();
+		};
 		// 表查询操作
 		const handleQuery = async () => {
 			state.loading = true;
@@ -130,19 +142,16 @@ export default defineComponent({
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};
-
 		// 改变页面容量
 		const handleSizeChange = (val: number) => {
 			state.tableParams.pageSize = val;
 			handleQuery();
 		};
-
 		// 改变页码序号
 		const handleCurrentChange = (val: number) => {
 			state.tableParams.page = val;
 			handleQuery();
 		};
-
 		// 打开表增加页面
 		const openAddDialog = () => {
 			state.editMenuTitle = '增加';
@@ -153,7 +162,6 @@ export default defineComponent({
 			state.editMenuTitle = '编辑';
 			EditCodeGenRef.value.openDialog(row);
 		};
-
 		// 删除表
 		const deleConfig = (row: any) => {
 			ElMessageBox.confirm(`确定删除吗?`, '提示', {
@@ -168,7 +176,6 @@ export default defineComponent({
 				})
 				.catch(() => {});
 		};
-
 		// 开始生成代码
 		const handleGenerate = (row: any) => {
 			ElMessageBox.confirm(`确定要生成吗?`, '提示', {
@@ -183,11 +190,11 @@ export default defineComponent({
 				})
 				.catch(() => {});
 		};
-
 		return {
 			EditCodeGenRef,
 			CodeConfigRef,
 			handleQuery,
+			resetQuery,
 			openAddDialog,
 			openEditDialog,
 			deleConfig,