/*
*接口编写处...
*如果接口需要做Action的权限验证,请在Action上使用属性
*如: [ApiActionPermission("Sys_Department",Enums.ActionPermissionOptions.Search)]
*/
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using WIDESEA_Entity.DomainModels;
using WIDESEA_System.IServices;
using WIDESEA_Core.Filters;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Extensions;
using WIDESEA_System.IRepositories;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using WIDESEA_Core.ManageUser;
using WIDESEA_Core.UserManager;
namespace WIDESEA_System.Controllers
{
public partial class Sys_DepartmentController
{
private readonly ISys_DepartmentService _service;//访问业务代码
private readonly ISys_DepartmentRepository _repository;
private readonly IHttpContextAccessor _httpContextAccessor;
[ActivatorUtilitiesConstructor]
public Sys_DepartmentController(
ISys_DepartmentService service,
ISys_DepartmentRepository repository,
IHttpContextAccessor httpContextAccessor
)
: base(service)
{
_service = service;
_repository = repository;
_httpContextAccessor = httpContextAccessor;
}
///
/// treetable 获取子节点数据(2021.05.02)
///
///
///
[ApiActionPermission(ActionPermissionOptions.Search)]
[HttpPost, Route("GetPageData")]
public override ActionResult GetPageData([FromBody] PageDataOptions loadData)
{
if (loadData.Value.GetInt() == 1)
{
return GetTreeTableRootData(loadData).Result;
}
return base.GetPageData(loadData);
}
///
/// treetable 获取子节点数据
///
///
[HttpPost, Route("getTreeTableRootData")]
[ApiActionPermission(ActionPermissionOptions.Search)]
public async Task GetTreeTableRootData([FromBody] PageDataOptions options)
{
//页面加载根节点数据条件x => x.ParentId == 0,自己根据需要设置
var query = _repository.FindAsIQueryable(x => true);
if (UserContext.Current.IsSuperAdmin)
{
query = query.Where(x => x.ParentId == null);
}
else
{
var deptIds = UserContext.Current.DeptIds;
var list = DepartmentContext.GetAllDept().Where(c => deptIds.Contains(c.id)).ToList();
deptIds = list.Where(c => !list.Any(x => x.id == c.parentId)).Select(x => x.id).ToList();
query = query.Where(x => deptIds.Contains(x.DepartmentId));
}
var queryChild = _repository.FindAsIQueryable(x => true);
var rows = await query.TakeOrderByPage(options.Page, options.Rows)
.OrderBy(x => x.DepartmentName).Select(s => new
{
s.DepartmentId,
s.ParentId,
s.DepartmentName,
s.DepartmentCode,
s.Enable,
s.Remark,
s.CreateDate,
s.Creator,
s.Modifier,
s.ModifyDate,
hasChildren = queryChild.Any(x => x.ParentId == s.DepartmentId)
}).ToListAsync();
return JsonNormal(new { total = await query.CountAsync(), rows });
}
///
///treetable 获取子节点数据
///
///
[HttpPost, Route("getTreeTableChildrenData")]
[ApiActionPermission(ActionPermissionOptions.Search)]
public async Task GetTreeTableChildrenData(Guid departmentId)
{
//点击节点时,加载子节点数据
var query = _repository.FindAsIQueryable(x => true);
var rows = await query.Where(x => x.ParentId == departmentId)
.Select(s => new
{
s.DepartmentId,
s.ParentId,
s.DepartmentName,
s.DepartmentCode,
s.Enable,
s.Remark,
s.CreateDate,
s.Creator,
s.Modifier,
s.ModifyDate,
hasChildren = query.Any(x => x.ParentId == s.DepartmentId)
}).ToListAsync();
return JsonNormal(new { rows });
}
}
}