|
|
@@ -0,0 +1,179 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <a-tree
|
|
|
+ v-if="treeData.length"
|
|
|
+ :tree-data="treeData"
|
|
|
+ autoExpandParent
|
|
|
+ defaultExpandAll
|
|
|
+ showLine
|
|
|
+ blockNode
|
|
|
+ virtual
|
|
|
+ :height="getHeight"
|
|
|
+ style="height:calc(100vh - 210px)"
|
|
|
+ @select="onSelect">
|
|
|
+ <template #title="node">
|
|
|
+ <span v-if="node.key === '0-0-1-0'" style="color: #1890ff">{{ node.title }}</span>
|
|
|
+ <template v-else>
|
|
|
+ <a-badge :color="node.isused == 1?'green':'red'" :text="node.title" />
|
|
|
+ <a-dropdown :trigger="['click']" @click.stop="handleButtonClick(node)">
|
|
|
+ <EditOutlined/>
|
|
|
+ <template #overlay>
|
|
|
+ <a-menu @click="handleMenuClick">
|
|
|
+ <a-menu-item key="add">
|
|
|
+ <small @click="showDrawer">
|
|
|
+ <plus-outlined />
|
|
|
+ 新增下级
|
|
|
+ </small>
|
|
|
+ </a-menu-item>
|
|
|
+ <a-menu-item key="edit">
|
|
|
+ <small>
|
|
|
+ <EditOutlined/>
|
|
|
+ 编 辑
|
|
|
+ </small>
|
|
|
+ </a-menu-item>
|
|
|
+ <a-menu-item key="delete">
|
|
|
+ <small @click="deleteArea(node)">
|
|
|
+ <DeleteOutlined />
|
|
|
+ 删 除
|
|
|
+ </small>
|
|
|
+ </a-menu-item>
|
|
|
+ </a-menu>
|
|
|
+ </template>
|
|
|
+ </a-dropdown>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </a-tree>
|
|
|
+ <add-main-area ref="add" :parentid="parentid" :depfullid="depfullid" @onSuccess="getMainClass"></add-main-area>
|
|
|
+ <edit-main-area ref="edit" :data="node" @onSuccess="getMainClass" @onClose="onClose"></edit-main-area>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+ import Api from '@/api/api'
|
|
|
+ import utils from '@/utils/utils'
|
|
|
+ import addMainArea from './addMainDep.vue'
|
|
|
+ import editMainArea from './editMainDep.vue'
|
|
|
+ import { EditOutlined ,PlusOutlined,DeleteOutlined} from '@ant-design/icons-vue';
|
|
|
+ import { ref,defineEmits } from 'vue'
|
|
|
+ import { onMounted,computed } from "vue";
|
|
|
+ import { Modal } from 'ant-design-vue';
|
|
|
+ import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
|
|
+ import { createVNode, defineComponent } from 'vue';
|
|
|
+ import {re} from "mathjs";
|
|
|
+ const emit = defineEmits(['onTreeSelect'])
|
|
|
+ const treeData = ref([])
|
|
|
+ const getHeight = computed(()=>{
|
|
|
+ return window.innerHeight - 200
|
|
|
+ })
|
|
|
+ const getMainClass = async ()=>{
|
|
|
+ const res = await Api.requested({
|
|
|
+ id:20230608101802,
|
|
|
+ content:{
|
|
|
+ nocache:true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ treeData.value = createMenu(res.data)
|
|
|
+ emit('onTreeSelect',treeData.value[0].departmentid)
|
|
|
+ }
|
|
|
+ const createMenu = (array) => {
|
|
|
+ let arr = []
|
|
|
+ function convertToElementTree(node) {
|
|
|
+ // 新节点
|
|
|
+ var elNode = {
|
|
|
+ title: node["depname"],
|
|
|
+ parentid:node['parentid'],
|
|
|
+ depfullid:node['depfullid'],
|
|
|
+ departmentid:node["departmentid"],
|
|
|
+ key:node["departmentid"],
|
|
|
+ remarks:node["remarks"],
|
|
|
+ isused:node["isused"],
|
|
|
+ changedate:node['changedate'],
|
|
|
+ changeby:node['changeby'],
|
|
|
+ createdate:node['createdate'],
|
|
|
+ createby:node['createby'],
|
|
|
+ depno:node['depno'],
|
|
|
+ sequence:node['sequence'],
|
|
|
+ children: []
|
|
|
+ }
|
|
|
+
|
|
|
+ if (node.subdep && node.subdep.length > 0) {
|
|
|
+ // 如果存在子节点
|
|
|
+ for (var index = 0; index < node.subdep.length; index++) {
|
|
|
+ // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
|
|
|
+ elNode.children.push(convertToElementTree(node.subdep[index]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return elNode;
|
|
|
+ }
|
|
|
+ array.forEach((element) => {
|
|
|
+ arr.push(convertToElementTree(element))
|
|
|
+ });
|
|
|
+ return arr
|
|
|
+ }
|
|
|
+ let parentid = ref(0)
|
|
|
+ let departmentid = ref(0)
|
|
|
+ const node = ref({})
|
|
|
+ let depfullid = ref(0)
|
|
|
+ const handleButtonClick = e => {
|
|
|
+ console.log(e,'333')
|
|
|
+ parentid.value = e.key
|
|
|
+ depfullid.value = e.depfullid
|
|
|
+ node.value = e
|
|
|
+ };
|
|
|
+ const add = ref()
|
|
|
+ const edit = ref()
|
|
|
+ const handleMenuClick = e => {
|
|
|
+ switch (e.key) {
|
|
|
+ case 'add':
|
|
|
+ /*add.value.visible = true
|
|
|
+ add.value.form.value.parentid = '123'*/
|
|
|
+ add.value.showDrawer()
|
|
|
+ break;
|
|
|
+ case 'edit':
|
|
|
+ edit.value.showDrawer()
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ const onSelect = (selectedKeys)=>{
|
|
|
+ console.log(selectedKeys)
|
|
|
+ if (selectedKeys[0])
|
|
|
+ return emit('onTreeSelect',selectedKeys[0])
|
|
|
+ }
|
|
|
+ const deleteArea = async (node)=>{
|
|
|
+ console.log(node)
|
|
|
+ Modal.confirm({
|
|
|
+ title: '删除部门',
|
|
|
+ icon: createVNode(ExclamationCircleOutlined),
|
|
|
+ content: '确定删除此部门吗?',
|
|
|
+ okText: '是',
|
|
|
+ okType: 'danger',
|
|
|
+ cancelText: '否',
|
|
|
+ onOk() {
|
|
|
+ onDel(node)
|
|
|
+ },
|
|
|
+ onCancel() {
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
+ const onDel = async(node)=>{
|
|
|
+ const res = await Api.requested({
|
|
|
+ "id":20230608102102,
|
|
|
+ "content":{
|
|
|
+ "departmentid":node.key
|
|
|
+ }
|
|
|
+ })
|
|
|
+ utils.message(res,'删除成功',()=>{
|
|
|
+ getMainClass()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ const onClose = ()=>{
|
|
|
+ parentid.value= 0
|
|
|
+ }
|
|
|
+ onMounted (()=>{
|
|
|
+ getMainClass()
|
|
|
+ })
|
|
|
+</script>
|
|
|
+<style>
|
|
|
+</style>
|