From d64b49ba9427d3b70e86d1a9c742e3d6568db457 Mon Sep 17 00:00:00 2001 From: Lesan <1960681385@qq.com> Date: Sat, 6 Sep 2025 10:37:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E4=BB=A3=E7=A0=81=E8=AF=84?= =?UTF-8?q?=E5=AE=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processInstance/detail/PrintDialog.vue | 129 ++++++++++++++---- 1 file changed, 101 insertions(+), 28 deletions(-) diff --git a/src/views/bpm/processInstance/detail/PrintDialog.vue b/src/views/bpm/processInstance/detail/PrintDialog.vue index 527b0e771..37ce48a04 100644 --- a/src/views/bpm/processInstance/detail/PrintDialog.vue +++ b/src/views/bpm/processInstance/detail/PrintDialog.vue @@ -3,7 +3,9 @@ import * as ProcessInstanceApi from '@/api/bpm/processInstance' import { useUserStore } from '@/store/modules/user' import { formatDate } from '@/utils/formatTime' import { DICT_TYPE, getDictLabel } from '@/utils/dict' -import { decodeFields } from '@/utils/formCreate' +import { decodeFields, setConfAndFields2 } from '@/utils/formCreate' +import type { ApiAttrs } from '@form-create/element-ui/types/config' +import formCreate from "@form-create/element-ui"; const userStore = useUserStore() @@ -16,6 +18,21 @@ const printTime = ref(formatDate(new Date(), 'YYYY-MM-DD HH:mm')) const formFields = ref() const printDataMap = ref({}) +const fApi = ref() +const detailForm = ref({ + rule: [], + option: {}, + value: {} +}) + +const fApiH = ref() +const detailFormH = ref({ + rule: [], + option: {}, + value: {} +}) +const fcRef = ref() + const open = async (id: string) => { loading.value = true try { @@ -30,9 +47,38 @@ const open = async (id: string) => { defineExpose({ open }) const parseFormFields = () => { + const processInstance = printData.value.processInstance + const processDefinition = processInstance.processDefinition + setConfAndFields2( + detailForm, + processDefinition.formConf, + processDefinition.formFields, + processInstance.formVariables + ) + detailForm.value.option = { + submitBtn: false, + resetBtn: false, + form: { + disabled: true + } + } + setConfAndFields2( + detailFormH, + processDefinition.formConf, + processDefinition.formFields, + processInstance.formVariables + ) + detailFormH.value.option = { + submitBtn: false, + resetBtn: false, + form: { + disabled: true + } + } + return // TODO @lesan:form field 有可能基于 form-create 什么 api 生成么?好像也挺难的 = = const formFieldsObj = decodeFields(printData.value.formFields) - const processVariables = printData.value.processVariables + const processVariables = printData.value.processInstance.formVariables let res: any = [] for (const item of formFieldsObj) { const id = item['field'] @@ -40,6 +86,7 @@ const parseFormFields = () => { let html = '暂不支持此类型的表单展示' // TODO 完善各类型表单的展示 // TODO @lesan:要不 UploadImg、UploadFile 特殊处理下,其它就 else processVariables[item['field']]? + // TODO @芋艿:感觉很多都要处理一下,select那些都要转为可读的label,还有子表单那些,都需要处理一下... if (item['type'] === 'input') { html = processVariables[item['field']] } else if (item['type'] === 'UploadImg') { @@ -52,15 +99,15 @@ const parseFormFields = () => { } const initPrintDataMap = () => { - printDataMap.value['startUser'] = printData.value.startUser.nickname - printDataMap.value['startUserDept'] = printData.value.startUser.deptName - printDataMap.value['processName'] = printData.value.processName - printDataMap.value['processNum'] = printData.value.processInstanceId - printDataMap.value['startTime'] = printData.value.startTime - printDataMap.value['endTime'] = printData.value.endTime + printDataMap.value['startUser'] = printData.value.processInstance.startUser.nickname + printDataMap.value['startUserDept'] = printData.value.processInstance.startUser.deptName + printDataMap.value['processName'] = printData.value.processInstance.name + printDataMap.value['processNum'] = printData.value.processInstance.id + printDataMap.value['startTime'] = formatDate(printData.value.processInstance.startTime) + printDataMap.value['endTime'] = formatDate(printData.value.processInstance.endTime) printDataMap.value['processStatus'] = getDictLabel( DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS, - printData.value.processStatus + printData.value.processInstance.status ) printDataMap.value['printUsername'] = userName.value printDataMap.value['printTime'] = printTime.value @@ -96,12 +143,12 @@ const getPrintTemplateHTML = () => { headTd.innerHTML = '流程节点' headTr.appendChild(headTd) processRecordTable.appendChild(headTr) - printData.value.approveNodes.forEach((item) => { + printData.value.tasks.forEach((item) => { const tr = document.createElement('tr') const td1 = document.createElement('td') - td1.innerHTML = item.nodeName + td1.innerHTML = item.name const td2 = document.createElement('td') - td2.innerHTML = item.nodeDesc + td2.innerHTML = item.description tr.appendChild(td1) tr.appendChild(td2) processRecordTable.appendChild(tr) @@ -114,6 +161,25 @@ const getPrintTemplateHTML = () => { return doc.body.innerHTML } +const html = ref('') +const handleDialogOpened = async () => { + const processInstance = printData.value.processInstance + const processDefinition = processInstance.processDefinition + let fcData = { + rule: [], + option: {}, + value: {} + } + setConfAndFields2( + fcData, + processDefinition.formConf, + processDefinition.formFields, + processInstance.formVariables + ) + const api = formCreate.create(fcData.rule,fcData.option) + console.log(api) +} + const printObj = ref({ id: 'printDivTag', popTitle: ' ', @@ -128,26 +194,31 @@ const printObj = ref({
-

{{ printData.processName }}

+

{{ printData.processInstance.name }}

{{ '打印人员: ' + userName }}
-
{{ '流程编号: ' + printData.processInstanceId }}
+
{{ '流程编号: ' + printData.processInstance.id }}
{{ '打印时间: ' + printTime }}
- + - + - + @@ -155,12 +226,14 @@ const printObj = ref({

表单内容

- - - + @@ -168,12 +241,12 @@ const printObj = ref({

流程节点

- + - - + + @@ -258,7 +202,7 @@ const printObj = ref({ -- Gitee
发起人{{ printData.startUser.nickname }}{{ printData.processInstance.startUser.nickname }} 发起时间{{ printData.startTime }}{{ formatDate(printData.processInstance.startTime) }}
所属部门{{ printData.startUser.deptName }}{{ printData.processInstance.startUser.deptName }} 流程状态 - {{ getDictLabel(DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS, printData.processStatus) }} + {{ + getDictLabel( + DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS, + printData.processInstance.status + ) + }}
- {{ item.name }} - -
+
+
- {{ item.nodeName }} + {{ item.name }} - {{ item.nodeDesc }} + {{ item.description }}
@@ -185,7 +258,7 @@ const printObj = ref({ -- Gitee From bfd918271f30d3a33aa4c6fbdc2a57cbb8512853 Mon Sep 17 00:00:00 2001 From: LesanOuO <1960681385@qq.com> Date: Sat, 6 Sep 2025 12:02:12 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BB=A3=E7=A0=81=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/form/PrintTemplate/MentionModal.vue | 2 +- .../processInstance/detail/PrintDialog.vue | 98 ++++--------------- 2 files changed, 22 insertions(+), 78 deletions(-) diff --git a/src/views/bpm/model/form/PrintTemplate/MentionModal.vue b/src/views/bpm/model/form/PrintTemplate/MentionModal.vue index 598867e2f..badeb420e 100644 --- a/src/views/bpm/model/form/PrintTemplate/MentionModal.vue +++ b/src/views/bpm/model/form/PrintTemplate/MentionModal.vue @@ -13,7 +13,7 @@ const list = ref([ { id: 'startTime', name: '发起时间' }, { id: 'endTime', name: '结束时间' }, { id: 'processStatus', name: '流程状态' }, - { id: 'printUsername', name: '打印人' }, + { id: 'printUser', name: '打印人' }, { id: 'printTime', name: '打印时间' } ]) const searchedList = computed(() => { diff --git a/src/views/bpm/processInstance/detail/PrintDialog.vue b/src/views/bpm/processInstance/detail/PrintDialog.vue index 37ce48a04..4be26eed6 100644 --- a/src/views/bpm/processInstance/detail/PrintDialog.vue +++ b/src/views/bpm/processInstance/detail/PrintDialog.vue @@ -3,9 +3,7 @@ import * as ProcessInstanceApi from '@/api/bpm/processInstance' import { useUserStore } from '@/store/modules/user' import { formatDate } from '@/utils/formatTime' import { DICT_TYPE, getDictLabel } from '@/utils/dict' -import { decodeFields, setConfAndFields2 } from '@/utils/formCreate' -import type { ApiAttrs } from '@form-create/element-ui/types/config' -import formCreate from "@form-create/element-ui"; +import { decodeFields } from '@/utils/formCreate' const userStore = useUserStore() @@ -18,21 +16,6 @@ const printTime = ref(formatDate(new Date(), 'YYYY-MM-DD HH:mm')) const formFields = ref() const printDataMap = ref({}) -const fApi = ref() -const detailForm = ref({ - rule: [], - option: {}, - value: {} -}) - -const fApiH = ref() -const detailFormH = ref({ - rule: [], - option: {}, - value: {} -}) -const fcRef = ref() - const open = async (id: string) => { loading.value = true try { @@ -47,37 +30,9 @@ const open = async (id: string) => { defineExpose({ open }) const parseFormFields = () => { - const processInstance = printData.value.processInstance - const processDefinition = processInstance.processDefinition - setConfAndFields2( - detailForm, - processDefinition.formConf, - processDefinition.formFields, - processInstance.formVariables - ) - detailForm.value.option = { - submitBtn: false, - resetBtn: false, - form: { - disabled: true - } - } - setConfAndFields2( - detailFormH, - processDefinition.formConf, - processDefinition.formFields, - processInstance.formVariables - ) - detailFormH.value.option = { - submitBtn: false, - resetBtn: false, - form: { - disabled: true - } - } - return // TODO @lesan:form field 有可能基于 form-create 什么 api 生成么?好像也挺难的 = = - const formFieldsObj = decodeFields(printData.value.formFields) + // TODO @芋艿:默认打印可以直接用form-create的预览表单模式,但是自定义模板打印就没法这么做 + const formFieldsObj = decodeFields(printData.value.processInstance.processDefinition.formFields) const processVariables = printData.value.processInstance.formVariables let res: any = [] for (const item of formFieldsObj) { @@ -109,7 +64,7 @@ const initPrintDataMap = () => { DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS, printData.value.processInstance.status ) - printDataMap.value['printUsername'] = userName.value + printDataMap.value['printUser'] = userName.value printDataMap.value['printTime'] = printTime.value } @@ -161,25 +116,6 @@ const getPrintTemplateHTML = () => { return doc.body.innerHTML } -const html = ref('') -const handleDialogOpened = async () => { - const processInstance = printData.value.processInstance - const processDefinition = processInstance.processDefinition - let fcData = { - rule: [], - option: {}, - value: {} - } - setConfAndFields2( - fcData, - processDefinition.formConf, - processDefinition.formFields, - processInstance.formVariables - ) - const api = formCreate.create(fcData.rule,fcData.option) - console.log(api) -} - const printObj = ref({ id: 'printDivTag', popTitle: ' ', @@ -226,14 +162,22 @@ const printObj = ref({

表单内容

- + + + + + + + + + + +
+ {{ item.name }} + +