|
@@ -42,7 +42,7 @@
|
|
|
</el-form>
|
|
|
<div class="flex gap-4px">
|
|
|
<el-button type="primary" link @click="handleSave" class="mr-8px"
|
|
|
- ><img class="w-1em mr-4px" :src="saveImg" />保存</el-button
|
|
|
+ ><img class="w-1em mr-4px" :src="saveImg" alt="" />保存</el-button
|
|
|
>
|
|
|
<el-tooltip content="添加">
|
|
|
<el-button
|
|
@@ -70,7 +70,7 @@
|
|
|
</el-tooltip>
|
|
|
<el-tooltip content="自适应">
|
|
|
<el-button type="default" circle @click="autoFit">
|
|
|
- <img :src="AutoIcon" style="width: 1em" />
|
|
|
+ <img :src="AutoIcon" style="width: 1em" alt="" />
|
|
|
</el-button>
|
|
|
</el-tooltip>
|
|
|
<el-tooltip content="定位到根节点">
|
|
@@ -110,7 +110,16 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { ref, defineExpose, reactive, defineProps, watch, onMounted, onBeforeUnmount, defineEmits } from 'vue';
|
|
|
+import {
|
|
|
+ ref,
|
|
|
+ defineExpose,
|
|
|
+ reactive,
|
|
|
+ defineProps,
|
|
|
+ watch,
|
|
|
+ onMounted,
|
|
|
+ onBeforeUnmount,
|
|
|
+ defineEmits,
|
|
|
+} from 'vue';
|
|
|
import {
|
|
|
Aim,
|
|
|
CirclePlusFilled,
|
|
@@ -130,6 +139,7 @@ import ConfigDrawer from './ConfigDrawer.vue';
|
|
|
import AutoIcon from '@/assets/auto.svg';
|
|
|
import saveImg from '@/assets/save.svg';
|
|
|
import { BOMItem } from './data';
|
|
|
+import { cloneDeep } from 'lodash-es';
|
|
|
|
|
|
const props = defineProps<{
|
|
|
defaultOpen?: boolean;
|
|
@@ -245,7 +255,9 @@ const addNode = () => {
|
|
|
// 删除节点
|
|
|
const removeNode = () => {
|
|
|
const mindmap = mindmapRef.value?.getInstance();
|
|
|
- const activeList = mindmapRef.value?.getActiveNodeList()?.filter(node => !node?.isRoot);
|
|
|
+ const activeList = mindmapRef.value
|
|
|
+ ?.getActiveNodeList()
|
|
|
+ ?.filter((node) => !node?.isRoot);
|
|
|
if (!activeList?.length) {
|
|
|
ElMessage.warning('请选择删除节点');
|
|
|
return;
|
|
@@ -271,7 +283,11 @@ const removeNode = () => {
|
|
|
if (action === 'confirm') {
|
|
|
deleteNodes.length && mindmap?.execCommand('REMOVE_NODE', deleteNodes);
|
|
|
updateNodes.forEach((node) => {
|
|
|
- handleConfigOk({ ...node?.nodeData.data, is_deleted: true });
|
|
|
+ handleConfigOk({
|
|
|
+ ...node?.nodeData.data,
|
|
|
+ is_deleted: true,
|
|
|
+ bom_det: node?.nodeData.data?.bom_det || {},
|
|
|
+ });
|
|
|
});
|
|
|
}
|
|
|
},
|
|
@@ -330,26 +346,30 @@ const handleSave = () => {
|
|
|
const mindmap = mindmapRef.value?.getInstance();
|
|
|
const data = mindmap?.getData(false);
|
|
|
let valid = true;
|
|
|
+ let hasAddData = false;
|
|
|
|
|
|
bfsWalk(data, (node: any) => {
|
|
|
- delete node.smmVersion;
|
|
|
- delete node.data.uid;
|
|
|
- delete node.data.expand;
|
|
|
- delete node.data.isActive;
|
|
|
- delete node.data.richText;
|
|
|
- delete node.data.text;
|
|
|
- delete node.data.id;
|
|
|
+ delete node?.smmVersion;
|
|
|
+ delete node.data?.uid;
|
|
|
+ delete node.data?.expand;
|
|
|
+ delete node.data?.isActive;
|
|
|
+ delete node.data?.richText;
|
|
|
+ delete node.data?.text;
|
|
|
+ delete node.data?.id;
|
|
|
// TODO: 业务校验
|
|
|
if (!node.data.name?.trim()) {
|
|
|
valid = false;
|
|
|
}
|
|
|
+ if(node.data.is_add) {
|
|
|
+ hasAddData = true;
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
if (!valid) {
|
|
|
ElMessage.error('请检查数据是否填写完整!');
|
|
|
return;
|
|
|
}
|
|
|
- console.log('handleSave', data);
|
|
|
+
|
|
|
try {
|
|
|
window.parent?.BpmTools?.program(
|
|
|
{
|
|
@@ -357,8 +377,7 @@ const handleSave = () => {
|
|
|
model: data,
|
|
|
},
|
|
|
(res: any) => {
|
|
|
- console.log('保存结果:', res);
|
|
|
- ElMessage.success('保存成功!');
|
|
|
+ ElMessage.success(`保存成功!${hasAddData ? '存在新增数据,待审批后即可展示!' : ''}`);
|
|
|
emit('refresh');
|
|
|
}
|
|
|
);
|
|
@@ -378,8 +397,17 @@ const handleDataChange = (newData: any) => {
|
|
|
const newNodeData = {
|
|
|
...(addItem?.data || {}),
|
|
|
data: {
|
|
|
- ...newItemData,
|
|
|
...addItem?.data?.data,
|
|
|
+ is_deleted: false,
|
|
|
+ is_disable: false,
|
|
|
+ is_change: false,
|
|
|
+ is_add: true,
|
|
|
+ qty: 89,
|
|
|
+ name: '',
|
|
|
+ type: '',
|
|
|
+ bom_code: '',
|
|
|
+ change_content: '',
|
|
|
+ bom_det: newItemData,
|
|
|
},
|
|
|
};
|
|
|
handleConfigOk(newNodeData.data);
|
|
@@ -419,17 +447,37 @@ defineExpose({
|
|
|
|
|
|
const handlePressDel = (e: KeyboardEvent) => {
|
|
|
// 删除节点
|
|
|
- if ((e.key === 'Delete') && visible.value) {
|
|
|
+ if (e.key === 'Delete' && visible.value) {
|
|
|
e.preventDefault();
|
|
|
removeNode();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-onMounted(() => {
|
|
|
+watch(
|
|
|
+ () => data.value,
|
|
|
+ () => {
|
|
|
+ const result = cloneDeep(data.value);
|
|
|
+ if (result?.id && result.id !== 'root') {
|
|
|
+ bfsWalk(result, (node: any) => {
|
|
|
+ delete node.smmVersion;
|
|
|
+ delete node.data?.uid;
|
|
|
+ delete node.data?.expand;
|
|
|
+ delete node.data?.isActive;
|
|
|
+ delete node.data?.richText;
|
|
|
+ delete node.data?.text;
|
|
|
+ delete node.data?.id;
|
|
|
+ });
|
|
|
+ // 缓存编辑结果
|
|
|
+ sessionStorage.setItem(result.id, JSON.stringify(result));
|
|
|
+ }
|
|
|
+ }
|
|
|
+);
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
addEventListener('keydown', handlePressDel);
|
|
|
});
|
|
|
|
|
|
-onBeforeUnmount(() => {
|
|
|
+onBeforeUnmount(() => {
|
|
|
removeEventListener('keydown', handlePressDel);
|
|
|
});
|
|
|
</script>
|