diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index 140c90e8c..a8bee50a5 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -62,6 +62,7 @@ "vue": "catalog:", "vue-dompurify-html": "catalog:", "vue-router": "catalog:", + "vue3-print-nb": "catalog:", "vue3-signature": "catalog:", "vuedraggable": "catalog:" } diff --git a/apps/web-antd/src/api/bpm/model/index.ts b/apps/web-antd/src/api/bpm/model/index.ts index cd2afbc84..e16627fa1 100644 --- a/apps/web-antd/src/api/bpm/model/index.ts +++ b/apps/web-antd/src/api/bpm/model/index.ts @@ -20,6 +20,7 @@ export namespace BpmModelApi { suspensionState: number; formType?: number; formCustomViewPath?: string; + formFields?: string[]; } /** 流程模型 */ diff --git a/apps/web-antd/src/api/bpm/processInstance/index.ts b/apps/web-antd/src/api/bpm/processInstance/index.ts index ecbc03855..06fb2fec1 100644 --- a/apps/web-antd/src/api/bpm/processInstance/index.ts +++ b/apps/web-antd/src/api/bpm/processInstance/index.ts @@ -20,6 +20,7 @@ export namespace BpmProcessInstanceApi { export interface User { avatar: string; + deptName?: string; id: number; nickname: string; } @@ -101,6 +102,22 @@ export namespace BpmProcessInstanceApi { }[]; taskId: string; } + + /** 打印数据任务信息 */ + export interface PrintTask { + description: string; + id: number; + name: string; + signPicUrl?: string; + } + + /** 打印数据 */ + export interface PrintData { + printTemplateEnable: boolean; + printTemplateHtml?: string; + processInstance: ProcessInstance; + tasks: PrintTask[]; + } } /** 查询我的流程实例分页 */ @@ -205,3 +222,10 @@ export async function getProcessInstanceBpmnModelView(id: string) { `/bpm/process-instance/get-bpmn-model-view?id=${id}`, ); } + +/** 获取流程实例打印数据 */ +export async function getProcessInstancePrintData(id: string) { + return requestClient.get( + `/bpm/process-instance/get-print-data?processInstanceId=${id}`, + ); +} diff --git a/apps/web-antd/src/components/form-create/helpers.ts b/apps/web-antd/src/components/form-create/helpers.ts index 902efd665..f92780d75 100644 --- a/apps/web-antd/src/components/form-create/helpers.ts +++ b/apps/web-antd/src/components/form-create/helpers.ts @@ -1,3 +1,5 @@ +import type { Rule } from '@form-create/ant-design-vue'; + import type { Ref } from 'vue'; import type { Menu } from '#/components/form-create/typing'; @@ -34,7 +36,7 @@ export function encodeFields(designerRef: any) { // 解码表单 Fields export function decodeFields(fields: string[]) { - const rule: object[] = []; + const rule: Rule[] = []; fields.forEach((item) => { rule.push(formCreate.parseJson(item)); }); diff --git a/apps/web-antd/src/views/bpm/processInstance/detail/index.vue b/apps/web-antd/src/views/bpm/processInstance/detail/index.vue index 391fa1142..6c0c1b47e 100644 --- a/apps/web-antd/src/views/bpm/processInstance/detail/index.vue +++ b/apps/web-antd/src/views/bpm/processInstance/detail/index.vue @@ -4,7 +4,7 @@ import type { SystemUserApi } from '#/api/system/user'; import { nextTick, onMounted, ref, shallowRef, watch } from 'vue'; -import { Page } from '@vben/common-ui'; +import { Page, useVbenModal } from '@vben/common-ui'; import { BpmFieldPermissionType, BpmModelFormType, @@ -13,6 +13,7 @@ import { DICT_TYPE, } from '@vben/constants'; import { + IconifyIcon, SvgBpmApproveIcon, SvgBpmCancelIcon, SvgBpmRejectIcon, @@ -33,6 +34,7 @@ import { registerComponent } from '#/utils'; import ProcessInstanceBpmnViewer from './modules/bpm-viewer.vue'; import ProcessInstanceOperationButton from './modules/operation-button.vue'; +import ProcessssPrint from './modules/processs-print.vue'; import ProcessInstanceSimpleViewer from './modules/simple-bpm-viewer.vue'; import BpmProcessInstanceTaskList from './modules/task-list.vue'; import ProcessInstanceTimeline from './modules/time-line.vue'; @@ -189,6 +191,16 @@ const refresh = () => { getDetail(); }; +const [PrintModal, printModalApi] = useVbenModal({ + connectedComponent: ProcessssPrint, + destroyOnClose: true, +}); + +/** 打开打印对话框 */ +function handlePrint() { + printModalApi.setData({ processInstanceId: props.id }).open(); +} + /** 监听 Tab 切换,当切换到 "record" 标签时刷新任务列表 */ watch( () => activeTab.value, @@ -218,7 +230,14 @@ onMounted(async () => { }" >
@@ -371,6 +390,8 @@ onMounted(async () => {
+ + diff --git a/apps/web-antd/src/views/bpm/processInstance/detail/modules/processs-print.vue b/apps/web-antd/src/views/bpm/processInstance/detail/modules/processs-print.vue new file mode 100644 index 000000000..60e860668 --- /dev/null +++ b/apps/web-antd/src/views/bpm/processInstance/detail/modules/processs-print.vue @@ -0,0 +1,314 @@ + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 654a6e56f..63085756a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -597,6 +597,9 @@ catalogs: vue-tsc: specifier: 2.2.10 version: 2.2.10 + vue3-print-nb: + specifier: ^0.1.4 + version: 0.1.4 vue3-signature: specifier: ^0.2.4 version: 0.2.4 @@ -857,6 +860,9 @@ importers: vue-router: specifier: 'catalog:' version: 4.6.3(vue@3.5.22(typescript@5.9.3)) + vue3-print-nb: + specifier: 'catalog:' + version: 0.1.4(typescript@5.9.3) vue3-signature: specifier: 'catalog:' version: 0.2.4(vue@3.5.22(typescript@5.9.3)) @@ -11330,6 +11336,9 @@ packages: peerDependencies: vue: ^3.5.17 + vue3-print-nb@0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + vue3-signature@0.2.4: resolution: {integrity: sha512-XFwwFVK9OG3F085pKIq2SlNVqx32WdFH+TXbGEWc5FfEKpx8oMmZuAwZZ50K/pH2FgmJSE8IRwU9DDhrLpd6iA==} peerDependencies: @@ -22022,6 +22031,12 @@ snapshots: is-plain-object: 3.0.1 vue: 3.5.22(typescript@5.9.3) + vue3-print-nb@0.1.4(typescript@5.9.3): + dependencies: + vue: 3.5.22(typescript@5.9.3) + transitivePeerDependencies: + - typescript + vue3-signature@0.2.4(vue@3.5.22(typescript@5.9.3)): dependencies: default-passive-events: 2.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5031b8161..2d498097d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -217,6 +217,7 @@ catalog: vue-router: ^4.5.1 vue-tippy: ^6.7.1 vue-tsc: 2.2.10 + vue3-print-nb: "^0.1.4" vue3-signature: ^0.2.4 vuedraggable: ^4.1.0 vxe-pc-ui: ^4.9.29