Browse Source

文章列表增加分类和专题的快捷操作

懒得勤快 3 years ago
parent
commit
499d4258bc

+ 7 - 1
src/Masuit.MyBlogs.Core/Configs/MappingProfile.cs

@@ -49,7 +49,13 @@ namespace Masuit.MyBlogs.Core.Configs
             CreateMap<PostCommand, PostDto>().ReverseMap();
             CreateMap<PostHistoryVersion, PostDto>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ReverseMap();
             CreateMap<Post, PostViewModel>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ForMember(p => p.PostDate, e => e.MapFrom(p => p.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ForMember(p => p.ModifyDate, e => e.MapFrom(p => p.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
-            CreateMap<Post, PostDataModel>().ForMember(p => p.ModifyDate, e => e.MapFrom(p => p.ModifyDate)).ForMember(p => p.PostDate, e => e.MapFrom(p => p.PostDate)).ForMember(p => p.Status, e => e.MapFrom(p => p.Status.GetDisplay())).ForMember(p => p.ModifyCount, e => e.MapFrom(p => p.PostHistoryVersion.Count)).ForMember(p => p.ViewCount, e => e.MapFrom(p => p.TotalViewCount)).ForMember(p => p.LimitDesc, e => e.MapFrom(p => p.LimitMode > RegionLimitMode.All ? string.Format(p.LimitMode.GetDescription(), p.Regions, p.ExceptRegions) : "无限制"));
+            CreateMap<Post, PostDataModel>().ForMember(p => p.ModifyDate, e => e.MapFrom(p => p.ModifyDate))
+                .ForMember(p => p.PostDate, e => e.MapFrom(p => p.PostDate))
+                .ForMember(p => p.Status, e => e.MapFrom(p => p.Status.GetDisplay()))
+                .ForMember(p => p.ModifyCount, e => e.MapFrom(p => p.PostHistoryVersion.Count))
+                .ForMember(p => p.ViewCount, e => e.MapFrom(p => p.TotalViewCount))
+                .ForMember(p => p.Seminars, e => e.MapFrom(p => p.Seminar.Select(s => s.Id).ToArray()))
+                .ForMember(p => p.LimitDesc, e => e.MapFrom(p => p.LimitMode > RegionLimitMode.All ? string.Format(p.LimitMode.GetDescription(), p.Regions, p.ExceptRegions) : "无限制"));
 
             CreateMap<SearchDetails, SearchDetailsCommand>().ReverseMap();
             CreateMap<SearchDetails, SearchDetailsDto>().ReverseMap();

+ 35 - 7
src/Masuit.MyBlogs.Core/Controllers/PostController.cs

@@ -768,13 +768,8 @@ namespace Masuit.MyBlogs.Core.Controllers
             p.Rss = p.LimitMode is null or RegionLimitMode.All;
             if (!string.IsNullOrEmpty(post.Seminars))
             {
-                var tmp = post.Seminars.Split(',').Distinct();
-                foreach (var s in tmp)
-                {
-                    var id = s.ToInt32();
-                    Seminar seminar = await SeminarService.GetByIdAsync(id);
-                    p.Seminar.Add(seminar);
-                }
+                var tmp = post.Seminars.Split(',').Distinct().Select(int.Parse).ToArray();
+                p.Seminar.AddRange(SeminarService[s => tmp.Contains(s.Id)]);
             }
 
             if (schedule)
@@ -961,6 +956,39 @@ namespace Masuit.MyBlogs.Core.Controllers
             return ResultData(null, await PostService.SaveChangesAsync() > 0, post.DisableCopy ? $"已开启【{post.Title}】这篇文章的防复制功能!" : $"已关闭【{post.Title}】这篇文章的防复制功能!");
         }
 
+        /// <summary>
+        /// 修改分类
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="cid"></param>
+        /// <returns></returns>
+        [HttpPost("post/{id}/ChangeCategory/{cid}")]
+        public async Task<ActionResult> ChangeCategory(int id, int cid)
+        {
+            await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
+            {
+                CategoryId = cid
+            });
+            return Ok();
+        }
+
+        /// <summary>
+        /// 修改专题
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="sids"></param>
+        /// <returns></returns>
+        [HttpPost("post/{id}/ChangeSeminar/{sids}")]
+        public async Task<ActionResult> ChangeSeminar(int id, string sids)
+        {
+            var post = PostService[id] ?? throw new NotFoundException("文章不存在");
+            var ids = sids.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
+            post.Seminar.Clear();
+            post.Seminar.AddRange(SeminarService[s => ids.Contains(s.Id)]);
+            await PostService.SaveChangesAsync();
+            return Ok();
+        }
+
         /// <summary>
         /// 刷新文章
         /// </summary>

+ 9 - 1
src/Masuit.MyBlogs.Core/Models/ViewModel/PostDataModel.cs

@@ -47,7 +47,10 @@
         /// </summary>
         public int VoteDownCount { get; set; }
 
-        public string CategoryName { get; set; }
+        /// <summary>
+        /// 分类id
+        /// </summary>
+        public int CategoryId { get; set; }
 
         /// <summary>
         /// 修改次数
@@ -88,5 +91,10 @@
         /// 提交人IP地址
         /// </summary>
         public string IP { get; set; }
+
+        /// <summary>
+        /// 所属专题名
+        /// </summary>
+        public int[] Seminars { get; set; }
     }
 }

