This commit is contained in:
bimei 2023-03-02 09:56:43 +08:00
commit 21e20021e8
35 changed files with 217 additions and 127 deletions

View File

@ -8,9 +8,9 @@
"i": "pnpm install",
"dev": "vite --mode base",
"ts:check": "vue-tsc --noEmit",
"build:pro": "vite build --mode pro",
"build:dev": "vite build --mode dev",
"build:test": "npm run ts:check && vite build --mode test",
"build:pro": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode pro",
"build:dev": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode dev",
"build:test": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode test",
"serve:pro": "vite preview --mode pro",
"serve:dev": "vite preview --mode dev",
"serve:test": "vite preview --mode test",

View File

@ -12,7 +12,9 @@ const props = defineProps({
height: propTypes.string,
minWidth: propTypes.string.def('460'),
minHeight: propTypes.string.def('320'),
showFooter: propTypes.bool.def(true)
showFooter: propTypes.bool.def(true),
maskClosable: propTypes.bool.def(false),
escClosable: propTypes.bool.def(false)
})
const getBindValue = computed(() => {

View File

@ -190,12 +190,12 @@
</div>
<XModal title="预览" width="80%" height="90%" v-model="previewModelVisible" destroy-on-close>
<!-- append-to-body -->
<pre v-highlight>
<div v-highlight>
<code class="hljs">
<!-- 高亮代码块 -->
{{ previewResult }}
</code>
</pre>
</div>
<!-- <pre>
<code class="hljs" v-html="highlightedCode(previewType, previewResult)"></code>
</pre> -->
@ -331,7 +331,7 @@ const additionalModules = computed(() => {
//
if (Object.prototype.toString.call(props.additionalModel) == '[object Array]') {
Modules.push(...props.additionalModel)
Modules.push(...(props.additionalModel as any[]))
} else {
props.additionalModel && Modules.push(props.additionalModel)
}

View File

@ -8,9 +8,10 @@
<script setup lang="ts" name="MyProcessPalette">
import { assign } from 'min-dash'
const addTask = (event, options = {}) => {
const ElementFactory = window.bpmnInstances.elementFactory
const create = window.bpmnInstances.modeler.get('create')
const bpmnInstances = () => (window as any).bpmnInstances
const addTask = (event, options: any = {}) => {
const ElementFactory = bpmnInstances().elementFactory
const create = bpmnInstances().modeler.get('create')
console.log(ElementFactory, create)

View File

@ -109,6 +109,7 @@ const bpmnElement = ref()
const timer = ref()
provide('prefix', props.prefix)
provide('width', props.width)
const bpmnInstances = () => (window as any)?.bpmnInstances
const initModels = () => {
// console.log(props, 'props')
// console.log(props.bpmnModeler, 'sakdjjaskdsajdkasdjkadsjk')
@ -121,7 +122,8 @@ const initModels = () => {
}
if (timer.value) {
clearTimeout(timer.value)
window.bpmnInstances = {
const w = window as any
w.bpmnInstances = {
modeler: props.bpmnModeler,
modeling: props.bpmnModeler.get('modeling'),
moddle: props.bpmnModeler.get('moddle'),
@ -134,7 +136,7 @@ const initModels = () => {
}
}
console.log(window.bpmnInstances, 'window.bpmnInstances')
console.log(bpmnInstances(), 'window.bpmnInstances')
getActiveElement()
// })
}
@ -161,8 +163,8 @@ const initFormOnChanged = (element) => {
let activatedElement = element
if (!activatedElement) {
activatedElement =
window.bpmnInstances.elementRegistry.find((el) => el.type === 'bpmn:Process') ??
window.bpmnInstances.elementRegistry.find((el) => el.type === 'bpmn:Collaboration')
bpmnInstances().elementRegistry.find((el) => el.type === 'bpmn:Process') ??
bpmnInstances().elementRegistry.find((el) => el.type === 'bpmn:Collaboration')
}
if (!activatedElement) return
console.log(`
@ -173,7 +175,7 @@ const initFormOnChanged = (element) => {
----------
`)
console.log('businessObject: ', activatedElement.businessObject)
window.bpmnInstances.bpmnElement = activatedElement
bpmnInstances().bpmnElement = activatedElement
bpmnElement.value = activatedElement
elementId.value = activatedElement.id
elementType.value = activatedElement.type.split(':')[1] || ''
@ -191,7 +193,8 @@ onMounted(() => {
}, 100)
})
onBeforeUnmount(() => {
window.bpmnInstances = null
const w = window as any
w.bpmnInstances = null
console.log(props, 'props1')
console.log(props.bpmnModeler, 'props.bpmnModeler1')
})

View File

@ -59,11 +59,12 @@ const rules = reactive({
name: [{ required: true, message: '流程名称不能为空', trigger: 'blur' }]
})
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetBaseInfo = () => {
console.log(window, 'window')
console.log(bpmnElement.value, 'bpmnElement')
bpmnElement.value = window?.bpmnInstances?.bpmnElement
bpmnElement.value = bpmnInstances()?.bpmnElement
console.log(bpmnElement.value, 'resetBaseInfo11111111111')
elementBaseInfo.value = bpmnElement.value.businessObject
needProps.value['type'] = bpmnElement.value.businessObject.$type
@ -125,13 +126,13 @@ const updateBaseInfo = (key) => {
console.log(window, 'window')
console.log(bpmnElement.value, 'bpmnElement')
console.log(toRaw(bpmnElement.value), 'bpmnElement')
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
id: elementBaseInfo.value[key],
di: { id: `${elementBaseInfo.value[key]}_di` }
})
} else {
console.log(attrObj, 'attrObj')
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), attrObj)
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), attrObj)
}
}
onMounted(() => {

View File

@ -72,14 +72,15 @@ const bpmnElement = ref()
const bpmnElementSource = ref()
const bpmnElementSourceRef = ref()
const flowConditionRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetFlowCondition = () => {
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
bpmnElementSource.value = bpmnElement.value.source
bpmnElementSourceRef.value = bpmnElement.value.businessObject.sourceRef
if (
bpmnElementSourceRef.value &&
bpmnElementSourceRef.value.default &&
bpmnElementSourceRef.value.default.id === this.bpmnElement.id
bpmnElementSourceRef.value.default.id === bpmnElement.value.id
) {
//
flowConditionForm.value = { type: 'default' }
@ -113,18 +114,18 @@ const resetFlowCondition = () => {
const updateFlowType = (flowType) => {
//
if (flowType === 'condition') {
flowConditionRef.value = window.bpmnInstances.moddle.create('bpmn:FormalExpression')
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
flowConditionRef.value = bpmnInstances().moddle.create('bpmn:FormalExpression')
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
conditionExpression: flowConditionRef.value
})
return
}
//
if (flowType === 'default') {
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
conditionExpression: null
})
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElementSource.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElementSource.value), {
default: bpmnElement.value
})
return
@ -134,11 +135,11 @@ const updateFlowType = (flowType) => {
bpmnElementSourceRef.value.default &&
bpmnElementSourceRef.value.default.id === bpmnElement.value.id
) {
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElementSource.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElementSource.value), {
default: null
})
}
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
conditionExpression: null
})
}
@ -146,22 +147,22 @@ const updateFlowCondition = () => {
let { conditionType, scriptType, body, resource, language } = flowConditionForm.value
let condition
if (conditionType === 'expression') {
condition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', { body })
condition = bpmnInstances().moddle.create('bpmn:FormalExpression', { body })
} else {
if (scriptType === 'inlineScript') {
condition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', { body, language })
condition = bpmnInstances().moddle.create('bpmn:FormalExpression', { body, language })
// this.$set(this.flowConditionForm, "resource", "");
flowConditionForm.value['resource'] = ''
} else {
// this.$set(this.flowConditionForm, "body", "");
flowConditionForm.value['body'] = ''
condition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', {
condition = bpmnInstances().moddle.create('bpmn:FormalExpression', {
resource,
language
})
}
}
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
conditionExpression: condition
})
}

