This commit is contained in:
吴红兵
2025-12-02 10:37:49 +08:00
commit 1f645dad3e
1183 changed files with 147673 additions and 0 deletions

View File

@@ -0,0 +1,252 @@
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');
}