hookehuyr

新增临时缓存功能

Showing 1 changed file with 114 additions and 29 deletions
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
18 @click-canvas="onClickCanvas" 18 @click-canvas="onClickCanvas"
19 @dragend-node="onDragEndNode" 19 @dragend-node="onDragEndNode"
20 @click-node="onClickNode" 20 @click-node="onClickNode"
21 + @click-node-mousedown="onClickNodeMousedown"
21 @click-edge="onClickEdge" 22 @click-edge="onClickEdge"
22 @dblclick-node="onDblClickNode" 23 @dblclick-node="onDblClickNode"
23 @dblclick-edge="onDblClickEdge" 24 @dblclick-edge="onDblClickEdge"
...@@ -591,8 +592,13 @@ export default { ...@@ -591,8 +592,13 @@ export default {
591 }, 592 },
592 showConfirmation: true, 593 showConfirmation: true,
593 node_attr: {}, 594 node_attr: {},
595 + node_tree: {},
594 }); 596 });
595 597
598 + const setNodeTree = (id: string, data: object) => {
599 + state.node_tree[id] = data;
600 + }
601 +
596 /** 602 /**
597 * 获取url参数 603 * 获取url参数
598 * @param url 604 * @param url
...@@ -724,6 +730,42 @@ export default { ...@@ -724,6 +730,42 @@ export default {
724 // }); 730 // });
725 }); 731 });
726 732
733 + /************* 监听表单数据变化 **************/
734 + watch(
735 + () => state.node_name,
736 + (newValue, oldValue) => {
737 + if (newValue !== oldValue) {
738 + if (state.node_tree[state.detailModel?.id]) {
739 + state.node_tree[state.detailModel.id].name = newValue;
740 + }
741 + }
742 + },
743 + { immediate: true }
744 + );
745 + watch(
746 + () => state.userTags,
747 + (newValue, oldValue) => {
748 + if (newValue !== oldValue) {
749 + if (state.node_tree[state.detailModel?.id]) {
750 + state.node_tree[state.detailModel.id].user = newValue;
751 + }
752 + }
753 + },
754 + { immediate: true }
755 + );
756 + watch(
757 + () => state.more_attr,
758 + (newValue, oldValue) => {
759 + if (newValue !== oldValue) {
760 + if (state.node_tree[state.detailModel?.id]) {
761 + state.node_tree[state.detailModel.id].property = newValue;
762 + }
763 + }
764 + },
765 + { immediate: true }
766 + );
767 + /***************** END ******************/
768 +
727 const showHelp = () => { 769 const showHelp = () => {
728 state.dialogHelpVisible = true; 770 state.dialogHelpVisible = true;
729 } 771 }
...@@ -972,12 +1014,19 @@ export default { ...@@ -972,12 +1014,19 @@ export default {
972 * @param index 1014 * @param index
973 */ 1015 */
974 const onAuthVisibleChange = (val: any, index: number) => { 1016 const onAuthVisibleChange = (val: any, index: number) => {
1017 + state.field_auths[index].visible.checked = val.visible.checked; // 修改实际树变化
975 // 可见不选中时,可编辑也取消选中 1018 // 可见不选中时,可编辑也取消选中
976 if (!val.visible.checked) { 1019 if (!val.visible.checked) {
977 - val.editable.checked = false 1020 + val.editable.checked = false;
1021 + state.field_auths[index].editable.checked = false; // 修改实际树变化
978 } 1022 }
979 checkAuthAll('visible'); 1023 checkAuthAll('visible');
980 checkAuthAll('editable'); 1024 checkAuthAll('editable');
1025 +
1026 + // 修改缓存树的字段权限
1027 + if (state.node_tree[state.detailModel?.id]) {
1028 + state.node_tree[state.detailModel.id].field = _.cloneDeep(state.field_auths);
1029 + }
981 } 1030 }
982 1031
983 /** 1032 /**
...@@ -986,12 +1035,20 @@ export default { ...@@ -986,12 +1035,20 @@ export default {
986 * @param index 1035 * @param index
987 */ 1036 */
988 const onAuthEditableChange = (val: any, index: number) => { 1037 const onAuthEditableChange = (val: any, index: number) => {
1038 + state.field_auths[index].editable.checked = val.editable.checked; // 修改实际树变化
989 // 可编辑选中时,勾选可见 1039 // 可编辑选中时,勾选可见
990 if (val.editable.checked) { 1040 if (val.editable.checked) {
991 - val.visible.checked = true 1041 + val.visible.checked = true;
1042 + state.field_auths[index].visible.checked = true; // 修改实际树变化
992 } 1043 }
1044 +
993 checkAuthAll('editable'); 1045 checkAuthAll('editable');
994 - checkAuthAll('visible') 1046 + checkAuthAll('visible');
1047 +
1048 + // 修改缓存树的字段权限
1049 + if (state.node_tree[state.detailModel?.id]) {
1050 + state.node_tree[state.detailModel.id].field = _.cloneDeep(state.field_auths);
1051 + }
995 } 1052 }
996 1053
997 /** 1054 /**
...@@ -1127,7 +1184,8 @@ export default { ...@@ -1127,7 +1184,8 @@ export default {
1127 // editor.openModel() 1184 // editor.openModel()
1128 // } 1185 // }
1129 } 1186 }
1130 - 1187 + const onClickNodeMousedown = (e) => {
1188 + }
1131 /** 1189 /**
1132 * 单击节点回调 1190 * 单击节点回调
1133 * @param {Event} e - The event object representing the click event. 1191 * @param {Event} e - The event object representing the click event.
...@@ -1165,17 +1223,54 @@ export default { ...@@ -1165,17 +1223,54 @@ export default {
1165 1223
1166 state.statusLoading = true; 1224 state.statusLoading = true;
1167 1225
1168 - // 获取节点属性
1169 - const { code, data } = await flowNodePropertyAPI({ node_code: model.id, flow_id });
1170 - if (code) {
1171 - state.statusLoading = false;
1172 -
1173 flowData.value.nodes.forEach((ele: any, idx: number) => { 1226 flowData.value.nodes.forEach((ele: any, idx: number) => {
1174 if (ele.id === model.id) { 1227 if (ele.id === model.id) {
1175 state.node_idx = idx; // 详情里显示节点索引 1228 state.node_idx = idx; // 详情里显示节点索引
1176 } 1229 }
1177 }); 1230 });
1178 1231
1232 + // 开始节点不显示审批意见
1233 + if (model_id ==='start-node') {
1234 + state.more_attr = state.more_attr.filter((ele: any) => {
1235 + return ele.label !== '审批意见'
1236 + });
1237 + }
1238 + // 抄送节点不显示
1239 + if (state.detailModel.control === 'cc') {
1240 + state.more_attr = [];
1241 + }
1242 +
1243 + // 打开属性表单
1244 + state.attr_radio = '基础属性'; // 还原tab默认值
1245 +
1246 + // 如果是缓存过的节点,则直接显示
1247 + if (state.node_tree[state.detailModel.id]) {
1248 + state.statusLoading = false;
1249 + state.node_name = state.node_tree[state.detailModel.id].name;
1250 + state.userTags = state.node_tree[state.detailModel.id].user;
1251 + state.dialogUserTags = state.node_tree[state.detailModel.id].user;
1252 + state.field_auths = state.node_tree[state.detailModel.id].field;
1253 + state.more_attr = state.node_tree[state.detailModel.id].property;
1254 +
1255 + // 初始化表单数据比较结构
1256 + state.field_extend.forEach(ele => {
1257 + state.field_auths.forEach(auth => {
1258 + if (ele.field_id === auth.field_id) {
1259 + ele.field_extend.visibled = auth.visible.checked;
1260 + ele.field_extend.editabled = auth.editable.checked;
1261 + ele.field_extend.readonly = auth.editable.disabled;
1262 + }
1263 + })
1264 + });
1265 + editor.openModel();
1266 + return;
1267 + }
1268 +
1269 +
1270 + // 获取节点属性
1271 + const { code, data } = await flowNodePropertyAPI({ node_code: model.id, flow_id });
1272 + if (code) {
1273 + state.statusLoading = false;
1179 state.node_name = data.name ? data.name : model.text; // 节点名称 1274 state.node_name = data.name ? data.name : model.text; // 节点名称
1180 state.userTags = data.user; // 节点负责人 1275 state.userTags = data.user; // 节点负责人
1181 state.dialogUserTags = state.userTags; // 同步给弹框数据 1276 state.dialogUserTags = state.userTags; // 同步给弹框数据
...@@ -1218,20 +1313,6 @@ export default { ...@@ -1218,20 +1313,6 @@ export default {
1218 }) 1313 })
1219 }); 1314 });
1220 1315
1221 - // 开始节点不显示审批意见
1222 - if (model_id ==='start-node') {
1223 - state.more_attr = state.more_attr.filter((ele: any) => {
1224 - return ele.label !== '审批意见'
1225 - });
1226 - }
1227 - // 抄送节点不显示
1228 - if (state.detailModel.control === 'cc') {
1229 - state.more_attr = [];
1230 - }
1231 -
1232 - // 打开属性表单
1233 - state.attr_radio = '基础属性'; // 还原tab默认值
1234 -
1235 editor.openModel(); 1316 editor.openModel();
1236 1317
1237 // 储存原始节点属性 1318 // 储存原始节点属性
...@@ -1242,6 +1323,9 @@ export default { ...@@ -1242,6 +1323,9 @@ export default {
1242 property: _.cloneDeep(state.more_attr) 1323 property: _.cloneDeep(state.more_attr)
1243 } 1324 }
1244 1325
1326 + // 临时保存树信息
1327 + setNodeTree(model.id, { name: _.cloneDeep(state.node_name), user: _.cloneDeep(state.userTags), field: _.cloneDeep(state.field_auths), property: _.cloneDeep(state.more_attr) });
1328 +
1245 } else { 1329 } else {
1246 state.statusLoading = false; 1330 state.statusLoading = false;
1247 } 1331 }
...@@ -1753,6 +1837,7 @@ export default { ...@@ -1753,6 +1837,7 @@ export default {
1753 showMultipleSelect: true, // 编辑器是否可以多选 1837 showMultipleSelect: true, // 编辑器是否可以多选
1754 1838
1755 onClickCanvas, 1839 onClickCanvas,
1840 + onClickNodeMousedown,
1756 onClickNode, 1841 onClickNode,
1757 onClickEdge, 1842 onClickEdge,
1758 onDblClickNode, 1843 onDblClickNode,
...@@ -2036,13 +2121,13 @@ body { ...@@ -2036,13 +2121,13 @@ body {
2036 } 2121 }
2037 2122
2038 .el-button.el-button--primary { 2123 .el-button.el-button--primary {
2039 - background-color: #009688!important; 2124 + background-color: #009688 !important;
2040 - border-color: #009688!important; 2125 + border-color: #009688 !important;
2041 - color: white!important; 2126 + color: white !important;
2042 } 2127 }
2043 2128
2044 -.el-radio-button__original-radio:checked+.el-radio-button__inner { 2129 +.el-radio-button__original-radio:checked + .el-radio-button__inner {
2045 - border-color: #009688!important; 2130 + border-color: #009688 !important;
2046 - box-shadow: -1px 0 0 0 #009688!important; 2131 + box-shadow: -1px 0 0 0 #009688 !important;
2047 } 2132 }
2048 </style> 2133 </style>
......