|
@@ -6,30 +6,45 @@
|
|
|
title="组织架构"
|
|
|
>
|
|
|
<template slot="extra">
|
|
|
- <a-button type="primary" @click="departmentVisible = true">新增</a-button>
|
|
|
+ <a-button type="primary" @click="openModal">新增</a-button>
|
|
|
</template>
|
|
|
<tree
|
|
|
checkable
|
|
|
:tree-data="treeData"
|
|
|
- :default-expanded-keys="['0-0-0', '0-0-1']"
|
|
|
- :default-selected-keys="['0-0-0', '0-0-1']"
|
|
|
- :default-checked-keys="['0-0-0', '0-0-1']"
|
|
|
+ defaultExpandAll
|
|
|
+ :replaceFields="replaceFields"
|
|
|
@select="onSelect"
|
|
|
@check="onCheck"
|
|
|
>
|
|
|
- <span :slot="item.key" v-for="item in aa" :key="item.key">
|
|
|
+ <span :slot="item.id" v-for="item in flatTreeData" :key="item.id">
|
|
|
<div>
|
|
|
<span>{{ item.title }}</span>
|
|
|
- <span style="margin-left: 10px" v-if="item.key === currentClickNode">
|
|
|
+ <span style="margin-left: 10px" v-if="item.id === currentClickNode">
|
|
|
<a @click.stop="handclick(item)">编辑</a>
|
|
|
<a-divider type="vertical" />
|
|
|
- <a>删除</a>
|
|
|
+ <a-popconfirm
|
|
|
+ title="你确定删除这个部门吗?"
|
|
|
+ ok-text="Yes"
|
|
|
+ cancel-text="No"
|
|
|
+ @confirm="deleteDepart(item)"
|
|
|
+
|
|
|
+ >
|
|
|
+ <a @click.stop="() => {}">删除</a>
|
|
|
+ </a-popconfirm>
|
|
|
</span>
|
|
|
</div>
|
|
|
</span>
|
|
|
</tree>
|
|
|
</a-card>
|
|
|
- <a-modal v-model="departmentVisible" :width="500" title="Basic Modal" @ok="handleOk">
|
|
|
+
|
|
|
+ <!-- 新增的树节点 -->
|
|
|
+ <a-modal
|
|
|
+ v-model="visible"
|
|
|
+ :width="500"
|
|
|
+ title="Basic Modal"
|
|
|
+ @ok="postDepart"
|
|
|
+ :confirm-loading="confirmLoading"
|
|
|
+ >
|
|
|
<div>
|
|
|
<a-row class="department">
|
|
|
<a-col :span="4">
|
|
@@ -39,32 +54,18 @@
|
|
|
:span="18"
|
|
|
>
|
|
|
<a-tree-select
|
|
|
- v-model="value"
|
|
|
+ v-model="parentLabel"
|
|
|
+ @select="selectTreeNode"
|
|
|
treeNodeFilterProp="title"
|
|
|
show-search
|
|
|
style="width: 100%"
|
|
|
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
|
|
- placeholder="Please select"
|
|
|
+ placeholder="请选择上级部门"
|
|
|
allow-clear
|
|
|
:tree-data="treeData"
|
|
|
tree-default-expand-all
|
|
|
:replaceFields="replaceFields"
|
|
|
/>
|
|
|
- <!-- <a-tree-select-node>
|
|
|
-
|
|
|
- </a-tree-select-node> -->
|
|
|
- <!-- <a-tree-select-node key="0-1" value="parent 1" title="parent 1">
|
|
|
- <a-tree-select-node key="0-1-1" value="parent 1-0" title="parent 1-0">
|
|
|
- <a-tree-select-node key="random" :selectable="false" value="leaf1" title="my leaf" />
|
|
|
- <a-tree-select-node key="random1" value="leaf2" title="your leaf" />
|
|
|
- </a-tree-select-node>
|
|
|
- <a-tree-select-node key="random2" value="parent 1-1" title="parent 1-1">
|
|
|
- <a-tree-select-node key="random3" value="sss">
|
|
|
- <b slot="title" style="color: #08c">sss</b>
|
|
|
- </a-tree-select-node>
|
|
|
- </a-tree-select-node>
|
|
|
- </a-tree-select-node> -->
|
|
|
-
|
|
|
</a-col>
|
|
|
</a-row>
|
|
|
|
|
@@ -76,12 +77,18 @@
|
|
|
:span="18"
|
|
|
>
|
|
|
<a-input
|
|
|
- placeholder="Basic usage" />
|
|
|
+ v-model.trim="departLabel"
|
|
|
+ placeholder="请输入部门名称" />
|
|
|
</a-col>
|
|
|
</a-row>
|
|
|
</div>
|
|
|
</a-modal>
|
|
|
- <a-modal v-model="editTreeNodeVisabled" title="Basic Modal">
|
|
|
+ <a-modal
|
|
|
+ v-model="editTreeNodeVisabled"
|
|
|
+ title="编辑节点"
|
|
|
+ @ok="putDepart"
|
|
|
+ :confirm-loading="confirmLoading"
|
|
|
+ >
|
|
|
<a-input v-model="editTreeNodeValue" ></a-input>
|
|
|
</a-modal>
|
|
|
</div>
|
|
@@ -90,31 +97,7 @@
|
|
|
|
|
|
<script>
|
|
|
import { Tree } from 'ant-design-vue'
|
|
|
-const treeData = [
|
|
|
- {
|
|
|
- title: '全校区1',
|
|
|
- key: '0-0',
|
|
|
- slots: { title: '0-0' },
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '教练部',
|
|
|
- key: '0-0-0',
|
|
|
- lots: { title: '0-0-0' },
|
|
|
- disabled: true,
|
|
|
- children: [
|
|
|
- { title: '销售一部', key: '0-0-0-0', slots: { title: '0-0-0-0' }, disableCheckbox: true },
|
|
|
- { title: '销售二部', key: '0-0-0-1', slots: { title: '0-0-0-1' } }
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- title: '市场部',
|
|
|
- key: '0-0-1',
|
|
|
- slots: { title: '0-0-1' },
|
|
|
- children: [{ key: '0-0-1-0', title: '市场大王', slots: { title: '0-0-1-0' } }]
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
-]
|
|
|
+import { deleteDepart, getDepart, postDepart, putDepart } from '@/api/role'
|
|
|
export default {
|
|
|
name: 'Organiza',
|
|
|
components: {
|
|
@@ -122,53 +105,116 @@ export default {
|
|
|
},
|
|
|
computed: {
|
|
|
replaceFields () {
|
|
|
- return { children: 'children', title: 'title', key: 'key', value: 'title' }
|
|
|
+ return { children: 'children', title: 'label', key: 'id', value: 'label' }
|
|
|
}
|
|
|
},
|
|
|
- created () {
|
|
|
- this.transferTreeData()
|
|
|
+ async created () {
|
|
|
+ await this.getDepart()
|
|
|
},
|
|
|
watch: {
|
|
|
- value (value) {
|
|
|
- console.log(value)
|
|
|
+ currentClickNode () {
|
|
|
+ this.$emit('currentClickNode', this.currentClickNode)
|
|
|
}
|
|
|
},
|
|
|
data () {
|
|
|
return {
|
|
|
editTreeNodeValue: '',
|
|
|
+ editTreeNodeId: '',
|
|
|
editTreeNodeVisabled: false,
|
|
|
- aa: [ '0-0', '0-0-0', '0-0-0-0', '0-0-0-0', '0-0-1', '0-0-1-0' ],
|
|
|
+ flatTreeData: [],
|
|
|
// tree选择
|
|
|
treeExpandedKeys: [],
|
|
|
- value: undefined,
|
|
|
+ parentId: '',
|
|
|
+ parentLabel: '',
|
|
|
// ---------------------------
|
|
|
- departmentVisible: false,
|
|
|
- treeData,
|
|
|
+ visible: false,
|
|
|
+ confirmLoading: false,
|
|
|
+ departLabel: '', // add or edit时 部门名称
|
|
|
+ treeData: [],
|
|
|
currentClickNode: ''
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ // 编辑节点
|
|
|
+ async putDepart () {
|
|
|
+ const $par = {
|
|
|
+ id: this.editTreeNodeId,
|
|
|
+ label: this.editTreeNodeValue
|
|
|
+ }
|
|
|
+ this.confirmLoading = true
|
|
|
+ const { code, data } = await putDepart($par)
|
|
|
+ this.confirmLoading = false
|
|
|
+ if (code === 0) {
|
|
|
+ console.log(data)
|
|
|
+ data ? this.$message.success('编辑成功') : this.$message.error('编辑失败')
|
|
|
+ }
|
|
|
+ this.editTreeNodeVisabled = false
|
|
|
+ this.getDepart()
|
|
|
+ },
|
|
|
+ // 选择树节点
|
|
|
+ selectTreeNode (value, node, extra) {
|
|
|
+ console.log(value, node, extra)
|
|
|
+ const { key } = extra.selectedNodes[0]
|
|
|
+ this.parentId = key
|
|
|
+ },
|
|
|
+ // 删除部门
|
|
|
+ async deleteDepart (item) {
|
|
|
+ const { code, data } = await deleteDepart(item.id)
|
|
|
+ if (code === 0) {
|
|
|
+ console.log(data)
|
|
|
+ data ? this.$message.success('删除成功') : this.$message.error('删除失败')
|
|
|
+ }
|
|
|
+ this.getDepart()
|
|
|
+ },
|
|
|
+ // 新增部门
|
|
|
+ async postDepart () {
|
|
|
+ const $par = {
|
|
|
+ parentId: this.parentId,
|
|
|
+ label: this.departLabel,
|
|
|
+ children: [],
|
|
|
+ id: ''
|
|
|
+ }
|
|
|
+ this.confirmLoading = true
|
|
|
+ const { code, data } = await postDepart($par)
|
|
|
+ this.confirmLoading = false
|
|
|
+ if (code === 0) {
|
|
|
+ console.log(data)
|
|
|
+ }
|
|
|
+ this.getDepart()
|
|
|
+ this.visible = false
|
|
|
+ },
|
|
|
+ // 查询部门
|
|
|
+ async getDepart () {
|
|
|
+ const { code, data } = await getDepart()
|
|
|
+ if (code === 0) {
|
|
|
+ console.log(data)
|
|
|
+ this.treeData = data
|
|
|
+ this.transferTreeData()
|
|
|
+ }
|
|
|
+ },
|
|
|
|
|
|
- // 将树节点拍平, 便于使用slot自定义渲染树
|
|
|
+ // 将树节点拍平, 便于使用slot自定义渲染树 , 同时把treeData全部加上slots
|
|
|
transferTreeData () {
|
|
|
- const a = []
|
|
|
+ const arr = []
|
|
|
const recursionTreeData = (treeData) => {
|
|
|
console.log(treeData, 1)
|
|
|
- return treeData.forEach(item => {
|
|
|
- if (item.hasOwnProperty('children')) {
|
|
|
+ treeData.forEach(item => {
|
|
|
+ console.log(item, 'item')
|
|
|
+ if (Array.isArray(item.children) && item.children.length > 0) {
|
|
|
recursionTreeData(item.children)
|
|
|
}
|
|
|
- const { title, key, slots } = item
|
|
|
- a.push({ title, key, slots })
|
|
|
+ item.slots = { title: item.id }
|
|
|
+ const { label, id } = item
|
|
|
+ arr.push({ title: label, id })
|
|
|
})
|
|
|
}
|
|
|
- recursionTreeData(this.treeData)
|
|
|
- this.aa = a
|
|
|
+ recursionTreeData(this.treeData)
|
|
|
+ this.flatTreeData = arr
|
|
|
},
|
|
|
handleOk () {},
|
|
|
handclick (item) {
|
|
|
this.editTreeNodeValue = item.title
|
|
|
-
|
|
|
+ this.editTreeNodeId = item.id
|
|
|
this.editTreeNodeVisabled = true
|
|
|
},
|
|
|
// 当前选中的树节点的key
|
|
@@ -178,6 +224,10 @@ export default {
|
|
|
},
|
|
|
onCheck (checkedKeys, info) {
|
|
|
console.log('onCheck', checkedKeys, info)
|
|
|
+ },
|
|
|
+ openModal () {
|
|
|
+ this.visible = true
|
|
|
+ this.departLabel = ''
|
|
|
}
|
|
|
}
|
|
|
}
|