Kaynağa Gözat

优化 统一前端接口模式

zuohuaijun 4 yıl önce
ebeveyn
işleme
ead9922b54

+ 4 - 4
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -19,10 +19,10 @@
 
   <ItemGroup>
     <PackageReference Include="Caching.CSRedis" Version="3.8.2" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="3.3.4" />
-    <PackageReference Include="Furion.Extras.Logging.Serilog" Version="3.3.4" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="3.3.4" />
-    <PackageReference Include="Furion.Pure" Version="3.3.4" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="3.4.0" />
+    <PackageReference Include="Furion.Extras.Logging.Serilog" Version="3.4.0" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="3.4.0" />
+    <PackageReference Include="Furion.Pure" Version="3.4.0" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.6.4" />
     <PackageReference Include="MySql.Data" Version="8.0.29" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.5" />

+ 2 - 126
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -621,51 +621,6 @@
             状态
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.SysDistrict">
-             <summary>
-             系统行政区域表
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Pid">
-             <summary>
-             父节点Id 
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Name">
-             <summary>
-             名称 
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Value">
-             <summary>
-             值 
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Code">
-             <summary>
-             节点编码 
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Order">
-             <summary>
-             排序 
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Remark">
-             <summary>
-             备注 
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Status">
-             <summary>
-             状态
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysDistrict.Children">
-            <summary>
-            数据资源子项
-            </summary>
-        </member>
         <member name="T:Admin.NET.Core.SysFile">
             <summary>
             系统文件表
@@ -2164,7 +2119,7 @@
         </member>
         <member name="F:Admin.NET.Core.ErrorCodeEnum.D1602">
             <summary>
-            已有相同行政区域,编码或名称相同
+            已有相同编码或名称
             </summary>
         </member>
         <member name="F:Admin.NET.Core.ErrorCodeEnum.xg1000">
@@ -2835,7 +2790,7 @@
         </member>
         <member name="T:Admin.NET.Core.SeedData.SysDataResourceSeedData">
             <summary>
-            系统行政区域种子数据
+            系统数据资源种子数据
             </summary>
         </member>
         <member name="M:Admin.NET.Core.SeedData.SysDataResourceSeedData.HasData">
@@ -4374,85 +4329,6 @@
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="P:Admin.NET.Core.Service.DistrictInput.Pid">
-            <summary>
-            父Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.DistrictInput.Name">
-            <summary>
-            名称
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.DistrictInput.Value">
-             <summary>
-             值 
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.DistrictInput.Code">
-            <summary>
-            编码
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.DistrictInput.Order">
-            <summary>
-            排序
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.DistrictInput.Remark">
-            <summary>
-            备注
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.DistrictInput.Status">
-            <summary>
-            状态
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.AddDistrictInput.Name">
-            <summary>
-            名称
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Core.Service.SysDistrictService">
-            <summary>
-            系统行政区域服务
-            </summary>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysDistrictService.GetDistrictList(Admin.NET.Core.Service.DistrictInput)">
-            <summary>
-            获取行政区域列表
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysDistrictService.AddDistrict(Admin.NET.Core.Service.AddDistrictInput)">
-            <summary>
-            增加行政区域
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysDistrictService.UpdateDistrict(Admin.NET.Core.Service.UpdateDistrictInput)">
-            <summary>
-            更新行政区域
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysDistrictService.DeleteDistrict(Admin.NET.Core.Service.DeleteDistrictInput)">
-            <summary>
-            删除行政区域
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysDistrictService.GetChildIdListWithSelfById(System.Int64)">
-            <summary>
-            根据节点Id获取子节点Id集合(包含自己)
-            </summary>
-            <param name="pid"></param>
-            <returns></returns>
-        </member>
         <member name="P:Admin.NET.Core.Service.PageFileInput.FileName">
             <summary>
             原始名称

+ 2 - 4
Admin.NET/Admin.NET.Core/Entity/SysDataResource.cs

