Browse Source

优化文章标签

懒得勤快 3 years ago
parent
commit
352631f79a

+ 10 - 7
src/Masuit.MyBlogs.Core/Controllers/BaseController.cs

@@ -22,6 +22,8 @@ using System.Net;
 using System.Text.RegularExpressions;
 using Masuit.MyBlogs.Core.Models.Enum;
 using SameSiteMode = Microsoft.AspNetCore.Http.SameSiteMode;
+using Newtonsoft.Json.Linq;
+using static Lucene.Net.Util.Fst.Util;
 
 namespace Masuit.MyBlogs.Core.Controllers
 {
@@ -229,7 +231,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                 return;
             }
 
-            if (VisitorTokenValid)
+            if (VisitorTokenValid || CommonHelper.IPWhiteList.Contains(ClientIP))
             {
                 posts.RemoveAll(p => p.LimitMode == RegionLimitMode.OnlyForSearchEngine);
                 return;
@@ -249,9 +251,6 @@ namespace Masuit.MyBlogs.Core.Controllers
             {
                 switch (p.LimitMode)
                 {
-                    case RegionLimitMode.OnlyForSearchEngine:
-                        return true;
-
                     case RegionLimitMode.AllowRegion:
                         return !Regex.IsMatch(location, p.Regions);
 
@@ -292,7 +291,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                 where = where.And(p => !HideCategories.Contains(p.CategoryId));
             }
 
-            if (VisitorTokenValid)
+            if (VisitorTokenValid || CommonHelper.IPWhiteList.Contains(ClientIP))
             {
                 return where;
             }
@@ -315,7 +314,7 @@ namespace Masuit.MyBlogs.Core.Controllers
 
         protected void CheckPermission(Post post)
         {
-            if (CurrentUser.IsAdmin || VisitorTokenValid || Request.IsRobot())
+            if (CurrentUser.IsAdmin || VisitorTokenValid || Request.IsRobot() || CommonHelper.IPWhiteList.Contains(ClientIP))
             {
                 return;
             }
@@ -393,7 +392,11 @@ namespace Masuit.MyBlogs.Core.Controllers
                 Remark = remark,
                 Address = Request.Location(),
                 HttpVersion = Request.Protocol,
-                Headers = Request.Headers.ToJsonString()
+                Headers = new
+                {
+                    Request.Protocol,
+                    Request.Headers
+                }.ToJsonString()
             });
             throw new NotFoundException("文章未找到");
         }

+ 5 - 1
src/Masuit.MyBlogs.Core/Controllers/FirewallController.cs

@@ -110,7 +110,11 @@ namespace Masuit.MyBlogs.Core.Controllers
                 Remark = "检测到异常爬虫行为",
                 Address = Request.Location(),
                 HttpVersion = Request.Protocol,
-                Headers = Request.Headers.ToJsonString()
+                Headers = new
+                {
+                    Request.Protocol,
+                    Request.Headers
+                }.ToJsonString()
             });
             cacheManager.AddOrUpdate("AntiCrawler:" + ip, 1, i => i + 1, 5);
             cacheManager.Expire("AntiCrawler:" + ip, ExpirationMode.Sliding, TimeSpan.FromMinutes(10));

+ 17 - 0
src/Masuit.MyBlogs.Core/Controllers/PostController.cs

@@ -71,6 +71,8 @@ namespace Masuit.MyBlogs.Core.Controllers
 
         public ICommentService CommentService { get; set; }
 
+        public IPostTagService PostTagService { get; set; }
+
         /// <summary>
         /// 文章详情页
         /// </summary>
@@ -302,6 +304,11 @@ namespace Masuit.MyBlogs.Core.Controllers
             p.ModifierEmail = p.Email;
             p.DisableCopy = true;
             p.Rss = true;
