Bläddra i källkod

Merge commit 'refs/pull/312/head' of https://gitee.com/zuohuaijun/Admin.NET into next

zuohuaijun 4 år sedan
förälder
incheckning
16293b5df5

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

@@ -1,4 +1,14 @@
+using Furion;
+using Furion.FriendlyException;
+using Mapster;
+using MapsterMapper;
 using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
 
 namespace Admin.NET.Core.Extension
 {
@@ -18,5 +28,32 @@ namespace Admin.NET.Core.Extension
                 .UpdateColumns(x => new { x.IsDelete, x.UpdateTime, x.UpdateUserId });  // 允许更新的字段-AOP拦截自动设置UpdateTime、UpdateUserId
         }
 
+        /// <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);
+        }
     }
 }

+ 15 - 0
Admin.NET/Admin.NET.Core/Util/BasePageInput.cs

@@ -14,5 +14,20 @@
         /// 页码容量
         /// </summary>
         public virtual int PageSize { get; set; }
+
+        /// <summary>
+        /// 排序字段
+        /// </summary>
+        public virtual string Field { get; set; }
+
+        /// <summary>
+        /// 排序方向
+        /// </summary>
+        public virtual string Order { get; set; }
+        
+        /// <summary>
+        /// 降序排序 
+        /// </summary>
+        public virtual string DescStr { get; set; } = "descend";
     }
 }

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

@@ -10,6 +10,7 @@ using Admin.NET.Core;
 using Admin.NET.Core.Service;
 using System;
 using @(@Model.NameSpace).Entity;
+using Admin.NET.Core.Extension;
 
 namespace @Model.NameSpace
 {
@@ -80,8 +81,9 @@ namespace @Model.NameSpace
             @:} 
         }
     }
-}         
-                return await query.ToPagedListAsync(input.Page, input.PageSize);
+}
+            query = query.OrderBuilder(input);
+            return await query.ToPagedListAsync(input.Page, input.PageSize);
         }
 
         /// <summary>

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

@@ -18,7 +18,8 @@ export const columns: BasicColumn[] = [
   if(@column.WhetherTable == "Y"){
   @:{
     @:title: '@column.ColumnComment',
-    @:dataIndex: '@column.LowerColumnName',
+    @:dataIndex: '@column.LowerColumnName',    
+    @:sorter: true,
 if(@column.EffectType == "Upload"){
     @:slots: { customRender: '@(@column.LowerColumnName)' },
 }else if(@column.EffectType == "fk"){
@@ -129,6 +130,7 @@ if(@column.EffectType == "fk"){
   if(@column.LowerColumnName == "id"){
     @:show: false,
   }
+    @:colProps: { span: 12 },
   @:},
 
   }

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

@@ -1,5 +1,5 @@
 <template>
-  <BasicModal v-bind="$attrs" @@register="registerModal" :title="getTitle" @@ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @@register="registerModal" :width="700" :title="getTitle" @@ok="handleSubmit">
     <BasicForm @@register="registerForm" />
   </BasicModal>
 </template>