import {DIC_PROP} from "/@/flow/support/dict-prop"; import {PROP_CONST} from "/@/flow/support/prop-const"; import {CommonNodeType, HighNodeType} from "/@/flow/designer/config/type"; import {notifyLeft} from "/@/flow"; import {useMessageBox} from "/@/hooks/message"; import {validateNull} from "/@/utils/validate"; import {gateAttr, linkAttr, syncJobAttr, syncNodeAttr} from "/@/flow/designer/config/attr-config"; import {setPropsNullValue} from "/@/flow/support/common"; import {validateListFormOption} from "/@/flow/utils/form-perm"; /** * 常用工具类 * * @author luolin */ // 反解析名称时未加载该常量 export function revParseWhoseLeaderName(data, dicData) { // 谁的主管,可自定义更多 dicData.users.unshift(PROP_CONST.FLOW_METHOD.whoseLeader) if (!data.whoseLeader) return if (data.whoseLeader === PROP_CONST.FLOW_METHOD.whoseLeader.userId) { data.whoseLeaderName = PROP_CONST.FLOW_METHOD.whoseLeader.name } else { let find = dicData.users.find(f => f.userId === data.whoseLeader); if (find) data.whoseLeaderName = find.name; } } export async function revParseUserKeyValName(props, data, dicData, methods) { if (methods.validateCurrSelectDefJob) { if (!methods.validateCurrSelectDefJob()) return; } let valType = props.currSelect.attributes.attrs.cdata.defJob.valType; let userKeyVal = props.currSelect.attributes.attrs.cdata.defJob.userKeyVal; if (!userKeyVal) return; let userKeyValFrom; if (userKeyVal === PROP_CONST.VAR_KEY_VAL.order + 'createUser') { userKeyValFrom = DIC_PROP.FLOW_METHOD_TYPE[0].value data.activeKey = 'flow-method' } else if (userKeyVal.indexOf('getUserDeptLeaderId') !== -1) { userKeyValFrom = DIC_PROP.FLOW_METHOD_TYPE[1].value data.whoseLeader = userKeyVal.substring(userKeyVal.indexOf('(Long#') + 6, userKeyVal.indexOf(',Integer#')) data.leaderLevel = parseInt(userKeyVal.substring(userKeyVal.indexOf(',Integer#') + 9, userKeyVal.indexOf(',String#'))) data.levelExtract = userKeyVal.substring(userKeyVal.indexOf(',String#') + 8, userKeyVal.indexOf(')')) data.activeKey = 'flow-method' } else if (userKeyVal.indexOf('listUserDeptMultiLeaderId') !== -1) { userKeyValFrom = DIC_PROP.FLOW_METHOD_TYPE[2].value let lastIndex = userKeyVal.indexOf('String#') - 1; data.whoseLeader = userKeyVal.substring(userKeyVal.indexOf('(Long#') + 6, lastIndex) userKeyVal = userKeyVal.substr(lastIndex) lastIndex = userKeyVal.indexOf('Integer#') - 1; data.auditEndpoint = userKeyVal.substring(userKeyVal.indexOf('String#') + 7, lastIndex) userKeyVal = userKeyVal.substr(lastIndex) lastIndex = userKeyVal.indexOf('String#') - 1; let leaderLevel = userKeyVal.substring(userKeyVal.indexOf('Integer#') + 8, lastIndex) userKeyVal = userKeyVal.substr(lastIndex) if (data.auditEndpoint === '1') data.leaderLevel = parseInt(leaderLevel) lastIndex = userKeyVal.lastIndexOf('String#') - 1; data.seqAuditSort = userKeyVal.substring(userKeyVal.indexOf('String#') + 7, lastIndex) userKeyVal = userKeyVal.substr(lastIndex) data.levelExtract = userKeyVal.substring(userKeyVal.indexOf(')') - 1, userKeyVal.indexOf(')')) data.activeKey = 'flow-method' } else if (userKeyVal.indexOf('getDeptLeaderId') !== -1) { userKeyValFrom = DIC_PROP.FLOW_METHOD_TYPE[3].value data.appointDeptId = userKeyVal.substring(userKeyVal.indexOf('(Long#') + 6, userKeyVal.indexOf(',String#')) data.levelExtract = userKeyVal.substring(userKeyVal.indexOf(',String#') + 8, userKeyVal.indexOf(')')) } else if (props.currSelect.attributes.attrs.cdata.defJob.userKeyValName) { let find = DIC_PROP.FLOW_METHOD_TYPE.find(f => f.label === props.currSelect.attributes.attrs.cdata.defJob.userKeyValName); // 再次编辑时优先显示为专业模式 if (find) { userKeyValFrom = DIC_PROP.FLOW_METHOD_TYPE[4].value data.userKeyVal = userKeyVal if (methods.handleUserKeyValFrom) methods.handleUserKeyValFrom(userKeyValFrom) data.activeKey = 'flow-method' } } else if (DIC_PROP.VAL_TYPE[4].value === valType && userKeyVal) { if (validateNull(data.formFieldPerms)) await validateListFormOption(data, props) if (!validateNull(data.formFieldPerms)) { let exist = data.formFieldPerms.find(f => f.prop === userKeyVal); if (exist) userKeyValFrom = DIC_PROP.FLOW_METHOD_TYPE[4].value } } if (userKeyValFrom) { data.userKeyValFrom = userKeyValFrom } else { data.activeKey = 'flow-rule' } } export function parseUserKeyValName(props, data, methods) { if (methods.validateCurrSelectDefJob) { if (!methods.validateCurrSelectDefJob()) return; } let userKeyVal; if (data.userKeyValFrom === '0') { userKeyVal = PROP_CONST.VAR_KEY_VAL.order + 'createUser' } else if (data.userKeyValFrom === '1') { userKeyVal = '#distActorServiceImpl.getUserDeptLeaderId(Long#'+ data.whoseLeader +',Integer#'+ data.leaderLevel +',String#'+ data.levelExtract +')' } else if (data.userKeyValFrom === '2') { let leaderLevel = 'NULL' if (data.auditEndpoint === '1') leaderLevel = data.leaderLevel let seqAuditSort = 'NULL' if (data.seqAuditSort) seqAuditSort = data.seqAuditSort userKeyVal = '#distActorServiceImpl.listUserDeptMultiLeaderId(Long#'+ data.whoseLeader +',String#'+ data.auditEndpoint +',Integer#'+ leaderLevel +',String#'+ seqAuditSort +',String#'+ data.levelExtract +')' } else if (data.userKeyValFrom === '3') { userKeyVal = '#distActorServiceImpl.getDeptLeaderId(Long#'+ data.appointDeptId +',String#'+ data.levelExtract +')' } else if (data.userKeyValFrom === '4') { userKeyVal = data.userKeyVal } if (data.userKeyValFrom === '1' || data.userKeyValFrom === '2') { if (!data.whoseLeader) { if (methods.$message) methods.$message('whoseLeader') return } } if (data.userKeyValFrom === '3') { if (!data.appointDeptId) { if (methods.$message) methods.$message('appointDeptId') return } } props.currSelect.attributes.attrs.cdata.defJob.userKeyVal = userKeyVal; props.currSelect.attributes.attrs.cdata.defJob.userKeyValName = DIC_PROP.FLOW_METHOD_TYPE.find(f => f.value === data.userKeyValFrom).label; props.currSelect.attributes.attrs.cdata.defJob.valType = DIC_PROP.VAL_TYPE[4].value // 清空其他参数 props.currSelect.attributes.attrs.cdata.defJob.condGroups = [] props.currSelect.attributes.attrs.cdata.defJob.httpParams = [] props.currSelect.attributes.attrs.cdata.defJob.httpMethod = null } export function handleLinkFlowNodeIds(data, props) { data.toFlowNodeIds = [] data.fromFlowNodeIds = [] let models = window._jfGraph.getElements(); data.fromFlowNodeId = props.currSelect.attributes.source.id data.toFlowNodeId = props.currSelect.attributes.target.id // 修正拖拽连线箭头更改目标节点 props.currSelect.attributes.attrs.cdata.attrs.fromFlowNodeId = data.fromFlowNodeId props.currSelect.attributes.attrs.cdata.attrs.toFlowNodeId = data.toFlowNodeId models.forEach(each => { if (!validateNodeType(each)) return let id = each.id let nodeName = each.attributes.attrs.label.text if (id !== props.currSelect.attributes.target.id) { data.fromFlowNodeIds.push({id, nodeName}) } if (id !== props.currSelect.attributes.source.id) { data.toFlowNodeIds.push({id, nodeName}) } }) } export function changeLinkFlowNodeIds(data, props, methods?, $emit?) { useMessageBox() .confirm('是否确认修改连线的' + (data.modifyPointType === '0' ? '起点?' : '终点?')) .then(() => { doLinkFlowNodeIds(data, props, methods, $emit) }) } function doLinkFlowNodeIds(data, props, methods?, $emit?) { if (data.modifyPointType === '0') { props.currSelect.attributes.attrs.cdata.attrs.fromFlowNodeId = data.fromFlowNodeId props.currSelect.set('source', { id: data.fromFlowNodeId }); } else { props.currSelect.attributes.attrs.cdata.attrs.toFlowNodeId = data.toFlowNodeId props.currSelect.set('target', { id: data.toFlowNodeId }); } if (methods) methods.handleLinkFlowNodeIds() if (window._flowConfig.globalConfig.isSimpleMode === '1') window._jfOperate.layout() else notifyLeft('专业模式不会自动调整连线轨迹,有必要时请手动调整', 'warning', 3000) if ($emit) $emit("hideAttrConfig", false, '1'); } export function validateNodeType(currSelect, methods?, isVirtual?) { if (methods && !methods.validateCurrSelectAttrs()) return false; let type = currSelect.attributes.attrs.cdata.type; let noVirtual = type === CommonNodeType.START || type === CommonNodeType.END || type === CommonNodeType.SERIAL || type === CommonNodeType.PARALLEL; if (!isVirtual) return noVirtual return noVirtual || type === HighNodeType.VIRTUAL } export function handleSyncFlowNodeIds(data, props, methods) { data.syncFlowNodeIds = [] if (!methods.validateCurrSelectAttrsAttrs()) return; props.currSelect.attributes.attrs.cdata.attrs.syncFlowNodeId = null let isGateway = props.currSelect.attributes.attrs.cdata.attrs.isGateway; let models = window._jfGraph.getElements(); if (validateNull(models)) return models.forEach(each => { let cdata = each.attributes.attrs.cdata; let b = cdata.type === CommonNodeType.SERIAL || cdata.type === CommonNodeType.PARALLEL; if (b && props.currSelect.id !== each.id) { let id = each.id let nodeName = each.attributes.attrs.label.text + "(ID:" + id + ")" let isExist = false if (isGateway === '1') { if (cdata.attrs.isGateway === '1') isExist = true } else { if (cdata.attrs.isGateway !== '1') isExist = true } if (isExist) data.syncFlowNodeIds.push({id, nodeName}) } }) } export function changeSyncFlowNodeId(id, props, methods, $message) { let models = window._jfGraph.getElements(); if (validateNull(models) || !id) return let isGateway = props.currSelect.attributes.attrs.cdata.attrs.isGateway; let cdata = models.find(f => f.id === id).attributes.attrs.cdata; let nodeAttrs: any[]; if (isGateway !== '1') { nodeAttrs = Object.keys(syncNodeAttr); if (!validateNull(cdata.defJob)) { setPropsNullValue(props.currSelect.attributes.attrs.cdata.defJob, cdata.defJob, ...Object.keys(syncJobAttr)) } } else { nodeAttrs = Object.keys(gateAttr); } setPropsNullValue(props.currSelect.attributes.attrs.cdata.attrs, cdata.attrs, ...nodeAttrs) $message.warning("已同步其他节点的配置,请重新打开查看") methods.hideAttrConfig(false, '1'); } export function handleSyncFlowNodeRelIds(data, props, methods) { data.syncFlowNodeRelIds = [] if (!methods.validateCurrSelectAttrsAttrs()) return; props.currSelect.attributes.attrs.cdata.attrs.syncFlowNodeRelId = null let links = window._jfGraph.getLinks(); if (validateNull(links)) return links.forEach(each => { if (props.currSelect.id !== each.id) { let id = each.id let linkName = "ID:" + id let text = each.attributes.labels[0].attrs.text.text; if (text) linkName = text + "(ID:" + id + ")" data.syncFlowNodeRelIds.push({id, linkName}) } }) } export function changeSyncFlowNodeRelId(id, props, methods, $message) { let links = window._jfGraph.getLinks(); if (validateNull(links) || !id) return let cdata = links.find(f => f.id === id).attributes.attrs.cdata; let linkAttrs = Object.keys(linkAttr); setPropsNullValue(props.currSelect.attributes.attrs.cdata.attrs, cdata.attrs, ...linkAttrs) $message.warning("已同步其他连线的配置,请重新打开查看") methods.hideAttrConfig(false, '1'); }