兰宝车间质量管理系统-前端
baoshiwei
2025-03-12 6b988bd582bfcd17fee48c476a5a6e5cc172b0d5
src/bpmn/hooks/usePanel.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
import showConfig from '../assets/showConfig';
import type { ModdleElement } from 'bpmn';
import useModelerStore from '@/store/modules/modeler';
import { MultiInstanceTypeEnum } from '@/enums/bpmn/IndexEnums';
interface Options {
  element: ModdleElement;
}
export default (ops: Options) => {
  const { element } = ops;
  const { getModeling, getModdle } = useModelerStore();
  const modeling = getModeling();
  const moddle = getModdle();
  /**
   * å½“前节点类型
   */
  const elementType = computed(() => {
    const bizObj = element.businessObject;
    return bizObj.eventDefinitions ? bizObj.eventDefinitions[0].$type : bizObj.$type;
  });
  /**
   * ç”¨äºŽæŽ§åˆ¶é¢æ¿å­—段显示与隐藏的配置
   */
  const config = computed(() => showConfig[elementType.value] || {});
  /**
   * åˆ›å»ºä¸€ä¸ªèŠ‚ç‚¹
   * @param elementType èŠ‚ç‚¹ç±»åž‹
   * @param properties å±žæ€§
   * @param parent çˆ¶èŠ‚ç‚¹
   */
  const createModdleElement = (elementType: string, properties: any, parent: ModdleElement) => {
    const element = moddle.create(elementType, properties);
    parent && (element.$parent = parent);
    return element;
  };
  /**
   * èŽ·å–æ‰©å±•å±žæ€§ï¼Œå¦‚æžœä¸å­˜åœ¨ä¼šè‡ªåŠ¨åˆ›å»º
   */
  const getExtensionElements = (create = true) => {
    let extensionElements = element.businessObject.get<ModdleElement>('extensionElements');
    if (!extensionElements && create) {
      extensionElements = createModdleElement('bpmn:ExtensionElements', { values: [] }, element.businessObject);
      modeling.updateModdleProperties(element, element.businessObject, { extensionElements });
    }
    return extensionElements;
  };
  /**
   * èŽ·å–extensionElements下的properties
   * @param extensionElements å¯é€‰å‚数,默认获取当前Element下的extensionElements下的Properties
   */
  const getPropertiesElements = (extensionElements?: ModdleElement) => {
    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;
  };
  /**
   * æ›´æ–°èŠ‚ç‚¹å±žæ€§
   * @param properties å±žæ€§å€¼
   */
  const updateProperties = (properties: any) => {
    modeling.updateProperties(element, properties);
  };
  /**
   * æ›´æ–°èŠ‚ç‚¹ä¿¡æ¯
   * @param updateElement éœ€è¦æ›´æ–°çš„节点
   * @param properties å±žæ€§
   */
  const updateModdleProperties = (updateElement, properties: any) => {
    modeling.updateModdleProperties(element, updateElement, properties);
  };
  /**
   * æ›´æ–°Property属性
   * @param name key值
   * @param value å€¼
   */
  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]
      });
    } else {
      propertyElements.name = name;
      propertyElements.value = value;
    }
    return propertyElements;
  };
  const idChange = (newVal: string) => {
    if (newVal) {
      updateProperties({ id: newVal });
    }
  };
  const nameChange = (newVal: string) => {
    if (newVal) {
      updateProperties({ name: newVal });
    }
  };
  const formKeyChange = (newVal: string) => {
    updateProperties({ formKey: newVal });
  };
  const constant = {
    MultiInstanceType: [
      { id: '373d4b81-a0d1-4eb8-8685-0d2fb1b468e2', label: '无', value: MultiInstanceTypeEnum.NONE },
      { id: 'b5acea7c-b7e5-46b0-8778-390db091bdab', label: '串行', value: MultiInstanceTypeEnum.SERIAL },
      { id: 'b4f0c683-1ccc-43c4-8380-e1b998986caf', label: '并行', value: MultiInstanceTypeEnum.PARALLEL }
    ]
  };
  return {
    elementType,
    constant,
    showConfig: config,
    updateProperties,
    updateProperty,
    updateModdleProperties,
    createModdleElement,
    idChange,
    nameChange,
    formKeyChange,
    getExtensionElements,
    getPropertiesElements
  };
};