懒得勤快 4 vuotta sitten
vanhempi
sitoutus
955c5db24d
29 muutettua tiedostoa jossa 333 lisäystä ja 153 poistoa
  1. 5 5
      src/Masuit.MyBlogs.Core/Controllers/CommentController.cs
  2. 5 5
      src/Masuit.MyBlogs.Core/Controllers/MsgController.cs
  3. 4 3
      src/Masuit.MyBlogs.Core/Controllers/PostController.cs
  4. 1 1
      src/Masuit.MyBlogs.Core/Extensions/MiddlewareExtension.cs
  5. 61 1
      src/Masuit.MyBlogs.Core/Infrastructure/Repository/BaseRepository.cs
  6. 63 0
      src/Masuit.MyBlogs.Core/Infrastructure/Repository/CommentRepository.cs
  7. 25 0
      src/Masuit.MyBlogs.Core/Infrastructure/Repository/Interface/IBaseRepository.cs
  8. 63 0
      src/Masuit.MyBlogs.Core/Infrastructure/Repository/LeaveMessageRepository.cs
  9. 15 0
      src/Masuit.MyBlogs.Core/Infrastructure/Repository/PostRepository.cs
  10. 0 28
      src/Masuit.MyBlogs.Core/Infrastructure/Repository/Repositories.cs
  11. 31 0
      src/Masuit.MyBlogs.Core/Infrastructure/Services/BaseService.cs
  12. 25 0
      src/Masuit.MyBlogs.Core/Infrastructure/Services/Interface/IBaseService.cs
  13. 0 11
      src/Masuit.MyBlogs.Core/Infrastructure/Services/PostService.cs
  14. 0 7
      src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj
  15. 1 1
      src/Masuit.MyBlogs.Core/Views/Home/Index.cshtml
  16. 1 1
      src/Masuit.MyBlogs.Core/Views/Msg/Index.cshtml
  17. 1 1
      src/Masuit.MyBlogs.Core/Views/Msg/Index_Admin.cshtml
  18. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/Details.cshtml
  19. 2 2
      src/Masuit.MyBlogs.Core/Views/Post/Details_Admin.cshtml
  20. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion.cshtml
  21. 1 4
      src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion_Admin.cshtml
  22. 25 55
      src/Masuit.MyBlogs.Core/bundleconfig.json
  23. 0 0
      src/Masuit.MyBlogs.Core/wwwroot/Assets/banner/bootstrap-touch-slider.min.css
  24. 0 1
      src/Masuit.MyBlogs.Core/wwwroot/Assets/jquery.tocify/jquery.tocify.min.css
  25. 1 1
      src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/article.js
  26. 0 0
      src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/article.min.js
  27. 1 1
      src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/leavemsg.js
  28. 0 23
      src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/leavemsg.min.js
  29. 0 0
      src/Masuit.MyBlogs.Core/wwwroot/Scripts/publish/publish.min.js

+ 5 - 5
src/Masuit.MyBlogs.Core/Controllers/CommentController.cs

@@ -196,11 +196,11 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// <param name="size"></param>
         /// <param name="cid"></param>
         /// <returns></returns>
