From 97e538539ea3dc3e460dcf7eb3181390fefb50e9 Mon Sep 17 00:00:00 2001 From: Lesan <1960681385@qq.com> Date: Fri, 29 Aug 2025 10:33:09 +0800 Subject: [PATCH 01/17] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0wangeditor?= =?UTF-8?q?=E4=BA=8C=E6=AC=A1=E5=BC=80=E5=8F=91=E7=9B=B8=E5=85=B3=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index d3097b3db..a79cec967 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@vueuse/core": "^10.9.0", "@wangeditor/editor": "^5.1.23", "@wangeditor/editor-for-vue": "^5.1.10", + "@wangeditor/plugin-mention": "^1.0.0", "@zxcvbn-ts/core": "^3.0.4", "animate.css": "^4.1.1", "axios": "1.9.0", @@ -64,6 +65,7 @@ "pinia-plugin-persistedstate": "^3.2.1", "qrcode": "^1.5.3", "qs": "^6.12.0", + "snabbdom": "^3.6.2", "sortablejs": "^1.15.3", "steady-xml": "^0.1.0", "url": "^0.11.3", -- Gitee From 84de7fcd46ca565dda4c5aef6c95714eab5bc2cb Mon Sep 17 00:00:00 2001 From: Lesan <1960681385@qq.com> Date: Fri, 29 Aug 2025 14:19:52 +0800 Subject: [PATCH 02/17] =?UTF-8?q?feat:=20=E9=80=9A=E8=BF=87wangeditor?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=89=93=E5=8D=B0=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.ts | 5 + src/views/bpm/model/form/ExtraSettings.vue | 48 +++++++- .../bpm/model/form/PrintTemplate/Index.vue | 107 ++++++++++++++++++ .../model/form/PrintTemplate/MentionModal.vue | 99 ++++++++++++++++ .../bpm/model/form/PrintTemplate/index.ts | 9 ++ .../form/PrintTemplate/module/elem-to-html.ts | 12 ++ .../model/form/PrintTemplate/module/index.ts | 16 +++ .../module/menu/ProcessRecordMenu.ts | 42 +++++++ .../PrintTemplate/module/parse-elem-html.ts | 20 ++++ .../model/form/PrintTemplate/module/plugin.ts | 28 +++++ .../form/PrintTemplate/module/render-elem.ts | 72 ++++++++++++ .../form/PrintTemplate/module/utils/dom.ts | 21 ++++ src/views/bpm/model/form/index.vue | 5 +- 13 files changed, 482 insertions(+), 2 deletions(-) create mode 100644 src/views/bpm/model/form/PrintTemplate/Index.vue create mode 100644 src/views/bpm/model/form/PrintTemplate/MentionModal.vue create mode 100644 src/views/bpm/model/form/PrintTemplate/index.ts create mode 100644 src/views/bpm/model/form/PrintTemplate/module/elem-to-html.ts create mode 100644 src/views/bpm/model/form/PrintTemplate/module/index.ts create mode 100644 src/views/bpm/model/form/PrintTemplate/module/menu/ProcessRecordMenu.ts create mode 100644 src/views/bpm/model/form/PrintTemplate/module/parse-elem-html.ts create mode 100644 src/views/bpm/model/form/PrintTemplate/module/plugin.ts create mode 100644 src/views/bpm/model/form/PrintTemplate/module/render-elem.ts create mode 100644 src/views/bpm/model/form/PrintTemplate/module/utils/dom.ts diff --git a/src/main.ts b/src/main.ts index 874f7668d..211ecfbc3 100644 --- a/src/main.ts +++ b/src/main.ts @@ -42,6 +42,9 @@ import Logger from '@/utils/Logger' import VueDOMPurifyHTML from 'vue-dompurify-html' // 解决v-html 的安全隐患 +// wangeditor插件注册 +import {setupWangeditorPlugin} from "@/views/bpm/model/form/PrintTemplate"; + // 创建实例 const setupAll = async () => { const app = createApp(App) @@ -62,6 +65,8 @@ const setupAll = async () => { setupAuth(app) setupMountedFocus(app) + setupWangeditorPlugin() + await router.isReady() app.use(VueDOMPurifyHTML) diff --git a/src/views/bpm/model/form/ExtraSettings.vue b/src/views/bpm/model/form/ExtraSettings.vue index b75fbbd06..73d316a9b 100644 --- a/src/views/bpm/model/form/ExtraSettings.vue +++ b/src/views/bpm/model/form/ExtraSettings.vue @@ -1,5 +1,5 @@ diff --git a/src/views/bpm/model/form/PrintTemplate/Index.vue b/src/views/bpm/model/form/PrintTemplate/Index.vue index 6dff06d6a..dd37e1dec 100644 --- a/src/views/bpm/model/form/PrintTemplate/Index.vue +++ b/src/views/bpm/model/form/PrintTemplate/Index.vue @@ -1,11 +1,11 @@ -- Gitee From 535ccd33890b00c34d8558e433b143b5706eb1f5 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 4 Sep 2025 22:53:11 +0800 Subject: [PATCH 11/17] =?UTF-8?q?review=EF=BC=9A=E3=80=90bpm=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E3=80=91=E6=B5=81=E7=A8=8B=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/processInstance/detail/PrintDialog.vue | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/views/bpm/processInstance/detail/PrintDialog.vue b/src/views/bpm/processInstance/detail/PrintDialog.vue index dfa1fe6bf..527b0e771 100644 --- a/src/views/bpm/processInstance/detail/PrintDialog.vue +++ b/src/views/bpm/processInstance/detail/PrintDialog.vue @@ -22,7 +22,6 @@ const open = async (id: string) => { printData.value = await ProcessInstanceApi.getProcessInstancePrintData(id) initPrintDataMap() parseFormFields() - console.log(printData.value) } finally { loading.value = false } @@ -31,6 +30,7 @@ const open = async (id: string) => { defineExpose({ open }) const parseFormFields = () => { + // TODO @lesan:form field 有可能基于 form-create 什么 api 生成么?好像也挺难的 = = const formFieldsObj = decodeFields(printData.value.formFields) const processVariables = printData.value.processVariables let res: any = [] @@ -39,10 +39,10 @@ const parseFormFields = () => { const name = item['title'] let html = '暂不支持此类型的表单展示' // TODO 完善各类型表单的展示 + // TODO @lesan:要不 UploadImg、UploadFile 特殊处理下,其它就 else processVariables[item['field']]? if (item['type'] === 'input') { html = processVariables[item['field']] - } - if (item['type'] === 'UploadImg') { + } else if (item['type'] === 'UploadImg') { html = `` } printDataMap.value[item['field']] = html @@ -75,7 +75,7 @@ const getPrintTemplateHTML = () => { item.setAttribute('border', '1') item.setAttribute('style', (item.getAttribute('style') || '') + 'border-collapse:collapse;') }) - // 替换mentions + // 替换 mentions let mentions = doc.querySelectorAll('[data-w-e-type="mention"]') mentions.forEach((item) => { const mentionId = JSON.parse(decodeURIComponent(item.getAttribute('data-info') ?? ''))['id'] @@ -83,7 +83,7 @@ const getPrintTemplateHTML = () => { }) // 替换流程记录 let processRecords = doc.querySelectorAll('[data-w-e-type="process-record"]') - let processRecordTable : Element = document.createElement('table') + let processRecordTable: Element = document.createElement('table') if (processRecords.length > 0) { // 构建流程记录html processRecordTable.setAttribute('border', '1') @@ -96,7 +96,7 @@ const getPrintTemplateHTML = () => { headTd.innerHTML = '流程节点' headTr.appendChild(headTd) processRecordTable.appendChild(headTr) - printData.value.approveNodes.forEach(item => { + printData.value.approveNodes.forEach((item) => { const tr = document.createElement('tr') const td1 = document.createElement('td') td1.innerHTML = item.nodeName @@ -107,10 +107,10 @@ const getPrintTemplateHTML = () => { processRecordTable.appendChild(tr) }) } - processRecords.forEach(item => { + processRecords.forEach((item) => { item.innerHTML = processRecordTable.outerHTML }) - // 返回html + // 返回 html return doc.body.innerHTML } -- Gitee 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 12/17] =?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 From bcf8f6c821c441c2875d2d436680a6228aceea17 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 7 Sep 2025 17:21:52 +0800 Subject: [PATCH 15/17] =?UTF-8?q?review=EF=BC=9A=E3=80=90bpm=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E3=80=91=E6=B5=81=E7=A8=8B=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/bpm/processInstance/detail/PrintDialog.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/views/bpm/processInstance/detail/PrintDialog.vue b/src/views/bpm/processInstance/detail/PrintDialog.vue index 4be26eed6..99cde927b 100644 --- a/src/views/bpm/processInstance/detail/PrintDialog.vue +++ b/src/views/bpm/processInstance/detail/PrintDialog.vue @@ -42,6 +42,7 @@ const parseFormFields = () => { // TODO 完善各类型表单的展示 // TODO @lesan:要不 UploadImg、UploadFile 特殊处理下,其它就 else processVariables[item['field']]? // TODO @芋艿:感觉很多都要处理一下,select那些都要转为可读的label,还有子表单那些,都需要处理一下... + // TODO @lesan:有办法基于 form-create api 来读取值么?如果不行,就兜底让大模型生成一些常用的。子表单可以往后放; if (item['type'] === 'input') { html = processVariables[item['field']] } else if (item['type'] === 'UploadImg') { @@ -191,8 +192,8 @@ const printObj = ref({ -- Gitee From ba640310152826d5aada960296847d5fb3a2ed48 Mon Sep 17 00:00:00 2001 From: Lesan <1960681385@qq.com> Date: Mon, 8 Sep 2025 09:57:02 +0800 Subject: [PATCH 16/17] =?UTF-8?q?fix:=20=E6=89=93=E5=8D=B0=E5=8F=AA?= =?UTF-8?q?=E8=83=BD=E6=98=BE=E7=A4=BA=E4=B8=80=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/processInstance/detail/PrintDialog.vue | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/views/bpm/processInstance/detail/PrintDialog.vue b/src/views/bpm/processInstance/detail/PrintDialog.vue index 99cde927b..c152c0196 100644 --- a/src/views/bpm/processInstance/detail/PrintDialog.vue +++ b/src/views/bpm/processInstance/detail/PrintDialog.vue @@ -128,7 +128,7 @@ const printObj = ref({ + + -- Gitee From bd91bd9057a803f2ec7064267db57865a88f2620 Mon Sep 17 00:00:00 2001 From: Lesan <1960681385@qq.com> Date: Mon, 8 Sep 2025 11:27:31 +0800 Subject: [PATCH 17/17] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0radio=E3=80=81c?= =?UTF-8?q?heckbox=E3=80=81select=E6=89=93=E5=8D=B0=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processInstance/detail/PrintDialog.vue | 56 +++++++++++-------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/views/bpm/processInstance/detail/PrintDialog.vue b/src/views/bpm/processInstance/detail/PrintDialog.vue index c152c0196..ab17f8c0f 100644 --- a/src/views/bpm/processInstance/detail/PrintDialog.vue +++ b/src/views/bpm/processInstance/detail/PrintDialog.vue @@ -30,23 +30,37 @@ const open = async (id: string) => { defineExpose({ open }) const parseFormFields = () => { - // TODO @lesan:form field 有可能基于 form-create 什么 api 生成么?好像也挺难的 = = - // 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) { const id = item['field'] const name = item['title'] - let html = '暂不支持此类型的表单展示' - // TODO 完善各类型表单的展示 - // TODO @lesan:要不 UploadImg、UploadFile 特殊处理下,其它就 else processVariables[item['field']]? - // TODO @芋艿:感觉很多都要处理一下,select那些都要转为可读的label,还有子表单那些,都需要处理一下... - // TODO @lesan:有办法基于 form-create api 来读取值么?如果不行,就兜底让大模型生成一些常用的。子表单可以往后放; - if (item['type'] === 'input') { - html = processVariables[item['field']] - } else if (item['type'] === 'UploadImg') { - html = `` + const variable = processVariables[item['field']] + let html = variable + switch (item['type']) { + case 'UploadImg': { + let imgEl = document.createElement('img') + imgEl.setAttribute('src', variable) + imgEl.setAttribute('style', 'max-width: 600px;') + html = imgEl.outerHTML + break + } + case 'radio': + case 'checkbox': + case 'select': { + const options = item['options'] || [] + const temp: any = [] + if (Array.isArray(variable)) { + const labels = options.filter((o) => variable.includes(o.value)).map((o) => o.label) + temp.push(...labels) + } else { + const opt = options.find((o) => o.value === variable) + temp.push(opt.label) + } + html = temp.join(',') + } + // TODO 更多表单打印展示 } printDataMap.value[item['field']] = html res.push({ id, name, html }) @@ -128,7 +142,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 cf357cb1a29a51c7ff90ec4b04feac90ca8c6700 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 6 Sep 2025 10:39:43 +0800 Subject: [PATCH 13/17] =?UTF-8?q?fix=EF=BC=9A=E3=80=90system=20=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=AE=A1=E7=90=86=E3=80=91=E9=82=AE=E7=AE=B1=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E7=9A=84=E5=88=97=E8=A1=A8=E5=AE=BD=E5=BA=A6=E5=A4=AA?= =?UTF-8?q?=E5=B0=8F=EF=BC=8C=E6=A0=B7=E5=BC=8F=E4=B8=91=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/system/mail/template/index.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/views/system/mail/template/index.vue b/src/views/system/mail/template/index.vue index 03ea34ede..5913f3013 100644 --- a/src/views/system/mail/template/index.vue +++ b/src/views/system/mail/template/index.vue @@ -61,7 +61,6 @@ -- 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 14/17] =?UTF-8?q?fix:=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 --- .../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 }} + +
{{ item.description }} -
- +
+