View File

@ -239,17 +239,18 @@ const elExtensionElements = ref()
const formData = ref()
const otherExtensions = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetFormList = () => {
bpmnELement.value = window.bpmnInstances.bpmnElement
bpmnELement.value = bpmnInstances().bpmnElement
formKey.value = bpmnELement.value.businessObject.formKey
//
elExtensionElements.value =
bpmnELement.value.businessObject.get('extensionElements') ||
window.bpmnInstances.moddle.create('bpmn:ExtensionElements', { values: [] })
bpmnInstances().moddle.create('bpmn:ExtensionElements', { values: [] })
//
formData.value =
elExtensionElements.value.values.filter((ex) => ex.$type === `${prefix}:FormData`)?.[0] ||
window.bpmnInstances.moddle.create(`${prefix}:FormData`, { fields: [] })
bpmnInstances().moddle.create(`${prefix}:FormData`, { fields: [] })
// businessKey formData
businessKey.value = formData.value.businessKey
@ -266,12 +267,12 @@ const resetFormList = () => {
updateElementExtensions()
}
const updateElementFormKey = () => {
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnELement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnELement.value), {
formKey: formKey.value
})
}
const updateElementBusinessKey = () => {
window.bpmnInstances.modeling.updateModdleProperties(toRaw(bpmnELement.value), formData.value, {
bpmnInstances().modeling.updateModdleProperties(toRaw(bpmnELement.value), formData.value, {
businessKey: businessKey.value
})
}
@ -353,37 +354,37 @@ const saveFieldOption = () => {
//
const saveField = () => {
const { id, type, label, defaultValue, datePattern } = formFieldForm.value
const Field = window.bpmnInstances.moddle.create(`${prefix}:FormField`, { id, type, label })
const Field = bpmnInstances().moddle.create(`${prefix}:FormField`, { id, type, label })
defaultValue && (Field.defaultValue = defaultValue)
datePattern && (Field.datePattern = datePattern)
//
if (fieldPropertiesList.value && fieldPropertiesList.value.length) {
const fieldPropertyList = fieldPropertiesList.value.map((fp) => {
return window.bpmnInstances.moddle.create(`${prefix}:Property`, {
return bpmnInstances().moddle.create(`${prefix}:Property`, {
id: fp.id,
value: fp.value
})
})
Field.properties = window.bpmnInstances.moddle.create(`${this.prefix}:Properties`, {
Field.properties = bpmnInstances().moddle.create(`${prefix}:Properties`, {
values: fieldPropertyList
})
}
//
if (fieldConstraintsList.value && fieldConstraintsList.value.length) {
const fieldConstraintList = fieldConstraintsList.value.map((fc) => {
return window.bpmnInstances.moddle.create(`${prefix}:Constraint`, {
return bpmnInstances().moddle.create(`${prefix}:Constraint`, {
name: fc.name,
config: fc.config
})
})
Field.validation = window.bpmnInstances.moddle.create(`${prefix}:Validation`, {
Field.validation = bpmnInstances().moddle.create(`${prefix}:Validation`, {
constraints: fieldConstraintList
})
}
//
if (fieldEnumList.value && fieldEnumList.value.length) {
Field.values = fieldEnumList.value.map((fe) => {
return window.bpmnInstances.moddle.create(`${prefix}:Value`, { name: fe.name, id: fe.id })
return bpmnInstances().moddle.create(`${prefix}:Value`, { name: fe.name, id: fe.id })
})
}
//
@ -421,11 +422,11 @@ const removeField = (field, index) => {
const updateElementExtensions = () => {
//
const newElExtensionElements = window.bpmnInstances.moddle.create(`bpmn:ExtensionElements`, {
const newElExtensionElements = bpmnInstances().moddle.create(`bpmn:ExtensionElements`, {
values: otherExtensions.value.concat(formData.value)
})
//
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnELement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnELement.value), {
extensionElements: newElExtensionElements
})
}

View File

@ -266,9 +266,10 @@ const otherExtensionList = ref()
const bpmnElementListeners = ref()
const listenerFormRef = ref()
const listenerFieldFormRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetListenersList = () => {
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
otherExtensionList.value = []
bpmnElementListeners.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(

View File

@ -313,13 +313,14 @@ const bpmnElementListeners = ref()
const otherExtensionList = ref()
const listenerFormRef = ref()
const listenerFieldFormRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetListenersList = () => {
console.log(
window.bpmnInstances.bpmnElement,
bpmnInstances().bpmnElement,
'window.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElement'
)
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
otherExtensionList.value = []
bpmnElementListeners.value =
bpmnElement.value.businessObject?.extensionElements?.values.filter(

View File

@ -87,6 +87,7 @@ const defaultLoopInstanceForm = ref({
const loopInstanceForm = ref<any>({})
const bpmnElement = ref(null)
const multiLoopInstance = ref(null)
const bpmnInstances = () => (window as any)?.bpmnInstances
const getElementLoop = (businessObject) => {
if (!businessObject.loopCharacteristics) {
@ -112,7 +113,7 @@ const getElementLoop = (businessObject) => {
loopCardinality: businessObject.loopCharacteristics?.loopCardinality?.body ?? ''
}
// businessObject loopCharacteristics
multiLoopInstance.value = window.bpmnInstances.bpmnElement.businessObject.loopCharacteristics
multiLoopInstance.value = bpmnInstances().bpmnElement.businessObject.loopCharacteristics
//
if (
businessObject.loopCharacteristics.extensionElements &&
@ -127,17 +128,17 @@ const changeLoopCharacteristicsType = (type) => {
// this.loopInstanceForm = { ...this.defaultLoopInstanceForm }; //
//
if (type === 'Null') {
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
loopCharacteristics: null
})
return
}
//
if (type === 'StandardLoop') {
const loopCharacteristicsObject = window.bpmnInstances.moddle.create(
const loopCharacteristicsObject = bpmnInstances().moddle.create(
'bpmn:StandardLoopCharacteristics'
)
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
loopCharacteristics: loopCharacteristicsObject
})
multiLoopInstance.value = null
@ -145,17 +146,17 @@ const changeLoopCharacteristicsType = (type) => {
}
//
if (type === 'SequentialMultiInstance') {
multiLoopInstance.value = window.bpmnInstances.moddle.create(
multiLoopInstance.value = bpmnInstances().moddle.create(
'bpmn:MultiInstanceLoopCharacteristics',
{ isSequential: true }
)
} else {
multiLoopInstance.value = window.bpmnInstances.moddle.create(
multiLoopInstance.value = bpmnInstances().moddle.create(
'bpmn:MultiInstanceLoopCharacteristics',
{ collection: '${coll_userList}' }
)
}
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
loopCharacteristics: toRaw(multiLoopInstance.value)
})
}
@ -163,11 +164,11 @@ const changeLoopCharacteristicsType = (type) => {
const updateLoopCardinality = (cardinality) => {
let loopCardinality = null
if (cardinality && cardinality.length) {
loopCardinality = window.bpmnInstances.moddle.create('bpmn:FormalExpression', {
loopCardinality = bpmnInstances().moddle.create('bpmn:FormalExpression', {
body: cardinality
})
}
window.bpmnInstances.modeling.updateModdleProperties(
bpmnInstances().modeling.updateModdleProperties(
toRaw(bpmnElement.value),
multiLoopInstance.value,
{
@ -179,11 +180,11 @@ const updateLoopCardinality = (cardinality) => {
const updateLoopCondition = (condition) => {
let completionCondition = null
if (condition && condition.length) {
completionCondition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', {
completionCondition = bpmnInstances().moddle.create('bpmn:FormalExpression', {
body: condition
})
}
window.bpmnInstances.modeling.updateModdleProperties(
bpmnInstances().modeling.updateModdleProperties(
toRaw(bpmnElement.value),
multiLoopInstance.value,
{
@ -193,14 +194,14 @@ const updateLoopCondition = (condition) => {
}
//
const updateLoopTimeCycle = (timeCycle) => {
const extensionElements = window.bpmnInstances.moddle.create('bpmn:ExtensionElements', {
const extensionElements = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
values: [
window.bpmnInstances.moddle.create(`${prefix}:FailedJobRetryTimeCycle`, {
bpmnInstances().moddle.create(`${prefix}:FailedJobRetryTimeCycle`, {
body: timeCycle
})
]
})
window.bpmnInstances.modeling.updateModdleProperties(
bpmnInstances().modeling.updateModdleProperties(
toRaw(bpmnElement.value),
multiLoopInstance.value,
{
@ -210,7 +211,7 @@ const updateLoopTimeCycle = (timeCycle) => {
}
//
const updateLoopBase = () => {
window.bpmnInstances.modeling.updateModdleProperties(
bpmnInstances().modeling.updateModdleProperties(
toRaw(bpmnElement.value),
multiLoopInstance.value,
{
@ -230,7 +231,7 @@ const updateLoopAsync = (key) => {
} else {
asyncAttr[key] = loopInstanceForm.value[key]
}
window.bpmnInstances.modeling.updateModdleProperties(
bpmnInstances().modeling.updateModdleProperties(
toRaw(bpmnElement.value),
multiLoopInstance.value,
asyncAttr
@ -245,7 +246,7 @@ onBeforeUnmount(() => {
watch(
() => props.businessObject,
(val) => {
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
getElementLoop(val)
},
{ immediate: true }

View File

@ -22,13 +22,14 @@ const props = defineProps({
})
const documentation = ref('')
const bpmnElement = ref()
const bpmnInstances = () => (window as any).bpmnInstances
const updateDocumentation = () => {
;(bpmnElement.value && bpmnElement.value.id === props.id) ||
(bpmnElement.value = (window as any).bpmnInstances.elementRegistry.get(props.id))
const documentations = window.bpmnInstances.bpmnFactory.create('bpmn:Documentation', {
(bpmnElement.value = bpmnInstances().elementRegistry.get(props.id))
const documentations = bpmnInstances().bpmnFactory.create('bpmn:Documentation', {
text: documentation.value
})
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
documentation: [documentations]
})
}
@ -41,7 +42,7 @@ watch(
(id) => {
if (id && id.length) {
nextTick(() => {
const documentations = window.bpmnInstances.bpmnElement.businessObject?.documentation
const documentations = bpmnInstances().bpmnElement.businessObject?.documentation
documentation.value = documentations && documentations.length ? documentations[0].text : ''
})
} else {

View File

@ -70,10 +70,11 @@ const otherExtensionList = ref()
const bpmnElementProperties = ref()
const bpmnElementPropertyList = ref()
const attributeFormRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetAttributesList = () => {
console.log(window, 'windowwindowwindowwindowwindowwindowwindow')
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
otherExtensionList.value = [] //
bpmnElementProperties.value =
// bpmnElement.value.businessObject?.extensionElements?.filter((ex) => {
@ -110,7 +111,7 @@ const removeAttributes = (attr, index) => {
elementPropertyList.value.splice(index, 1)
bpmnElementPropertyList.value.splice(index, 1)
//
const propertiesObject = window.bpmnInstances.moddle.create(`${prefix}:Properties`, {
const propertiesObject = bpmnInstances().moddle.create(`${prefix}:Properties`, {
values: bpmnElementPropertyList.value
})
updateElementExtensions(propertiesObject)
@ -122,7 +123,7 @@ const saveAttribute = () => {
console.log(propertyForm.value, 'propertyForm.value')
const { name, value } = propertyForm.value
if (editingPropertyIndex.value !== -1) {
window.bpmnInstances.modeling.updateModdleProperties(
bpmnInstances().modeling.updateModdleProperties(
toRaw(bpmnElement.value),
toRaw(bpmnElementPropertyList.value)[toRaw(editingPropertyIndex.value)],
{
@ -132,12 +133,12 @@ const saveAttribute = () => {
)
} else {
//
const newPropertyObject = window.bpmnInstances.moddle.create(`${prefix}:Property`, {
const newPropertyObject = bpmnInstances().moddle.create(`${prefix}:Property`, {
name,
value
})
//
const propertiesObject = window.bpmnInstances.moddle.create(`${prefix}:Properties`, {
const propertiesObject = bpmnInstances().moddle.create(`${prefix}:Properties`, {
values: bpmnElementPropertyList.value.concat([newPropertyObject])
})
updateElementExtensions(propertiesObject)
@ -146,10 +147,10 @@ const saveAttribute = () => {
resetAttributesList()
}
const updateElementExtensions = (properties) => {
const extensions = window.bpmnInstances.moddle.create('bpmn:ExtensionElements', {
const extensions = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
values: otherExtensionList.value.concat([properties])
})
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
extensionElements: extensions
})
}

View File

@ -62,10 +62,11 @@ const modelConfig = computed(() => {
return { title: '创建信号', idLabel: '信号ID', nameLabel: '信号名称' }
}
})
const bpmnInstances = () => (window as any)?.bpmnInstances
const initDataList = () => {
console.log(window, 'window')
rootElements.value = window.bpmnInstances.modeler.getDefinitions().rootElements
rootElements.value = bpmnInstances().modeler.getDefinitions().rootElements
messageIdMap.value = {}
signalIdMap.value = {}
messageList.value = []
@ -91,13 +92,13 @@ const addNewObject = () => {
if (messageIdMap.value[modelObjectForm.value.id]) {
message.error('该消息已存在请修改id后重新保存')
}
const messageRef = window.bpmnInstances.moddle.create('bpmn:Message', modelObjectForm.value)
const messageRef = bpmnInstances().moddle.create('bpmn:Message', modelObjectForm.value)
rootElements.value.push(messageRef)
} else {
if (signalIdMap.value[modelObjectForm.value.id]) {
message.error('该信号已存在请修改id后重新保存')
}
const signalRef = window.bpmnInstances.moddle.create('bpmn:Signal', modelObjectForm.value)
const signalRef = bpmnInstances().moddle.create('bpmn:Signal', modelObjectForm.value)
rootElements.value.push(signalRef)
}
modelVisible.value = false

View File

@ -45,11 +45,12 @@ const installedComponent = ref({
})
const bpmnElement = ref()
const bpmnInstances = () => (window as any).bpmnInstances
const changeTaskAsync = () => {
if (!taskConfigForm.value.asyncBefore && !taskConfigForm.value.asyncAfter) {
taskConfigForm.value.exclusive = false
}
window.bpmnInstances.modeling.updateProperties(window.bpmnInstances.bpmnElement, {
bpmnInstances().modeling.updateProperties(bpmnInstances().bpmnElement, {
...taskConfigForm.value
})
}
@ -57,7 +58,7 @@ const changeTaskAsync = () => {
watch(
() => props.id,
() => {
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
taskConfigForm.value.asyncBefore = bpmnElement.value?.businessObject?.asyncBefore
taskConfigForm.value.asyncAfter = bpmnElement.value?.businessObject?.asyncAfter
taskConfigForm.value.exclusive = bpmnElement.value?.businessObject?.exclusive

View File

@ -64,8 +64,9 @@ const bpmnElement = ref<any>()
const bpmnMessageRefsMap = ref<any>()
const bpmnRootElements = ref<any>()
const bpmnInstances = () => (window as any).bpmnInstances
const getBindMessage = () => {
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
bindMessageId.value = bpmnElement.value.businessObject?.messageRef?.id || '-1'
}
const openMessageModel = () => {
@ -77,7 +78,7 @@ const createNewMessage = () => {
message.error('该消息已存在请修改id后重新保存')
return
}
const newMessage = window.bpmnInstances.moddle.create('bpmn:Message', newMessageForm.value)
const newMessage = bpmnInstances().moddle.create('bpmn:Message', newMessageForm.value)
bpmnRootElements.value.push(newMessage)
messageMap.value[newMessageForm.value.id] = newMessageForm.value.name
bpmnMessageRefsMap.value[newMessageForm.value.id] = newMessage
@ -85,11 +86,11 @@ const createNewMessage = () => {
}
const updateTaskMessage = (messageId) => {
if (messageId === '-1') {
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
messageRef: null
})
} else {
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), {
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
messageRef: bpmnMessageRefsMap.value[messageId]
})
}
@ -97,7 +98,7 @@ const updateTaskMessage = (messageId) => {
onMounted(() => {
bpmnMessageRefsMap.value = Object.create(null)
bpmnRootElements.value = window.bpmnInstances.modeler.getDefinitions().rootElements
bpmnRootElements.value = bpmnInstances().modeler.getDefinitions().rootElements
bpmnRootElements.value
.filter((el) => el.$type === 'bpmn:Message')
.forEach((m) => {
@ -113,7 +114,7 @@ onBeforeUnmount(() => {
watch(
() => props.id,
() => {
// bpmnElement.value = window.bpmnInstances.bpmnElement
// bpmnElement.value = bpmnInstances().bpmnElement
nextTick(() => {
getBindMessage()
})

View File

@ -58,6 +58,8 @@ const defaultTaskForm = ref({
const scriptTaskForm = ref<any>({})
const bpmnElement = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetTaskForm = () => {
for (let key in defaultTaskForm.value) {
let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
@ -76,7 +78,7 @@ const updateElementTask = () => {
taskAttr.resource = scriptTaskForm.value.resource || null
taskAttr.script = null
}
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
}
onBeforeUnmount(() => {
@ -86,7 +88,7 @@ onBeforeUnmount(() => {
watch(
() => props.id,
() => {
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
nextTick(() => {
resetTaskForm()
})

View File

@ -53,6 +53,8 @@ const defaultTaskForm = ref({
const userTaskForm = ref<any>({})
// const mockData=ref([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
const bpmnElement = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances
const resetTaskForm = () => {
for (let key in defaultTaskForm.value) {
let value
@ -76,13 +78,13 @@ const updateElementTask = (key) => {
} else {
taskAttr[key] = userTaskForm.value[key] || null
}
window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
}
watch(
() => props.id,
() => {
bpmnElement.value = window.bpmnInstances.bpmnElement
bpmnElement.value = bpmnInstances().bpmnElement
nextTick(() => {
resetTaskForm()
})

View File

@ -1,4 +1,5 @@
import { toRaw } from 'vue'
const bpmnInstances = () => (window as any)?.bpmnInstances
// 创建监听器实例
export function createListenerObject(options, isTask, prefix) {
const listenerObj = Object.create(null)
@ -25,16 +26,16 @@ export function createListenerObject(options, isTask, prefix) {
}
// 任务监听器的 定时器 设置
if (isTask && options.event === 'timeout' && !!options.eventDefinitionType) {
const timeDefinition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', {
const timeDefinition = bpmnInstances().moddle.create('bpmn:FormalExpression', {
body: options.eventTimeDefinitions
})
const TimerEventDefinition = window.bpmnInstances.moddle.create('bpmn:TimerEventDefinition', {
const TimerEventDefinition = bpmnInstances().moddle.create('bpmn:TimerEventDefinition', {
id: `TimerEventDefinition_${uuid(8)}`,
[`time${options.eventDefinitionType.replace(/^\S/, (s) => s.toUpperCase())}`]: timeDefinition
})
listenerObj.eventDefinitions = [TimerEventDefinition]
}
return window.bpmnInstances.moddle.create(
return bpmnInstances().moddle.create(
`${prefix}:${isTask ? 'TaskListener' : 'ExecutionListener'}`,
listenerObj
)
@ -44,7 +45,7 @@ export function createListenerObject(options, isTask, prefix) {
export function createFieldObject(option, prefix) {
const { name, fieldType, string, expression } = option
const fieldConfig = fieldType === 'string' ? { name, string } : { name, expression }
return window.bpmnInstances.moddle.create(`${prefix}:Field`, fieldConfig)
return bpmnInstances().moddle.create(`${prefix}:Field`, fieldConfig)
}
// 创建脚本实例
@ -52,21 +53,21 @@ export function createScriptObject(options, prefix) {
const { scriptType, scriptFormat, value, resource } = options
const scriptConfig =
scriptType === 'inlineScript' ? { scriptFormat, value } : { scriptFormat, resource }
return window.bpmnInstances.moddle.create(`${prefix}:Script`, scriptConfig)
return bpmnInstances().moddle.create(`${prefix}:Script`, scriptConfig)
}
// 更新元素扩展属性
export function updateElementExtensions(element, extensionList) {
const extensions = window.bpmnInstances.moddle.create('bpmn:ExtensionElements', {
const extensions = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
values: extensionList
})
window.bpmnInstances.modeling.updateProperties(toRaw(element), {
bpmnInstances().modeling.updateProperties(toRaw(element), {
extensionElements: extensions
})
}
// 创建一个id
export function uuid(length = 8, chars) {
export function uuid(length = 8, chars?) {
let result = ''
const charsString = chars || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
for (let i = length; i > 0; --i) {

View File

@ -41,6 +41,7 @@ export const useI18n = (
const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => {
if (!key) return ''
if (!key.includes('.') && !namespace) return key
//@ts-ignore
return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters))
}
return {

View File

@ -5,6 +5,7 @@ const TIME_AGO_MESSAGE_MAP: {
'zh-CN': UseTimeAgoMessages
en: UseTimeAgoMessages
} = {
// @ts-ignore
'zh-CN': {
justNow: '刚刚',
past: (n) => (n.match(/\d/) ? `${n}` : n),
@ -17,6 +18,7 @@ const TIME_AGO_MESSAGE_MAP: {
minute: (n) => `${n} 分钟`,
second: (n) => `${n}`
},
// @ts-ignore
en: {
justNow: 'just now',
past: (n) => (n.match(/\d/) ? `${n} ago` : n),

View File

@ -21,6 +21,7 @@ declare module '@vue/runtime-core' {
DictTag: typeof import('./../components/DictTag/src/DictTag.vue')['default']
Echart: typeof import('./../components/Echart/src/Echart.vue')['default']
Editor: typeof import('./../components/Editor/src/Editor.vue')['default']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBadge: typeof import('element-plus/es')['ElBadge']
ElButton: typeof import('element-plus/es')['ElButton']
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
@ -49,6 +50,7 @@ declare module '@vue/runtime-core' {
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
@ -63,13 +65,15 @@ declare module '@vue/runtime-core' {
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
ElSpace: typeof import('element-plus/es')['ElSpace']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTableV2: typeof import('element-plus/es')['ElTableV2']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTransfer: typeof import('element-plus/es')['ElTransfer']
ElTree: typeof import('element-plus/es')['ElTree']

View File

@ -1,4 +1,7 @@
// Generated by 'unplugin-auto-import'
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-auto-import
export {}
declare global {
const DICT_TYPE: typeof import('@/utils/dict')['DICT_TYPE']

View File

@ -17,23 +17,29 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '定义名称',
field: 'name',
table: {
width: 120,
// width: 120,
slots: {
default: 'name_default'
}
}
},
{
title: '流程分类',
title: '定义分类',
field: 'category',
dictType: DICT_TYPE.BPM_MODEL_CATEGORY,
dictClass: 'number'
// dictType: DICT_TYPE.BPM_MODEL_CATEGORY,
// dictClass: 'number',
table: {
// width: 120,
slots: {
default: 'category_default'
}
}
},
{
title: '表单信息',
field: 'formId',
table: {
width: 120,
// width: 200,
slots: {
default: 'formId_default'
}
@ -43,7 +49,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '流程版本',
field: 'version',
table: {
width: 80,
// width: 80,
slots: {
default: 'version_default'
}
@ -53,7 +59,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '激活状态',
field: 'suspensionState',
table: {
width: 80,
// width: 80,
slots: {
default: 'suspensionState_default'
}
@ -63,10 +69,10 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '部署时间',
field: 'deploymentTime',
isForm: false,
formatter: 'formatDate',
table: {
width: 180
}
formatter: 'formatDate'
// table: {
// width: 180
// }
}
]
})

View File

@ -6,6 +6,10 @@
<template #name_default="{ row }">
<XTextButton :title="row.name" @click="handleBpmnDetail(row.id)" />
</template>
<!-- 流程分类 -->
<template #category_default="{ row }">
<DictTag :type="DICT_TYPE.BPM_MODEL_CATEGORY" :value="Number(row?.category)" />
</template>
<!-- 表单信息 -->
<template #formId_default="{ row }">
<XTextButton
@ -43,6 +47,16 @@
v-if="formDetailVisible"
/>
</XModal>
<!-- 流程模型图的预览 -->
<XModal title="流程图" v-model="showBpmnOpen" width="80%" height="90%">
<my-process-viewer
key="designer"
v-model="bpmnXML"
:value="bpmnXML"
v-bind="bpmnControlForm"
:prefix="bpmnControlForm.prefix"
/>
</XModal>
</ContentWrap>
</template>
<script setup lang="ts">
@ -51,8 +65,14 @@ import * as DefinitionApi from '@/api/bpm/definition'
// import * as ModelApi from '@/api/bpm/model'
import { allSchemas } from './definition.data'
import { setConfAndFields2 } from '@/utils/formCreate'
import { DICT_TYPE } from '@/utils/dict'
const message = useMessage() //
const bpmnXML = ref(null)
const showBpmnOpen = ref(false)
const bpmnControlForm = ref({
prefix: 'flowable'
})
// const message = useMessage() //
const router = useRouter() //
const { query } = useRoute() //
@ -89,7 +109,13 @@ const handleFormDetail = async (row) => {
const handleBpmnDetail = (row) => {
// TODO
console.log(row)
message.success('流程组件开发中,预计 2 月底完成')
DefinitionApi.getProcessDefinitionBpmnXMLApi(row).then((response) => {
console.log(response, 'response')
bpmnXML.value = response
//
showBpmnOpen.value = true
})
// message.success(' 2 ')
}
//
@ -97,7 +123,7 @@ const handleAssignRule = (row) => {
router.push({
name: 'BpmTaskAssignRuleList',
query: {
modelId: row.id
processDefinitionId: row.id
}
})
}

View File

@ -43,7 +43,7 @@
</XTable>
</ContentWrap>
<XModal v-model="dialogVisible" :title="dialogTitle">
<XModal v-model="dialogVisible" :title="dialogTitle" :mask-closable="false">
<!-- 对话框(添加 / 修改) -->
<Form
v-if="['create', 'update'].includes(actionType)"

View File

@ -24,6 +24,10 @@
<template #name_default="{ row }">
<XTextButton :title="row.name" @click="handleBpmnDetail(row.id)" />
</template>
<!-- 流程分类 -->
<template #category_default="{ row }">
<DictTag :type="DICT_TYPE.BPM_MODEL_CATEGORY" :value="Number(row?.category)" />
</template>
<!-- 表单信息 -->
<template #formId_default="{ row }">
<XTextButton
@ -429,6 +433,11 @@ const handleUpdate = async (rowId: number) => {
await setDialogTile('edit')
//
saveForm.value = await ModelApi.getModelApi(rowId)
if (saveForm.value.category == null) {
saveForm.value.category = 1
} else {
saveForm.value.category = Number(saveForm.value.category)
}
}
//

View File

@ -44,7 +44,12 @@ const crudSchemas = reactive<VxeCrudSchema>({
field: 'category',
dictType: DICT_TYPE.BPM_MODEL_CATEGORY,
dictClass: 'number',
isSearch: true
isSearch: true,
table: {
slots: {
default: 'category_default'
}
}
},
{
title: '表单信息',

View File

@ -108,7 +108,7 @@ const initModeler = (item) => {
const save = (bpmnXml) => {
const data: ModelVO = {
...model.value,
...(model.value ?? ({} as ModelVO)),
bpmnXml: bpmnXml // bpmnXml
}
console.log(data, 'data')

View File

@ -406,7 +406,7 @@ const getDetail = () => {
nextTick().then(() => {
fApi.value?.btn.show(false)
fApi.value?.resetBtn.show(false)
fApi.value?.disabled(true)
fApi.value?.btn.disabled(true)
})
}

View File

@ -7,7 +7,7 @@
<XButton
type="primary"
preIcon="ep:zoom-in"
title="新建流程"
title="发起流程"
v-hasPermi="['bpm:process-instance:query']"
@click="handleCreate"
/>

View File

@ -45,9 +45,9 @@
<el-select v-model="formData.roleIds" multiple clearable style="width: 100%">
<el-option
v-for="item in roleOptions"
:key="parseInt(item.id)"
:key="item.id"
:label="item.name"
:value="parseInt(item.id)"
:value="item.id"
/>
</el-select>
</el-form-item>

View File

@ -198,6 +198,11 @@ const setDialogTile = (type: string) => {
dialogVisible.value = true
}
// dictTypeValueform
watch(dictTypeValue, (val) => {
unref(typeFormRef)?.setValues({ type: val })
})
//
const submitTypeForm = async () => {
const elForm = unref(typeFormRef)?.getElFormRef()

View File

@ -35,7 +35,7 @@ const [registerTable, { reload, getCheckboxRecords }] = useXTable({
})
const handleUpdateList = async () => {
const list = getCheckboxRecords()
const list = getCheckboxRecords() as any as any[]
if (list.length === 0) {
return
}

View File

@ -5,7 +5,14 @@ const { t } = useI18n()
export const rules = reactive({
username: [required],
nickname: [required],
email: [required],
email: [
{ required: true, message: t('profile.rules.mail'), trigger: 'blur' },
{
type: 'email',
message: t('profile.rules.truemail'),
trigger: ['blur', 'change']
}
],
status: [required],
mobile: [
{