diff --git a/api/v1/system/sys_dept.go b/api/v1/system/sys_dept.go index 645306c..a3c9406 100644 --- a/api/v1/system/sys_dept.go +++ b/api/v1/system/sys_dept.go @@ -65,7 +65,8 @@ type DeptDeleteRes struct { } type DeptTreeSelectReq struct { - g.Meta `path:"/dept/treeSelect" tags:"系统后台/部门管理" method:"get" summary:"获取部门树形菜单"` + g.Meta `path:"/dept/treeSelect" tags:"系统后台/部门管理" method:"get" summary:"获取部门树形菜单"` + ShowOwner bool `p:"showOwner"` } type DeptTreeSelectRes struct { diff --git a/internal/app/system/controller/sys_dept.go b/internal/app/system/controller/sys_dept.go index a4b9924..7d214f1 100644 --- a/internal/app/system/controller/sys_dept.go +++ b/internal/app/system/controller/sys_dept.go @@ -50,14 +50,20 @@ func (c *sysDeptController) Delete(ctx context.Context, req *system.DeptDeleteRe // TreeSelect 获取部门数据结构数据 func (c *sysDeptController) TreeSelect(ctx context.Context, req *system.DeptTreeSelectReq) (res *system.DeptTreeSelectRes, err error) { var deptList []*entity.SysDept + currentUser := service.Context().GetLoginUser(ctx) deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{ - Status: "1", //正常状态数据 - ShowAll: true, + Status: "1", //正常状态数据 + ShowAll: !req.ShowOwner, + UserId: currentUser.Id, + UserDeptId: currentUser.DeptId, }) if err != nil { return } res = new(system.DeptTreeSelectRes) - res.Deps = service.SysDept().GetListTree(0, deptList) + topIds := service.SysDept().GetTopIds(deptList) + for _, v := range topIds { + res.Deps = append(res.Deps, service.SysDept().GetListTree(v, deptList)...) + } return } diff --git a/internal/app/system/logic/sysDept/sys_dept.go b/internal/app/system/logic/sysDept/sys_dept.go index 9ddd6ad..29c02bd 100644 --- a/internal/app/system/logic/sysDept/sys_dept.go +++ b/internal/app/system/logic/sysDept/sys_dept.go @@ -10,6 +10,7 @@ package sysDept import ( "context" "errors" + "github.com/gogf/gf/v2/container/garray" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/text/gstr" "github.com/gogf/gf/v2/util/gconv" @@ -182,6 +183,24 @@ func (s *sSysDept) GetListTree(pid uint64, list []*entity.SysDept) (deptTree []* return } +func (s *sSysDept) GetTopIds(list []*entity.SysDept) (ids []uint64) { + arr := garray.NewArray() + for _, v1 := range list { + tag := true + for _, v2 := range list { + if v1.ParentId == v2.DeptId { + tag = false + break + } + } + if tag { + arr.PushRight(v1.ParentId) + } + } + ids = gconv.Uint64s(arr.Unique().Slice()) + return +} + // GetByDeptId 通过部门id获取部门信息 func (s *sSysDept) GetByDeptId(ctx context.Context, deptId uint64) (dept *entity.SysDept, err error) { var depts []*entity.SysDept diff --git a/internal/app/system/logic/sysUser/sys_user.go b/internal/app/system/logic/sysUser/sys_user.go index 4cf8d7f..310e753 100644 --- a/internal/app/system/logic/sysUser/sys_user.go +++ b/internal/app/system/logic/sysUser/sys_user.go @@ -958,7 +958,7 @@ func (s *sSysUser) GetDataWhere(ctx context.Context, userInfo *model.ContextUser deptIdArr.Add(gconv.Int64(userInfo.DeptId)) //获取正常状态部门数据 deptList := ([]*entity.SysDept)(nil) - deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{Status: "1"}) + deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{Status: "1", ShowAll: true}) liberr.ErrIsNil(ctx, err) var dList g.List for _, d := range deptList { @@ -1059,7 +1059,7 @@ func (s *sSysUser) GetAuthDataWhere(ctx context.Context, m *gdb.Model, userInfo deptIdArr.Add(gconv.Int64(userInfo.DeptId)) //获取正常状态部门数据 deptList := ([]*entity.SysDept)(nil) - deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{Status: "1"}) + deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{Status: "1", ShowAll: true}) liberr.ErrIsNil(ctx, err) var dList g.List for _, d := range deptList { @@ -1166,7 +1166,7 @@ func (s *sSysUser) GetAuthDeptDataWhere(ctx context.Context, m *gdb.Model, userI deptIdArr.Add(gconv.Int64(userInfo.DeptId)) //获取正常状态部门数据 deptList := ([]*entity.SysDept)(nil) - deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{Status: "1"}) + deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{Status: "1", ShowAll: true}) liberr.ErrIsNil(ctx, err) var dList g.List for _, d := range deptList { diff --git a/internal/app/system/service/sys_dept.go b/internal/app/system/service/sys_dept.go index 3e5038f..6d3b6aa 100644 --- a/internal/app/system/service/sys_dept.go +++ b/internal/app/system/service/sys_dept.go @@ -23,6 +23,7 @@ type ISysDept interface { GetListTree(pid uint64, list []*entity.SysDept) (deptTree []*model.SysDeptTreeRes) GetByDeptId(ctx context.Context, deptId uint64) (dept *entity.SysDept, err error) GetByDept(ctx context.Context, deptId interface{}) (dept *model.LinkDeptRes) + GetTopIds(list []*entity.SysDept) (ids []uint64) } var localSysDept ISysDept