|
@@ -52,6 +52,14 @@
|
|
|
@click="addNode"
|
|
|
/>
|
|
|
</el-tooltip>
|
|
|
+ <el-tooltip content="删除">
|
|
|
+ <el-button
|
|
|
+ type="default"
|
|
|
+ circle
|
|
|
+ :icon="DeleteFilled"
|
|
|
+ @click="removeNode"
|
|
|
+ />
|
|
|
+ </el-tooltip>
|
|
|
<el-tooltip content="详情">
|
|
|
<el-button
|
|
|
type="default"
|
|
@@ -102,11 +110,11 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { ref, defineExpose, reactive, defineProps, watch } from 'vue';
|
|
|
+import { ref, defineExpose, reactive, defineProps, watch, onMounted, onBeforeUnmount } from 'vue';
|
|
|
import {
|
|
|
Aim,
|
|
|
CirclePlusFilled,
|
|
|
- // Close,
|
|
|
+ DeleteFilled,
|
|
|
InfoFilled,
|
|
|
Search,
|
|
|
ZoomIn,
|
|
@@ -114,9 +122,8 @@ import {
|
|
|
} from '@element-plus/icons-vue';
|
|
|
import type { MindMapInstance } from '@/components/mindmap/Mindmap.vue';
|
|
|
import type { FormInstance } from 'element-plus';
|
|
|
-import { ElMessage } from 'element-plus';
|
|
|
+import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
import { bfsWalk, walk } from 'simple-mind-map/src/utils';
|
|
|
-// import { useEditBomStore } from "@/store/editbom";
|
|
|
|
|
|
import Mindmap from '@/components/mindmap/Mindmap.vue';
|
|
|
import ConfigDrawer from './ConfigDrawer.vue';
|
|
@@ -134,7 +141,6 @@ const visible = ref(!!props.defaultOpen);
|
|
|
const mindmapRef = ref<MindMapInstance>();
|
|
|
const configDrawerRef = ref();
|
|
|
const formRef = ref<FormInstance>();
|
|
|
-const delIds = ref<string[]>([]); // 记录删除的节点id
|
|
|
// const editBomStore = useEditBomStore();
|
|
|
const data = ref(
|
|
|
props?.defaultData || {
|
|
@@ -235,6 +241,42 @@ const addNode = () => {
|
|
|
mindmap?.execCommand('INSERT_CHILD_NODE');
|
|
|
};
|
|
|
|
|
|
+// 删除节点
|
|
|
+const removeNode = () => {
|
|
|
+ const mindmap = mindmapRef.value?.getInstance();
|
|
|
+ const activeList = mindmapRef.value?.getActiveNodeList()?.filter(node => !node?.isRoot);
|
|
|
+ if (!activeList?.length) {
|
|
|
+ ElMessage.warning('请选择删除节点');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 原有数据将is_delete设置为true 新增数据直接删除
|
|
|
+ const updateNodes: any[] = [];
|
|
|
+ const deleteNodes: any[] = [];
|
|
|
+ activeList.forEach((node) => {
|
|
|
+ bfsWalk(node, (child: any) => {
|
|
|
+ if (child.nodeData?.id) {
|
|
|
+ updateNodes.push(child);
|
|
|
+ } else {
|
|
|
+ deleteNodes.push(child);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ ElMessageBox.alert('确认删除节点?(已提交数据进入删除流程)', '提示', {
|
|
|
+ confirmButtonText: '确认',
|
|
|
+ callback: (action: string) => {
|
|
|
+ // 执行删除
|
|
|
+ if (action === 'confirm') {
|
|
|
+ deleteNodes.length && mindmap?.execCommand('REMOVE_NODE', deleteNodes);
|
|
|
+ updateNodes.forEach((node) => {
|
|
|
+ handleConfigOk({ ...node?.nodeData.data, is_delete: true });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
// 搜索
|
|
|
const handleSearch = () => {
|
|
|
const result: any[] = [];
|
|
@@ -272,6 +314,7 @@ const handleNodeDbClick = (node: any) => {
|
|
|
|
|
|
// 节点配置结束
|
|
|
const handleConfigOk = (updateNodeData: any) => {
|
|
|
+ console.log('handleConfigOk', updateNodeData);
|
|
|
const mindmap = mindmapRef.value?.getInstance();
|
|
|
const allData = mindmap?.getData(false);
|
|
|
bfsWalk(allData, (node: any) => {
|
|
@@ -310,10 +353,7 @@ const handleSave = () => {
|
|
|
window.parent?.BpmTools?.program(
|
|
|
{
|
|
|
interfaceCode: 'Common.doSaveBOMAiImageData',
|
|
|
- model: {
|
|
|
- data,
|
|
|
- del_ids: delIds.value, // 传递删除的节点id
|
|
|
- },
|
|
|
+ model: data,
|
|
|
},
|
|
|
(res: any) => {
|
|
|
console.log('保存结果:', res);
|
|
@@ -343,14 +383,6 @@ const handleDataChange = (newData: any) => {
|
|
|
handleConfigOk(newNodeData.data);
|
|
|
configDrawerRef.value.open(newNodeData, 'add');
|
|
|
}
|
|
|
- // 处理删除数据
|
|
|
- const delItems = newData?.filter((item: any) => item.action === 'delete');
|
|
|
- delItems?.forEach((item: any) => {
|
|
|
- const id = item?.data?.data?.id;
|
|
|
- if (id) {
|
|
|
- delIds.value.push(id);
|
|
|
- }
|
|
|
- });
|
|
|
};
|
|
|
|
|
|
watch(
|
|
@@ -362,7 +394,6 @@ watch(
|
|
|
if (formData.level && layerIndex >= formData.level) {
|
|
|
node.data.expand = false;
|
|
|
}
|
|
|
- delIds.value = [];
|
|
|
});
|
|
|
data.value = val;
|
|
|
}
|
|
@@ -383,6 +414,22 @@ defineExpose({
|
|
|
open,
|
|
|
close,
|
|
|
});
|
|
|
+
|
|
|
+const handlePressDel = (e: KeyboardEvent) => {
|
|
|
+ // 删除节点
|
|
|
+ if ((e.key === 'Delete' || e.key === 'Backspace') && visible.value) {
|
|
|
+ e.preventDefault();
|
|
|
+ removeNode();
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ addEventListener('keydown', handlePressDel);
|
|
|
+});
|
|
|
+
|
|
|
+onBeforeUnmount(() => {
|
|
|
+ removeEventListener('keydown', handlePressDel);
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|