hookehuyr

fix 处理新增和删除节点后的检查有效性问题

Showing 1 changed file with 68 additions and 13 deletions
...@@ -472,6 +472,7 @@ interface RuleForm { ...@@ -472,6 +472,7 @@ interface RuleForm {
472 } 472 }
473 473
474 interface myObj { 474 interface myObj {
475 + text: string
475 source: string 476 source: string
476 id: string 477 id: string
477 label: string 478 label: string
...@@ -1509,7 +1510,6 @@ export default { ...@@ -1509,7 +1510,6 @@ export default {
1509 let { nodes } = editor.editorState.graph.save(); 1510 let { nodes } = editor.editorState.graph.save();
1510 1511
1511 let models = []; // 未通过的节点ID集合 1512 let models = []; // 未通过的节点ID集合
1512 - console.warn('state.node_tree', state.node_tree);
1513 1513
1514 for (const key in state.node_tree) { 1514 for (const key in state.node_tree) {
1515 const element = state.node_tree[key]; 1515 const element = state.node_tree[key];
...@@ -1533,7 +1533,6 @@ export default { ...@@ -1533,7 +1533,6 @@ export default {
1533 models.push(element.model); 1533 models.push(element.model);
1534 } 1534 }
1535 } 1535 }
1536 - console.warn(models);
1537 1536
1538 if (models.length) { 1537 if (models.length) {
1539 ElMessage({ 1538 ElMessage({
...@@ -1705,6 +1704,14 @@ export default { ...@@ -1705,6 +1704,14 @@ export default {
1705 if (type === 'node') { 1704 if (type === 'node') {
1706 // 关闭编辑器 1705 // 关闭编辑器
1707 editor.closeModel(); 1706 editor.closeModel();
1707 + // TAG: 节点删除后,如果有缓存也要删除掉
1708 + for (const key in state.node_tree) {
1709 + if (key === model.id) {
1710 + delete state.node_tree[model.id];
1711 + }
1712 + }
1713 + console.warn(state.node_tree);
1714 +
1708 } 1715 }
1709 if (type === 'edge') { 1716 if (type === 'edge') {
1710 // console.log('delete edge') 1717 // console.log('delete edge')
...@@ -1713,12 +1720,7 @@ export default { ...@@ -1713,12 +1720,7 @@ export default {
1713 flowData.value.nodes = editor.editorState.graph.save().nodes 1720 flowData.value.nodes = editor.editorState.graph.save().nodes
1714 flowData.value.edges = editor.editorState.graph.save().edges 1721 flowData.value.edges = editor.editorState.graph.save().edges
1715 1722
1716 - // TAG: 节点删除后,如果有缓存也要删除掉 1723 +
1717 - for (const key in state.node_tree) {
1718 - if (key === model.id) {
1719 - delete state.node_tree[model.id];
1720 - }
1721 - }
1722 } 1724 }
1723 1725
1724 /** 1726 /**
...@@ -1783,15 +1785,69 @@ export default { ...@@ -1783,15 +1785,69 @@ export default {
1783 * @param {model} model - The model being handled. 1785 * @param {model} model - The model being handled.
1784 * @param {type} type - The type of the event. 1786 * @param {type} type - The type of the event.
1785 */ 1787 */
1786 - function handleAfterAdd(model: myObj, type: string) { 1788 + const handleAfterAdd = async (model: myObj, type: string) => {
1787 if (type === 'node') { 1789 if (type === 'node') {
1788 // console.log(`新增节点`) 1790 // console.log(`新增节点`)
1789 flowData.value.nodes = editor.editorState.graph.save().nodes 1791 flowData.value.nodes = editor.editorState.graph.save().nodes
1792 +
1793 + editor.addNode(model);
1794 + let flow_id = getFlowId(); // 流程id
1795 + const { code, data } = await flowNodePropertyAPI({ node_code: model.id, flow_id });
1796 + if (code) {
1797 + // 转换数据结构使用
1798 + let node_name = data.name ? data.name : model.text;
1799 + let userTags = data.user; // 节点负责人
1800 + let field_extend = data.field; // 字段权限临时储存,实际传给后端数据结构
1801 + let field_auths = []; // 清空字段权限列表,本地使用数据结构
1802 + let more_attr = data.property; // 更多属性
1803 +
1804 + // 转换数据结构使用
1805 + field_extend.forEach(ele => {
1806 + if (!ele.field_extend.disabled) { // 流程节点字段权限列表内是否显示
1807 + field_auths.push({
1808 + field_id: ele.field_extend.field_id,
1809 + name: ele.field_extend.label,
1810 + visible: {
1811 + checked: ele.field_extend.visibled,
1812 + disabled: false,
1813 + },
1814 + editable: {
1815 + checked: ele.field_extend.editabled,
1816 + disabled: ele.field_extend.readonly,
1817 + },
1818 + show: true,
1819 + })
1820 + }
1821 + });
1822 +
1823 + // 初始化表单数据比较结构
1824 + field_extend.forEach(ele => {
1825 + field_auths.forEach(auth => {
1826 + if (ele.field_id === auth.field_id) {
1827 + ele.field_extend.visibled = auth.visible.checked;
1828 + ele.field_extend.editabled = auth.editable.checked;
1829 + ele.field_extend.readonly = auth.editable.disabled;
1830 + }
1831 + })
1832 + });
1833 +
1834 + state.node_tree[model.id] = {
1835 + name: node_name,
1836 + user: userTags, // 开始节点没有负责人
1837 + field_auths: field_auths, // 页面显示结构
1838 + field_extend: field_extend, // 后端使用结构
1839 + property: more_attr,
1840 + model
1841 + };
1842 +
1843 + editor.addNode(model);
1844 + }
1790 } 1845 }
1791 if (type === 'edge') { 1846 if (type === 'edge') {
1792 // console.log(`新增连接线`) 1847 // console.log(`新增连接线`)
1793 flowData.value.edges = editor.editorState.graph.save().edges 1848 flowData.value.edges = editor.editorState.graph.save().edges
1794 } 1849 }
1850 +
1795 } 1851 }
1796 1852
1797 function onClickCanvas(e: myEvent) { 1853 function onClickCanvas(e: myEvent) {
...@@ -1845,7 +1901,6 @@ export default { ...@@ -1845,7 +1901,6 @@ export default {
1845 // 保存流程图数据 1901 // 保存流程图数据
1846 flowData.value.nodes = editor.editorState.graph.save().nodes 1902 flowData.value.nodes = editor.editorState.graph.save().nodes
1847 flowData.value.edges = editor.editorState.graph.save().edges 1903 flowData.value.edges = editor.editorState.graph.save().edges
1848 -
1849 } else { 1904 } else {
1850 ElNotification.error('开始或者结束节点不可以复制') 1905 ElNotification.error('开始或者结束节点不可以复制')
1851 } 1906 }
...@@ -1860,8 +1915,6 @@ export default { ...@@ -1860,8 +1915,6 @@ export default {
1860 // 清空错误提示 1915 // 清空错误提示
1861 let { nodes } = editor.editorState.graph.save(); 1916 let { nodes } = editor.editorState.graph.save();
1862 1917
1863 - console.warn(nodes);
1864 -
1865 nodes.forEach((ele: any, idx: number) => { 1918 nodes.forEach((ele: any, idx: number) => {
1866 ele.desc = ''; 1919 ele.desc = '';
1867 editor.updateModel(ele); // 更新流程图信息 1920 editor.updateModel(ele); // 更新流程图信息
...@@ -1906,7 +1959,9 @@ export default { ...@@ -1906,7 +1959,9 @@ export default {
1906 // TAG: 检查节点是否完整 1959 // TAG: 检查节点是否完整
1907 const checkResult = await checkAllFlowNodePropertyAPI({ flow_id: +flow_id }) 1960 const checkResult = await checkAllFlowNodePropertyAPI({ flow_id: +flow_id })
1908 if (checkResult.code) { 1961 if (checkResult.code) {
1909 - let raw_keys = checkResult.data; 1962 + let { nodes, edges } = editor.editorState.graph.save();
1963 + let available_keys = _.map(nodes, 'id'); // 画布上存在的有效节点ID
1964 + let raw_keys = _.intersection(checkResult.data, available_keys); // 取交集有效ID
1910 let node_keys = Object.keys(state.node_tree); // 现在本地的ID都是有效的值 1965 let node_keys = Object.keys(state.node_tree); // 现在本地的ID都是有效的值
1911 let result = _.difference(raw_keys, node_keys); 1966 let result = _.difference(raw_keys, node_keys);
1912 if (result.length) { 1967 if (result.length) {
......