|
@@ -3,21 +3,21 @@
|
|
|
<template #title>
|
|
<template #title>
|
|
|
<span>机构</span>
|
|
<span>机构</span>
|
|
|
<a-tooltip content="点击后可通过拖拽更改机构结构,再次点击来关闭" background-color="#165DFF">
|
|
<a-tooltip content="点击后可通过拖拽更改机构结构,再次点击来关闭" background-color="#165DFF">
|
|
|
- <a-button type="outline" style="float: right;" @click="toggleDraggable" :style="{ color: buttonColor }"
|
|
|
|
|
|
|
+ <a-button :type="is_lock ? 'secondary' : 'outline'" style="float: right;" @click="toggleDraggable"
|
|
|
v-has-permi="'/base/syorganization!update'">
|
|
v-has-permi="'/base/syorganization!update'">
|
|
|
- <component :is="lock_icon" />
|
|
|
|
|
|
|
+ <component :is="is_lock ? 'IconUnlock' : 'IconLock'" />
|
|
|
</a-button>
|
|
</a-button>
|
|
|
</a-tooltip>
|
|
</a-tooltip>
|
|
|
</template>
|
|
</template>
|
|
|
- <a-tree class="tree-demo" :draggable="draggable" blockNode :data="treeData" :show-line="true" :fieldNames="{
|
|
|
|
|
|
|
+ <a-tree :draggable="is_lock" blockNode :data="treeData" :show-line="true" :fieldNames="{
|
|
|
key: 'deptId',
|
|
key: 'deptId',
|
|
|
title: 'deptName',
|
|
title: 'deptName',
|
|
|
children: 'children',
|
|
children: 'children',
|
|
|
- }" @drop="onDrop" @select="showDetail">
|
|
|
|
|
|
|
+ }" @drop="onDrop" @select="nodeClick">
|
|
|
<template #extra="nodeData">
|
|
<template #extra="nodeData">
|
|
|
- <IconPlus class="icon-plus" @click="() => onIconClick(nodeData)" />
|
|
|
|
|
|
|
+ <IconPlus class="icon-plus" @click="() => onAddBtnClick(nodeData)" />
|
|
|
<a-popconfirm v-if="nodeData.deptName != 'root'" content="请确认是否删除?" type="success"
|
|
<a-popconfirm v-if="nodeData.deptName != 'root'" content="请确认是否删除?" type="success"
|
|
|
- @ok="() => onIconClickDelete(nodeData)">
|
|
|
|
|
|
|
+ @ok="() => onDeleteBtnClickDelete(nodeData)">
|
|
|
<IconDelete class="icon-delete" />
|
|
<IconDelete class="icon-delete" />
|
|
|
</a-popconfirm>
|
|
</a-popconfirm>
|
|
|
</template>
|
|
</template>
|
|
@@ -36,24 +36,59 @@ const props = defineProps({
|
|
|
|
|
|
|
|
const { treeData } = toRefs(props);
|
|
const { treeData } = toRefs(props);
|
|
|
|
|
|
|
|
|
|
+const emit = defineEmits(['nodeClick', 'onAddBtnClick', 'onDeleteBtnClickDelete']);
|
|
|
|
|
|
|
|
-let draggable = ref(false);
|
|
|
|
|
-let lock_icon = ref("IconLock");
|
|
|
|
|
|
|
+let is_lock = ref(false);
|
|
|
|
|
|
|
|
const toggleDraggable = () => {
|
|
const toggleDraggable = () => {
|
|
|
- draggable.value = !draggable.value;
|
|
|
|
|
- buttonColor.value = draggable.value ? '#575757' : '';
|
|
|
|
|
- lock_icon.value = draggable.value ? 'IconUnlock' : 'IconLock';
|
|
|
|
|
|
|
+ is_lock.value = !is_lock.value;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const showDetail = (id) => {
|
|
|
|
|
- OrganizationById(id).then((res) => {
|
|
|
|
|
- deptform.value = { ...res.data };
|
|
|
|
|
- });
|
|
|
|
|
|
|
+const nodeClick = (id) => {
|
|
|
|
|
+ emit('nodeClick', id);
|
|
|
|
|
+
|
|
|
|
|
+};
|
|
|
|
|
+const onAddBtnClick = (nodeData) => {
|
|
|
|
|
+ emit('addBtnClick', nodeData);
|
|
|
|
|
+}
|
|
|
|
|
+const onDeleteBtnClickDelete = (nodeData) => {
|
|
|
|
|
+ emit('deleteBtnClickDelete', nodeData);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const onIconClickDelete = (nodeData) => {
|
|
|
|
|
|
|
+const onDrop = ({ dragNode, dropNode, dropPosition }) => {
|
|
|
|
|
+ const data = treeData.value;
|
|
|
|
|
+ OrganizationUpdate({
|
|
|
|
|
+ orderNum: '0',
|
|
|
|
|
+ parentId: dropNode.deptId,
|
|
|
|
|
+ deptId: dragNode.deptId,
|
|
|
|
|
+ });
|
|
|
|
|
+ const loop = (data, key, callback) => {
|
|
|
|
|
+ data.some((item, index, arr) => {
|
|
|
|
|
+ if (item.deptId === key) {
|
|
|
|
|
+ callback(item, index, arr);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (item.children) {
|
|
|
|
|
+ return loop(item.children, key, callback);
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ loop(data, dragNode.deptId, (_, index, arr) => {
|
|
|
|
|
+ arr.splice(index, 1);
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
|
|
+ if (dropPosition === 0) {
|
|
|
|
|
+ loop(data, dropNode.deptId, (item) => {
|
|
|
|
|
+ item.children = item.children || [];
|
|
|
|
|
+ item.children.push(dragNode);
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ loop(data, dropNode.deptId, (_, index, arr) => {
|
|
|
|
|
+ arr.splice(dropPosition < 0 ? index : index + 1, 0, dragNode);
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|