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/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 @@