update 增加hooks方法
This commit is contained in:
parent
e0a7703b85
commit
bc2f9e5431
@ -1,12 +1,15 @@
|
|||||||
import showConfig from '@/components/BpmnDesign/assets/showConfig';
|
import showConfig from '@/components/BpmnDesign/assets/showConfig';
|
||||||
import { Moddle, Modeler, Modeling, Element } from 'bpmn';
|
import { Element } from 'bpmn';
|
||||||
|
import useModelerStore from '@/store/modules/modeler';
|
||||||
interface Options {
|
interface Options {
|
||||||
modeler: Modeler;
|
|
||||||
element: Element;
|
element: Element;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default (ops: Options) => {
|
export default (ops: Options) => {
|
||||||
const { modeler, element } = ops;
|
const { element } = ops;
|
||||||
|
const { getModeling, getModdle } = useModelerStore();
|
||||||
|
const modeling = getModeling();
|
||||||
|
const moddle = getModdle();
|
||||||
|
|
||||||
const elementType = computed(() => {
|
const elementType = computed(() => {
|
||||||
const bizObj = element.businessObject;
|
const bizObj = element.businessObject;
|
||||||
@ -16,7 +19,6 @@ export default (ops: Options) => {
|
|||||||
const config = computed(() => showConfig[elementType.value] || {});
|
const config = computed(() => showConfig[elementType.value] || {});
|
||||||
|
|
||||||
const updateProperties = (properties: any) => {
|
const updateProperties = (properties: any) => {
|
||||||
const modeling = modeler.get<Modeling>('modeling');
|
|
||||||
modeling.updateProperties(element, properties);
|
modeling.updateProperties(element, properties);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,20 +32,67 @@ export default (ops: Options) => {
|
|||||||
updateProperties({ name: newVal });
|
updateProperties({ name: newVal });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const createModdleElement = (elementType, properties, parent) => {
|
const createModdleElement = (elementType: string, properties: any, parent: Element) => {
|
||||||
const moddle = modeler.get<Moddle>('moddle');
|
|
||||||
const element = moddle.create(elementType, properties);
|
const element = moddle.create(elementType, properties);
|
||||||
parent && (element.$parent = parent);
|
parent && (element.$parent = parent);
|
||||||
return element;
|
return element;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取扩展属性,如果不存在会自动创建
|
||||||
|
*/
|
||||||
|
const getExtensionElements = () => {
|
||||||
|
let extensionElements = element.businessObject.get('extensionElements');
|
||||||
|
if (!extensionElements) {
|
||||||
|
extensionElements = createModdleElement('bpmn:ExtensionElements', { values: [] }, element.businessObject);
|
||||||
|
modeling.updateModdleProperties(element, element.businessObject, { extensionElements });
|
||||||
|
}
|
||||||
|
return extensionElements;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getPropertiesElements = (extensionElements?) => {
|
||||||
|
if (!extensionElements) {
|
||||||
|
extensionElements = getExtensionElements();
|
||||||
|
}
|
||||||
|
let propertiesElements = extensionElements.values.find((item) => item.$type === 'flowable:properties');
|
||||||
|
if (!propertiesElements) {
|
||||||
|
propertiesElements = createModdleElement('flowable:properties', { values: [] }, extensionElements);
|
||||||
|
modeling.updateModdleProperties(element, extensionElements, {
|
||||||
|
values: [...extensionElements.get('values'), propertiesElements]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return propertiesElements;
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateProperty = (name: string, value: string) => {
|
||||||
|
const propertiesElements = getPropertiesElements();
|
||||||
|
|
||||||
|
let propertyElements = propertiesElements.values.find((item) => item.name === name);
|
||||||
|
if (!propertyElements) {
|
||||||
|
propertyElements = createModdleElement('flowable:property', { name: name, value: value }, propertiesElements);
|
||||||
|
modeling.updateModdleProperties(element, propertiesElements, {
|
||||||
|
values: [...propertiesElements.get('values'), propertyElements]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
propertyElements.name = name;
|
||||||
|
propertyElements.value = value;
|
||||||
|
return propertyElements;
|
||||||
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
elementType,
|
elementType,
|
||||||
showConfig: config,
|
showConfig: config,
|
||||||
|
modeling,
|
||||||
|
moddle,
|
||||||
|
|
||||||
updateProperties,
|
updateProperties,
|
||||||
|
updateProperty,
|
||||||
|
|
||||||
createModdleElement,
|
createModdleElement,
|
||||||
idChange,
|
idChange,
|
||||||
nameChange
|
nameChange,
|
||||||
|
|
||||||
|
getExtensionElements,
|
||||||
|
getPropertiesElements
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,22 +1,17 @@
|
|||||||
import { Ref } from 'vue';
|
import { Element } from 'bpmn';
|
||||||
import { Element, Modeler } from 'bpmn';
|
|
||||||
|
|
||||||
interface Options<T> {
|
interface Options {
|
||||||
modeler: Modeler;
|
|
||||||
element: Element;
|
element: Element;
|
||||||
initData: T;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Data {
|
interface Data {
|
||||||
id: string;
|
id: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default <T extends Data>(ops: Options<T>) => {
|
export default (ops: Options) => {
|
||||||
const { modeler, element, initData } = ops;
|
const { element } = ops;
|
||||||
|
|
||||||
const formData = ref<T>(initData);
|
const parseData = <T>(): T => {
|
||||||
|
|
||||||
const parse = () => {
|
|
||||||
const result = {
|
const result = {
|
||||||
...element.businessObject,
|
...element.businessObject,
|
||||||
...element.businessObject.$attrs
|
...element.businessObject.$attrs
|
||||||
@ -30,16 +25,10 @@ export default <T extends Data>(ops: Options<T>) => {
|
|||||||
delete result[key];
|
delete result[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
formData.value = { ...formData.value, ...result };
|
return { ...result };
|
||||||
return formData;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
onBeforeMount(() => {
|
|
||||||
parse();
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
parse,
|
parseData
|
||||||
formData: formData as Ref<T>
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user