diff --git a/apps/web-antd/src/views/bpm/model/form/modules/custom-print-template.vue b/apps/web-antd/src/views/bpm/model/form/modules/custom-print-template.vue index ca18c1216..7133eb252 100644 --- a/apps/web-antd/src/views/bpm/model/form/modules/custom-print-template.vue +++ b/apps/web-antd/src/views/bpm/model/form/modules/custom-print-template.vue @@ -6,7 +6,7 @@ import { computed, onBeforeUnmount, ref, shallowRef } from 'vue'; import { useVbenModal } from '@vben/common-ui'; import Editor from '@tinymce/tinymce-vue'; -import { Alert, Button } from 'ant-design-vue'; +import { Alert } from 'ant-design-vue'; import { setupTinyPlugins } from './tinymce-plugin'; @@ -19,11 +19,14 @@ const props = withDefaults( }, ); +const emits = defineEmits<{ + (e: 'confirm', value: string): void; +}>(); + /** TinyMCE 自托管:https://www.jianshu.com/p/59a9c3802443 */ const tinymceScriptSrc = `${import.meta.env.VITE_BASE}tinymce/tinymce.min.js`; const [Modal, modalApi] = useVbenModal({ - footer: false, async onOpenChange(isOpen: boolean) { if (!isOpen) { return; @@ -40,15 +43,12 @@ const [Modal, modalApi] = useVbenModal({ modalApi.unlock(); } }, + onConfirm() { + emits('confirm', valueHtml.value); + modalApi.close(); + }, }); -const handleConfirm = () => { - /** 通过 setData 传递确认的数据,在父组件的 onConfirm 中获取 */ - modalApi.setData({ confirmedTemplate: valueHtml.value as string }); - modalApi.onConfirm(); - modalApi.close(); -}; - const mentionList = computed(() => { const base: MentionItem[] = [ { id: 'startUser', name: '发起人' }, @@ -99,7 +99,6 @@ onBeforeUnmount(() => { diff --git a/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue b/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue index af725817d..b2d7c2eb0 100644 --- a/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue +++ b/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue @@ -266,23 +266,14 @@ async function validate() { const [PrintTemplateModal, printTemplateModalApi] = useVbenModal({ connectedComponent: PrintTemplate, destroyOnClose: true, - onConfirm() { - // 会在内部模态框中设置数据,这里获取数据, 内部模态框中不能有 onConfirm 方法 - const { confirmedTemplate } = printTemplateModalApi.getData<{ - confirmedTemplate: string; - }>(); - if (confirmedTemplate !== undefined) { - modelData.value.printTemplateSetting.template = confirmedTemplate; - } - }, }); /** 弹出自定义打印模板弹窗 */ -const openPrintTemplateModal = () => { +function openPrintTemplateModal() { printTemplateModalApi .setData({ template: modelData.value.printTemplateSetting.template }) .open(); -}; +} /** 默认的打印模板, 目前自定义模板没有引入自定义样式。 看后续是否需要 */ const defaultTemplate = `

@流程名称

@@ -341,6 +332,10 @@ function handlePrintTemplateEnableChange(checked: any) { } } +function confirmPrintTemplate(template: string) { + modelData.value.printTemplateSetting.template = template; +} + defineExpose({ initData, validate }); diff --git a/apps/web-antd/src/views/bpm/processInstance/detail/modules/process-print.vue b/apps/web-antd/src/views/bpm/processInstance/detail/modules/process-print.vue index 2759edf23..487c7b442 100644 --- a/apps/web-antd/src/views/bpm/processInstance/detail/modules/process-print.vue +++ b/apps/web-antd/src/views/bpm/processInstance/detail/modules/process-print.vue @@ -233,7 +233,6 @@ function getPrintTemplateHTML() { 发起时间 - {{ formatDate(printData.processInstance.startTime) }} diff --git a/apps/web-ele/src/adapter/vxe-table.ts b/apps/web-ele/src/adapter/vxe-table.ts index 27917454f..c93703bbb 100644 --- a/apps/web-ele/src/adapter/vxe-table.ts +++ b/apps/web-ele/src/adapter/vxe-table.ts @@ -85,6 +85,10 @@ setupVbenVxeTable({ src, previewSrcList: [src], class: props?.class, + style: { + width: props?.width ? `${props.width}px` : undefined, + height: props?.height ? `${props.height}px` : undefined, + }, previewTeleported: true, }); }, diff --git a/apps/web-ele/src/router/routes/modules/bpm.ts b/apps/web-ele/src/router/routes/modules/bpm.ts index d732af975..c895a34ee 100644 --- a/apps/web-ele/src/router/routes/modules/bpm.ts +++ b/apps/web-ele/src/router/routes/modules/bpm.ts @@ -9,24 +9,24 @@ const routes: RouteRecordRaw[] = [ hideInMenu: true, }, children: [ - // { - // path: 'task', - // name: 'BpmTask', - // meta: { - // title: '审批中心', - // icon: 'ant-design:history-outlined', - // }, - // children: [ - // { - // path: 'my', - // name: 'BpmTaskMy', - // component: () => import('#/views/bpm/processInstance/index.vue'), - // meta: { - // title: '我的流程', - // }, - // }, - // ], - // }, + { + path: 'task', + name: 'BpmTask', + meta: { + title: '审批中心', + icon: 'ant-design:history-outlined', + }, + children: [ + { + path: 'my', + name: 'BpmTaskMy', + component: () => import('#/views/bpm/processInstance/index.vue'), + meta: { + title: '我的流程', + }, + }, + ], + }, // { // path: 'process-instance/detail', // component: () => import('#/views/bpm/processInstance/detail/index.vue'), @@ -86,18 +86,18 @@ const routes: RouteRecordRaw[] = [ // keepAlive: true, // }, // }, - // { - // path: 'manager/definition', - // component: () => import('#/views/bpm/model/definition/index.vue'), - // name: 'BpmProcessDefinition', - // meta: { - // title: '流程定义', - // activePath: '/bpm/manager/model', - // icon: 'carbon:flow-modeler', - // hideInMenu: true, - // keepAlive: true, - // }, - // }, + { + path: 'manager/definition', + component: () => import('#/views/bpm/model/definition/index.vue'), + name: 'BpmProcessDefinition', + meta: { + title: '流程定义', + activePath: '/bpm/manager/model', + icon: 'carbon:flow-modeler', + hideInMenu: true, + keepAlive: true, + }, + }, { path: 'process-instance/report', component: () => import('#/views/bpm/processInstance/report/index.vue'), diff --git a/apps/web-ele/src/views/bpm/model/data.ts b/apps/web-ele/src/views/bpm/model/data.ts new file mode 100644 index 000000000..59405e77a --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/data.ts @@ -0,0 +1,49 @@ +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { BpmModelApi } from '#/api/bpm/model'; + +import { DICT_TYPE } from '@vben/constants'; + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'name', + title: '流程名称', + minWidth: 200, + slots: { default: 'name' }, + }, + { + field: 'startUserIds', + title: '可见范围', + minWidth: 150, + slots: { default: 'startUserIds' }, + }, + { + field: 'type', + title: '流程类型', + minWidth: 120, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.BPM_MODEL_TYPE }, + }, + }, + { + field: 'formType', + title: '表单信息', + minWidth: 150, + slots: { default: 'formInfo' }, + }, + { + field: 'deploymentTime', + title: '最后发布', + minWidth: 280, + slots: { default: 'deploymentTime' }, + }, + { + title: '操作', + width: 150, + fixed: 'right', + slots: { default: 'actions' }, + }, + ]; +} diff --git a/apps/web-ele/src/views/bpm/model/definition/data.ts b/apps/web-ele/src/views/bpm/model/definition/data.ts new file mode 100644 index 000000000..c5dff8010 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/definition/data.ts @@ -0,0 +1,73 @@ +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; + +import { DICT_TYPE } from '@vben/constants'; + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'id', + title: '定义编号', + minWidth: 250, + }, + { + field: 'name', + title: '流程名称', + minWidth: 150, + }, + { + field: 'icon', + title: '流程图标', + minWidth: 100, + cellRender: { + name: 'CellImage', + props: { + width: 32, + height: 32, + class: 'rounded', + }, + }, + }, + { + field: 'startUsers', + title: '可见范围', + minWidth: 100, + slots: { default: 'startUsers' }, + }, + { + field: 'modelType', + title: '流程类型', + minWidth: 120, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.BPM_MODEL_TYPE }, + }, + }, + { + field: 'formType', + title: '表单信息', + minWidth: 150, + slots: { default: 'formInfo' }, + }, + { + field: 'version', + title: '流程版本', + minWidth: 80, + cellRender: { + name: 'CellTag', + }, + }, + { + field: 'deploymentTime', + title: '部署时间', + minWidth: 180, + formatter: 'formatDateTime', + }, + { + title: '操作', + width: 120, + fixed: 'right', + slots: { default: 'actions' }, + }, + ]; +} diff --git a/apps/web-ele/src/views/bpm/model/definition/index.vue b/apps/web-ele/src/views/bpm/model/definition/index.vue new file mode 100644 index 000000000..7934c7617 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/definition/index.vue @@ -0,0 +1,151 @@ + + + diff --git a/apps/web-ele/src/views/bpm/model/index.vue b/apps/web-ele/src/views/bpm/model/index.vue new file mode 100644 index 000000000..e66062b6b --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/index.vue @@ -0,0 +1,220 @@ + + + diff --git a/apps/web-ele/src/views/bpm/model/modules/category-draggable-model.vue b/apps/web-ele/src/views/bpm/model/modules/category-draggable-model.vue new file mode 100644 index 000000000..575f81f21 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/modules/category-draggable-model.vue @@ -0,0 +1,750 @@ + + + + +