update 优化页面类型

This commit is contained in:
LiuHao 2024-02-01 17:57:24 +08:00
parent 5ba4e9b4c5
commit bd1ddf7691
12 changed files with 43 additions and 203 deletions

View File

@ -11,7 +11,7 @@ import ProcessPanel from './panel/ProcessPanel.vue';
import StartEndPanel from './panel/StartEndPanel.vue';
import GatewayPanel from './panel/GatewayPanel.vue';
import SequenceFlowPanel from './panel/SequenceFlowPanel.vue';
import { Modeler, Element } from 'bpmn';
import { Modeler, ModdleElement } from 'bpmn';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
interface propsType {
users: Array<any>;
@ -20,8 +20,8 @@ interface propsType {
}
const props = withDefaults(defineProps<propsType>(), {});
const element = ref<Element>();
const processElement = ref<Element>();
const element = ref<ModdleElement>();
const processElement = ref<ModdleElement>();
const startEndType = ['bpmn:IntermediateThrowEvent', 'bpmn:StartEvent', 'bpmn:EndEvent'];
const taskType = [

View File

@ -1,8 +1,8 @@
import showConfig from '@/components/BpmnDesign/assets/showConfig';
import { Element } from 'bpmn';
import { ModdleElement } from 'bpmn';
import useModelerStore from '@/store/modules/modeler';
interface Options {
element: Element;
element: ModdleElement;
}
export default (ops: Options) => {
@ -30,7 +30,7 @@ export default (ops: Options) => {
* @param properties
* @param parent
*/
const createModdleElement = (elementType: string, properties: any, parent: Element) => {
const createModdleElement = (elementType: string, properties: any, parent: ModdleElement) => {
const element = moddle.create(elementType, properties);
parent && (element.$parent = parent);
return element;
@ -40,7 +40,7 @@ export default (ops: Options) => {
*
*/
const getExtensionElements = (create = true) => {
let extensionElements = element.businessObject.get('extensionElements');
let extensionElements = element.businessObject.get<ModdleElement>('extensionElements');
if (!extensionElements && create) {
extensionElements = createModdleElement('bpmn:ExtensionElements', { values: [] }, element.businessObject);
modeling.updateModdleProperties(element, element.businessObject, { extensionElements });
@ -52,7 +52,7 @@ export default (ops: Options) => {
* extensionElements下的properties
* @param extensionElements Element下的extensionElements下的Properties
*/
const getPropertiesElements = (extensionElements?) => {
const getPropertiesElements = (extensionElements?: ModdleElement) => {
if (!extensionElements) {
extensionElements = getExtensionElements();
}
@ -60,7 +60,7 @@ export default (ops: Options) => {
if (!propertiesElements) {
propertiesElements = createModdleElement('flowable:properties', { values: [] }, extensionElements);
modeling.updateModdleProperties(element, extensionElements, {
values: [...extensionElements.get('values'), propertiesElements]
values: [...extensionElements.get<[]>('values'), propertiesElements]
});
}
return propertiesElements;

View File

@ -1,7 +1,7 @@
import { Element } from 'bpmn';
import { ModdleElement } from 'bpmn';
interface Options {
element: Element;
element: ModdleElement;
}
interface Data {
@ -25,7 +25,7 @@ export default (ops: Options) => {
delete result[key];
}
}
return { ...result };
return { ...result } as T;
};
return {

View File

@ -41,12 +41,12 @@
<script setup lang="ts">
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler, Element } from 'bpmn';
import { Modeler, ModdleElement } from 'bpmn';
import { GatewayPanel } from 'bpmnDesign';
import ExecutionListener from '@/components/BpmnDesign/panel/property/ExecutionListener.vue';
interface PropType {
element: Element;
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});
const { nameChange, idChange } = usePanel({

View File

@ -43,13 +43,13 @@
import ExecutionListener from './property/ExecutionListener.vue';
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler, Element } from 'bpmn';
import { Modeler, ModdleElement } from 'bpmn';
import { ProcessPanel } from 'bpmnDesign';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
interface PropType {
element: Element;
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});

View File

@ -47,12 +47,12 @@
<script setup lang="ts">
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler, Element } from 'bpmn';
import { Modeler, ModdleElement } from 'bpmn';
import { SequenceFlowPanel } from 'bpmnDesign';
import useModelerStore from '@/store/modules/modeler';
interface PropType {
element: Element;
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});
const { nameChange, idChange, updateProperties } = usePanel({

View File

@ -15,11 +15,11 @@
<script setup lang="ts">
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler, Element } from 'bpmn';
import { Modeler, ModdleElement } from 'bpmn';
import { StartEndPanel } from 'bpmnDesign';
interface PropType {
element: Element;
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});
const { nameChange, idChange } = usePanel({

View File

@ -92,7 +92,7 @@
</el-tabs>
<el-form-item v-if="showConfig.dueDate" prop="dueDate" label="到期时间">
<el-input v-model="formData.dueDate" clearable @change="dueDateChange" @click.native="openDueDate">
<el-input v-model="formData.dueDate" clearable @change="dueDateChange" @click="openDueDate">
<template #append>
<el-button icon="Search" type="primary" @click="openDueDate" />
</template>
@ -231,7 +231,7 @@ import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import UserSelect from '@/components/UserSelect';
import RoleSelect from '@/components/RoleSelect';
import DueDate from '@/components/BpmnDesign/panel/property/DueDate.vue';
import { Element } from 'bpmn';
import { ModdleElement } from 'bpmn';
import { TaskPanel } from 'bpmnDesign';
import { AllocationTypeEnum, MultiInstanceTypeEnum, SpecifyDescEnum } from '@/enums/bpmn/IndexEnums';
import { UserVO } from '@/api/system/user/types';
@ -240,7 +240,7 @@ import { RoleVO } from '@/api/system/role/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
interface PropType {
element: Element;
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});
const { showConfig, nameChange, idChange, updateProperties, getExtensionElements, createModdleElement } = usePanel({
@ -383,7 +383,7 @@ const elementVariableChange = (newVal) => {
updateProperties({ loopCharacteristics: loopCharacteristics });
};
const completionConditionChange = (newVal) => {
let loopCharacteristics = props.element.businessObject.get('loopCharacteristics');
let loopCharacteristics = props.element.businessObject.get<ModdleElement>('loopCharacteristics');
if (!loopCharacteristics) {
loopCharacteristics = createModdleElement('bpmn:MultiInstanceLoopCharacteristics', {}, props.element.businessObject);
}

View File

@ -88,7 +88,7 @@
import ListenerParam from './ListenerParam.vue';
import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
import { ExecutionListenerVO } from 'bpmnDesign';
import { Moddle, Modeler, Element } from 'bpmn';
import { Moddle, Modeler, ModdleElement } from 'bpmn';
import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import useDialog from '@/hooks/useDialog';
@ -96,7 +96,7 @@ import useModelerStore from '@/store/modules/modeler';
const emit = defineEmits(['close']);
interface PropType {
element: Element;
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});

View File

@ -89,7 +89,7 @@
import ListenerParam from './ListenerParam.vue';
import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
import { TaskListenerVO } from 'bpmnDesign';
import { Element } from 'bpmn';
import { ModdleElement } from 'bpmn';
import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import useDialog from '@/hooks/useDialog';
@ -98,7 +98,7 @@ import useModelerStore from '@/store/modules/modeler';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
interface PropType {
element: Element;
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});

View File

@ -1,15 +1,13 @@
declare module 'bpmn' {
import { Moddle as moddle } from 'moddle';
import type modeler from 'bpmn-js/lib/Modeler';
import type modeling from 'bpmn-js/lib/features/modeling/Modeling';
import type canvas from 'diagram-js/lib/core/Canvas';
import type elementRegistry from 'diagram-js/lib/core/ElementRegistry';
import type { Element as element } from 'bpmn-js/lib/model/Types';
export type Modeler = modeler;
export type Modeling = modeling;
export type Canvas = canvas;
export type ElementRegistry = elementRegistry;
export type Moddle = moddle;
export type Element = element;
export type Moddle = import('moddle').Moddle;
export type ModdleElement = import('moddle').ModdleElement;
}

View File

@ -1,195 +1,37 @@
/************************************** 核心 Moddle 声明 *****************************************/
declare module 'moddle' {
type UriOrPrefix = {
uri?: string;
prefix?: string;
};
import type { Element as element } from 'bpmn-js/lib/model/Types';
export class Element {
$instanceOf: typeof Moddle.prototype.hasType;
export type Element = {
get<T>(name: string): T;
get(name: string): ReturnType<typeof Properties.prototype.get>;
set(name: string, value: any): void;
} & element;
set(name: string, value: any): ReturnType<typeof Properties.prototype.set>;
}
export class ModdleElement extends Element {
static $model: Moddle;
static $descriptor: Descriptor;
export interface ModdleElement extends Element {
$model: Moddle;
readonly $type: string;
$attrs: object | {};
$parent: any;
businessObject: ModdleElement;
type: string;
[field: string]: any;
$parent: any;
constructor(attrs: object);
static hasType(element: ModdleElement, type?: string): boolean;
hasType(element: ModdleElement, type?: string): boolean;
}
export class Factory {
model: Moddle;
properties: Properties;
constructor(model: Moddle, properties: Properties);
createType(descriptor: Descriptor): ModdleElement;
}
export type BuiltinsKeys = 'String' | 'Boolean' | 'Integer' | 'Real' | 'Element';
export type TypeConverters = {
[T in Exclude<BuiltinsKeys, 'Element'>]: (s: string) => string | boolean | number;
};
export type coerceType = <T extends Exclude<BuiltinsKeys, 'Element'>>(type: T, value: string) => ReturnType<TypeConverters[T]>;
export function isBuiltIn(type: BuiltinsKeys): boolean;
export function isSimple(type: Exclude<BuiltinsKeys, 'Element'>): boolean;
type ParsedName = {
name: string;
prefix: string;
localName: string;
};
export function parseName(name: string, defaultPrefix?: string): ParsedName;
// DescriptorBuilder
type Property = {
ns: ParsedName;
name: ParsedName['name'];
isId?: boolean;
isBody?: boolean;
};
type DescriptorType = {
name: string;
properties: Property[];
superClass?: string[];
extends?: string[];
meta?: object | {};
};
type Descriptor = {
ns: ParsedName;
name: ParsedName['name'];
allTypes: DescriptorType[];
allTypesByName: Record<string, DescriptorType[]>;
properties: Property[];
propertiesByName: Record<string, Property[]>;
bodyProperty?: Property;
idProperty?: Property;
};
export class DescriptorBuilder implements Descriptor {
ns: ParsedName;
name: ParsedName['name'];
allTypes: DescriptorType[];
allTypesByName: Record<string, DescriptorType[]>;
properties: Property[];
propertiesByName: Record<string, Property[]>;
bodyProperty?: Property;
idProperty?: Property;
constructor(nameNs: ParsedName);
build(): Descriptor;
addProperty(p: Property, idx?: number, validate?: boolean): void;
replaceProperty(oldProperty: Property, newProperty: Property, replace?: boolean): void | never;
redefineProperty(p: Property, targetPropertyName: `${string}#${string}`, replace?: boolean): void | never;
addNamedProperty(p: Property, validate?: boolean): void | never;
removeNamedProperty(p: Property): void;
setBodyProperty(p: Property, validate?: boolean): void | never;
setIdProperty(p: Property, validate?: boolean): void | never;
assertNotDefined(p: Property, name?: string): void | never;
hasProperty(name: string): Property | undefined;
addTrait(t: DescriptorType, inherited: boolean): void;
}
// Registry
export interface Package {
name: string;
prefix: string;
types: DescriptorType[];
}
export class Registry {
packageMap: Record<string, Package>;
typeMap: Record<string, DescriptorType>;
packages: Package[];
properties: Properties;
constructor(packages: Package[], properties: Properties);
getPackage(uriOrPrefix: UriOrPrefix): Package;
getPackages(): Package[];
registerPackage(pkg: Package): number;
registerType(type: DescriptorType, pkg: Package): void;
mapTypes(nsName: object, iterator: Function, trait?: boolean);
getEffectiveDescriptor(name: string): DescriptorBuilder;
definePackage(target: Descriptor, pkg: Package): void;
}
export class Properties {
model: Moddle;
constructor(model: Moddle);
set(target: ModdleElement, name: string, value: any): void;
get(target: ModdleElement, name: string): any;
define(target: ModdleElement, name: string, options: PropertyDescriptor): void;
defineDescriptor(target: Omit<ModdleElement, '$descriptor'>, descriptor: Descriptor): void;
defineModel(target: Omit<ModdleElement, '$model'>, model: ModdleElement): void;
}
export class Moddle {
properties: Properties;
factory: Factory;
registry: Registry;
export interface Moddle {
typeCache: Record<string, ModdleElement>;
getPackage: typeof Registry.prototype.getPackage;
getPackages: typeof Registry.prototype.getPackages;
constructor(packages: Package[]);
create(type: Descriptor | string, attrs?: any): ModdleElement;
getType(type: string | Descriptor): DescriptorBuilder;
createAny(name: string, nsUri: string, properties?: Properties): void;
getElementDescriptor(element: ModdleElement): Descriptor;
hasType(element: ModdleElement | string, type?: string): boolean;
getPropertyDescriptor(element: ModdleElement, property: Property): Descriptor;
getTypeDescriptor(type: string): Descriptor;
create(type: string, attrs?: any): ModdleElement;
}
export type isBuiltInType = typeof isBuiltIn;
export type isSimpleType = typeof isSimple;
export type parseNameNS = typeof parseName;
}