@@ -1,9 +1,7 @@
-using System;
+using SqlSugar;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using Admin.NET.Core;
-using SqlSugar;
+
 namespace Admin.NET.Core
 {
     /// <summary>

+ 0 - 66
Admin.NET/Admin.NET.Core/Entity/SysDistrict.cs

@@ -1,66 +0,0 @@
-using SqlSugar;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-
-namespace Admin.NET.Core
-{
-    /// <summary>
-    /// 系统行政区域表
-    ///</summary>
-    [SugarTable("sys_district", "系统行政区域表")]
-    [SqlSugarEntity]
-    public class SysDistrict : EntityBase
-    {
-        /// <summary>
-        /// 父节点Id 
-        ///</summary>
-        [SugarColumn(ColumnName = "pid", ColumnDescription = "父Id")]
-        public long Pid { get; set; }
-
-        /// <summary>
-        /// 名称 
-        ///</summary>
-        [SugarColumn(ColumnName = "name", ColumnDescription = "名称", Length = 200)]
-        [MaxLength(200)]
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 值 
-        ///</summary>
-        [SugarColumn(ColumnName = "value", ColumnDescription = "值", Length = 200)]
-        [MaxLength(200)]
-        public string Value { get; set; }
-
-        /// <summary>
-        /// 节点编码 
-        ///</summary>
-        [SugarColumn(ColumnName = "code", ColumnDescription = "节点编码", Length = 100)]
-        [MaxLength(100)]
-        public string Code { get; set; }
-
-        /// <summary>
-        /// 排序 
-        ///</summary>
-        [SugarColumn(ColumnName = "order", ColumnDescription = "排序")]
-        public int Order { get; set; }
-
-        /// <summary>
-        /// 备注 
-        ///</summary>
-        [SugarColumn(ColumnName = "remark", ColumnDescription = "备注", Length = 200)]
-        [MaxLength(200)]
-        public string Remark { get; set; }
-
-        /// <summary>
-        /// 状态
-        ///</summary>
-        [SugarColumn(ColumnName = "status", ColumnDescription = "状态")]
-        public StatusEnum Status { get; set; } = StatusEnum.Enable;
-
-        /// <summary>
-        /// 数据资源子项
-        /// </summary>
-        [SugarColumn(IsIgnore = true)]
-        public List<SysDistrict> Children { get; set; }
-    }
-}

+ 0 - 25
Admin.NET/Admin.NET.Core/SeedData/SysDistrictSeedData.cs

@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Admin.NET.Core.SeedData
-{
-    /// <summary>
-    /// 系统行政区域种子数据
-    /// </summary>
-    public class SysDistrictSeedData : ISqlSugarEntitySeedData<SysDistrict>
-    {
-        /// <summary>
-        /// 种子数据
-        /// </summary>
-        /// <returns></returns>
-        public IEnumerable<SysDistrict> HasData()
-        {
-            return new[]
-            {
-                new SysDistrict{ Id=243848612100001, Pid=0, Name="行政区",Value="district", Code="1001", CreateTime=DateTime.Parse("2022-05-30 00:00:00"), Remark="行政区"},
-                new SysDistrict{ Id=243848612100002, Pid=243848612100001, Name="北京市",Value="110000", Code="1001001", CreateTime=DateTime.Parse("2022-05-30 00:00:00"), Remark="北京市"},
-                new SysDistrict{ Id=243848612100003, Pid=243848612100002, Name="东城区",Value="110101", Code="1001001001", CreateTime=DateTime.Parse("2022-05-30 00:00:00"), Remark="东城区"},
-            };
-        }
-    }
-}

+ 5 - 11
Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs

@@ -99,17 +99,11 @@ namespace Admin.NET.Core
                 new SysMenu{ Id=252885263003881, Pid=252885263003880, Title="缓存查询", Permission="cache:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
                 new SysMenu{ Id=252885263003882, Pid=252885263003880, Title="缓存删除", Permission="cache:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
-                new SysMenu{ Id=252885263003890, Pid=252885263003780, Title="数据资源管理", Path="dataResource", Name="DataResourceManagement", Component="/sys/admin/dataResource/index", Icon="ant-design:funnel-plot-filled", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003891, Pid=252885263003890, Title="数据资源查询", Permission="sysDataResource:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003892, Pid=252885263003890, Title="数据资源编辑", Permission="sysDataResource:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003893, Pid=252885263003890, Title="数据资源增加", Permission="sysDataResource:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003894, Pid=252885263003890, Title="数据资源删除", Permission="sysDataResource:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-
-                new SysMenu{ Id=252885263003895, Pid=252885263003780, Title="行政区域", Path="district", Name="DistrictManagement", Component="/sys/admin/district/index", Icon="ant-design:pushpin-outlined", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003896, Pid=252885263003895, Title="区域查询", Permission="sysDistrict:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003897, Pid=252885263003895, Title="区域编辑", Permission="sysDistrict:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003898, Pid=252885263003895, Title="区域增加", Permission="sysDistrict:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
-                new SysMenu{ Id=252885263003899, Pid=252885263003895, Title="区域删除", Permission="sysDistrict:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
+                new SysMenu{ Id=252885263003890, Pid=252885263003780, Title="数据资源", Path="dataResource", Name="DataResourceManagement", Component="/sys/admin/dataResource/index", Icon="ant-design:funnel-plot-filled", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
+                new SysMenu{ Id=252885263003891, Pid=252885263003890, Title="资源查询", Permission="sysDataResource:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
+                new SysMenu{ Id=252885263003892, Pid=252885263003890, Title="资源编辑", Permission="sysDataResource:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
+                new SysMenu{ Id=252885263003893, Pid=252885263003890, Title="资源增加", Permission="sysDataResource:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
+                new SysMenu{ Id=252885263003894, Pid=252885263003890, Title="资源删除", Permission="sysDataResource:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-05-30 00:00:00"), OrderNo=100 },
 
                 new SysMenu{ Id=252885263003900, Pid=0, Title="日志管理", Path="/log", Name="log", Component="LAYOUT", Redirect="", Icon="ant-design:carry-out-outlined", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=300 },
                 new SysMenu{ Id=252885263003910, Pid=252885263003900, Title="访问日志", Path="vislog", Name="VislogManagement", Component="/sys/admin/log/vislog/index", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },

+ 5 - 15
Admin.NET/Admin.NET.Core/Service/DataResources/SysDataResourceService.cs

@@ -17,12 +17,10 @@ namespace Admin.NET.Core.Service.DataResource
     public class SysDataResourceService : IDynamicApiController, ITransient
     {
         private readonly SqlSugarRepository<SysDataResource> _sysDataResourceRep;
-        private readonly ISysCacheService _sysCacheService;
 
-        public SysDataResourceService(SqlSugarRepository<SysDataResource> sysDataResourceRep, ISysCacheService sysCacheService)
+        public SysDataResourceService(SqlSugarRepository<SysDataResource> sysDataResourceRep)
         {
             _sysDataResourceRep = sysDataResourceRep;
-            _sysCacheService = sysCacheService;
         }
 
         /// <summary>
@@ -32,13 +30,7 @@ namespace Admin.NET.Core.Service.DataResource
         [HttpGet("/sysDataResource/list")]
         public async Task<List<SysDataResource>> GetDataResourceList([FromQuery] DataResourceInput input)
         {
-            var idList = new List<long>();
-
-            if (input.Id > 0)
-            {
-                idList = await GetChildIdListWithSelfById(input.Id);
-            }
-
+            var idList = input.Id > 0 ? await GetChildIdListWithSelfById(input.Id) : new List<long>();
 
             var iSugarQueryable = _sysDataResourceRep.AsQueryable().OrderBy(u => u.Order)
                 .WhereIF(idList.Count > 0, u => idList.Contains(u.Id)); // 非超级管理员限制
@@ -68,8 +60,8 @@ namespace Admin.NET.Core.Service.DataResource
 
             var newCode = "";
             // 生成编码Code和排序(每级2位编码)
-            SysDataResource sysDataResource = await _sysDataResourceRep.AsQueryable().OrderByDescending(o => o.Code)
-                    .FirstAsync(u => u.Pid == input.Pid);
+            var sysDataResource = await _sysDataResourceRep.AsQueryable().OrderByDescending(o => o.Code)
+                .FirstAsync(u => u.Pid == input.Pid);
 
             if (sysDataResource != null)
             {
@@ -124,7 +116,6 @@ namespace Admin.NET.Core.Service.DataResource
             if (childIdList.Contains(input.Pid))
                 throw Oops.Oh(ErrorCodeEnum.D1601);
 
-
             var dataResource = input.Adapt<SysDataResource>();
             await _sysDataResourceRep.AsUpdateable(dataResource).IgnoreColumns(true).ExecuteCommandAsync();
         }
@@ -152,8 +143,7 @@ namespace Admin.NET.Core.Service.DataResource
         /// </summary>
         /// <param name="pid"></param>
         /// <returns></returns>
-        [NonAction]
-        public async Task<List<long>> GetChildIdListWithSelfById(long pid)
+        private async Task<List<long>> GetChildIdListWithSelfById(long pid)
         {
             var treeList = await _sysDataResourceRep.AsQueryable().ToChildListAsync(u => u.Pid, pid);
             return treeList.Select(u => u.Id).ToList();

+ 0 - 59
Admin.NET/Admin.NET.Core/Service/District/Dto/DistrictInput.cs

@@ -1,59 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace Admin.NET.Core.Service
-{
-    public class DistrictInput : BaseIdInput
-    {
-        /// <summary>
-        /// 父Id
-        /// </summary>
-        public virtual long Pid { get; set; }
-
-        /// <summary>
-        /// 名称
-        /// </summary>
-        public virtual string Name { get; set; }
-
-        /// <summary>
-        /// 值 
-        ///</summary>
-        public virtual string Value { get; set; }
-
-        /// <summary>
-        /// 编码
-        /// </summary>
-        public virtual string Code { get; set; }
-
-        /// <summary>
-        /// 排序
-        /// </summary>
-        public virtual int Order { get; set; }
-
-        /// <summary>
-        /// 备注
-        /// </summary>
-        public virtual string Remark { get; set; }
-
-        /// <summary>
-        /// 状态
-        /// </summary>
-        public virtual int Status { get; set; }
-    }
-
-    public class AddDistrictInput : DistrictInput
-    {
-        /// <summary>
-        /// 名称
-        /// </summary>
-        [Required(ErrorMessage = "资源名称不能为空")]
-        public override string Name { get; set; }
-    }
-
-    public class UpdateDistrictInput : AddDistrictInput
-    {
-    }
-
-    public class DeleteDistrictInput : BaseIdInput
-    {
-    }
-}

+ 0 - 125
Admin.NET/Admin.NET.Core/Service/District/SysDistrictService.cs

@@ -1,125 +0,0 @@
-using Furion.DependencyInjection;
-using Furion.DynamicApiController;
-using Furion.FriendlyException;
-using Mapster;
-using Microsoft.AspNetCore.Mvc;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Admin.NET.Core.Service
-{
-    /// <summary>
-    /// 系统行政区域服务
-    /// </summary>
-    [ApiDescriptionSettings(Name = "行政区域", Order = 201)]
-    public class SysDistrictService : IDynamicApiController, ITransient
-    {
-        private readonly SqlSugarRepository<SysDistrict> _districtRep;
-
-        public SysDistrictService(SqlSugarRepository<SysDistrict> districtRep,
-            ISysCacheService sysCacheService)
-        {
-            _districtRep = districtRep;
-        }
-
-        /// <summary>
-        /// 获取行政区域列表
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet("/sysDistrict/list")]
-        public async Task<List<SysDistrict>> GetDistrictList([FromQuery] DistrictInput input)
-        {
-            var idList = input.Id > 0 ? await GetChildIdListWithSelfById(input.Id) : new List<long>();
-
-            var iSugarQueryable = _districtRep.AsQueryable().OrderBy(u => u.Order)
-                .WhereIF(idList.Count > 0, u => idList.Contains(u.Id)); // 非超级管理员限制
-
-            if (!string.IsNullOrWhiteSpace(input.Name) || !string.IsNullOrWhiteSpace(input.Code) || !string.IsNullOrWhiteSpace(input.Value) || input.Id > 0)
-            {
-                return await iSugarQueryable
-                    .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name))
-                    .WhereIF(!string.IsNullOrWhiteSpace(input.Value), u => u.Value.Contains(input.Value))
-                    .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code))
-                    .ToListAsync();
-            }
-            return await iSugarQueryable.ToTreeAsync(u => u.Children, u => u.Pid, input.Id > 0 ? input.Id : 0);
-        }
-
-        /// <summary>
-        /// 增加行政区域
-        /// </summary>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        [HttpPost("/sysDistrict/add")]
-        public async Task<long> AddDistrict(AddDistrictInput input)
-        {
-            var isExist = await _districtRep.IsAnyAsync(u => u.Code == input.Code && u.Name == input.Name);
-            if (isExist)
-                throw Oops.Oh(ErrorCodeEnum.D1602);
-
-            var sysDistrict = input.Adapt<SysDistrict>();
-            var newDistrict = await _districtRep.AsInsertable(sysDistrict).ExecuteReturnEntityAsync();
-            return newDistrict.Id;
-        }
-
-        /// <summary>
-        /// 更新行政区域
-        /// </summary>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        [HttpPost("/sysDistrict/update")]
-        [SqlSugarUnitOfWork]
-        public async Task UpdateDistrict(UpdateDistrictInput input)
-        {
-            if (input.Pid != 0)
-            {
-                var pDistrict = await _districtRep.GetFirstAsync(u => u.Id == input.Pid);
-                _ = pDistrict ?? throw Oops.Oh(ErrorCodeEnum.D1600);
-            }
-            if (input.Id == input.Pid)
-                throw Oops.Oh(ErrorCodeEnum.D1601);
-
-            var sysDistrict = await _districtRep.GetFirstAsync(u => u.Id == input.Id);
-            var isExist = await _districtRep.IsAnyAsync(u => (u.Name == input.Name && u.Code == input.Code) && u.Id != sysDistrict.Id);
-            if (isExist)
-                throw Oops.Oh(ErrorCodeEnum.D1602);
-
-            // 父Id不能为自己的子节点
-            var childIdList = await GetChildIdListWithSelfById(input.Id);
-            if (childIdList.Contains(input.Pid))
-                throw Oops.Oh(ErrorCodeEnum.D1601);
-
-            var district = input.Adapt<SysDistrict>();
-            await _districtRep.AsUpdateable(district).IgnoreColumns(true).ExecuteCommandAsync();
-        }
-
-        /// <summary>
-        /// 删除行政区域
-        /// </summary>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        [HttpPost("/sysDistrict/delete")]
-        public async Task DeleteDistrict(DeleteDistrictInput input)
-        {
-            // 获取本节点对应所有子节点id列表
-            var treeList = await _districtRep.AsQueryable().ToChildListAsync(u => u.Pid, input.Id);
-            var idList = treeList.Select(u => u.Id).ToList();
-
-            // 级联删除行政区域子节点
-            await _districtRep.DeleteAsync(u => idList.Contains(u.Id));
-        }
-
-        /// <summary>
-        /// 根据节点Id获取子节点Id集合(包含自己)
-        /// </summary>
-        /// <param name="pid"></param>
-        /// <returns></returns>
-        [NonAction]
-        public async Task<List<long>> GetChildIdListWithSelfById(long pid)
-        {
-            var treeList = await _districtRep.AsQueryable().ToChildListAsync(u => u.Pid, pid);
-            return treeList.Select(u => u.Id).ToList();
-        }
-    }
-}

+ 44 - 94
Vben2/src/api/sys/admin.ts

@@ -125,12 +125,6 @@ enum Api {
   TenantOwnMenuList = '/sysTenant/ownMenu',
   ResetTenantPwd = '/sysTenant/resetPwd',
 
-  // 行政区域接口
-  DistrictList = '/sysDistrict/list',
-  AddDistrict = '/sysDistrict/add',
-  DeleteDistrict = '/sysDistrict/delete',
-  UpdateDistrict = '/sysDistrict/update',
-
   // 数据资源接口
   DataResourceList = '/sysDataResource/list',
   AddDataResource = '/sysDataResource/add',
@@ -306,10 +300,9 @@ export const updateDictType = (params: any) => defHttp.post({ url: Api.UpdateDic
 // 获取字典类型分页列表
 export const getDictDataList = (params?: any) =>
   defHttp.get<any>({ url: Api.GetDictDataPageList, params });
-//从字典中值,下拉框控件使用
-export function getDictDataDropdown(params: any) {
-  return defHttp.get<any>({ url: Api.GetDictDataDropdown + '/' + params });
-}
+// 从字典中值,下拉框控件使用
+export const getDictDataDropdown = (params: any) =>
+  defHttp.get<any>({ url: Api.GetDictDataDropdown + '/' + params });
 // 增加典类型
 export const addDictData = (params: any) => defHttp.post({ url: Api.AddDictData, params });
 // 删除字典类型
@@ -320,137 +313,94 @@ export const updateDictData = (params: any) => defHttp.post({ url: Api.UpdateDic
 
 //////////数据库管理接口 //////////
 // 获取表字段
-export function getColumnInfoList(params?) {
-  return defHttp.get<any>({ url: Api.GetColumnInfoList, params });
-}
+export const getColumnInfoList = (params?) =>
+  defHttp.get<any>({ url: Api.GetColumnInfoList, params });
 // 获取所有表
-export function getTableInfoList(params?) {
-  return defHttp.get<any>({ url: Api.GetTableInfoList, params });
-}
+export const getTableInfoList = (params?) =>
+  defHttp.get<any>({ url: Api.GetTableInfoList, params });
 // 添加表
-export function addTable(params: any) {
-  return defHttp.post<any>({ url: Api.AddTable, params });
-}
+export const addTable = (params: any) => defHttp.post<any>({ url: Api.AddTable, params });
 // 修改表
-export function updateTable(params: any) {
-  return defHttp.post<any>({ url: Api.UpdateTable, params });
-}
+export const updateTable = (params: any) => defHttp.post<any>({ url: Api.UpdateTable, params });
 // 删除表
-export function deleteTable(params: any) {
-  return defHttp.post<any>({ url: Api.DeleTetable, params });
-}
+export const deleteTable = (params: any) => defHttp.post<any>({ url: Api.DeleTetable, params });
 // 添加字段
-export function addColumn(params: any) {
-  return defHttp.post<any>({ url: Api.AddColumn, params });
-}
+export const addColumn = (params: any) => defHttp.post<any>({ url: Api.AddColumn, params });
 // 修改字段
-export function updateColumn(params: any) {
-  return defHttp.post<any>({ url: Api.UpdateColumn, params });
-}
+export const updateColumn = (params: any) => defHttp.post<any>({ url: Api.UpdateColumn, params });
 // 删除字段
-export function deleteColumn(params: any) {
-  return defHttp.post<any>({ url: Api.DeleteColumn, params });
-}
+export const deleteColumn = (params: any) => defHttp.post<any>({ url: Api.DeleteColumn, params });
 // 生成实体
-export function createEntity(params: any) {
-  return defHttp.post<any>({ url: Api.CreateEntity, params });
-}
+export const createEntity = (params: any) => defHttp.post<any>({ url: Api.CreateEntity, params });
 
 ////////// 代码生成接口 //////////
 // 分页查询代码生成
-export function getGeneratePage(params?: any) {
-  return defHttp.get<any>({ url: Api.GetGeneratePage, params });
-}
+export const getGeneratePage = (params?: any) =>
+  defHttp.get<any>({ url: Api.GetGeneratePage, params });
 // 增加代码生成
-export function addGenerate(params: any) {
-  return defHttp.post<any>({
+export const addGenerate = (params: any) =>
+  defHttp.post<any>({
     url: Api.AddGenerate,
     params,
   });
-}
 // 修改代码生成
-export function updateGenerate(params: any) {
-  return defHttp.post<any>({
+export const updateGenerate = (params: any) =>
+  defHttp.post<any>({
     url: Api.UpdateGenerate,
     params,
   });
-}
 // 删除代码生成
-export function deleGenerate(params: any) {
-  return defHttp.post<any>({
+export const deleGenerate = (params: any) =>
+  defHttp.post<any>({
     url: Api.DeleGenerate,
     params,
   });
-}
 // 获取数据库(上下文定位器)集合
-export function getDatabaseList(params?: any) {
-  return defHttp.get<any>({ url: Api.GetDatabaseList, params });
-}
+export const getDatabaseList = (params?: any) =>
+  defHttp.get<any>({ url: Api.GetDatabaseList, params });
 // 获取数据库表(实体)集合
-export function getTableList(dbConfigId: string) {
-  return defHttp.get<any>({ url: Api.GetTableList + '/' + dbConfigId });
-}
+export const getTableList = (dbConfigId: string) =>
+  defHttp.get<any>({ url: Api.GetTableList + '/' + dbConfigId });
 // 根据表名获取列
-export function getColumnList(dbConfigId: string, tableName: string) {
-  return defHttp.get<any>({ url: Api.GetColumnList + '/' + dbConfigId + '/' + tableName });
-}
+export const getColumnList = (dbConfigId: string, tableName: string) =>
+  defHttp.get<any>({ url: Api.GetColumnList + '/' + dbConfigId + '/' + tableName });
 // 本地生成
-export function generateRunLocal(params: any) {
-  return defHttp.post<any>({
+export const generateRunLocal = (params: any) =>
+  defHttp.post<any>({
     url: Api.GenerateRunLocal,
     params,
   });
-}
+
 // 代码生成详细配置列表
-export function getGenerateConfigList(params?: any) {
-  return defHttp.get<any>({ url: Api.GetGenerateConfigList, params });
-}
+export const getGenerateConfigList = (params?: any) =>
+  defHttp.get<any>({ url: Api.GetGenerateConfigList, params });
+
 // 编辑代码生成详细配置
-export function updateGenerateConfig(params: any) {
-  return defHttp.post<any>({
+export const updateGenerateConfig = (params: any) =>
+  defHttp.post<any>({
     url: Api.UpdateGenerateConfig,
     params,
   });
-}
 
 ////////// 租户管理接口 //////////
 //分页查询租户
-export function getTenantPageList(params?: any) {
-  return defHttp.get<any>({ url: Api.GetTenantPage, params });
-}
+export const getTenantPageList = (params?: any) =>
+  defHttp.get<any>({ url: Api.GetTenantPage, params });
 //增加租户
-export function addTenant(params: any) {
-  return defHttp.post<any>({ url: Api.AddTenant, params });
-}
+export const addTenant = (params: any) => defHttp.post<any>({ url: Api.AddTenant, params });
 //删除租户
 export const deleteTenant = (id: number) => defHttp.post({ url: Api.DeleteTenant, params: { id } });
 //编辑租户
-export function updateTenant(params: any) {
-  return defHttp.post<any>({ url: Api.UpdateTenant, params });
-}
+export const updateTenant = (params: any) => defHttp.post<any>({ url: Api.UpdateTenant, params });
 //授权租户菜单
-export function grantTenantMenu(params?: any) {
-  return defHttp.post<any>({ url: Api.GrantTenantMenu, params });
-}
+export const grantTenantMenu = (params?: any) =>
+  defHttp.post<any>({ url: Api.GrantTenantMenu, params });
 // 获取租户菜单
 export const tenantOwnMenuList = (id: number) =>
   defHttp.get<any>({ url: Api.TenantOwnMenuList, params: { id } });
 //重置租户密码
-export function resetTenantPwd(id: number) {
-  return defHttp.post<any>({ url: Api.ResetTenantPwd, params: { id } });
-}
-
-////////// 行政区域管理接口 //////////
-// 获取行政区域列表
-export const getDistrictList = (params?: any) =>
-  defHttp.get<any>({ url: Api.DistrictList, params });
-// 增加行政区域
-export const addDistrict = (params: any) => defHttp.post({ url: Api.AddDistrict, params });
-// 删除行政区域
-export const deleteDistrict = (id: number) =>
-  defHttp.post({ url: Api.DeleteDistrict, params: { id } });
-// 更新行政区域
-export const updateDistrict = (params: any) => defHttp.post({ url: Api.UpdateDistrict, params });
+export const resetTenantPwd = (id: number) =>
+  defHttp.post<any>({ url: Api.ResetTenantPwd, params: { id } });
 
 ////////// 数据资源管理接口 //////////
 // 获取数据资源列表

+ 0 - 76
Vben2/src/views/sys/admin/district/DistrictModal.vue

@@ -1,76 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-
-  import { formSchema } from './district.data';
-  import { getDistrictList, addDistrict, updateDistrict } from '/@/api/sys/admin';
-
-  export default defineComponent({
-    name: 'DistrictModal',
-    components: { BasicModal, BasicForm },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const isUpdate = ref(true);
-      let rowId: number;
-
-      const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
-        labelWidth: 100,
-        schemas: formSchema,
-        showActionButtonGroup: false,
-      });
-
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        resetFields();
-        setModalProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-
-        const treeData = await getDistrictList({ id: data.record?.pid || 0 });
-        updateSchema({
-          field: 'pid',
-          componentProps: { treeData },
-        });
-
-        if (unref(isUpdate)) {
-          rowId = data.record.id;
-          setFieldsValue({
-            ...data.record,
-          });
-        } else {
-          setFieldsValue({ pid: data.searchInfo.pId }); // 以当前选择父节点新增
-        }
-      });
-
-      const getTitle = computed(() => (!unref(isUpdate) ? '新增区域' : '编辑区域'));
-
-      async function handleSubmit() {
-        try {
-          const values = await validate();
-          setModalProps({ confirmLoading: true });
-
-          if (unref(isUpdate)) {
-            values.id = rowId;
-            await addDistrict(values);
-          } else {
-            rowId = await updateDistrict(values);
-          }
-
-          closeModal();
-          emit('success', {
-            isUpdate: unref(isUpdate),
-            values: { ...values, id: rowId },
-          });
-        } finally {
-          setModalProps({ confirmLoading: false });
-        }
-      }
-
-      return { registerModal, registerForm, getTitle, handleSubmit };
-    },
-  });
-</script>

+ 0 - 75
Vben2/src/views/sys/admin/district/DistrictTree.vue

@@ -1,75 +0,0 @@
-<template>
-  <div class="m-4 mr-0 overflow-hidden bg-white">
-    <BasicTree
-      title="区域列表"
-      toolbar
-      search
-      :clickRowToExpand="true"
-      :treeData="treeData"
-      :fieldNames="{ key: 'id', title: 'name' }"
-      @select="handleSelect"
-      ref="treeAction"
-    />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, onMounted, ref, unref, nextTick } from 'vue';
-  import { BasicTree, TreeActionType, TreeItem } from '/@/components/Tree/index';
-
-  import { getDistrictList } from '/@/api/sys/admin';
-
-  export default defineComponent({
-    name: 'OrgTree',
-    components: { BasicTree },
-
-    emits: ['select'],
-    setup(_, { emit }) {
-      const treeData = ref<TreeItem[]>([]);
-      const treeAction = ref<Nullable<TreeActionType>>(null);
-
-      const appendNodeByKey = (parentKey: string, values) => {
-        unref(treeAction).insertNodeByKey({
-          parentKey: parentKey,
-          node: values,
-          // 往后插入
-          push: 'push',
-          // 往前插入
-          // push:'unshift'
-        });
-      };
-
-      const updateNodeByKey = (key: string, values) => {
-        unref(treeAction).updateNodeByKey(key, values);
-      };
-
-      const deleteNodeByKey = (key: string) => {
-        unref(treeAction).deleteNodeByKey(key);
-      };
-
-      async function fetch() {
-        treeData.value = (await getDistrictList()) as unknown as TreeItem[];
-        nextTick(() => {
-          unref(treeAction)?.filterByLevel(2);
-        });
-      }
-
-      function handleSelect(keys, obj) {
-        if (obj == undefined) return;
-        else emit('select', keys[0], obj.selectedNodes[0]);
-      }
-
-      onMounted(() => {
-        fetch();
-      });
-      return {
-        treeData,
-        handleSelect,
-        treeAction,
-        appendNodeByKey,
-        updateNodeByKey,
-        deleteNodeByKey,
-        fetch,
-      };
-    },
-  });
-</script>

+ 0 - 136
Vben2/src/views/sys/admin/district/district.data.ts

@@ -1,136 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { h } from 'vue';
-import { Tag } from 'ant-design-vue';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '名称',
-    dataIndex: 'name',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: '值',
-    dataIndex: 'value',
-  },
-  {
-    title: '编码',
-    dataIndex: 'code',
-  },
-  {
-    title: '状态',
-    dataIndex: 'status',
-    width: 80,
-    customRender: ({ record }) => {
-      const status = record.status;
-      const enable = ~~status === 1;
-      const color = enable ? 'green' : 'red';
-      const text = enable ? '启用' : '停用';
-      return h(Tag, { color: color }, () => text);
-    },
-  },
-  {
-    title: '创建时间',
-    dataIndex: 'createTime',
-    width: 180,
-  },
-  {
-    title: '排序',
-    dataIndex: 'order',
-    width: 50,
-  },
-  {
-    title: '备注',
-    dataIndex: 'remark',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '名称',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    field: 'value',
-    label: '值',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    field: 'code',
-    label: '编码',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'pid',
-    label: '上级',
-    component: 'TreeSelect',
-    defaultValue: 0,
-    componentProps: {
-      fieldNames: {
-        label: 'name',
-        key: 'id',
-        value: 'id',
-      },
-      getPopupContainer: () => document.body,
-    },
-    required: true,
-    colProps: { span: 24 },
-  },
-  {
-    field: 'name',
-    label: '名称',
-    component: 'Input',
-    required: true,
-    colProps: { span: 24 },
-  },
-  {
-    field: 'value',
-    label: '值',
-    component: 'Input',
-    required: true,
-    colProps: { span: 24 },
-  },
-  // {
-  //   field: 'code',
-  //   label: '编码',
-  //   component: 'Input',
-  //   colProps: { span: 24 },
-  // },
-  {
-    field: 'order',
-    label: '排序',
-    component: 'InputNumber',
-    defaultValue: 0,
-    required: true,
-    componentProps: { style: { width: '100%' } },
-    colProps: { span: 24 },
-  },
-  {
-    field: 'status',
-    label: '状态',
-    component: 'RadioButtonGroup',
-    defaultValue: 1,
-    componentProps: {
-      options: [
-        { label: '启用', value: 1 },
-        { label: '停用', value: 2 },
-      ],
-    },
-    required: true,
-    colProps: { span: 24 },
-  },
-  {
-    label: '备注',
-    field: 'remark',
-    component: 'InputTextArea',
-    colProps: { span: 24 },
-  },
-];

+ 0 - 171
Vben2/src/views/sys/admin/district/index.vue

@@ -1,171 +0,0 @@
-<template>
-  <PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
-    <DistrictTree
-      class="w-1/4 xl:w-1/5"
-      style="overflow: auto"
-      @select="handleSelect"
-      ref="DistrictTreeChild"
-    />
-    <BasicTable @register="registerTable" class="w-3/4 xl:w-4/5" :searchInfo="searchInfo">
-      <template #toolbar>
-        <a-button
-          type="primary"
-          @click="handleCreate"
-          :disabled="!hasPermission('sysDistrict:add')"
-        >
-          新增区域
-        </a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              icon: 'clarity:note-edit-line',
-              label: '编辑',
-              disabled: !hasPermission('sysDistrict:update'),
-              onClick: handleEdit.bind(null, record),
-            },
-            {
-              icon: 'ant-design:delete-outlined',
-              label: '删除',
-              color: 'error',
-              ifShow: hasPermission('sysDistrict:delete'),
-              popConfirm: {
-                title: '是否确认删除',
-                confirm: handleDelete.bind(null, record),
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-    <DistrictModal @register="registerModal" @success="handleSuccess" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive, ref, unref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { usePermission } from '/@/hooks/web/usePermission';
-
-  import { PageWrapper } from '/@/components/Page';
-  import DistrictTree from './DistrictTree.vue';
-
-  import DistrictModal from './DistrictModal.vue';
-
-  import { columns, searchFormSchema } from './district.data';
-  import { getDistrictList, deleteDistrict } from '/@/api/sys/admin';
-
-  export default defineComponent({
-    name: 'DistrictManagement',
-    components: { BasicTable, DistrictModal, TableAction, PageWrapper, DistrictTree },
-    setup() {
-      const { hasPermission } = usePermission();
-      const OrgTreeChild = ref(null);
-      const [registerModal, { openModal }] = useModal();
-      const searchInfo = reactive<Recordable>({});
-      const [registerTable, { reload, updateTableDataRecord }] = useTable({
-        title: '区域列表',
-        api: getDistrictList,
-        columns,
-        formConfig: {
-          labelWidth: 120,
-          schemas: searchFormSchema,
-        },
-        rowKey: 'id',
-        pagination: false,
-        striped: false,
-        useSearchForm: true,
-        showTableSetting: true,
-        bordered: true,
-        showIndexColumn: false,
-        canResize: true,
-        actionColumn: {
-          width: 170,
-          title: '操作',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-        },
-      });
-
-      function getTree() {
-        const tree = unref(OrgTreeChild);
-        if (!tree) {
-          throw new Error('Tree is null!');
-        }
-        return tree;
-      }
-
-      function appendNodeByKey(parentKey, values) {
-        getTree().appendNodeByKey(parentKey, values);
-      }
-
-      function updateNodeByKey(key, values) {
-        getTree().updateNodeByKey(key, values);
-      }
-
-      function deleteNodeByKey(key) {
-        getTree().deleteNodeByKey(key);
-      }
-
-      function handleCreate() {
-        openModal(true, {
-          searchInfo,
-          isUpdate: false,
-        });
-      }
-
-      function handleEdit(record: Recordable) {
-        openModal(true, {
-          record,
-          isUpdate: true,
-        });
-      }
-
-      async function handleDelete(record: Recordable) {
-        await deleteDistrict(record.id);
-        deleteNodeByKey(record.id);
-        searchInfo.Id = record.pid;
-        reload();
-      }
-
-      function handleSelect(orgId: number, obj) {
-        if (obj == undefined) {
-          searchInfo.Id = 0;
-          searchInfo.pId = 0;
-        } else {
-          searchInfo.Id = orgId;
-          searchInfo.pId = obj.pid ? obj.pid : 0;
-        }
-        reload();
-      }
-
-      function handleSuccess({ isUpdate, values }) {
-        if (isUpdate) {
-          updateTableDataRecord(values.id, values);
-          updateNodeByKey(values.id, values);
-        } else {
-          reload();
-          appendNodeByKey(values.pid, values);
-        }
-        // getTree().fetch();
-      }
-
-      return {
-        registerTable,
-        registerModal,
-        searchInfo,
-        OrgTreeChild,
-        handleSelect,
-        updateNodeByKey,
-        appendNodeByKey,
-        deleteNodeByKey,
-        handleCreate,
-        handleEdit,
-        handleDelete,
-        handleSuccess,
-        hasPermission,
-      };
-    },
-  });
-</script>