+ 59 - 0
src/Masuit.MyBlogs.Core/wwwroot/ng-views/controllers/post.js

@@ -112,6 +112,9 @@
             });
         }
     });
+    $scope.request("/seminar/getall", null, function(res) {
+        $scope.Seminars = res.Data;
+    });
 
     this.GetPageData = function (page, size) {
         var params = { page, size, kw: $scope.kw, orderby: $scope.orderby, cid: $scope.CategoryId };
@@ -131,6 +134,62 @@
             });
             self.stats = Enumerable.From(self.stats).Distinct().ToArray();
             localStorage.setItem("postlist-params",JSON.stringify(params));
+            $timeout(function () {
+                self.data.forEach(item => {
+                    let categories = angular.copy($scope.cat);
+                    categories.sort((a,b)=> (b.Id==item.CategoryId||b.Children.some(c=>c.Id==item.CategoryId||c.Children.some(cc=>cc.Id==item.CategoryId)))- (a.Id==item.CategoryId||a.Children.some(c=>c.Id==item.CategoryId||c.Children.some(cc=>cc.Id==item.CategoryId))));
+                    xmSelect.render({
+                        el: '#category-' + item.Id,
+                        tips: '未选择分类',
+                        radio: true,
+                        prop: {
+                            name: 'Name',
+                            value: 'Id',
+                            children: 'Children',
+                        },
+                        tree: {
+                            show: true,
+                            strict: false,
+                            expandedKeys: true,
+                        },
+                        filterable: true, //搜索功能
+                        data: categories,
+                        initValue: [item.CategoryId],
+                        on: function (data) {
+                            for (var i = 0; i < data.arr.length; i++) {
+                                $http.post(`/post/${item.Id}/ChangeCategory/${data.arr[i].Id}`).then(function (res) {
+                                    if (data.status >= 400) {
+                                        layer.msg("操作失败");
+                                    }
+                                });
+                            }
+                        }
+                    });
+                    xmSelect.render({
+                        el: '#seminar-' + item.Id,
+                        tips: '未选择专题',
+                        prop: {
+                            name: 'Title',
+                            value: 'Id'
+                        },
+                        filterable: true, //搜索功能
+                        autoRow: true, //选项过多,自动换行
+                        data: $scope.Seminars,
+                        initValue: item.Seminars,
+                        on: function (data) {
+                            var arr=[];
+                            for (var i = 0; i < data.arr.length; i++) {
+                                arr.push(data.arr[i].Id);
+                            }
+                            $http.post(`/post/${item.Id}/ChangeSeminar/${arr.join(",")}`).then(function (res) {
+                                if (data.status >= 400) {
+                                    layer.msg("操作失败");
+                                }
+                            });
+                        }
+                    });
+                });
+            }, 1);
         });
     }
 

+ 0 - 1
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/partner.html

@@ -46,7 +46,6 @@
                 {{row.AverageViewCount|number:2}}
             </td>
             <td title="'分类'" style="max-width: 270px">
-                <!--{{row.CategoryNames}}-->
                 <div id="category-{{row.Id}}"></div>
             </td>
             <td title="'创建时间'">

+ 11 - 3
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/post/postlist.html

@@ -1,4 +1,9 @@
-<div class="row">
+<style>
+    td .xm-body {
+        position: unset
+    }
+</style>
+<div class="row">
     <div class="form-inline pull-left">
         <div class="input-group">
             <span class="input-group-addon">常规视图</span>
@@ -54,8 +59,11 @@
             <td title="'修改次数'" ng-if="!aclMode">
                 {{row.ModifyCount}}
             </td>
-            <td data-title="'分类'">
-                {{row.CategoryName}}
+            <td data-title="'分类'" style="width: 180px">
+                <div id="category-{{row.Id}}"></div>
+            </td>
+            <td data-title="'专题'" style="max-width: 270px">
+                <div id="seminar-{{row.Id}}"></div>
             </td>
             <td data-title="'标签'" style="max-width: 160px;" ng-if="!aclMode">
                 {{row.Label}}