From 1ffbe36c3ca9a40425dd87e0a5ffbfd82a089ecc Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 31 May 2021 14:07:12 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=95=B4=E5=90=88xpack'=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E7=AE=A1=E7=90=86'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/plugins/server/DeptServer.java | 80 +++++++++++++++++++ frontend/src/main.js | 12 +++ frontend/src/views/system/dept/form.vue | 9 +-- frontend/src/views/system/dept/index.vue | 9 +-- frontend/src/views/system/user/form.vue | 16 ++-- frontend/src/views/system/user/index.vue | 8 +- 6 files changed, 112 insertions(+), 22 deletions(-) create mode 100644 backend/src/main/java/io/dataease/plugins/server/DeptServer.java 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 @@