update 调整类型声明文件

This commit is contained in:
LiuHao 2024-01-21 23:53:04 +08:00
parent aadc43d5dc
commit 1940b1b116
25 changed files with 54 additions and 114 deletions

View File

@ -1,8 +1,7 @@
import { Ref } from 'vue';
import showConfig from '@/components/BpmnDesign/assets/showConfig'; import showConfig from '@/components/BpmnDesign/assets/showConfig';
import { Moddle, Modeler, Modeling } from 'bpmn';
interface Options { interface Options {
modeler: any; modeler: Modeler;
element: any; element: any;
} }
@ -17,7 +16,7 @@ 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'); const modeling = modeler.get<Modeling>('modeling');
modeling.updateProperties(element, properties); modeling.updateProperties(element, properties);
}; };
@ -33,7 +32,7 @@ export default (ops: Options) => {
}; };
const documentationChange = (newVal: string) => { const documentationChange = (newVal: string) => {
if (newVal) { if (newVal) {
const documentationElement = modeler.get('moddle').create('bpmn:Documentation', { text: newVal }); const documentationElement = modeler.get<Moddle>('moddle').create('bpmn:Documentation', { text: newVal });
updateProperties({ documentation: [documentationElement] }); updateProperties({ documentation: [documentationElement] });
} else { } else {
updateProperties({ documentation: null }); updateProperties({ documentation: null });

View File

@ -1,8 +1,9 @@
import { Ref } from 'vue'; import { Ref } from 'vue';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler } from 'bpmn';
interface Options { interface Options {
modeler: any; modeler: Modeler;
element: any; element: any;
} }

View File

@ -16,12 +16,13 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { GatewayPanel } from 'bpmnDesign';
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement'; import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler } from 'bpmn';
import { GatewayPanel } from 'bpmnDesign';
interface PropType { interface PropType {
modeler: any; modeler: Modeler;
element: any; element: any;
categorys?: any[]; categorys?: any[];
} }

View File

@ -23,14 +23,15 @@
<script setup lang="ts"> <script setup lang="ts">
import ExecutionListener from './property/ExecutionListener.vue'; import ExecutionListener from './property/ExecutionListener.vue';
import { ProcessPanel } from 'bpmnDesign';
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement'; import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler } from 'bpmn';
import { ProcessPanel } from 'bpmnDesign';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
interface PropType { interface PropType {
modeler: any; modeler: Modeler;
element: any; element: any;
categorys?: any[]; categorys?: any[];
} }

View File

@ -22,12 +22,13 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { SequenceFlowPanel } from 'bpmnDesign';
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement'; import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler } from 'bpmn';
import { SequenceFlowPanel } from 'bpmnDesign';
interface PropType { interface PropType {
modeler: any; modeler: Modeler;
element: any; element: any;
categorys?: any[]; categorys?: any[];
} }

View File

@ -16,12 +16,13 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { StartEndPanel } from 'bpmnDesign';
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement'; import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler } from 'bpmn';
import { StartEndPanel } from 'bpmnDesign';
interface PropType { interface PropType {
modeler: any; modeler: Modeler;
element: any; element: any;
categorys?: any[]; categorys?: any[];
} }

View File

@ -22,11 +22,12 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement'; import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import { TaskPanel } from 'bpmnDesign';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { Modeler } from 'bpmn';
import { TaskPanel } from 'bpmnDesign';
interface PropType { interface PropType {
modeler: any; modeler: Modeler;
element: any; element: any;
categorys?: any[]; categorys?: any[];
} }

View File

@ -75,12 +75,14 @@
import ListenerParam from './ListenerParam.vue'; import ListenerParam from './ListenerParam.vue';
import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table'; import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
import { ExecutionListenerVO } from 'bpmnDesign'; import { ExecutionListenerVO } from 'bpmnDesign';
import { Moddle, Modeler } from 'bpmn';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import useDialog from '@/hooks/useDialog'; import useDialog from '@/hooks/useDialog';
const emit = defineEmits(['close']); const emit = defineEmits(['close']);
interface PropType { interface PropType {
modeler: any; modeler: Modeler;
element: any; element: any;
categorys?: any[]; categorys?: any[];
} }
@ -95,9 +97,6 @@ const formDialog = useDialog({
title: selectRow.value ? '编辑&保存' : '新增&保存' title: selectRow.value ? '编辑&保存' : '新增&保存'
}); });
const { title, visible, openDialog, closeDialog } = useDialog({
title: '执行监听器'
});
const { showConfig, elementType, updateProperties } = usePanel({ const { showConfig, elementType, updateProperties } = usePanel({
modeler: props.modeler, modeler: props.modeler,
element: toRaw(props.element) element: toRaw(props.element)
@ -178,17 +177,17 @@ const updateElement = () => {
if (data.length) { if (data.length) {
let extensionElements = props.element.businessObject.get('extensionElements'); let extensionElements = props.element.businessObject.get('extensionElements');
if (!extensionElements) { if (!extensionElements) {
extensionElements = props.modeler.get('moddle').create('bpmn:ExtensionElements'); extensionElements = props.modeler.get<Moddle>('moddle').create('bpmn:ExtensionElements');
} }
// //
extensionElements.values = extensionElements.values?.filter((item) => item.$type !== 'flowable:ExecutionListener') ?? []; extensionElements.values = extensionElements.values?.filter((item) => item.$type !== 'flowable:ExecutionListener') ?? [];
data.forEach((item) => { data.forEach((item) => {
const executionListener = props.modeler.get('moddle').create('flowable:ExecutionListener'); const executionListener = props.modeler.get<Moddle>('moddle').create('flowable:ExecutionListener');
executionListener['event'] = item.event; executionListener['event'] = item.event;
executionListener[item.type] = item.className; executionListener[item.type] = item.className;
if (item.params && item.params.length) { if (item.params && item.params.length) {
item.params.forEach((field) => { item.params.forEach((field) => {
const fieldElement = props.modeler.get('moddle').create('flowable:Field'); const fieldElement = props.modeler.get<Moddle>('moddle').create('flowable:Field');
fieldElement['name'] = field.name; fieldElement['name'] = field.name;
fieldElement[field.type] = field.value; fieldElement[field.type] = field.value;
executionListener.get('fields').push(fieldElement); executionListener.get('fields').push(fieldElement);
@ -205,10 +204,6 @@ const updateElement = () => {
} }
}; };
defineExpose({
openDialog
});
const cellDBLClickEvent: VxeTableEvents.CellDblclick<ExecutionListenerVO> = ({ row }) => { const cellDBLClickEvent: VxeTableEvents.CellDblclick<ExecutionListenerVO> = ({ row }) => {
editEvent(row); editEvent(row);
}; };

View File

@ -74,13 +74,15 @@
import ListenerParam from './ListenerParam.vue'; import ListenerParam from './ListenerParam.vue';
import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table'; import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
import { TaskListenerVO } from 'bpmnDesign'; import { TaskListenerVO } from 'bpmnDesign';
import { Moddle, Modeler } from 'bpmn';
import usePanel from '@/components/BpmnDesign/hooks/usePanel'; import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import useDialog from '@/hooks/useDialog'; import useDialog from '@/hooks/useDialog';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
interface PropType { interface PropType {
modeler: any; modeler: Modeler;
element: any; element: any;
categorys?: any[]; categorys?: any[];
} }
@ -88,9 +90,6 @@ const props = withDefaults(defineProps<PropType>(), {
categorys: () => [] categorys: () => []
}); });
const { title, visible, openDialog, closeDialog } = useDialog({
title: '任务监听器'
});
const selectRow = ref<TaskListenerVO | null>(); const selectRow = ref<TaskListenerVO | null>();
const formDialog = useDialog({ const formDialog = useDialog({
title: selectRow.value ? '编辑&保存' : '新增&保存' title: selectRow.value ? '编辑&保存' : '新增&保存'
@ -178,17 +177,17 @@ const updateElement = () => {
if (data.length) { if (data.length) {
let extensionElements = props.element.businessObject.get('extensionElements'); let extensionElements = props.element.businessObject.get('extensionElements');
if (!extensionElements) { if (!extensionElements) {
extensionElements = props.modeler.get('moddle').create('bpmn:ExtensionElements'); extensionElements = props.modeler.get<Moddle>('moddle').create('bpmn:ExtensionElements');
} }
// //
extensionElements.values = extensionElements.values?.filter((item) => item.$type !== 'flowable:TaskListener') ?? []; extensionElements.values = extensionElements.values?.filter((item) => item.$type !== 'flowable:TaskListener') ?? [];
data.forEach((item) => { data.forEach((item) => {
const taskListener = props.modeler.get('moddle').create('flowable:TaskListener'); const taskListener = props.modeler.get<Moddle>('moddle').create('flowable:TaskListener');
taskListener['event'] = item.event; taskListener['event'] = item.event;
taskListener[item.type] = item.className; taskListener[item.type] = item.className;
if (item.params && item.params.length) { if (item.params && item.params.length) {
item.params.forEach((field) => { item.params.forEach((field) => {
const fieldElement = props.modeler.get('moddle').create('flowable:Field'); const fieldElement = props.modeler.get<Moddle>('moddle').create('flowable:Field');
fieldElement['name'] = field.name; fieldElement['name'] = field.name;
fieldElement[field.type] = field.value; fieldElement[field.type] = field.value;
taskListener.get('fields').push(fieldElement); taskListener.get('fields').push(fieldElement);
@ -205,9 +204,6 @@ const updateElement = () => {
} }
}; };
defineExpose({
openDialog
});
const cellDBLClickEvent: VxeTableEvents.CellDblclick<TaskListenerVO> = ({ row }) => { const cellDBLClickEvent: VxeTableEvents.CellDblclick<TaskListenerVO> = ({ row }) => {
editEvent(row); editEvent(row);
}; };

View File

@ -1,8 +1,4 @@
import type { Moddle } from 'moddle'; import { Modeler, Modeling, Canvas, ElementRegistry, Moddle } from 'bpmn';
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';
type ModelerStore = { type ModelerStore = {
modeler: Modeler | undefined; modeler: Modeler | undefined;
@ -58,9 +54,9 @@ export const useModelerStore = defineStore('modeler', () => {
} }
}; };
// 设置流程定义根节点信息 // 设置流程定义根节点信息
const setProcDef = (modeler: any | undefined) => { const setProcDef = (modeler: Modeler | undefined) => {
procDefId.value = modeler.get('canvas').getRootElement().businessObject.get('id'); procDefId.value = modeler.get<Canvas>('canvas').getRootElement().businessObject.get('id');
procDefName.value = modeler.get('canvas').getRootElement().businessObject.get('name'); procDefName.value = modeler.get<Canvas>('canvas').getRootElement().businessObject.get('name');
}; };
return { return {

View File

@ -22,7 +22,7 @@ export interface EditorSettings {
export type ModelerOptions<E extends Element> = ViewerOptions<E> & { export type ModelerOptions<E extends Element> = ViewerOptions<E> & {
additionalModules: ModuleDeclaration[]; additionalModules: ModuleDeclaration[];
moddleExtensions: Object; moddleExtensions: object;
}; };
// bpmn.js 事件参数 // bpmn.js 事件参数

13
src/types/bpmn/index.d.ts vendored Normal file
View File

@ -0,0 +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';
export type Modeler = modeler;
export type Modeling = modeling;
export type Canvas = canvas;
export type ElementRegistry = elementRegistry;
export type Moddle = moddle;
}

View File

@ -28,7 +28,6 @@ declare module 'moddle' {
static hasType(element: ModdleElement, type?: string): boolean; static hasType(element: ModdleElement, type?: string): boolean;
} }
// Factory
export class Factory { export class Factory {
model: Moddle; model: Moddle;
properties: Properties; properties: Properties;
@ -42,19 +41,10 @@ declare module 'moddle' {
export type TypeConverters = { export type TypeConverters = {
[T in Exclude<BuiltinsKeys, 'Element'>]: (s: string) => string | boolean | number; [T in Exclude<BuiltinsKeys, 'Element'>]: (s: string) => string | boolean | number;
}; };
/**
* Convert a type to its real representation
*/
export type coerceType = <T extends Exclude<BuiltinsKeys, 'Element'>>(type: T, value: string) => ReturnType<TypeConverters[T]>; export type coerceType = <T extends Exclude<BuiltinsKeys, 'Element'>>(type: T, value: string) => ReturnType<TypeConverters[T]>;
/**
* Return whether the given type is built-in
*/
export function isBuiltIn(type: BuiltinsKeys): boolean; export function isBuiltIn(type: BuiltinsKeys): boolean;
/**
* Return whether the given type is simple
*/
export function isSimple(type: Exclude<BuiltinsKeys, 'Element'>): boolean; export function isSimple(type: Exclude<BuiltinsKeys, 'Element'>): boolean;
type ParsedName = { type ParsedName = {
@ -63,15 +53,6 @@ declare module 'moddle' {
localName: string; localName: string;
}; };
/**
* Parses a namespaced attribute name of the form (ns:)localName to an object,
* given a default prefix to assume in case no explicit namespace is given.
*
* @param {String} name
* @param {String} [defaultPrefix] the default prefix to take, if none is present.
*
* @return {ParsedName} the parsed name
*/
export function parseName(name: string, defaultPrefix?: string): ParsedName; export function parseName(name: string, defaultPrefix?: string): ParsedName;
// DescriptorBuilder // DescriptorBuilder
@ -156,37 +137,15 @@ declare module 'moddle' {
registerPackage(pkg: Package): number; registerPackage(pkg: Package): number;
/**
* Register a type from a specific package with us
* @param {DescriptorType} type
* @param {Package} pkg
*/
registerType(type: DescriptorType, pkg: Package): void; registerType(type: DescriptorType, pkg: Package): void;
/**
* Traverse the type hierarchy from bottom to top,
* calling iterator with (type, inherited) for all elements in
* the inheritance chain.
*
* @param {Object} nsName
* @param {Function} iterator
* @param {Boolean} [trait=false]
*/
mapTypes(nsName: object, iterator: Function, trait?: boolean); mapTypes(nsName: object, iterator: Function, trait?: boolean);
/**
* Returns the effective descriptor for a type.
*
* @param {String} name the namespaced name (ns:localName) of the type
*
* @return {Descriptor} the resulting effective descriptor
*/
getEffectiveDescriptor(name: string): DescriptorBuilder; getEffectiveDescriptor(name: string): DescriptorBuilder;
definePackage(target: Descriptor, pkg: Package): void; definePackage(target: Descriptor, pkg: Package): void;
} }
//Properties
export class Properties { export class Properties {
model: Moddle; model: Moddle;
@ -203,54 +162,30 @@ declare module 'moddle' {
defineModel(target: Omit<ModdleElement, '$model'>, model: ModdleElement): void; defineModel(target: Omit<ModdleElement, '$model'>, model: ModdleElement): void;
} }
// Moddle
export class Moddle { export class Moddle {
properties: Properties; properties: Properties;
factory: Factory; factory: Factory;
registry: Registry; registry: Registry;
typeCache: Record<string, ModdleElement>; typeCache: Record<string, ModdleElement>;
/**
* Returns a registered package by uri or prefix
*
* @return {Object} the package
*/
getPackage: typeof Registry.prototype.getPackage; getPackage: typeof Registry.prototype.getPackage;
/**
* Returns a snapshot of all known packages
*
* @return {Object} the package
*/
getPackages: typeof Registry.prototype.getPackages; getPackages: typeof Registry.prototype.getPackages;
constructor(packages: Package[]); constructor(packages: Package[]);
create(type: Descriptor | string, attrs: any): ModdleElement; create(type: Descriptor | string, attrs?: any): ModdleElement;
getType(type: string | Descriptor): DescriptorBuilder; getType(type: string | Descriptor): DescriptorBuilder;
createAny(name: string, nsUri: string, properties?: Properties): void; createAny(name: string, nsUri: string, properties?: Properties): void;
/**
* Returns the descriptor for an element
*/
getElementDescriptor(element: ModdleElement): Descriptor; getElementDescriptor(element: ModdleElement): Descriptor;
/**
* Returns true if the given descriptor or instance
* represents the given type.
*
* May be applied to this, if element is omitted.
*/
hasType(element: ModdleElement | string, type?: string): boolean; hasType(element: ModdleElement | string, type?: string): boolean;
/**
* Returns the descriptor of an elements named property
*/
getPropertyDescriptor(element: ModdleElement, property: Property): Descriptor; getPropertyDescriptor(element: ModdleElement, property: Property): Descriptor;
/**
* Returns a mapped type's descriptor
*/
getTypeDescriptor(type: string): Descriptor; getTypeDescriptor(type: string): Descriptor;
} }