Files
geg-gas-web/src/views/workflow/design/bpmn/config/property.ts

214 lines
8.6 KiB
TypeScript

import { useBpmnStore } from '/@bpmn/store/bpmn';
import { BpmnNodeKey } from '/@/enums/workflowEnum';
import { formPermissionList } from '/@bpmn/config/formPermission';
import { InfoId, InfoItem, InfoType } from '/@/model/workflow/bpmnConfig';
import { ChildNodeConfig, ProcessConfig } from '/@/model/workflow/workflowConfig';
import { FormConfigItem } from '/@/model/workflow/formSetting';
import {
processConfig,
defaultProperties,
propertiesByType,
nodeNameByType,
} from './propertyConfig';
import { cloneDeep } from 'lodash-es';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
// 流程模板默认属性
export const getProcessConfig: ProcessConfig = processConfig;
// 根据节点类型获取节点默认属性
export const getDefaultProperties = function (type: InfoType) {
return propertiesByType.has(type) ? propertiesByType.get(type) : defaultProperties;
};
// 根据节点类型获取节点名称
export const getNodeName = (type: InfoType) => {
return nodeNameByType.has(type) ? nodeNameByType.get(type) : '';
};
// 根据节点类型获取节点名称加随机数
export const getLabelName = (type: InfoType) => {
return getNodeName(type);
// + 123;
};
// 初始化开始节点信息
export const initStartProperties = () => {
const bpmnStore = useBpmnStore();
initProperties(getStartNodeId, BpmnNodeKey.START, t('开始节点'), bpmnStore.processInfo.processId);
initProperties('Activity_draft', BpmnNodeKey.USER, '发起审批', bpmnStore.processInfo.processId);
};
// 修改流程属性
export const changeProcessProperties = async (processConfig: ProcessConfig) => {
const bpmnStore = useBpmnStore();
if (processConfig.defaultFormList.length > 0) {
const returnArr = await formPermissionList(processConfig.defaultFormList);
setDefaultFormList(returnArr);
}
bpmnStore.setProcessInfo(processConfig);
bpmnStore.setInfoId(processConfig.processId);
};
// 是否可以初始化节点属性【没有相关节点信息】
export const CanInitializeProperties = (id: InfoId) => {
return !hasProperties(id);
};
// 是否有节点信息缓存
export const hasProperties = (id: InfoId) => {
const bpmnStore = useBpmnStore();
return bpmnStore.hasProperties(id);
};
// 设置节点信息缓存
export const setProperties = (id: InfoId, element: InfoItem) => {
const bpmnStore = useBpmnStore();
bpmnStore.setProperties(id, element);
};
// 初始化节点信息缓存
export const initProperties = (id: InfoId, type: InfoType, name: string, parentId: string) => {
const bpmnStore = useBpmnStore();
const { defaultFormList, processInfo } = bpmnStore;
const properties = cloneDeep(getDefaultProperties(type));
properties.id = id;
properties.name = name;
properties.type = type;
properties.parentId = parentId;
if (type == BpmnNodeKey.START || type == BpmnNodeKey.USER) {
properties.formConfigs = cloneDeep(defaultFormList);
}
if (type == BpmnNodeKey.USER) {
properties.autoAgreeRule = processInfo.autoAgreeRule;
properties.noHandler = processInfo.noHandler;
properties.isPrevChooseNext = processInfo.isPrevChooseNext;
}
if (id === 'Activity_draft') {
// 将草稿节点的审批人设置为流程发起者
properties.approverConfigs = [{
checked:false,
id: 'Event_start_node',
memberType: 3,
name: '开始节点'
}];
properties.countersignConfig = {
addOrRemove: 1,
finishType: 0,
multipleInstancesType: 0,
percentage: 0,
countersignList: [{
checked: false,
id: 'Event_start_node',
memberType: 3,
name: '开始节点'
}]
}
}
setProperties(id, properties);
};
// 移除节点信息缓存
export const removeProperties = (id: InfoId) => {
const bpmnStore = useBpmnStore();
if (bpmnStore.hasProperties(id)) {
bpmnStore.deleteProperties(id);
}
};
// 修改节点parentId
export const changePropertiesByParentId = (id: InfoId, parentId: InfoId) => {
const bpmnStore = useBpmnStore();
if (bpmnStore.hasProperties(id)) {
const properties = bpmnStore.getProperties(id);
if (properties) {
properties.parentId = parentId;
setProperties(id, properties);
}
}
};
//设置默认表单列表
export const setDefaultFormList = (list: Array<FormConfigItem>) => {
const bpmnStore = useBpmnStore();
bpmnStore.setDefaultFormList(list);
};
//根据默认表单设置,追加所有表单节点的表单配置
export const nodesAppendDefaultForm = (list: Array<FormConfigItem>) => {
const bpmnStore = useBpmnStore();
setDefaultFormList(cloneDeep(list));
const { info } = bpmnStore;
for (const [key, value] of info) {
if (value.type == BpmnNodeKey.START || value.type == BpmnNodeKey.USER) {
const properties = bpmnStore.getProperties(key);
if (properties) {
properties.formConfigs = [...properties.formConfigs, ...cloneDeep(list)];
setProperties(key, properties);
}
}
}
};
// 设置childNodes属性
export const setChildNodesProperties = (childNodes: ChildNodeConfig) => {
const bpmnStore = useBpmnStore();
if (childNodes.length > 0) {
childNodes.forEach((element: InfoItem) => {
if (element.id && !bpmnStore.hasProperties(element.id)) {
setProperties(element.id, element);
}
});
}
};
// 获取缓存所有节点信息
export const getBpmnJson = () => {
const bpmnStore = useBpmnStore();
const { info, processInfo } = bpmnStore;
const childNodeConfig = [...info.values()];
return { childNodeConfig, processConfig: processInfo };
};
export const getStartNodeId = 'Event_start_node';
export const getInitializeXml = (resourceId: string) => {
return `
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_1u51epq" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.2.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="${resourceId}" name="${resourceId}" isExecutable="true">
<bpmn:startEvent id="${getStartNodeId}" name="开始节点">
<bpmn:outgoing>Flow_line_draft</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:userTask id="Activity_draft" name="发起审批">
<bpmn:incoming>Flow_line_draft</bpmn:incoming>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_line_draft" name="流程线" sourceRef="${getStartNodeId}" targetRef="Activity_draft" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1m1pmsz">
<bpmndi:BPMNShape id="${getStartNodeId}_di" bpmnElement="${getStartNodeId}">
<dc:Bounds x="159" y="359" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_draft_di" bpmnElement="Activity_draft">
<dc:Bounds x="290" y="337" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge_line_draft" bpmnElement="Flow_line_draft">
<di:waypoint x="195" y="377" />
<di:waypoint x="290" y="377" />
<bpmndi:BPMNLabel>
<dc:Bounds x="226" y="359" width="34" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
`;
// return `<?xml version="1.0" encoding="UTF-8"?>
// <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" targetNamespace="http://www.flowable.org/processdef">
// <process id="${resourceId}" name="${resourceId}" isExecutable="true">
// <startEvent id="${getStartNodeId}" name="开始节点" />
// </process>
// <bpmndi:BPMNDiagram id="BPMNDiagram_flow">
// <bpmndi:BPMNPlane id="BPMNPlane_flow" bpmnElement="process_drril0cw">
// <bpmndi:BPMNShape id="${getStartNodeId}_di" bpmnElement="${getStartNodeId}">
// <omgdc:Bounds x="-708" y="-208" width="36" height="36" />
// <bpmndi:BPMNLabel>
// <omgdc:Bounds x="-712" y="-165" width="44" height="14" />
// </bpmndi:BPMNLabel>
// </bpmndi:BPMNShape>
// </bpmndi:BPMNPlane>
// </bpmndi:BPMNDiagram>
// </definitions>
// `;
};