+            PostTagService.AddOrUpdate(t => t.Name, p.Label.AsNotNull().Split(',', StringSplitOptions.RemoveEmptyEntries).Select(s => new PostTag()
+            {
+                Name = s,
+                Count = PostService.Count(t => t.Label.Contains(s))
+            }));
             p = PostService.AddEntitySaved(p);
             if (p == null)
             {
@@ -722,6 +729,11 @@ namespace Masuit.MyBlogs.Core.Controllers
 
             var js = new JiebaSegmenter();
             (p.Keyword + "," + p.Label).Split(',', StringSplitOptions.RemoveEmptyEntries).ForEach(s => js.AddWord(s));
+            PostTagService.AddOrUpdate(t => t.Name, p.Label.AsNotNull().Split(',', StringSplitOptions.RemoveEmptyEntries).Select(s => new PostTag()
+            {
+                Name = s,
+                Count = PostService.Count(t => t.Label.Contains(s))
+            }));
             bool b = await SearchEngine.SaveChangesAsync() > 0;
             if (!b)
             {
@@ -782,6 +794,11 @@ namespace Masuit.MyBlogs.Core.Controllers
             PostService.AddEntity(p);
             var js = new JiebaSegmenter();
             (p.Keyword + "," + p.Label).Split(',', StringSplitOptions.RemoveEmptyEntries).ForEach(s => js.AddWord(s));
+            PostTagService.AddOrUpdate(t => t.Name, p.Label.AsNotNull().Split(',', StringSplitOptions.RemoveEmptyEntries).Select(s => new PostTag()
+            {
+                Name = s,
+                Count = PostService.Count(t => t.Label.Contains(s))
+            }));
             bool b = await SearchEngine.SaveChangesAsync() > 0;
             if (!b)
             {

+ 5 - 1
src/Masuit.MyBlogs.Core/Controllers/SubscribeController.cs

@@ -339,7 +339,11 @@ namespace Masuit.MyBlogs.Core.Controllers
                 Remark = "无权限查看该文章",
                 Address = Request.Location(),
                 HttpVersion = Request.Protocol,
-                Headers = Request.Headers.ToJsonString()
+                Headers = new
+                {
+                    Request.Protocol,
+                    Request.Headers
+                }.ToJsonString()
             });
             throw new NotFoundException("文章未找到");
         }

+ 5 - 1
src/Masuit.MyBlogs.Core/Extensions/Firewall/FirewallAttribute.cs

@@ -199,7 +199,11 @@ namespace Masuit.MyBlogs.Core.Extensions.Firewall
                 Remark = remark,
                 Address = request.Location(),
                 HttpVersion = request.Protocol,
-                Headers = request.Headers.ToJsonString()
+                Headers = new
+                {
+                    request.Protocol,
+                    request.Headers
+                }.ToJsonString()
             });
             var limit = CommonHelper.SystemSettings.GetOrAdd("LimitIPInterceptTimes", "30").ToInt32();
             await RedisHelper.LRangeAsync<IpIntercepter>("intercept", 0, -1).ContinueWith(async t =>

+ 5 - 1
src/Masuit.MyBlogs.Core/Extensions/Firewall/RequestInterceptMiddleware.cs

@@ -61,7 +61,11 @@ public class RequestInterceptMiddleware
                 Remark = $"检测到敏感词拦截:{match.Value}",
                 Address = request.Location(),
                 HttpVersion = request.Protocol,
-                Headers = request.Headers.ToJsonString()
+                Headers = new
+                {
+                    request.Protocol,
+                    request.Headers
+                }.ToJsonString()
             });
             context.Response.StatusCode = 404;
             context.Response.ContentType = "text/html; charset=utf-8";

+ 2 - 0
src/Masuit.MyBlogs.Core/Infrastructure/DataContext.cs

@@ -176,6 +176,8 @@ namespace Masuit.MyBlogs.Core.Infrastructure
 
         public virtual DbSet<LinkLoopback> LinkLoopbacks { get; set; }
 
