diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java index c234f58b2e..fd9dada411 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java @@ -6,8 +6,6 @@ import io.dataease.base.mapper.ext.AuthMapper; import io.dataease.auth.service.AuthUserService; import io.dataease.commons.constants.AuthConstants; import io.dataease.plugins.common.dto.PluginSysMenu; -import io.dataease.plugins.common.service.PluginMenuService; -import io.dataease.plugins.config.SpringContextUtil; import io.dataease.plugins.util.PluginUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -15,10 +13,8 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.stereotype.Service; - import javax.annotation.Resource; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; @Service diff --git a/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java index 60f5e4114a..bb045872bd 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java @@ -31,6 +31,7 @@ public class DynamicMenuServiceImpl implements DynamicMenuService { //增加插件中的菜单 List pluginSysMenus = PluginUtils.pluginMenus(); if (CollectionUtils.isNotEmpty(pluginSysMenus) ) { + pluginSysMenus = pluginSysMenus.stream().filter(menu -> menu.getType() <= 1).collect(Collectors.toList()); List pluginDtos = pluginSysMenus.stream().map(this::convert).collect(Collectors.toList()); dynamicMenuDtos.addAll(pluginDtos); } diff --git a/backend/src/main/java/io/dataease/plugins/server/DeptServer.java b/backend/src/main/java/io/dataease/plugins/server/DeptServer.java new file mode 100644 index 0000000000..5c4c032e0b --- /dev/null +++ b/backend/src/main/java/io/dataease/plugins/server/DeptServer.java @@ -0,0 +1,80 @@ +package io.dataease.plugins.server; + + +import io.dataease.commons.utils.BeanUtils; +import io.dataease.controller.sys.response.DeptNodeResponse; +import io.dataease.plugins.common.entity.XpackGridRequest; +import io.dataease.plugins.config.SpringContextUtil; +import io.dataease.plugins.xpack.dept.dto.request.XpackCreateDept; +import io.dataease.plugins.xpack.dept.dto.request.XpackDeleteDept; +import io.dataease.plugins.xpack.dept.dto.response.XpackDeptTreeNode; +import io.dataease.plugins.xpack.dept.dto.response.XpackSysDept; +import io.dataease.plugins.xpack.dept.service.DeptXpackService; +import org.springframework.web.bind.annotation.*; +import java.util.List; +import java.util.stream.Collectors; + +@RequestMapping("/plugin/dept") +@RestController +public class DeptServer { + + @PostMapping("/childNodes/{pid}") + public List childNodes(@PathVariable("pid") Long pid){ + DeptXpackService deptService = SpringContextUtil.getBean(DeptXpackService.class); + List nodes = deptService.nodesByPid(pid); + List nodeResponses = nodes.stream().map(node -> { + DeptNodeResponse deptNodeResponse = BeanUtils.copyBean(new DeptNodeResponse(), node); + deptNodeResponse.setHasChildren(node.getSubCount() > 0); + deptNodeResponse.setLeaf(node.getSubCount() == 0); + deptNodeResponse.setTop(node.getPid() == 0L); + return deptNodeResponse; + }).collect(Collectors.toList()); + return nodeResponses; + } + + @PostMapping("/search") + public List search(@RequestBody XpackGridRequest request){ + DeptXpackService deptService = SpringContextUtil.getBean(DeptXpackService.class); + List ndoes = deptService.nodesTreeByCondition(request); + List nodeResponses = ndoes.stream().map(node -> { + DeptNodeResponse deptNodeResponse = BeanUtils.copyBean(new DeptNodeResponse(), node); + deptNodeResponse.setHasChildren(node.getSubCount() > 0); + deptNodeResponse.setLeaf(node.getSubCount() == 0); + deptNodeResponse.setTop(node.getPid() == 0L); + return deptNodeResponse; + }).collect(Collectors.toList()); + return nodeResponses; + } + + @PostMapping("/root") + public List rootData(){ + DeptXpackService deptService = SpringContextUtil.getBean(DeptXpackService.class); + List nodes = deptService.nodesByPid(null); + return nodes; + } + + @PostMapping("/create") + public void create(@RequestBody XpackCreateDept dept){ + DeptXpackService deptService = SpringContextUtil.getBean(DeptXpackService.class); + deptService.add(dept); + } + + @PostMapping("/delete") + public void delete(@RequestBody List requests){ + DeptXpackService deptService = SpringContextUtil.getBean(DeptXpackService.class); + deptService.batchDelete(requests); + } + + @PostMapping("/update") + public void update(@RequestBody XpackCreateDept dept){ + DeptXpackService deptService = SpringContextUtil.getBean(DeptXpackService.class); + deptService.update(dept); + } + + + @PostMapping("/nodesByDeptId/{deptId}") + public List nodesByDeptId(@PathVariable("deptId") Long deptId){ + DeptXpackService deptService = SpringContextUtil.getBean(DeptXpackService.class); + return deptService.searchTree(deptId); + } +} diff --git a/frontend/src/main.js b/frontend/src/main.js index dfeca15af3..5b5b1f4277 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -17,6 +17,8 @@ import filter from '@/filter/filter' import directives from './directive' import VueClipboard from 'vue-clipboard2' import widgets from '@/components/widget' +import Treeselect from '@riophae/vue-treeselect' +import '@riophae/vue-treeselect/dist/vue-treeselect.css' import './utils/dialog' import '@/components/canvas/custom-component' // 注册自定义组件 @@ -62,6 +64,7 @@ Vue.use(VueAxios, axios) Vue.use(filter) Vue.use(directives) Vue.use(message) +Vue.component('Treeselect', Treeselect) Vue.config.productionTip = false Vue.prototype.hasDataPermission = function(pTarget, pSource) { @@ -70,6 +73,15 @@ Vue.prototype.hasDataPermission = function(pTarget, pSource) { } return false } + +Vue.prototype.checkPermission = function(pers) { + const permissions = store.getters.permissions + const hasPermission = pers.every(needP => { + const result = permissions.includes(needP) + return result + }) + return hasPermission +} new Vue({ router, diff --git a/frontend/src/views/system/authority/authConfig.vue b/frontend/src/views/system/authority/authConfig.vue index 32ab6c3a50..8ce807b420 100644 --- a/frontend/src/views/system/authority/authConfig.vue +++ b/frontend/src/views/system/authority/authConfig.vue @@ -109,15 +109,14 @@ export default { direction: 'source', authType: 'panel', authTargets: 'dept,role,user' + }, + { + tabName: this.$t('auth.menuAuth'), + head: this.$t('auth.menuAuthHead'), + direction: 'source', + authType: 'menu', + authTargets: 'role' } - // , - // { - // tabName: this.$t('auth.menuAuth'), - // head: this.$t('auth.menuAuthHead'), - // direction: 'source', - // authType: 'menu', - // authTargets: 'role' - // } ], targetActiveName: null, sourceActiveName: null, diff --git a/frontend/src/views/system/dept/form.vue b/frontend/src/views/system/dept/form.vue index d98c7a9ca5..8b090ed13b 100644 --- a/frontend/src/views/system/dept/form.vue +++ b/frontend/src/views/system/dept/form.vue @@ -41,13 +41,10 @@