Commit 63055cc559f8eef3fc4d621fb72584115260d69f

Authored by gexinzhineng/gxzn27
1 parent 3a954b47

详情显示bpmn

yudao-ui-admin-vue3/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 import BpmnViewer from 'bpmn-js/lib/Viewer' 10 import BpmnViewer from 'bpmn-js/lib/Viewer'
11 import DefaultEmptyXML from './plugins/defaultEmpty' 11 import DefaultEmptyXML from './plugins/defaultEmpty'
12 import { onMounted, onBeforeUnmount, provide, ref, watch } from 'vue' 12 import { onMounted, onBeforeUnmount, provide, ref, watch } from 'vue'
  13 +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
13 const props = defineProps({ 14 const props = defineProps({
14 value: { 15 value: {
15 // BPMN XML 字符串 16 // BPMN XML 字符串
@@ -265,15 +266,31 @@ const elementHover = (element) => { @@ -265,15 +266,31 @@ const elementHover = (element) => {
265 !elementOverlayIds.value && (elementOverlayIds.value = {}) 266 !elementOverlayIds.value && (elementOverlayIds.value = {})
266 !overlays.value && (overlays.value = bpmnModeler.get('overlays')) 267 !overlays.value && (overlays.value = bpmnModeler.get('overlays'))
267 // 展示信息 268 // 展示信息
  269 + console.log(activityLists.value, 'activityLists.value')
  270 + console.log(element.value, 'element.value')
268 const activity = activityLists.value.find((m) => m.key === element.value.id) 271 const activity = activityLists.value.find((m) => m.key === element.value.id)
  272 + console.log(activity, 'activityactivityactivityactivity')
269 if (!activity) { 273 if (!activity) {
270 return 274 return
271 } 275 }
  276 + console.log(elementOverlayIds.value, 'elementOverlayIds.value')
  277 + console.log(element.value.id, 'element.value.id')
  278 + console.log(
  279 + elementOverlayIds.value[element.value.id],
  280 + 'elementOverlayIds.value[element.value.id]'
  281 + )
  282 + console.log(
  283 + !elementOverlayIds.value[element.value.id],
  284 + '!elementOverlayIds.value[element.value.id]'
  285 + )
  286 + console.log(element.value.type, 'element.value.type')
272 if (!elementOverlayIds.value[element.value.id] && element.value.type !== 'bpmn:Process') { 287 if (!elementOverlayIds.value[element.value.id] && element.value.type !== 'bpmn:Process') {
  288 + console.log('进入')
273 let html = `<div class="element-overlays"> 289 let html = `<div class="element-overlays">
274 <p>Elemet id: ${element.value.id}</p> 290 <p>Elemet id: ${element.value.id}</p>
275 <p>Elemet type: ${element.value.type}</p> 291 <p>Elemet type: ${element.value.type}</p>
276 </div>` // 默认值 292 </div>` // 默认值
  293 + console.log(processInstance.value, 'processInstance')
277 if (element.value.type === 'bpmn:StartEvent' && processInstance.value) { 294 if (element.value.type === 'bpmn:StartEvent' && processInstance.value) {
278 html = `<p>发起人:${processInstance.value.startUser.nickname}</p> 295 html = `<p>发起人:${processInstance.value.startUser.nickname}</p>
279 <p>部门:${processInstance.value.startUser.deptName}</p> 296 <p>部门:${processInstance.value.startUser.deptName}</p>
@@ -286,7 +303,7 @@ const elementHover = (element) =&gt; { @@ -286,7 +303,7 @@ const elementHover = (element) =&gt; {
286 } 303 }
287 html = `<p>审批人:${task.assigneeUser.nickname}</p> 304 html = `<p>审批人:${task.assigneeUser.nickname}</p>
288 <p>部门:${task.assigneeUser.deptName}</p> 305 <p>部门:${task.assigneeUser.deptName}</p>
289 - <p>结果:${getDictDataLabel( 306 + <p>结果:${getIntDictOptions(
290 DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, 307 DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
291 task.result 308 task.result
292 )}</p> 309 )}</p>
@@ -306,7 +323,7 @@ const elementHover = (element) =&gt; { @@ -306,7 +323,7 @@ const elementHover = (element) =&gt; {
306 } 323 }
307 console.log(html) 324 console.log(html)
308 } else if (element.value.type === 'bpmn:EndEvent' && processInstance.value) { 325 } else if (element.value.type === 'bpmn:EndEvent' && processInstance.value) {
309 - html = `<p>结果:${getDictDataLabel( 326 + html = `<p>结果:${getIntDictOptions(
310 DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, 327 DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
311 processInstance.value.result 328 processInstance.value.result
312 )}</p>` 329 )}</p>`
@@ -314,10 +331,19 @@ const elementHover = (element) =&gt; { @@ -314,10 +331,19 @@ const elementHover = (element) =&gt; {
314 html += `<p>结束时间:${parseTime(processInstance.value.endTime)}</p>` 331 html += `<p>结束时间:${parseTime(processInstance.value.endTime)}</p>`
315 } 332 }
316 } 333 }
  334 + console.log(html, 'html111111111111111')
  335 + console.log(
  336 + elementOverlayIds.value[element.value.id],
  337 + 'elementOverlayIds.value[element.value.id]'
  338 + )
317 elementOverlayIds.value[element.value.id] = overlays.value.add(element.value, { 339 elementOverlayIds.value[element.value.id] = overlays.value.add(element.value, {
318 position: { left: 0, bottom: 0 }, 340 position: { left: 0, bottom: 0 },
319 html: `<div class="element-overlays">${html}</div>` 341 html: `<div class="element-overlays">${html}</div>`
320 }) 342 })
  343 + console.log(
  344 + elementOverlayIds.value[element.value.id],
  345 + 'elementOverlayIds.value[element.value.id]'
  346 + )
321 } 347 }
322 } 348 }
323 // 流程图的元素被 out 349 // 流程图的元素被 out
@@ -325,6 +351,50 @@ const elementOut = (element) =&gt; { @@ -325,6 +351,50 @@ const elementOut = (element) =&gt; {
325 overlays.value.remove({ element }) 351 overlays.value.remove({ element })
326 elementOverlayIds.value[element.id] = null 352 elementOverlayIds.value[element.id] = null
327 } 353 }
  354 +const parseTime = (time) => {
  355 + if (!time) {
  356 + return null
  357 + }
  358 + const format = '{y}-{m}-{d} {h}:{i}:{s}'
  359 + let date
  360 + if (typeof time === 'object') {
  361 + date = time
  362 + } else {
  363 + if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
  364 + time = parseInt(time)
  365 + } else if (typeof time === 'string') {
  366 + time = time
  367 + .replace(new RegExp(/-/gm), '/')
  368 + .replace('T', ' ')
  369 + .replace(new RegExp(/\.[\d]{3}/gm), '')
  370 + }
  371 + if (typeof time === 'number' && time.toString().length === 10) {
  372 + time = time * 1000
  373 + }
  374 + date = new Date(time)
  375 + }
  376 + const formatObj = {
  377 + y: date.getFullYear(),
  378 + m: date.getMonth() + 1,
  379 + d: date.getDate(),
  380 + h: date.getHours(),
  381 + i: date.getMinutes(),
  382 + s: date.getSeconds(),
  383 + a: date.getDay()
  384 + }
  385 + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
  386 + let value = formatObj[key]
  387 + // Note: getDay() returns 0 on Sunday
  388 + if (key === 'a') {
  389 + return ['日', '一', '二', '三', '四', '五', '六'][value]
  390 + }
  391 + if (result.length > 0 && value < 10) {
  392 + value = '0' + value
  393 + }
  394 + return value || 0
  395 + })
  396 + return time_str
  397 +}
328 398
329 onMounted(() => { 399 onMounted(() => {
330 xml.value = props.value 400 xml.value = props.value
yudao-ui-admin-vue3/src/views/bpm/processInstance/create.vue
@@ -38,7 +38,13 @@ @@ -38,7 +38,13 @@
38 <span class="el-icon-picture-outline">流程图</span> 38 <span class="el-icon-picture-outline">流程图</span>
39 </div> 39 </div>
40 <!-- TODO 芋艿:待完成??? --> 40 <!-- TODO 芋艿:待完成??? -->
41 - <!-- <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" /> --> 41 + <my-process-viewer
  42 + key="designer"
  43 + v-model="bpmnXML"
  44 + :value="bpmnXML"
  45 + v-bind="bpmnControlForm"
  46 + :prefix="bpmnControlForm.prefix"
  47 + />
42 </el-card> 48 </el-card>
43 </div> 49 </div>
44 </ContentWrap> 50 </ContentWrap>
@@ -89,7 +95,7 @@ const handleSelect = async (row) =&gt; { @@ -89,7 +95,7 @@ const handleSelect = async (row) =&gt; {
89 95
90 // 加载流程图 96 // 加载流程图
91 DefinitionApi.getProcessDefinitionBpmnXMLApi(row.id).then((response) => { 97 DefinitionApi.getProcessDefinitionBpmnXMLApi(row.id).then((response) => {
92 - bpmnXML.value = response.data 98 + bpmnXML.value = response
93 }) 99 })
94 // 情况二:业务表单 100 // 情况二:业务表单
95 } else if (row.formCustomCreatePath) { 101 } else if (row.formCustomCreatePath) {
@@ -126,9 +132,9 @@ const submitForm = async (formData) =&gt; { @@ -126,9 +132,9 @@ const submitForm = async (formData) =&gt; {
126 132
127 // // BPMN 数据 133 // // BPMN 数据
128 const bpmnXML = ref(null) 134 const bpmnXML = ref(null)
129 -// const bpmnControlForm=ref( {  
130 -// prefix: "flowable"  
131 -// }) 135 +const bpmnControlForm = ref({
  136 + prefix: 'flowable'
  137 +})
132 </script> 138 </script>
133 139
134 <style lang="scss"> 140 <style lang="scss">
yudao-ui-admin-vue3/src/views/bpm/processInstance/detail.vue
@@ -144,7 +144,9 @@ @@ -144,7 +144,9 @@
144 <my-process-viewer 144 <my-process-viewer
145 key="designer" 145 key="designer"
146 v-model="bpmnXML" 146 v-model="bpmnXML"
  147 + :value="bpmnXML"
147 v-bind="bpmnControlForm" 148 v-bind="bpmnControlForm"
  149 + :prefix="bpmnControlForm.prefix"
148 :activityData="activityList" 150 :activityData="activityList"
149 :processInstanceData="processInstance" 151 :processInstanceData="processInstance"
150 :taskData="tasks" 152 :taskData="tasks"