+        public virtual DbSet<PostTag> PostTags { get; set; }
+
         [DbFunction]
         public static double Random() => throw new NotSupportedException();
     }

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

@@ -716,4 +716,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
 
     public partial interface IPostVisitRecordStatsRepository : IBaseRepository<PostVisitRecordStats>
     { }
+
+    public partial interface IPostTagsRepository : IBaseRepository<PostTag>
+    { }
 }

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

@@ -296,4 +296,18 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
             return t;
         }
     }
+
+    public partial class PostTagsRepository : BaseRepository<PostTag>, IPostTagsRepository
+    {
+        /// <summary>
+        /// 添加实体
+        /// </summary>
+        /// <param name="t">需要添加的实体</param>
+        /// <returns>添加成功</returns>
+        public override PostTag AddEntity(PostTag t)
+        {
+            DataContext.Add(t);
+            return t;
+        }
+    }
 }

+ 3 - 0
src/Masuit.MyBlogs.Core/Infrastructure/Services/Interface/IServices.cs

@@ -49,4 +49,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
 
     public partial interface IAdvertisementClickRecordService : IBaseService<AdvertisementClickRecord>
     { }
+
+    public partial interface IPostTagService : IBaseService<PostTag>
+    { }
 }

+ 4 - 7
src/Masuit.MyBlogs.Core/Infrastructure/Services/PostService.cs

@@ -27,16 +27,16 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
     public class PostService : BaseService<Post>, IPostService
     {
         private readonly ICacheManager<SearchResult<PostDto>> _cacheManager;
-        private readonly ICacheManager<Dictionary<string, int>> _tagCacheManager;
         private readonly ICategoryRepository _categoryRepository;
         private readonly IMapper _mapper;
+        private readonly IPostTagsRepository _postTagsRepository;
 
-        public PostService(IPostRepository repository, ISearchEngine<DataContext> searchEngine, ILuceneIndexSearcher searcher, ICacheManager<SearchResult<PostDto>> cacheManager, ICacheManager<Dictionary<string, int>> tagCacheManager, ICategoryRepository categoryRepository, IMapper mapper) : base(repository, searchEngine, searcher)
+        public PostService(IPostRepository repository, ISearchEngine<DataContext> searchEngine, ILuceneIndexSearcher searcher, ICacheManager<SearchResult<PostDto>> cacheManager, ICategoryRepository categoryRepository, IMapper mapper, IPostTagsRepository postTagsRepository) : base(repository, searchEngine, searcher)
         {
             _cacheManager = cacheManager;
-            _tagCacheManager = tagCacheManager;
             _categoryRepository = categoryRepository;
             _mapper = mapper;
+            _postTagsRepository = postTagsRepository;
         }
 
         /// <summary>
@@ -196,10 +196,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <returns></returns>
         public Dictionary<string, int> GetTags()
         {
-            const string key = "postTags";
-            var dic = _tagCacheManager.GetOrAdd(key, GetQuery(p => !string.IsNullOrEmpty(p.Label)).Select(p => p.Label).Distinct().ToList().SelectMany(s => s.Split(',', ',')).GroupBy(s => s).OrderByDescending(g => g.Count()).ToDictionary(g => g.Key, g => g.Count()));
-            _tagCacheManager.Expire(key, DateTimeOffset.Now.AddDays(1));
-            return dic;
+            return _postTagsRepository.GetAll(t => t.Count, false).Cacheable().ToDictionary(g => g.Name, g => g.Count);
         }
 
         /// <summary>

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

@@ -116,4 +116,11 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         {
         }
     }
+
+    public partial class PostTagService : BaseService<PostTag>, IPostTagService
+    {
+        public PostTagService(IBaseRepository<PostTag> repository, ISearchEngine<DataContext> searchEngine, ILuceneIndexSearcher searcher) : base(repository, searchEngine, searcher)
+        {
+        }
+    }
 }

+ 10 - 10
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -39,7 +39,7 @@
 
     <ItemGroup>
         <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
-        <PackageReference Include="AutoMapper.Extensions.ExpressionMapping" Version="5.0.2" />
+        <PackageReference Include="AutoMapper.Extensions.ExpressionMapping" Version="5.0.3" />
         <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
         <PackageReference Include="Ben.Demystifier" Version="0.4.1" />
         <PackageReference Include="CacheManager.Serialization.Json" Version="1.2.0" />
@@ -48,7 +48,7 @@
         <PackageReference Include="CLRStats" Version="1.0.0" />
         <PackageReference Include="Collections.Pooled" Version="1.0.82" />
         <PackageReference Include="CSRedisCore" Version="3.8.2" />
-        <PackageReference Include="EFCoreSecondLevelCacheInterceptor" Version="3.5.1" />
+        <PackageReference Include="EFCoreSecondLevelCacheInterceptor" Version="3.6.1" />
         <PackageReference Include="Hangfire" Version="1.7.30" />
         <PackageReference Include="Hangfire.MemoryStorage" Version="1.7.0" />
         <PackageReference Include="htmldiff.net-core" Version="1.3.6" />
@@ -56,15 +56,15 @@
         <PackageReference Include="Karambolo.AspNetCore.Bundling.NUglify" Version="3.5.1" />
         <PackageReference Include="Masuit.Tools.Excel" Version="1.1.2.2" />
         <PackageReference Include="MaxMind.GeoIP2" Version="5.1.0" />
-        <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.5" />
-        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.5" />
-        <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.5" />
-        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.5" />
-        <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.5" />
-        <PackageReference Include="Microsoft.Graph" Version="4.30.0" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.6" />
+        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.6" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.6" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.6" />
+        <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.6" />
+        <PackageReference Include="Microsoft.Graph" Version="4.32.0" />
         <PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
         <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
-        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.4" />
+        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.5" />
         <PackageReference Include="OpenXmlPowerTools-NetStandard" Version="4.6.23-alpha4" />
         <PackageReference Include="MiniProfiler.EntityFrameworkCore" Version="4.2.22" />
         <PackageReference Include="PanGu.HighLight" Version="1.0.0" />
@@ -72,7 +72,7 @@
         <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.18" />
         <PackageReference Include="TimeZoneConverter" Version="5.0.0" />
         <PackageReference Include="WilderMinds.RssSyndication" Version="1.7.0" />
-        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.14.0" />
+        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.14.1" />
     </ItemGroup>
     <ItemGroup>
         <Content Update="appsettings.json">

+ 11 - 0
src/Masuit.MyBlogs.Core/Models/Entity/PostTag.cs

@@ -0,0 +1,11 @@
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace Masuit.MyBlogs.Core.Models.Entity;
+
+[Table("PostTag")]
+public class PostTag : BaseEntity
+{
+    public string Name { get; set; }
+
+    public int Count { get; set; }
+}

+ 113 - 113
src/Masuit.MyBlogs.Core/wwwroot/ng-views/controllers/partner.js

@@ -1,21 +1,21 @@
-myApp.controller("partner", ["$scope", "$http", "$timeout","NgTableParams", function ($scope, $http, $timeout,NgTableParams) {
+myApp.controller("partner", ["$scope", "$http", "$timeout", "NgTableParams", function ($scope, $http, $timeout, NgTableParams) {
     var self = this;
     $scope.isAdd = true;
-    $scope.allowUpload=false;
+    $scope.allowUpload = false;
     $scope.partner = {};
     $scope.kw = "";
     $scope.paginationConf = {
-        currentPage:  1,
+        currentPage: 1,
         itemsPerPage: 10,
         pagesLength: 25,
         perPageOptions: [1, 5, 10, 15, 20, 30, 40, 50, 100, 200],
         rememberPerPage: 'perPageItems',
-        onChange: function() {
+        onChange: function () {
             self.GetPageData($scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage);
         }
     };
     this.GetPageData = function (page, size) {
-        $http.get(`/partner/getpagedata?page=${page}&size=${size}&kw=${$scope.kw}`).then(function(res) {
+        $http.get(`/partner/getpagedata?page=${page}&size=${size}&kw=${$scope.kw}`).then(function (res) {
             $scope.paginationConf.totalItems = res.data.TotalCount;
             $("div[ng-table-pagination]").remove();
             self.tableParams = new NgTableParams({
@@ -25,10 +25,10 @@
                 dataset: res.data.Data
             });
             self.data = res.data.Data;
-            $timeout(function() {
-                self.data.forEach(item=> {
+            $timeout(function () {
+                self.data.forEach(item => {
                     xmSelect.render({
-                        el: '#category-'+item.Id,
+                        el: '#category-' + item.Id,
                         tips: '未选择分类',
                         prop: {
                             name: 'Name',
@@ -43,41 +43,41 @@
                         },
                         filterable: true, //搜索功能
                         autoRow: true, //选项过多,自动换行
-                        data:$scope.cat,
-                        initValue:(item.CategoryIds||"").split(","),
+                        data: $scope.cat,
+                        initValue: (item.CategoryIds || "").split(","),
                         on: function (data) {
-                            var arr=[];
+                            var arr = [];
                             for (var i = 0; i < data.arr.length; i++) {
                                 arr.push(data.arr[i].Id);
                             }
-                            $http.post(`/partner/${item.Id}/categories?cids=`+arr.join(",")).then(function(res) {
-                                if (data.status>=400) {
+                            $http.post(`/partner/${item.Id}/categories?cids=` + arr.join(",")).then(function (res) {
+                                if (data.status >= 400) {
                                     layer.msg("操作失败");
                                 }
                             });
                         }
                     });
                 });
-            },1);
+            }, 1);
         });
     }
 
-    $scope.typesDropdown =xmSelect.render({
+    $scope.typesDropdown = xmSelect.render({
         el: '#types',
         tips: '请选择推广区域',
         direction: 'up',
         autoRow: true, //选项过多,自动换行
-        data:[{name:"轮播图",value:1},{name:"列表项",value:2},{name:"边栏",value:3},{name:"内页",value:4}],
+        data: [{ name: "轮播图", value: 1 }, { name: "列表项", value: 2 }, { name: "边栏", value: 3 }, { name: "内页", value: 4 }],
         on: function (data) {
-            var arr=[];
+            var arr = [];
             for (var i = 0; i < data.arr.length; i++) {
                 arr.push(data.arr[i].value);
             }
-            $scope.partner.Types=arr.join(",");
+            $scope.partner.Types = arr.join(",");
         }
     });
 
-    $scope.regionDropdown =xmSelect.render({
+    $scope.regionDropdown = xmSelect.render({
         el: '#regionMode',
         tips: '区域',
         model: {
@@ -89,9 +89,9 @@
         direction: 'up',
         filterable: false, //搜索功能
         autoRow: false, //选项过多,自动换行
-        data:[{name:"不限",value:0},{name:"以内",value:1},{name:"以外",value:2}],
+        data: [{ name: "不限", value: 0 }, { name: "以内", value: 1 }, { name: "以外", value: 2 }],
         on: function (data) {
-            if (data.arr.length>0) {
+            if (data.arr.length > 0) {
                 $scope.partner.RegionMode = data.arr[0].value;
             }
         }
@@ -118,9 +118,9 @@
                     },
                     filterable: true, //搜索功能
                     autoRow: true, //选项过多,自动换行
-                    data:data.Data,
+                    data: data.Data,
                     on: function (data) {
-                        var arr=[];
+                        var arr = [];
                         for (var i = 0; i < data.arr.length; i++) {
                             arr.push(data.arr[i].Id);
                         }
@@ -137,7 +137,7 @@
         });
     }
     $scope.getCategory();
-    $scope.remove = function(partner) {
+    $scope.remove = function (partner) {
         layer.closeAll();
         swal({
             title: '确定移除这条广告吗?',
@@ -147,58 +147,58 @@
             cancelButtonColor: '#d33',
             confirmButtonText: '确定',
             cancelButtonText: '取消'
-        }).then(function(isConfirm) {
+        }).then(function (isConfirm) {
             if (isConfirm) {
-                $scope.request("/partner/delete/"+partner.Id, null, function(data) {
+                $scope.request("/partner/delete/" + partner.Id, null, function (data) {
                     window.notie.alert({
-                        type:1,
-                        text:data.Message,
-                        time:4
+                        type: 1,
+                        text: data.Message,
+                        time: 4
                     });
                     self.GetPageData($scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage);
                 });
             }
         }).catch(swal.noop);
     }
-    $scope.add = function() {
+    $scope.add = function () {
         $scope.partner = {
-            ExpireTime:"2049-12-31 23:59:59"
+            ExpireTime: "2049-12-31 23:59:59"
         };
         $scope.isAdd = true;
-        $scope.allowUpload=false;
+        $scope.allowUpload = false;
         layer.open({
             type: 1,
             zIndex: 20,
             title: '添加广告推广',
             area: (window.screen.width > 650 ? 650 : window.screen.width) + 'px',// '340px'], //宽高
             content: $("#edit"),
-            cancel: function(index, layero) {
-                setTimeout(function() {
+            cancel: function (index, layero) {
+                setTimeout(function () {
                     $("#edit").css("display", "none");
                 }, 500);
                 return true;
             }
         });
-        layui.use('laydate', function(){
-          var laydate = layui.laydate;
-          laydate.render({
-            elem: '#timespan',
-            type: 'datetime',
-            calendar: true,
-            done: function(value, date, endDate) {
-                $scope.partner.ExpireTime=value;
-            }
-          });
+        layui.use('laydate', function () {
+            var laydate = layui.laydate;
+            laydate.render({
+                elem: '#timespan',
+                type: 'datetime',
+                calendar: true,
+                done: function (value, date, endDate) {
+                    $scope.partner.ExpireTime = value;
+                }
+            });
         });
     }
 
     $scope.edit = function (item) {
         $scope.partner = angular.copy(item);
-        $scope.partner.ExpireTime=$scope.partner.ExpireTime == null?"2049-12-31 23:59:59":new Date($scope.partner.ExpireTime).Format("yyyy-MM-dd hh:mm:ss");
+        $scope.partner.ExpireTime = $scope.partner.ExpireTime == null ? "2049-12-31 23:59:59" : new Date($scope.partner.ExpireTime).Format("yyyy-MM-dd hh:mm:ss");
         $scope.isAdd = false;
-        $scope.allowUpload=false;
+        $scope.allowUpload = false;
         layer.closeAll();
-        $scope.categoryDropdown.setValue((item.CategoryIds||"").split(','));
+        $scope.categoryDropdown.setValue((item.CategoryIds || "").split(','));
         $scope.typesDropdown.setValue(item.Types.split(','));
         $scope.regionDropdown.setValue([item.RegionMode]);
         layer.open({
@@ -207,34 +207,34 @@
             title: '保存广告',
             area: (window.screen.width > 650 ? 650 : window.screen.width) + 'px',// '340px'], //宽高
             content: $("#edit"),
-            cancel: function(index, layero) {
-                setTimeout(function() {
+            cancel: function (index, layero) {
+                setTimeout(function () {
                     $("#edit").css("display", "none");
                 }, 500);
                 return true;
             }
         });
-        layui.use('laydate', function(){
-          var laydate = layui.laydate;
-          laydate.render({
-            elem: '#timespan',
-            type: 'datetime',
-            calendar: true,
-            done: function(value, date, endDate) {
-                $scope.partner.ExpireTime=value;
-            }
-          });
+        layui.use('laydate', function () {
+            var laydate = layui.laydate;
+            laydate.render({
+                elem: '#timespan',
+                type: 'datetime',
+                calendar: true,
+                done: function (value, date, endDate) {
+                    $scope.partner.ExpireTime = value;
+                }
+            });
         });
     }
 
     $scope.copy = function (item) {
         $scope.partner = angular.copy(item);
         delete $scope.partner.Id;
-        $scope.partner.ExpireTime=$scope.partner.ExpireTime == null?"2049-12-31 23:59:59":new Date($scope.partner.ExpireTime).Format("yyyy-MM-dd hh:mm:ss");
+        $scope.partner.ExpireTime = $scope.partner.ExpireTime == null ? "2049-12-31 23:59:59" : new Date($scope.partner.ExpireTime).Format("yyyy-MM-dd hh:mm:ss");
         $scope.isAdd = true;
-        $scope.allowUpload=false;
+        $scope.allowUpload = false;
         layer.closeAll();
-        $scope.categoryDropdown.setValue((item.CategoryIds||"").split(','));
+        $scope.categoryDropdown.setValue((item.CategoryIds || "").split(','));
         $scope.typesDropdown.setValue(item.Types.split(','));
         $scope.regionDropdown.setValue([0]);
         layer.open({
@@ -243,38 +243,38 @@
             title: '复制广告推广',
             area: (window.screen.width > 650 ? 650 : window.screen.width) + 'px',// '340px'], //宽高
             content: $("#edit"),
-            cancel: function(index, layero) {
-                setTimeout(function() {
+            cancel: function (index, layero) {
+                setTimeout(function () {
                     $("#edit").css("display", "none");
                 }, 500);
                 return true;
             }
         });
-        layui.use('laydate', function(){
-          var laydate = layui.laydate;
-          laydate.render({
-            elem: '#timespan',
-            type: 'datetime',
-            calendar: true,
-            done: function(value, date, endDate) {
-                $scope.partner.ExpireTime=value;
-            }
-          });
+        layui.use('laydate', function () {
+            var laydate = layui.laydate;
+            laydate.render({
+                elem: '#timespan',
+                type: 'datetime',
+                calendar: true,
+                done: function (value, date, endDate) {
+                    $scope.partner.ExpireTime = value;
+                }
+            });
         });
     }
 
-    $scope.closeAll= function() {
+    $scope.closeAll = function () {
         layer.closeAll();
-        setTimeout(function() {
+        setTimeout(function () {
             $("#edit").css("display", "none");
         }, 500);
     }
 
-    $scope.submit = function(partner) {
+    $scope.submit = function (partner) {
         if ($scope.isAdd) {
             partner.Id = 0;
         }
-        $scope.request("/partner/save", partner, function(data) {
+        $scope.request("/partner/save", partner, function (data) {
             $scope.closeAll();
             window.notie.alert({
                 type: 1,
@@ -285,15 +285,15 @@
             $scope.partner.ImageUrl = "";
             $scope.partner.Description = "";
             $scope.categoryDropdown.setValue([]);
-        $scope.typesDropdown.setValue([]);
-        $scope.regionDropdown.setValue([0]);
+            $scope.typesDropdown.setValue([]);
+            $scope.regionDropdown.setValue([0]);
         });
     }
-    $scope.uploadImage = function(field) {
+    $scope.uploadImage = function (field) {
         $("#uploadform").ajaxSubmit({
             url: "/Upload",
             type: "post",
-            success: function(data) {
+            success: function (data) {
                 document.getElementById("uploadform").reset();
                 $scope.$apply(function () {
                     $scope.partner[field] = data.Data;
@@ -302,16 +302,16 @@
             }
         });
     };
-    
-    $scope.upload = function(field) {
-        $scope.imgField=field;
+
+    $scope.upload = function (field) {
+        $scope.imgField = field;
         layer.open({
             type: 1,
             zIndex: 20,
             title: '上传图片',
             area: [(window.screen.width > 300 ? 300 : window.screen.width) + 'px', '80px'], //宽高
             content: $("#img-upload"),
-            cancel: function(index, layero) {
+            cancel: function (index, layero) {
                 return true;
             }
         });
@@ -329,8 +329,8 @@
         }, 500);
     }
 
-    $scope.changeState= function(row) {
-        $scope.request("/partner/ChangeState/"+row.Id, null, function(data) {
+    $scope.changeState = function (row) {
+        $scope.request("/partner/ChangeState/" + row.Id, null, function (data) {
             window.notie.alert({
                 type: 1,
                 text: data.Message,
@@ -350,7 +350,7 @@
             title: item.Title,
             area: (window.screen.width > 850 ? 850 : window.screen.width) + 'px',// '340px'], //宽高
             content: $("#detail"),
-            cancel: function(index, layero) {
+            cancel: function (index, layero) {
                 return true;
             }
         });
@@ -369,51 +369,51 @@
                 expandedKeys: true,
             },
             autoRow: true, //选项过多,自动换行
-            data:$scope.cat,
-            initValue:(item.CategoryIds||"").split(",")
+            data: $scope.cat,
+            initValue: (item.CategoryIds || "").split(",")
         });
         xmSelect.render({
             el: '#types-view',
             disabled: true,
             autoRow: true, //选项过多,自动换行
-            data:[{name:"轮播图",value:1},{name:"列表项",value:2},{name:"边栏",value:3},{name:"内页",value:4}],
-            initValue:(item.Types||"").split(",")
+            data: [{ name: "轮播图", value: 1 }, { name: "列表项", value: 2 }, { name: "边栏", value: 3 }, { name: "内页", value: 4 }],
+            initValue: (item.Types || "").split(",")
         });
     }
 
     $scope.delayShow = function (item) {
-        $scope.partner=item;
+        $scope.partner = item;
         $scope.isAdd = false;
-        $scope.partner.ExpireTime=new Date($scope.partner.ExpireTime).Format("yyyy-MM-dd hh:mm:ss");
+        $scope.partner.ExpireTime = new Date($scope.partner.ExpireTime).Format("yyyy-MM-dd hh:mm:ss");
         layer.open({
             type: 1,
             zIndex: 20,
             title: "延期广告",
             content: $("#delay"),
-            cancel: function(index, layero) {
+            cancel: function (index, layero) {
                 return true;
             }
         });
-        layui.use('laydate', function(){
-          var laydate = layui.laydate;
-          laydate.render({
-            elem: '.timespan',
-            type: 'datetime',
-            calendar: true,
-            done: function(value, date, endDate) {
-                $scope.partner.ExpireTime=value;
-            }
-          });
+        layui.use('laydate', function () {
+            var laydate = layui.laydate;
+            laydate.render({
+                elem: '.timespan',
+                type: 'datetime',
+                calendar: true,
+                done: function (value, date, endDate) {
+                    $scope.partner.ExpireTime = value;
+                }
+            });
         });
     }
-    
-    $scope.insight= function(row) {
+
+    $scope.insight = function (row) {
         layer.full(layer.open({
-          type: 2,
-          title: '广告《'+row.Title+'》洞察分析',
-          maxmin: true, //开启最大化最小化按钮
-          area: ['893px', '100vh'],
-          content: '/partner/'+row.Id+'/insight'
+            type: 2,
+            title: '广告《' + row.Title + '》洞察分析',
+            maxmin: true, //开启最大化最小化按钮
+            area: ['893px', '100vh'],
+            content: '/partner/' + row.Id + '/insight'
         }));
     }
 }]);