0
0
Переглянути джерело

实现同步视图功能,优化视图路径和视图命名

zhontai 3 роки тому
батько
коміт
4e19fe6b9d

+ 0 - 10
Admin.Core.Service/Admin/View/Input/ViewSyncDto.cs

@@ -7,19 +7,9 @@
         /// </summary>
         public string Name { get; set; }
 
-        /// <summary>
-        /// 名称
-        /// </summary>
-        public string Label { get; set; }
-
         /// <summary>
         /// 地址
         /// </summary>
         public string Path { get; set; }
-
-        /// <summary>
-        /// 父级路径
-        /// </summary>
-        public string ParentPath { get; set; }
     }
 }

+ 39 - 75
Admin.Core.Service/Admin/View/ViewService.cs

@@ -112,106 +112,70 @@ namespace Admin.Core.Service.Admin.View
         [Transaction]
         public async Task<IResponseOutput> SyncAsync(ViewSyncInput input)
         {
-            //查询所有view
+            //查询所有视图
             var views = await _viewRepository.Select.ToListAsync();
+            var names = views.Select(a => a.Name).ToList();
             var paths = views.Select(a => a.Path).ToList();
 
             //path处理
             foreach (var view in input.Views)
             {
                 view.Path = view.Path?.Trim().ToLower();
-                view.ParentPath = view.ParentPath?.Trim().ToLower();
             }
 
-            #region 执行插入
-
-            //执行父级view插入
-            var parentViews = input.Views.FindAll(a => a.ParentPath.IsNull());
-            var pViews = (from a in parentViews where !paths.Contains(a.Path) select a).ToList();
-            if (pViews.Count > 0)
-            {
-                var insertPViews = Mapper.Map<List<ViewEntity>>(pViews);
-                insertPViews = await _viewRepository.InsertAsync(insertPViews);
-                views.AddRange(insertPViews);
-            }
-
-            //执行子级view插入
-            var childViews = input.Views.FindAll(a => a.ParentPath.NotNull());
-            var cViews = (from a in childViews where !paths.Contains(a.Path) select a).ToList();
-            if (cViews.Count > 0)
-            {
-                var insertCViews = Mapper.Map<List<ViewEntity>>(cViews);
-                insertCViews = await _viewRepository.InsertAsync(insertCViews);
-                views.AddRange(insertCViews);
-            }
-
-            #endregion 执行插入
-
-            #region 修改和禁用
-
-            //view修改
+            //批量插入
             {
-                ViewEntity a;
-                List<string> labels;
-                string label;
-                string desc;
-                foreach (var view in parentViews)
+                var inputViews = (from a in input.Views where !paths.Contains(a.Path) || !names.Contains(a.Name) select a).ToList();
+                if (inputViews.Count > 0)
                 {
-                    a = views.Find(a => a.Path == view.Path);
-                    if (a?.Id > 0)
+                    var insertViews = Mapper.Map<List<ViewEntity>>(inputViews);
+                    foreach (var insertView in insertViews)
                     {
-                        labels = view.Label?.Split("\r\n")?.ToList();
-                        label = labels != null && labels.Count > 0 ? labels[0] : string.Empty;
-                        desc = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count() - 1)) : string.Empty;
-                        a.ParentId = 0;
-                        a.Label = label;
-                        a.Description = desc;
-                        a.Enabled = true;
+                        insertView.Label = insertView.Name;
                     }
+                    insertViews = await _viewRepository.InsertAsync(insertViews);
+                    views.AddRange(insertViews);
                 }
             }
 
+            //批量更新
             {
-                ViewEntity a;
-                ViewEntity pa;
-                List<string> labels;
-                string label;
-                string desc;
-                foreach (var view in childViews)
+                var inputPaths = input.Views.Select(a => a.Path).ToList();
+                var inputNames = input.Views.Select(a => a.Name).ToList();
+
+                //修改
+                var updateViews = (from a in views where inputPaths.Contains(a.Path) || inputNames.Contains(a.Name) select a).ToList();
+                if (updateViews.Count > 0)
                 {
-                    a = views.Find(a => a.Path == view.Path);
-                    pa = views.Find(a => a.Path == view.ParentPath);
-                    if (a?.Id > 0)
+                    foreach (var view in updateViews)
                     {
-                        labels = view.Label?.Split("\r\n")?.ToList();
-                        label = labels != null && labels.Count > 0 ? labels[0] : string.Empty;
-                        desc = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count() - 1)) : string.Empty;
-
-                        a.ParentId = pa.Id;
-                        a.Label = label;
-                        a.Description = desc;
-                        a.Enabled = true;
+                        var inputView = input.Views.Where(a => a.Name == view.Name || a.Path == view.Path).FirstOrDefault();
+                        if (view.Label.IsNull())
+                        {
+                            view.Label = inputView.Name;
+                        }
+                        view.Name = inputView.Name;
+                        view.Path = inputView.Path;
+                        view.Enabled = true;
                     }
                 }
-            }
 
-            //view禁用
-            var inputPaths = input.Views.Select(a => a.Path).ToList();
-            var disabledViews = (from a in views where !inputPaths.Contains(a.Path) select a).ToList();
-            if (disabledViews.Count > 0)
-            {
-                foreach (var view in disabledViews)
+                //禁用
+                var disabledViews = (from a in views where (a.Path.NotNull() || a.Name.NotNull()) && (!inputPaths.Contains(a.Path) || !inputNames.Contains(a.Name)) select a).ToList();
+                if (disabledViews.Count > 0)
                 {
-                    view.Enabled = false;
+                    foreach (var view in disabledViews)
+                    {
+                        view.Enabled = false;
+                    }
                 }
-            }
-
-            #endregion 修改和禁用
 
-            //批量更新
-            await _viewRepository.UpdateDiy.SetSource(views)
-            .UpdateColumns(a => new { a.ParentId, a.Label, a.Description, a.Enabled })
-            .ExecuteAffrowsAsync();
+                updateViews.AddRange(disabledViews);
+                await _viewRepository.UpdateDiy.SetSource(updateViews)
+                .UpdateColumns(a => new { a.Label, a.Name, a.Path, a.Enabled })
+                .ExecuteAffrowsAsync();
+            }
+            
 
             return ResponseOutput.Ok();
         }

+ 1 - 0
Admin.Core.Service/Admin/View/_MapConfig.cs

@@ -12,6 +12,7 @@ namespace Admin.Core.Service.Admin.View.Input
         {
             CreateMap<ViewAddInput, ViewEntity>();
             CreateMap<ViewUpdateInput, ViewEntity>();
+            CreateMap<ViewSyncDto, ViewEntity>();
         }
     }
 }

+ 0 - 10
Admin.Core/Admin.Core.Service.xml

@@ -1731,21 +1731,11 @@
             视图命名
             </summary>
         </member>
-        <member name="P:Admin.Core.Service.Admin.View.Input.ViewSyncDto.Label">
-            <summary>
-            名称
-            </summary>
-        </member>
         <member name="P:Admin.Core.Service.Admin.View.Input.ViewSyncDto.Path">
             <summary>
             地址
             </summary>
         </member>
-        <member name="P:Admin.Core.Service.Admin.View.Input.ViewSyncDto.ParentPath">
-            <summary>
-            父级路径
-            </summary>
-        </member>
         <member name="T:Admin.Core.Service.Admin.View.Input.ViewUpdateInput">
             <summary>
             修改