-        public ActionResult GetComments(int? id, [Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15, int cid = 0)
+        public async Task<ActionResult> GetComments(int? id, [Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15, int cid = 0)
         {
             if (cid != 0)
             {
-                var comment = CommentService.GetById(cid) ?? throw new NotFoundException("评论未找到");
+                var comment = await CommentService.GetByIdAsync(cid) ?? throw new NotFoundException("评论未找到");
                 var single = new[] { comment.Root() };
                 foreach (var c in single.Flatten())
                 {
@@ -217,7 +217,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                 });
             }
 
-            var parent = CommentService.GetPages(page, size, c => c.PostId == id && c.ParentId == 0 && (c.Status == Status.Published || CurrentUser.IsAdmin), c => c.CommentDate, false);
+            var parent = await CommentService.GetPagesAsync(page, size, c => c.PostId == id && c.ParentId == 0 && (c.Status == Status.Published || CurrentUser.IsAdmin), c => c.CommentDate, false);
             if (!parent.Data.Any())
             {
                 return ResultData(null, false, "没有评论");
@@ -296,9 +296,9 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// </summary>
         /// <returns></returns>
         [MyAuthorize]
-        public ActionResult GetPendingComments([Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
+        public async Task<ActionResult> GetPendingComments([Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
         {
-            var pages = CommentService.GetPages<DateTime, CommentDto>(page, size, c => c.Status == Status.Pending, c => c.CommentDate, false);
+            var pages = await CommentService.GetPagesAsync<DateTime, CommentDto>(page, size, c => c.Status == Status.Pending, c => c.CommentDate, false);
             foreach (var item in pages.Data)
             {
                 item.CommentDate = item.CommentDate.ToTimeZone(HttpContext.Session.Get<string>(SessionKey.TimeZone));

+ 5 - 5
src/Masuit.MyBlogs.Core/Controllers/MsgController.cs

@@ -68,11 +68,11 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// <param name="size"></param>
         /// <param name="cid"></param>
         /// <returns></returns>
-        public ActionResult GetMsgs([Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15, int cid = 0)
+        public async Task<ActionResult> GetMsgs([Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15, int cid = 0)
         {
             if (cid != 0)
             {
-                var message = LeaveMessageService.GetById(cid) ?? throw new NotFoundException("留言未找到");
+                var message = await LeaveMessageService.GetByIdAsync(cid) ?? throw new NotFoundException("留言未找到");
                 var single = new[] { message.Root() };
                 foreach (var m in single.Flatten())
                 {
@@ -89,7 +89,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                 });
             }
 
-            var parent = LeaveMessageService.GetPages(page, size, m => m.ParentId == 0 && (m.Status == Status.Published || CurrentUser.IsAdmin), m => m.PostDate, false);
+            var parent = await LeaveMessageService.GetPagesAsync(page, size, m => m.ParentId == 0 && (m.Status == Status.Published || CurrentUser.IsAdmin), m => m.PostDate, false);
             if (!parent.Data.Any())
             {
                 return ResultData(null, false, "没有留言");
@@ -261,9 +261,9 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// </summary>
         /// <returns></returns>
         [MyAuthorize]
-        public ActionResult GetPendingMsgs([Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
+        public async Task<ActionResult> GetPendingMsgs([Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
         {
-            var list = LeaveMessageService.GetPages<DateTime, LeaveMessageDto>(page, size, m => m.Status == Status.Pending, l => l.PostDate, false);
+            var list = await LeaveMessageService.GetPagesAsync<DateTime, LeaveMessageDto>(page, size, m => m.Status == Status.Pending, l => l.PostDate, false);
             foreach (var m in list.Data)
             {
                 m.PostDate = m.PostDate.ToTimeZone(HttpContext.Session.Get<string>(SessionKey.TimeZone));

+ 4 - 3
src/Masuit.MyBlogs.Core/Controllers/PostController.cs

@@ -67,8 +67,8 @@ namespace Masuit.MyBlogs.Core.Controllers
             ViewBag.Keyword = post.Keyword + "," + post.Label;
             ViewBag.Desc = post.Content.GetSummary(200);
             var modifyDate = post.ModifyDate;
-            ViewBag.Next = PostService.GetFromCache<DateTime, PostModelBase>(p => p.ModifyDate > modifyDate && (p.Status == Status.Published || CurrentUser.IsAdmin), p => p.ModifyDate);
-            ViewBag.Prev = PostService.GetFromCache<DateTime, PostModelBase>(p => p.ModifyDate < modifyDate && (p.Status == Status.Published || CurrentUser.IsAdmin), p => p.ModifyDate, false);
+            ViewBag.Next = await PostService.GetFromCacheAsync<DateTime, PostModelBase>(p => p.ModifyDate > modifyDate && (p.Status == Status.Published || CurrentUser.IsAdmin), p => p.ModifyDate);
+            ViewBag.Prev = await PostService.GetFromCacheAsync<DateTime, PostModelBase>(p => p.ModifyDate < modifyDate && (p.Status == Status.Published || CurrentUser.IsAdmin), p => p.ModifyDate, false);
             if (!string.IsNullOrEmpty(kw))
             {
                 ViewData["keywords"] = post.Content.Contains(kw) ? $"['{kw}']" : SearchEngine.LuceneIndexSearcher.CutKeywords(kw).ToJsonString();
@@ -163,7 +163,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             var post = await PostService.GetAsync(p => p.Id == id && (p.Status == Status.Published || CurrentUser.IsAdmin)) ?? throw new NotFoundException("文章未找到");
             CheckPermission(post);
             ViewBag.Primary = post;
-            var list = PostHistoryVersionService.GetPages(page, size, v => v.PostId == id, v => v.ModifyDate, false);
+            var list = await PostHistoryVersionService.GetPagesAsync(page, size, v => v.PostId == id, v => v.ModifyDate, false);
             foreach (var item in list.Data)
             {
                 item.ModifyDate = item.ModifyDate.ToTimeZone(HttpContext.Session.Get<string>(SessionKey.TimeZone));
@@ -282,6 +282,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// </summary>
         /// <param name="post"></param>
         /// <param name="code"></param>
+        /// <param name="cancellationToken"></param>
         /// <returns></returns>
         [HttpPost, ValidateAntiForgeryToken]
         public async Task<ActionResult> Publish(PostCommand post, [Required(ErrorMessage = "验证码不能为空")] string code, CancellationToken cancellationToken)

+ 1 - 1
src/Masuit.MyBlogs.Core/Extensions/MiddlewareExtension.cs

@@ -136,7 +136,7 @@ namespace Masuit.MyBlogs.Core.Extensions
                     .Include("/Content/checkbox.min.css")
                     .Include("/ng-views/css/app.css");
                 bundles.AddCss("/article.css")
-                    .Include("/Assets/jquery.tocify/jquery.tocify.min.css")
+                    .Include("/Assets/jquery.tocify/jquery.tocify.css")
                     .Include("/Assets/UEditor/third-party/SyntaxHighlighter/styles/shCore.min.css")
                     .Include("/Assets/highlight/css/highlight.css");
 

+ 61 - 1
src/Masuit.MyBlogs.Core/Infrastructure/Repository/BaseRepository.cs

@@ -607,6 +607,22 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
             return isAsc ? temp.OrderBy(orderby).ToPagedList(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToPagedList(pageIndex, pageSize);
         }
 
+        /// <summary>
+        /// 高效分页查询方法
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        public virtual Task<PagedList<T>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
+        {
+            var temp = DataContext.Set<T>().Where(where);
+            return isAsc ? temp.OrderBy(orderby).ToPagedListAsync(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToPagedListAsync(pageIndex, pageSize);
+        }
+
         /// <summary>
         /// 高效分页查询方法,优先从二级缓存读取
         /// </summary>
@@ -633,7 +649,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">orderby Lambda条件表达式</param>
         /// <param name="isAsc">升序降序</param>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<PagedList<T>> GetPagesFromCacheAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
+        public virtual Task<PagedList<T>> GetPagesFromCacheAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
         {
             var temp = DataContext.Set<T>().Where(where);
             return isAsc ? temp.OrderBy(orderby).ToCachedPagedListAsync(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToCachedPagedListAsync(pageIndex, pageSize);
@@ -689,6 +705,23 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
             return isAsc ? temp.OrderBy(orderby).ToPagedList<T, TDto>(pageIndex, pageSize, MapperConfig) : temp.OrderByDescending(orderby).ToPagedList<T, TDto>(pageIndex, pageSize, MapperConfig);
         }
 
+        /// <summary>
+        /// 高效分页查询方法,取出被AutoMapper映射后的数据集合
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <typeparam name="TDto"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        public Task<PagedList<TDto>> GetPagesAsync<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc) where TDto : class
+        {
+            var temp = DataContext.Set<T>().Where(where).AsNoTracking();
+            return isAsc ? temp.OrderBy(orderby).ToPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig) : temp.OrderByDescending(orderby).ToPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig);
+        }
+
         /// <summary>
         /// 高效分页查询方法,取出被AutoMapper映射后的数据集合,优先从缓存读取(不跟踪实体)
         /// </summary>
@@ -948,6 +981,33 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
             return new PagedList<TDto>(list, page, size, totalCount);
         }
 
+        /// <summary>
+        /// 生成分页集合
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="TDto"></typeparam>
+        /// <param name="query"></param>
+        /// <param name="page">当前页</param>
+        /// <param name="size">页大小</param>
+        /// <param name="mapper"></param>
+        /// <returns></returns>
+        public static async Task<PagedList<TDto>> ToPagedListAsync<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper)
+        {
+            var totalCount = await query.CountAsync();
+            if (page * size > totalCount)
+            {
+                page = (int)Math.Ceiling(totalCount / (size * 1.0));
+            }
+
+            if (page <= 0)
+            {
+                page = 1;
+            }
+
+            var list = await query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).ToListAsync();
+            return new PagedList<TDto>(list, page, size, totalCount);
+        }
+
         /// <summary>
         /// 生成分页集合
         /// </summary>

+ 63 - 0
src/Masuit.MyBlogs.Core/Infrastructure/Repository/CommentRepository.cs

@@ -0,0 +1,63 @@
+using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
+using Masuit.MyBlogs.Core.Models.Entity;
+using Masuit.Tools.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+
+namespace Masuit.MyBlogs.Core.Infrastructure.Repository
+{
+    public partial class CommentRepository : BaseRepository<Comment>, ICommentRepository
+    {
+        /// <summary>
+        /// 添加实体
+        /// </summary>
+        /// <param name="t">需要添加的实体</param>
+        /// <returns>添加成功</returns>
+        public override Comment AddEntity(Comment t)
+        {
+            DataContext.Add(t);
+            return t;
+        }
+
+        /// <summary>
+        /// 根据ID找实体(异步)
+        /// </summary>
+        /// <param name="id">实体id</param>
+        /// <returns>实体</returns>
+        public override Task<Comment> GetByIdAsync(object id)
+        {
+            var cid = (int)id;
+            return DataContext.Comment.Include(c => c.Children.OrderBy(e => e.CommentDate)).ThenInclude(c => c.Children.OrderBy(e => e.CommentDate)).ThenInclude(c => c.Children.OrderBy(e => e.CommentDate)).FirstOrDefaultAsync(c => c.Id == cid);
+        }
+
+        /// <summary>
+        /// 根据ID找实体
+        /// </summary>
+        /// <param name="id">实体id</param>
+        /// <returns>实体</returns>
+        public override Comment GetById(object id)
+        {
+            var cid = (int)id;
+            return DataContext.Comment.Include(c => c.Children.OrderBy(e => e.CommentDate)).ThenInclude(c => c.Children.OrderBy(e => e.CommentDate)).ThenInclude(c => c.Children.OrderBy(e => e.CommentDate)).FirstOrDefault(c => c.Id == cid);
+        }
+
+        /// <summary>
+        /// 高效分页查询方法
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        public override Task<PagedList<Comment>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<Comment, bool>> @where, Expression<Func<Comment, TS>> @orderby, bool isAsc)
+        {
+            var temp = DataContext.Comment.Include(c => c.Children.OrderBy(e => e.CommentDate)).ThenInclude(c => c.Children.OrderBy(e => e.CommentDate)).ThenInclude(c => c.Children.OrderBy(e => e.CommentDate)).Where(where);
+            return isAsc ? temp.OrderBy(orderby).ToPagedListAsync(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToPagedListAsync(pageIndex, pageSize);
+        }
+    }
+}

+ 25 - 0
src/Masuit.MyBlogs.Core/Infrastructure/Repository/Interface/IBaseRepository.cs

@@ -450,6 +450,31 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <returns>还未执行的SQL语句</returns>
         PagedList<TDto> GetPages<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc) where TDto : class;
 
+        /// <summary>
+        /// 高效分页查询方法
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        Task<PagedList<T>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc);
+
+        /// <summary>
+        /// 高效分页查询方法,取出被AutoMapper映射后的数据集合
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <typeparam name="TDto"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        Task<PagedList<TDto>> GetPagesAsync<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc) where TDto : class;
+
         /// <summary>
         /// 高效分页查询方法,优先从二级缓存读取
         /// </summary>

+ 63 - 0
src/Masuit.MyBlogs.Core/Infrastructure/Repository/LeaveMessageRepository.cs

@@ -0,0 +1,63 @@
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
+using Masuit.MyBlogs.Core.Models.Entity;
+using Masuit.Tools.Models;
+using Microsoft.EntityFrameworkCore;
+
+namespace Masuit.MyBlogs.Core.Infrastructure.Repository
+{
+    public partial class LeaveMessageRepository : BaseRepository<LeaveMessage>, ILeaveMessageRepository
+    {
+        /// <summary>
+        /// 添加实体
+        /// </summary>
+        /// <param name="t">需要添加的实体</param>
+        /// <returns>添加成功</returns>
+        public override LeaveMessage AddEntity(LeaveMessage t)
+        {
+            DataContext.Add(t);
+            return t;
+        }
+
+        /// <summary>
+        /// 根据ID找实体(异步)
+        /// </summary>
+        /// <param name="id">实体id</param>
+        /// <returns>实体</returns>
+        public override Task<LeaveMessage> GetByIdAsync(object id)
+        {
+            var cid = (int)id;
+            return DataContext.LeaveMessage.Include(c => Enumerable.OrderBy<LeaveMessage, DateTime>(c.Children, e => e.PostDate)).ThenInclude(c => c.Children.OrderBy(e => e.PostDate)).ThenInclude(c => c.Children.OrderBy(e => e.PostDate)).FirstOrDefaultAsync(c => c.Id == cid);
+        }
+
+        /// <summary>
+        /// 根据ID找实体
+        /// </summary>
+        /// <param name="id">实体id</param>
+        /// <returns>实体</returns>
+        public override LeaveMessage GetById(object id)
+        {
+            var cid = (int)id;
+            return DataContext.LeaveMessage.Include(c => c.Children.OrderBy(e => e.PostDate)).ThenInclude(c => c.Children.OrderBy(e => e.PostDate)).ThenInclude(c => c.Children.OrderBy(e => e.PostDate)).FirstOrDefault(c => c.Id == cid);
+        }
+
+        /// <summary>
+        /// 高效分页查询方法
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        public override Task<PagedList<LeaveMessage>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<LeaveMessage, bool>> @where, Expression<Func<LeaveMessage, TS>> @orderby, bool isAsc)
+        {
+            var temp = DataContext.LeaveMessage.Include(c => c.Children.OrderBy(e => e.PostDate)).ThenInclude(c => c.Children.OrderBy(e => e.PostDate)).ThenInclude(c => c.Children.OrderBy(e => e.PostDate)).Where(where);
+            return isAsc ? temp.OrderBy(orderby).ToPagedListAsync(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToPagedListAsync(pageIndex, pageSize);
+        }
+    }
+}

+ 15 - 0
src/Masuit.MyBlogs.Core/Infrastructure/Repository/PostRepository.cs

@@ -1,5 +1,9 @@
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
 using Masuit.MyBlogs.Core.Models.Entity;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
 
 namespace Masuit.MyBlogs.Core.Infrastructure.Repository
 {
@@ -15,5 +19,16 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
             DataContext.Add(t);
             return t;
         }
+
+        /// <summary>
+        /// 获取第一条数据,优先从缓存读取
+        /// </summary>
+        /// <param name="where">查询条件</param>
+        /// <returns>实体</returns>
+        public override Task<Post> GetAsync(Expression<Func<Post, bool>> @where)
+        {
+            return DataContext.Post.Include(p => p.Category).Include(p => p.Seminar).FirstOrDefaultAsync(@where);
+        }
+
     }
 }

+ 0 - 28
src/Masuit.MyBlogs.Core/Infrastructure/Repository/Repositories.cs

@@ -17,20 +17,6 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         }
     }
 
-    public partial class CommentRepository : BaseRepository<Comment>, ICommentRepository
-    {
-        /// <summary>
-        /// 添加实体
-        /// </summary>
-        /// <param name="t">需要添加的实体</param>
-        /// <returns>添加成功</returns>
-        public override Comment AddEntity(Comment t)
-        {
-            DataContext.Add(t);
-            return t;
-        }
-    }
-
     public partial class DonateRepository : BaseRepository<Donate>, IDonateRepository
     {
         /// <summary>
@@ -73,20 +59,6 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         }
     }
 
-    public partial class LeaveMessageRepository : BaseRepository<LeaveMessage>, ILeaveMessageRepository
-    {
-        /// <summary>
-        /// 添加实体
-        /// </summary>
-        /// <param name="t">需要添加的实体</param>
-        /// <returns>添加成功</returns>
-        public override LeaveMessage AddEntity(LeaveMessage t)
-        {
-            DataContext.Add(t);
-            return t;
-        }
-    }
-
     public partial class LinksRepository : BaseRepository<Links>, ILinksRepository
     {
         /// <summary>

+ 31 - 0
src/Masuit.MyBlogs.Core/Infrastructure/Services/BaseService.cs

@@ -620,6 +620,37 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
             return BaseDal.GetPages<TS, TDto>(pageIndex, pageSize, where, orderby, isAsc);
         }
 
+        /// <summary>
+        /// 高效分页查询方法
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        public Task<PagedList<T>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
+        {
+            return BaseDal.GetPagesAsync(pageIndex, pageSize, where, orderby, isAsc);
+        }
+
+        /// <summary>
+        /// 高效分页查询方法,取出被AutoMapper映射后的数据集合
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <typeparam name="TDto"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        public Task<PagedList<TDto>> GetPagesAsync<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc) where TDto : class
+        {
+            return BaseDal.GetPagesAsync<TS, TDto>(pageIndex, pageSize, where, orderby, isAsc);
+        }
+
         /// <summary>
         /// 高效分页查询方法,优先从二级缓存读取
         /// </summary>

+ 25 - 0
src/Masuit.MyBlogs.Core/Infrastructure/Services/Interface/IBaseService.cs

@@ -448,6 +448,31 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// <returns>还未执行的SQL语句</returns>
         PagedList<TDto> GetPages<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc) where TDto : class;
 
+        /// <summary>
+        /// 高效分页查询方法
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        Task<PagedList<T>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc);
+
+        /// <summary>
+        /// 高效分页查询方法,取出被AutoMapper映射后的数据集合
+        /// </summary>
+        /// <typeparam name="TS"></typeparam>
+        /// <typeparam name="TDto"></typeparam>
+        /// <param name="pageIndex">第几页</param>
+        /// <param name="pageSize">每页大小</param>
+        /// <param name="where">where Lambda条件表达式</param>
+        /// <param name="orderby">orderby Lambda条件表达式</param>
+        /// <param name="isAsc">升序降序</param>
+        /// <returns>还未执行的SQL语句</returns>
+        Task<PagedList<TDto>> GetPagesAsync<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc) where TDto : class;
+
         /// <summary>
         /// 高效分页查询方法,优先从二级缓存读取
         /// </summary>

+ 0 - 11
src/Masuit.MyBlogs.Core/Infrastructure/Services/PostService.cs

@@ -10,7 +10,6 @@ using Masuit.MyBlogs.Core.Models.Enum;
 using Masuit.MyBlogs.Core.Models.ViewModel;
 using Masuit.Tools;
 using Masuit.Tools.Html;
-using Microsoft.EntityFrameworkCore;
 using PanGu;
 using PanGu.HighLight;
 using System;
@@ -152,16 +151,6 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
             return searchOptions;
         }
 
-        /// <summary>
-        /// 获取第一条数据,优先从缓存读取
-        /// </summary>
-        /// <param name="where">查询条件</param>
-        /// <returns>实体</returns>
-        public override Task<Post> GetAsync(Expression<Func<Post, bool>> @where)
-        {
-            return SearchEngine.Context.Post.Include(p => p.Category).Include(p => p.Seminar).FirstOrDefaultAsync(@where);
-        }
-
         /// <summary>
         /// 添加实体并保存
         /// </summary>

+ 0 - 7
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -25,13 +25,6 @@
       <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     </PropertyGroup>
 
-    <ItemGroup>
-      <None Include="wwwroot\drive\js\app.8b25141a.js" />
-      <None Include="wwwroot\drive\js\app.8b25141a.js.map" />
-      <None Include="wwwroot\drive\js\chunk-vendors.b37660ae.js" />
-      <None Include="wwwroot\drive\js\chunk-vendors.b37660ae.js.map" />
-    </ItemGroup>
-
     <ItemGroup>
         <ProjectReference Include="..\..\..\Masuit.LuceneEFCore.SearchEngine\Masuit.LuceneEFCore.SearchEngine\Masuit.LuceneEFCore.SearchEngine.csproj" />
         <ProjectReference Include="..\..\..\Masuit.Tools\Masuit.Tools.Core\Masuit.Tools.Core.csproj" />

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Home/Index.cshtml

@@ -12,7 +12,7 @@
     List<FastShare> shares = ViewBag.FastShare;
     Context.Request.Path = new PathString("/posts");
 }
-<link href="~/Assets/banner/bootstrap-touch-slider.min.css" rel="stylesheet" />
+<link href="~/Assets/banner/bootstrap-touch-slider.css" rel="stylesheet" />
 @if (Model.Banner.Any())
 {
     <div id="bootstrap-touch-slider" class="carousel bs-slider fade  control-round indicators-line" data-ride="carousel" data-pause="hover" data-interval="5000" id="@Stopwatch.GetTimestamp()">

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Msg/Index.cshtml

@@ -121,7 +121,7 @@
         </form>
     </div>
 </div>
-<script src="~/Scripts/global/leavemsg.min.js"></script>
+<script src="~/Scripts/global/leavemsg.js"></script>
 <script>
 	window.onload = function() {
         loading();

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Msg/Index_Admin.cshtml

@@ -106,7 +106,7 @@
                 html += `<li class="msg-list media animated fadeInRight" id='${rows[i].Id}'>
                             <div class="media-body">
                                 <article class="panel panel-info">
-                                    <header class="panel-heading">${startfloor}# ${rows[i].IsMaster ? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows[i].IsMaster ? `(管理员)` : ""} | ${rows[i].PostDate}
+                                    <header class="panel-heading">${startfloor--}# ${rows[i].IsMaster ? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows[i].IsMaster ? `(管理员)` : ""} | ${rows[i].PostDate}
                                         <span class="pull-right" style="font-size: 10px;">${rows[i].Status == 4 ? `<a class="label label-success" onclick="pass(${rows[i].Id})">通过</a> |` : ""} <a class="label label-danger" onclick="del(${rows[i].Id})">删除</a><span class="hidden-sm hidden-xs"> | ${GetOperatingSystem(rows[i].OperatingSystem) + " | " + GetBrowser(rows[i].Browser)}</span></span>
                                     </header>
                                     <div class="panel-body">

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/Details.cshtml

@@ -18,7 +18,7 @@
     Advertisement ad = ViewBag.Ads;
 }
 <environment names="Development">
-    <link href="~/Assets/jquery.tocify/jquery.tocify.min.css" rel="stylesheet" />
+    <link href="~/Assets/jquery.tocify/jquery.tocify.css" rel="stylesheet" />
     <link href="~/Assets/UEditor/third-party/SyntaxHighlighter/styles/shCore.min.css" rel="stylesheet" />
     <link href="~/Assets/highlight/css/highlight.css" rel="stylesheet" />
     <script src="/Assets/highlight/js/highlight.js"></script>

+ 2 - 2
src/Masuit.MyBlogs.Core/Views/Post/Details_Admin.cshtml

@@ -19,7 +19,7 @@
 }
 <script src="https://cdn.staticfile.org/jqueryui/1.12.1/jquery-ui.min.js" async defer></script>
 <environment names="Development">
-    <link href="~/Assets/jquery.tocify/jquery.tocify.min.css" rel="stylesheet" />
+    <link href="~/Assets/jquery.tocify/jquery.tocify.css" rel="stylesheet" />
     <link href="~/Assets/UEditor/third-party/SyntaxHighlighter/styles/shCore.min.css" rel="stylesheet" />
     <link href="~/Assets/highlight/css/highlight.css" rel="stylesheet" />
     <script src="/Assets/highlight/js/highlight.js"></script>
@@ -423,7 +423,7 @@
 				html += `<li class="msg-list media animated fadeInRight" id='${rows[i].Id}'>
                             <div class="media-body">
                                 <article class="panel panel-info">
-                                    <header class="panel-heading">${startfloor}# ${rows[i].IsMaster ? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows[i].IsMaster ? `(管理员)` : ""} | ${rows[i].CommentDate}
+                                    <header class="panel-heading">${startfloor--}# ${rows[i].IsMaster ? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows[i].IsMaster ? `(管理员)` : ""} | ${rows[i].CommentDate}
                                         <span class="pull-right" style="font-size: 10px;">${rows[i].Status == 4 ? `<a class="label label-success" onclick="pass(${rows[i].Id})">通过</a> |` : ""} <a class="label label-danger" onclick="del(${rows[i].Id})">删除</a> | ${GetOperatingSystem(rows[i].OperatingSystem) + " | " + GetBrowser(rows[i].Browser)}</span>
                                     </header>
                                     <div class="panel-body">

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion.cshtml

@@ -11,7 +11,7 @@
     Advertisement ad = ViewBag.Ads;
 }
 <environment names="Development">
-    <link href="~/Assets/jquery.tocify/jquery.tocify.min.css" rel="stylesheet" />
+    <link href="~/Assets/jquery.tocify/jquery.tocify.css" rel="stylesheet" />
     <link href="~/Assets/UEditor/third-party/SyntaxHighlighter/styles/shCore.min.css" rel="stylesheet" />
     <link href="~/Assets/highlight/css/highlight.css" rel="stylesheet" />
     <script src="/Assets/highlight/js/highlight.js"></script>

+ 1 - 4
src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion_Admin.cshtml

@@ -11,12 +11,9 @@
     Advertisement ad = ViewBag.Ads;
 }
 <environment names="Development">
-    <link href="~/Assets/jquery.tocify/jquery.tocify.min.css" rel="stylesheet" />
+    <link href="~/Assets/jquery.tocify/jquery.tocify.css" rel="stylesheet" />
     <link href="~/Assets/UEditor/third-party/SyntaxHighlighter/styles/shCore.min.css" rel="stylesheet" />
-    <link href="~/Assets/share/share.css" rel="stylesheet" />
     <link href="~/Assets/highlight/css/highlight.css" rel="stylesheet" />
-    <script src="/Assets/share/jquery.qrcode.min.js"></script>
-    <script src="/Assets/share/jquery.share.min.js"></script>
     <script src="/Assets/highlight/js/highlight.js"></script>
     <script src="/Assets/UEditor/third-party/SyntaxHighlighter/scripts/shCore.min.js"></script>
     <script src="/Assets/UEditor/third-party/SyntaxHighlighter/scripts/bundle.min.js"></script>

+ 25 - 55
src/Masuit.MyBlogs.Core/bundleconfig.json

@@ -1,56 +1,26 @@
 [
-  {
-    "outputFileName": "wwwroot/Scripts/publish/publish.min.js",
-    "inputFiles": [
-      "wwwroot/Scripts/publish/publish.js"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Assets/UEditor/ueditor.all.min.js",
-    "inputFiles": [
-      "wwwroot/Assets/UEditor/ueditor.all.min.js"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Scripts/global/leavemsg.min.js",
-    "inputFiles": [
-      "wwwroot/Scripts/global/leavemsg.js"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Assets/jquery.tocify/jquery.tocify.min.css",
-    "inputFiles": [
-      "wwwroot/Assets/jquery.tocify/jquery.tocify.css"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Assets/banner/bootstrap-touch-slider.min.css",
-    "inputFiles": [
-      "wwwroot/Assets/banner/bootstrap-touch-slider.css"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Assets/UEditor/ueditor.config.front.min.js",
-    "inputFiles": [
-      "wwwroot/Assets/UEditor/ueditor.config.front.js"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Assets/UEditor/ueditor.config.admin.min.js",
-    "inputFiles": [
-      "wwwroot/Assets/UEditor/ueditor.config.admin.js"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Assets/jedate/jedate.min.css",
-    "inputFiles": [
-      "wwwroot/Assets/jedate/jedate.css"
-    ]
-  },
-  {
-    "outputFileName": "wwwroot/Scripts/global/article.min.js",
-    "inputFiles": [
-      "wwwroot/Scripts/global/article.js"
-    ]
-  }
-]
+    {
+        "outputFileName": "wwwroot/Assets/UEditor/ueditor.all.min.js",
+        "inputFiles": [
+            "wwwroot/Assets/UEditor/ueditor.all.min.js"
+        ]
+    },
+    {
+        "outputFileName": "wwwroot/Assets/UEditor/ueditor.config.front.min.js",
+        "inputFiles": [
+            "wwwroot/Assets/UEditor/ueditor.config.front.js"
+        ]
+    },
+    {
+        "outputFileName": "wwwroot/Assets/UEditor/ueditor.config.admin.min.js",
+        "inputFiles": [
+            "wwwroot/Assets/UEditor/ueditor.config.admin.js"
+        ]
+    },
+    {
+        "outputFileName": "wwwroot/Assets/jedate/jedate.min.css",
+        "inputFiles": [
+            "wwwroot/Assets/jedate/jedate.css"
+        ]
+    }
+]

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/Masuit.MyBlogs.Core/wwwroot/Assets/banner/bootstrap-touch-slider.min.css


+ 0 - 1
src/Masuit.MyBlogs.Core/wwwroot/Assets/jquery.tocify/jquery.tocify.min.css

@@ -1 +0,0 @@
-.tocify{position:fixed;top:160px;z-index:3;min-width:160px;max-height:66vh;overflow:auto;border:1px solid #ccc;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}@media only screen and (max-width:1419px){.tocify{display:none !important}}@media only screen and (min-width:1420px){.tocify{right:0;max-width:200px;overflow-x:hidden}}@media only screen and (min-width:1900px){.tocify{right:50px;max-width:320px}}@media only screen and (min-width:2100px){.tocify{right:100px;max-width:420px}}.tocify>.close{float:right;z-index:20}.tocify ul,.tocify li{list-style:none;margin:0;padding:0;border:none;line-height:30px}.tocify>ul:first-of-type{margin-top:24px}.tocify-header{text-indent:10px}.tocify-subheader{text-indent:20px;display:none}.tocify-subheader .tocify-subheader{text-indent:30px}.tocify-subheader .tocify-subheader .tocify-subheader{text-indent:40px}.nav-list>li>a,.nav-list .nav-header{margin:0}.nav-list>li>a{padding:5px}.tocify-subheader li{font-size:15px}.tocify-subheader li>a{padding-left:15px;line-height:24px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.2);background-color:#08c}

+ 1 - 1
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/article.js

@@ -435,7 +435,7 @@ function loadParentComments(data) {
             html += `<li class="msg-list media animated fadeInRight" id='${rows[i].Id}'>
                         <div class="media-body">
                             <article class="panel panel-info">
-                                <header class="panel-heading">${startfloor}# ${rows[i].IsMaster ? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows[i].IsMaster ? `(管理员)` : ""} | ${rows[i].CommentDate}
+                                <header class="panel-heading">${startfloor--}# ${rows[i].IsMaster ? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows[i].IsMaster ? `(管理员)` : ""} | ${rows[i].CommentDate}
                                     <span class="pull-right hidden-sm hidden-xs" style="font-size: 10px;">${GetOperatingSystem(rows[i].OperatingSystem) + " | " + GetBrowser(rows[i].Browser)}</span>
                                 </header>
                                 <div class="panel-body">

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/article.min.js


+ 1 - 1
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/leavemsg.js

@@ -270,7 +270,7 @@ function loadParentMsgs(data) {
 			html += `<li class="msg-list media animated fadeInRight" id='${rows[i].Id}'>
 						   <div class="media-body">
 								<article class="panel panel-info">
-									<header class="panel-heading">${startfloor}# ${rows[i].IsMaster? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows  [i].IsMaster ? `(管理员)` : ""} | ${rows[i].PostDate}
+									<header class="panel-heading">${startfloor--}# ${rows[i].IsMaster? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows  [i].IsMaster ? `(管理员)` : ""} | ${rows[i].PostDate}
 										<span class="pull-right hidden-sm hidden-xs" style="font-size: 10px;">${GetOperatingSystem(rows[i].OperatingSystem) + " | " + GetBrowser(rows[i].Browser)}</span>
 									</header>
 									<div class="panel-body">

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 23
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/leavemsg.min.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/Masuit.MyBlogs.Core/wwwroot/Scripts/publish/publish.min.js


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä