From 6f1ec3e0a33dfcfacb2ba592ac496beb16bfb1ea Mon Sep 17 00:00:00 2001
From: jason <2667446@qq.com>
Date: Thu, 12 Jun 2025 09:20:28 +0800
Subject: [PATCH 01/16] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=20review=20?=
=?UTF-8?q?=E4=B8=AD=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nodes-config/modules/condition-dialog.vue | 25 +++++++++++--------
.../nodes-config/trigger-node-config.vue | 7 +++---
2 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition-dialog.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition-dialog.vue
index f8fea7a2b..dc8d6a862 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition-dialog.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition-dialog.vue
@@ -33,6 +33,18 @@ const [Modal, modalApi] = useVbenModal({
title: '条件配置',
destroyOnClose: true,
draggable: true,
+ onOpenChange(isOpen) {
+ if (isOpen) {
+ // 获取传递的数据
+ const conditionObj = modalApi.getData();
+ if (conditionObj) {
+ conditionData.value.conditionType = conditionObj.conditionType;
+ conditionData.value.conditionExpression =
+ conditionObj.conditionExpression;
+ conditionData.value.conditionGroups = conditionObj.conditionGroups;
+ }
+ }
+ },
async onConfirm() {
// 校验表单
if (!conditionRef.value) return;
@@ -50,17 +62,8 @@ const [Modal, modalApi] = useVbenModal({
},
});
-// TODO: jason open 在 useVbenModal 中 onOpenChange 方法
-function open(conditionObj: any | undefined) {
- if (conditionObj) {
- conditionData.value.conditionType = conditionObj.conditionType;
- conditionData.value.conditionExpression = conditionObj.conditionExpression;
- conditionData.value.conditionGroups = conditionObj.conditionGroups;
- }
- modalApi.open();
-}
-// TODO: jason 不需要暴露expose,直接使用modalApi.setData(formSetting).open()
-defineExpose({ open });
+// TODO xingyu 暴露 modalApi 给父组件是否合适? trigger-node-config.vue 会有多个 conditionDialog 实例
+defineExpose({ modalApi });
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue
index b051f3195..5e3add0d5 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue
@@ -200,8 +200,8 @@ function addFormSettingCondition(
formSetting: FormTriggerSetting,
) {
const conditionDialog = proxy.$refs[`condition-${index}`][0];
- // TODO: jason Modal 使用 useVbenModal 初始化,弹出使用modalApi.setData(formSetting).open()
- conditionDialog.open(formSetting);
+ // 使用modalApi来打开模态框并传递数据
+ conditionDialog.modalApi.setData(formSetting).open();
}
/** 删除条件配置 */
@@ -215,7 +215,8 @@ function openFormSettingCondition(
formSetting: FormTriggerSetting,
) {
const conditionDialog = proxy.$refs[`condition-${index}`][0];
- conditionDialog.open(formSetting);
+ // 使用 modalApi 来打开模态框并传递数据
+ conditionDialog.modalApi.setData(formSetting).open();
}
/** 处理条件配置保存 */
From 5e88462b4e2e6d2991668f93424f8f7c5e63a06c Mon Sep 17 00:00:00 2001
From: jason <2667446@qq.com>
Date: Fri, 13 Jun 2025 22:02:06 +0800
Subject: [PATCH 02/16] =?UTF-8?q?fix:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81?=
=?UTF-8?q?]=20=E6=B5=81=E7=A8=8B=E6=A8=A1=E5=9E=8B=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E6=8E=92=E5=BA=8F=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/category-draggable-model.vue | 503 +++++++++---------
.../src/views/bpm/model/modules/data.ts | 49 ++
2 files changed, 288 insertions(+), 264 deletions(-)
create mode 100644 apps/web-antd/src/views/bpm/model/modules/data.ts
diff --git a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
index a246badf0..837d07152 100644
--- a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
+++ b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
@@ -1,10 +1,11 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/mall/promotion/article/category/modules/form.vue b/apps/web-antd/src/views/mall/promotion/article/category/modules/form.vue
new file mode 100644
index 000000000..c7dee329b
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/article/category/modules/form.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
From fb4af81e3fd68c26b95880e937b114001fcbb8fd Mon Sep 17 00:00:00 2001
From: xingyu4j
Date: Sat, 14 Jun 2025 13:32:59 +0800
Subject: [PATCH 05/16] feat: mall banner
---
.../src/views/mall/promotion/banner/data.ts | 183 ++++++++++++++++++
.../src/views/mall/promotion/banner/index.vue | 145 +++++++++++---
.../mall/promotion/banner/modules/form.vue | 87 +++++++++
3 files changed, 390 insertions(+), 25 deletions(-)
create mode 100644 apps/web-antd/src/views/mall/promotion/banner/data.ts
create mode 100644 apps/web-antd/src/views/mall/promotion/banner/modules/form.vue
diff --git a/apps/web-antd/src/views/mall/promotion/banner/data.ts b/apps/web-antd/src/views/mall/promotion/banner/data.ts
new file mode 100644
index 000000000..fd3abd144
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/banner/data.ts
@@ -0,0 +1,183 @@
+import type { VbenFormSchema } from '#/adapter/form';
+import type { VxeGridPropTypes } from '#/adapter/vxe-table';
+
+import {
+ DICT_TYPE,
+ getDictOptions,
+ getIntDictOptions,
+ getRangePickerDefaultProps,
+} from '#/utils';
+
+/** 新增/修改的表单 */
+export function useFormSchema(): VbenFormSchema[] {
+ return [
+ {
+ component: 'Input',
+ fieldName: 'id',
+ dependencies: {
+ triggerFields: [''],
+ show: () => false,
+ },
+ },
+ {
+ fieldName: 'title',
+ label: 'Banner标题',
+ component: 'Input',
+ rules: 'required',
+ },
+ {
+ fieldName: 'picUrl',
+ label: '图片地址',
+ component: 'ImageUpload',
+ componentProps: {
+ maxSize: 1,
+ },
+ rules: 'required',
+ },
+ {
+ fieldName: 'position',
+ label: '定位',
+ component: 'RadioGroup',
+ componentProps: {
+ options: getDictOptions(DICT_TYPE.PROMOTION_BANNER_POSITION, 'number'),
+ buttonStyle: 'solid',
+ optionType: 'button',
+ },
+ rules: 'required',
+ },
+ {
+ fieldName: 'url',
+ label: '跳转地址',
+ component: 'Input',
+ rules: 'required',
+ },
+ {
+ fieldName: 'sort',
+ label: '排序',
+ component: 'InputNumber',
+ componentProps: {
+ min: 0,
+ controlsPosition: 'right',
+ placeholder: '请输入排序',
+ },
+ rules: 'required',
+ },
+ {
+ fieldName: 'status',
+ label: '状态',
+ component: 'RadioGroup',
+ componentProps: {
+ options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'),
+ buttonStyle: 'solid',
+ optionType: 'button',
+ },
+ rules: 'required',
+ },
+ {
+ fieldName: 'memo',
+ label: '描述',
+ component: 'Textarea',
+ componentProps: {
+ rows: 4,
+ placeholder: '请输入描述',
+ },
+ },
+ ];
+}
+
+/** 列表的搜索表单 */
+export function useGridFormSchema(): VbenFormSchema[] {
+ return [
+ {
+ fieldName: 'title',
+ label: 'Banner标题',
+ component: 'Input',
+ componentProps: {
+ placeholder: '请输入Banner标题',
+ },
+ },
+ {
+ fieldName: 'status',
+ label: '状态',
+ component: 'Select',
+ componentProps: {
+ placeholder: '请选择状态',
+ options: getIntDictOptions(DICT_TYPE.COMMON_STATUS),
+ },
+ },
+ {
+ fieldName: 'createTime',
+ label: '创建时间',
+ component: 'RangePicker',
+ componentProps: {
+ ...getRangePickerDefaultProps(),
+ allowClear: true,
+ },
+ },
+ ];
+}
+
+/** 表格列配置 */
+export function useGridColumns(): VxeGridPropTypes.Columns {
+ return [
+ {
+ title: 'Banner标题',
+ field: 'title',
+ },
+ {
+ title: '图片',
+ field: 'picUrl',
+ width: 80,
+ cellRender: {
+ name: 'CellImage',
+ },
+ },
+ {
+ title: '状态',
+ field: 'status',
+ width: 150,
+ cellRender: {
+ name: 'CellDictTag',
+ props: {
+ dictType: DICT_TYPE.COMMON_STATUS,
+ },
+ },
+ },
+ {
+ title: '定位',
+ field: 'position',
+ width: 150,
+ cellRender: {
+ name: 'CellDictTag',
+ props: {
+ dictType: DICT_TYPE.PROMOTION_BANNER_POSITION,
+ },
+ },
+ },
+ {
+ title: '跳转地址',
+ field: 'url',
+ },
+ {
+ title: '创建时间',
+ field: 'createTime',
+ width: 180,
+ formatter: 'formatDateTime',
+ },
+ {
+ title: '排序',
+ field: 'sort',
+ width: 100,
+ },
+ {
+ title: '描述',
+ field: 'memo',
+ },
+ {
+ title: '操作',
+ width: 180,
+ fixed: 'right',
+ slots: { default: 'actions' },
+ },
+ ];
+}
diff --git a/apps/web-antd/src/views/mall/promotion/banner/index.vue b/apps/web-antd/src/views/mall/promotion/banner/index.vue
index 1fd155eba..d5ad127ca 100644
--- a/apps/web-antd/src/views/mall/promotion/banner/index.vue
+++ b/apps/web-antd/src/views/mall/promotion/banner/index.vue
@@ -1,32 +1,127 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/mall/promotion/banner/modules/form.vue b/apps/web-antd/src/views/mall/promotion/banner/modules/form.vue
new file mode 100644
index 000000000..5d72bdd82
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/banner/modules/form.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
From 382757b4582c2e9e33812a90487e3f0ac3578d60 Mon Sep 17 00:00:00 2001
From: xingyu4j
Date: Sat, 14 Jun 2025 13:49:43 +0800
Subject: [PATCH 06/16] fix: type error
---
.../src/components/select-modal/user-select-modal.vue | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/apps/web-antd/src/components/select-modal/user-select-modal.vue b/apps/web-antd/src/components/select-modal/user-select-modal.vue
index 86d44d25f..681ef2d52 100644
--- a/apps/web-antd/src/components/select-modal/user-select-modal.vue
+++ b/apps/web-antd/src/components/select-modal/user-select-modal.vue
@@ -35,7 +35,7 @@ interface DeptTreeNode {
defineOptions({ name: 'UserSelectModal' });
-const props = withDefaults(
+withDefaults(
defineProps<{
cancelText?: string;
confirmText?: string;
@@ -216,7 +216,9 @@ async function loadUserData(pageNo: number, pageSize: number) {
if (newUsers.length > 0) {
userList.value.push(...newUsers);
}
- } finally {}
+ } finally {
+ //
+ }
}
// 更新右侧列表数据
From 5fefb334aff4aabfc485b3683a385000c06f543b Mon Sep 17 00:00:00 2001
From: xingyu4j
Date: Sat, 14 Jun 2025 14:36:16 +0800
Subject: [PATCH 07/16] fix: cellRender CellImages
---
apps/web-antd/src/adapter/vxe-table.ts | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/apps/web-antd/src/adapter/vxe-table.ts b/apps/web-antd/src/adapter/vxe-table.ts
index 206cf57a1..1af58d866 100644
--- a/apps/web-antd/src/adapter/vxe-table.ts
+++ b/apps/web-antd/src/adapter/vxe-table.ts
@@ -17,7 +17,13 @@ import {
isString,
} from '@vben/utils';
-import { Button, Image, Popconfirm, Switch } from 'ant-design-vue';
+import {
+ Button,
+ Image,
+ ImagePreviewGroup,
+ Popconfirm,
+ Switch,
+} from 'ant-design-vue';
import { DictTag } from '#/components/dict-tag';
import { $t } from '#/locales';
@@ -84,7 +90,11 @@ setupVbenVxeTable({
renderTableDefault(_renderOpts, params) {
const { column, row } = params;
if (column && column.field && row[column.field]) {
- return row[column.field].map((item: any) => h(Image, { src: item }));
+ return h(ImagePreviewGroup, {}, () => {
+ return row[column.field].map((item: any) =>
+ h(Image, { src: item }),
+ );
+ });
}
return '';
},
From 122b835fb781e971b6857210376fc5a178dddd4f Mon Sep 17 00:00:00 2001
From: xingyu4j
Date: Sat, 14 Jun 2025 14:36:28 +0800
Subject: [PATCH 08/16] feat: mall seckill config
---
.../mall/promotion/seckill/config/data.ts | 150 +++++++++++++++
.../mall/promotion/seckill/config/index.vue | 177 +++++++++++++++---
.../promotion/seckill/config/modules/form.vue | 90 +++++++++
3 files changed, 392 insertions(+), 25 deletions(-)
create mode 100644 apps/web-antd/src/views/mall/promotion/seckill/config/data.ts
create mode 100644 apps/web-antd/src/views/mall/promotion/seckill/config/modules/form.vue
diff --git a/apps/web-antd/src/views/mall/promotion/seckill/config/data.ts b/apps/web-antd/src/views/mall/promotion/seckill/config/data.ts
new file mode 100644
index 000000000..db00e64ca
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/seckill/config/data.ts
@@ -0,0 +1,150 @@
+import type { VbenFormSchema } from '#/adapter/form';
+import type { VxeTableGridOptions } from '#/adapter/vxe-table';
+import type { MallSeckillConfigApi } from '#/api/mall/promotion/seckill/seckillConfig';
+
+import { DICT_TYPE, getDictOptions, getIntDictOptions } from '#/utils';
+
+/** 新增/修改的表单 */
+export function useFormSchema(): VbenFormSchema[] {
+ return [
+ {
+ component: 'Input',
+ fieldName: 'id',
+ dependencies: {
+ triggerFields: [''],
+ show: () => false,
+ },
+ },
+ {
+ fieldName: 'name',
+ label: '秒杀时段名称',
+ component: 'Input',
+ rules: 'required',
+ },
+ {
+ fieldName: 'startTime',
+ label: '开始时间点',
+ component: 'TimePicker',
+ componentProps: {
+ format: 'HH:mm',
+ valueFormat: 'HH:mm',
+ placeholder: '请选择开始时间点',
+ },
+ rules: 'required',
+ },
+ {
+ fieldName: 'endTime',
+ label: '结束时间点',
+ component: 'TimePicker',
+ componentProps: {
+ format: 'HH:mm',
+ valueFormat: 'HH:mm',
+ placeholder: '请选择结束时间点',
+ },
+ rules: 'required',
+ },
+ {
+ fieldName: 'sliderPicUrls',
+ label: '秒杀轮播图',
+ component: 'ImageUpload',
+ componentProps: {
+ multiple: true,
+ maxNumber: 5,
+ },
+ },
+ {
+ fieldName: 'status',
+ label: '状态',
+ component: 'RadioGroup',
+ componentProps: {
+ options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'),
+ buttonStyle: 'solid',
+ optionType: 'button',
+ },
+ rules: 'required',
+ },
+ ];
+}
+
+/** 列表的搜索表单 */
+export function useGridFormSchema(): VbenFormSchema[] {
+ return [
+ {
+ fieldName: 'name',
+ label: '秒杀时段名称',
+ component: 'Input',
+ componentProps: {
+ placeholder: '请输入秒杀时段名称',
+ },
+ },
+ {
+ fieldName: 'status',
+ label: '状态',
+ component: 'Select',
+ componentProps: {
+ placeholder: '请选择状态',
+ options: getIntDictOptions(DICT_TYPE.COMMON_STATUS),
+ },
+ },
+ ];
+}
+
+/** 表格列配置 */
+export function useGridColumns(
+ onStatusChange?: (
+ newStatus: number,
+ row: T,
+ ) => PromiseLike,
+): VxeTableGridOptions['columns'] {
+ return [
+ {
+ title: '秒杀时段名称',
+ field: 'name',
+ width: 200,
+ },
+ {
+ title: '开始时间点',
+ field: 'startTime',
+ width: 120,
+ },
+ {
+ title: '结束时间点',
+ field: 'endTime',
+ width: 120,
+ },
+ {
+ title: '秒杀轮播图',
+ field: 'sliderPicUrls',
+ cellRender: {
+ name: 'CellImages',
+ },
+ },
+ {
+ title: '活动状态',
+ field: 'status',
+ width: 100,
+ cellRender: {
+ attrs: { beforeChange: onStatusChange },
+ name: 'CellSwitch',
+ props: {
+ checkedValue: 1,
+ checkedChildren: '启用',
+ unCheckedValue: 0,
+ unCheckedChildren: '禁用',
+ },
+ },
+ },
+ {
+ title: '创建时间',
+ field: 'createTime',
+ width: 180,
+ formatter: 'formatDateTime',
+ },
+ {
+ title: '操作',
+ width: 180,
+ fixed: 'right',
+ slots: { default: 'actions' },
+ },
+ ];
+}
diff --git a/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue b/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue
index 9e2d46335..c6b7a45bd 100644
--- a/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue
+++ b/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue
@@ -1,32 +1,159 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/mall/promotion/seckill/config/modules/form.vue b/apps/web-antd/src/views/mall/promotion/seckill/config/modules/form.vue
new file mode 100644
index 000000000..151cde54f
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/seckill/config/modules/form.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
From 0eb81bd33231c0554ebe26a745be9d48f8cc93af Mon Sep 17 00:00:00 2001
From: xingyu4j
Date: Sat, 14 Jun 2025 20:35:13 +0800
Subject: [PATCH 09/16] fix: vxe Amount
---
apps/web-antd/src/adapter/vxe-table.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/apps/web-antd/src/adapter/vxe-table.ts b/apps/web-antd/src/adapter/vxe-table.ts
index 1af58d866..777fe23cf 100644
--- a/apps/web-antd/src/adapter/vxe-table.ts
+++ b/apps/web-antd/src/adapter/vxe-table.ts
@@ -11,7 +11,7 @@ import {
useVbenVxeGrid,
} from '@vben/plugins/vxe-table';
import {
- floatToFixed2,
+ erpNumberFormatter,
formatToFractionDigit,
isFunction,
isString,
@@ -333,8 +333,8 @@ setupVbenVxeTable({
});
vxeUI.formats.add('formatAmount2', {
- tableCellFormatMethod({ cellValue }) {
- return `${floatToFixed2(cellValue)}元`;
+ tableCellFormatMethod({ cellValue }, digits = 2) {
+ return `${erpNumberFormatter(cellValue, digits)}元`;
},
});
},
From 96ea1f98c0dd3663e2af1688b2de9271c7621856 Mon Sep 17 00:00:00 2001
From: xingyu4j
Date: Sat, 14 Jun 2025 20:35:34 +0800
Subject: [PATCH 10/16] fix: product
---
apps/web-antd/src/views/crm/product/data.ts | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/apps/web-antd/src/views/crm/product/data.ts b/apps/web-antd/src/views/crm/product/data.ts
index 2ccfe6dfd..b51855cb8 100644
--- a/apps/web-antd/src/views/crm/product/data.ts
+++ b/apps/web-antd/src/views/crm/product/data.ts
@@ -5,6 +5,7 @@ import { handleTree } from '@vben/utils';
import { z } from '#/adapter/form';
import { getProductCategoryList } from '#/api/crm/product/category';
+import { getSimpleUserList } from '#/api/system/user';
import { CommonStatusEnum, DICT_TYPE, getDictOptions } from '#/utils';
/** 新增/修改的表单 */
@@ -24,6 +25,16 @@ export function useFormSchema(): VbenFormSchema[] {
label: '产品名称',
rules: 'required',
},
+ {
+ component: 'ApiSelect',
+ fieldName: 'ownerUserId',
+ label: '负责人',
+ rules: 'required',
+ componentProps: {
+ api: getSimpleUserList,
+ fieldNames: { label: 'nickname', value: 'id' },
+ },
+ },
{
component: 'Input',
fieldName: 'no',
@@ -32,7 +43,7 @@ export function useFormSchema(): VbenFormSchema[] {
},
{
component: 'ApiTreeSelect',
- fieldName: 'categoryName',
+ fieldName: 'categoryId',
label: '产品类型',
rules: 'required',
componentProps: {
From 1dd0588a39349d4efa2878fa1970b457b36e39e8 Mon Sep 17 00:00:00 2001
From: jason <2667446@qq.com>
Date: Sat, 14 Jun 2025 22:02:16 +0800
Subject: [PATCH 11/16] =?UTF-8?q?fix:=20code=20review=20=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/web-antd/src/api/bpm/category/index.ts | 15 +++---
apps/web-antd/src/api/bpm/form/index.ts | 2 +-
apps/web-antd/src/api/bpm/model/index.ts | 23 +++++----
.../src/api/bpm/processInstance/index.ts | 4 +-
.../web-antd/src/views/bpm/category/index.vue | 6 +--
.../src/views/bpm/category/modules/form.vue | 6 +--
.../bpm/category/modules/rename-form.vue | 6 +--
.../src/views/bpm/model/form/index.vue | 2 +-
.../bpm/model/form/modules/basic-info.vue | 2 +-
.../modules/category-draggable-model.vue | 48 +++++++++----------
.../src/views/bpm/model/modules/data.ts | 10 ++--
.../bpm/processInstance/create/index.vue | 4 +-
12 files changed, 62 insertions(+), 66 deletions(-)
diff --git a/apps/web-antd/src/api/bpm/category/index.ts b/apps/web-antd/src/api/bpm/category/index.ts
index d622183f0..d8b5a9b3d 100644
--- a/apps/web-antd/src/api/bpm/category/index.ts
+++ b/apps/web-antd/src/api/bpm/category/index.ts
@@ -3,9 +3,8 @@ import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace BpmCategoryApi {
- /** 流程分类 VO */
- // TODO @jason:不用 VO 后缀哈
- export interface CategoryVO {
+ /** 流程分类 */
+ export interface Category {
id: number;
name: string;
code: string;
@@ -17,7 +16,7 @@ export namespace BpmCategoryApi {
/** 查询流程分类分页 */
export async function getCategoryPage(params: PageParam) {
- return requestClient.get>(
+ return requestClient.get>(
'/bpm/category/page',
{ params },
);
@@ -25,18 +24,18 @@ export async function getCategoryPage(params: PageParam) {
/** 查询流程分类详情 */
export async function getCategory(id: number) {
- return requestClient.get(
+ return requestClient.get(
`/bpm/category/get?id=${id}`,
);
}
/** 新增流程分类 */
-export async function createCategory(data: BpmCategoryApi.CategoryVO) {
+export async function createCategory(data: BpmCategoryApi.Category) {
return requestClient.post('/bpm/category/create', data);
}
/** 修改流程分类 */
-export async function updateCategory(data: BpmCategoryApi.CategoryVO) {
+export async function updateCategory(data: BpmCategoryApi.Category) {
return requestClient.put('/bpm/category/update', data);
}
@@ -47,7 +46,7 @@ export async function deleteCategory(id: number) {
/** 查询流程分类列表 */
export async function getCategorySimpleList() {
- return requestClient.get(
+ return requestClient.get(
`/bpm/category/simple-list`,
);
}
diff --git a/apps/web-antd/src/api/bpm/form/index.ts b/apps/web-antd/src/api/bpm/form/index.ts
index 1c14a67e8..252d4d420 100644
--- a/apps/web-antd/src/api/bpm/form/index.ts
+++ b/apps/web-antd/src/api/bpm/form/index.ts
@@ -4,7 +4,7 @@ import { requestClient } from '#/api/request';
export namespace BpmFormApi {
/** 流程表单 */
- // TODO @jason:不用 VO 后缀哈
+ // TODO @ziye:不用 VO 后缀哈
export interface FormVO {
id?: number | undefined;
name: string;
diff --git a/apps/web-antd/src/api/bpm/model/index.ts b/apps/web-antd/src/api/bpm/model/index.ts
index 655cfb034..443b85c5e 100644
--- a/apps/web-antd/src/api/bpm/model/index.ts
+++ b/apps/web-antd/src/api/bpm/model/index.ts
@@ -11,9 +11,8 @@ export namespace BpmModelApi {
deptName?: string;
}
- /** 流程定义 VO */
- // TODO @jason:不用 VO 后缀哈
- export interface ProcessDefinitionVO {
+ /** 流程定义 */
+ export interface ProcessDefinition {
id: string;
key?: string;
version: number;
@@ -23,8 +22,8 @@ export namespace BpmModelApi {
formCustomViewPath?: string;
}
- /** 流程模型 VO */
- export interface ModelVO {
+ /** 流程模型 */
+ export interface Model {
id: number;
key: string;
name: string;
@@ -36,7 +35,7 @@ export namespace BpmModelApi {
formId: number;
formCustomCreatePath: string;
formCustomViewPath: string;
- processDefinition: ProcessDefinitionVO;
+ processDefinition: ProcessDefinition;
status: number;
remark: string;
createTime: string;
@@ -49,23 +48,23 @@ export namespace BpmModelApi {
export interface ModelCategoryInfo {
id: number;
name: string;
- modelList: BpmModelApi.ModelVO[];
+ modelList: BpmModelApi.Model[];
}
/** 获取流程模型列表 */
export async function getModelList(name: string | undefined) {
- return requestClient.get('/bpm/model/list', {
+ return requestClient.get('/bpm/model/list', {
params: { name },
});
}
/** 获取流程模型详情 */
export async function getModel(id: string) {
- return requestClient.get(`/bpm/model/get?id=${id}`);
+ return requestClient.get(`/bpm/model/get?id=${id}`);
}
/** 更新流程模型 */
-export async function updateModel(data: BpmModelApi.ModelVO) {
+export async function updateModel(data: BpmModelApi.Model) {
return requestClient.put('/bpm/model/update', data);
}
@@ -78,7 +77,7 @@ export async function updateModelSortBatch(ids: number[]) {
}
/** 更新流程模型的 BPMN XML */
-export async function updateModelBpmn(data: BpmModelApi.ModelVO) {
+export async function updateModelBpmn(data: BpmModelApi.Model) {
return requestClient.put('/bpm/model/update-bpmn', data);
}
@@ -92,7 +91,7 @@ export async function updateModelState(id: number, state: number) {
}
/** 创建流程模型 */
-export async function createModel(data: BpmModelApi.ModelVO) {
+export async function createModel(data: BpmModelApi.Model) {
return requestClient.post('/bpm/model/create', data);
}
diff --git a/apps/web-antd/src/api/bpm/processInstance/index.ts b/apps/web-antd/src/api/bpm/processInstance/index.ts
index 67a6d9cf6..80ede2b76 100644
--- a/apps/web-antd/src/api/bpm/processInstance/index.ts
+++ b/apps/web-antd/src/api/bpm/processInstance/index.ts
@@ -53,7 +53,7 @@ export namespace BpmProcessInstanceApi {
formVariables: Record;
id: number;
name: string;
- processDefinition?: BpmModelApi.ProcessDefinitionVO;
+ processDefinition?: BpmModelApi.ProcessDefinition;
processDefinitionId: string;
remark: string;
result: number;
@@ -67,7 +67,7 @@ export namespace BpmProcessInstanceApi {
export type ApprovalDetail = {
activityNodes: BpmProcessInstanceApi.ApprovalNodeInfo[];
formFieldsPermission: any;
- processDefinition: BpmModelApi.ProcessDefinitionVO;
+ processDefinition: BpmModelApi.ProcessDefinition;
processInstance: BpmProcessInstanceApi.ProcessInstanceVO;
status: number;
todoTask: BpmTaskApi.TaskVO;
diff --git a/apps/web-antd/src/views/bpm/category/index.vue b/apps/web-antd/src/views/bpm/category/index.vue
index e1f762e7e..7d840c215 100644
--- a/apps/web-antd/src/views/bpm/category/index.vue
+++ b/apps/web-antd/src/views/bpm/category/index.vue
@@ -29,12 +29,12 @@ function handleCreate() {
}
/** 编辑流程分类 */
-function handleEdit(row: BpmCategoryApi.CategoryVO) {
+function handleEdit(row: BpmCategoryApi.Category) {
formModalApi.setData(row).open();
}
/** 删除流程分类 */
-async function handleDelete(row: BpmCategoryApi.CategoryVO) {
+async function handleDelete(row: BpmCategoryApi.Category) {
const hideLoading = message.loading({
content: $t('ui.actionMessage.deleting', [row.code]),
key: 'action_key_msg',
@@ -77,7 +77,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
refresh: { code: 'query' },
search: true,
},
- } as VxeTableGridOptions,
+ } as VxeTableGridOptions,
});
diff --git a/apps/web-antd/src/views/bpm/category/modules/form.vue b/apps/web-antd/src/views/bpm/category/modules/form.vue
index 9705a1fb9..0c8c3e1a1 100644
--- a/apps/web-antd/src/views/bpm/category/modules/form.vue
+++ b/apps/web-antd/src/views/bpm/category/modules/form.vue
@@ -18,7 +18,7 @@ import { $t } from '#/locales';
import { useFormSchema } from '../data';
const emit = defineEmits(['success']);
-const formData = ref();
+const formData = ref();
const getTitle = computed(() => {
return formData.value?.id
? $t('ui.actionTitle.edit', ['流程分类'])
@@ -39,7 +39,7 @@ const [Modal, modalApi] = useVbenModal({
}
modalApi.lock();
// 提交表单
- const data = (await formApi.getValues()) as BpmCategoryApi.CategoryVO;
+ const data = (await formApi.getValues()) as BpmCategoryApi.Category;
try {
await (formData.value?.id ? updateCategory(data) : createCategory(data));
// 关闭并提示
@@ -56,7 +56,7 @@ const [Modal, modalApi] = useVbenModal({
return;
}
// 加载数据
- const data = modalApi.getData();
+ const data = modalApi.getData();
if (!data || !data.id) {
return;
}
diff --git a/apps/web-antd/src/views/bpm/category/modules/rename-form.vue b/apps/web-antd/src/views/bpm/category/modules/rename-form.vue
index ba68a44ef..acabd37f7 100644
--- a/apps/web-antd/src/views/bpm/category/modules/rename-form.vue
+++ b/apps/web-antd/src/views/bpm/category/modules/rename-form.vue
@@ -12,7 +12,7 @@ import { getCategory, updateCategory } from '#/api/bpm/category';
import { $t } from '#/locales';
const emit = defineEmits(['success']);
-const formData = ref();
+const formData = ref();
// 定义表单结构
const formSchema = [
@@ -53,7 +53,7 @@ const [Modal, modalApi] = useVbenModal({
status: formData.value?.status,
description: formData.value?.description,
sort: formData.value?.sort,
- } as BpmCategoryApi.CategoryVO;
+ } as BpmCategoryApi.Category;
try {
await updateCategory(data);
@@ -74,7 +74,7 @@ const [Modal, modalApi] = useVbenModal({
}
// 加载数据
- const data = modalApi.getData();
+ const data = modalApi.getData();
if (!data || !data.id) {
return;
diff --git a/apps/web-antd/src/views/bpm/model/form/index.vue b/apps/web-antd/src/views/bpm/model/form/index.vue
index 8f9f79b3b..4f655bbe6 100644
--- a/apps/web-antd/src/views/bpm/model/form/index.vue
+++ b/apps/web-antd/src/views/bpm/model/form/index.vue
@@ -133,7 +133,7 @@ provide('modelData', formData);
// 数据列表
const formList = ref([]);
-const categoryList = ref([]);
+const categoryList = ref([]);
const userList = ref([]);
const deptList = ref([]);
diff --git a/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue b/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue
index 83c164618..5c4a6caf2 100644
--- a/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue
+++ b/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue
@@ -29,7 +29,7 @@ import { DICT_TYPE, getBoolDictOptions, getIntDictOptions } from '#/utils';
const props = defineProps({
categoryList: {
- type: Array as PropType,
+ type: Array as PropType,
required: true,
},
userList: {
diff --git a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
index 837d07152..fed9ecf6a 100644
--- a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
+++ b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
@@ -5,7 +5,8 @@ import type { BpmModelApi, ModelCategoryInfo } from '#/api/bpm/model';
import { computed, ref, watchEffect } from 'vue';
import { useRouter } from 'vue-router';
-import { confirm, useVbenModal } from '@vben/common-ui';
+import { useAccess } from '@vben/access';
+import { confirm, EllipsisText, useVbenModal } from '@vben/common-ui';
import { IconifyIcon } from '@vben/icons';
import { useUserStore } from '@vben/stores';
import { cloneDeep, formatDateTime, isEqual } from '@vben/utils';
@@ -65,8 +66,8 @@ const router = useRouter();
const userStore = useUserStore();
const userId = userStore.userInfo?.id;
const isModelSorting = ref(false);
-const originalData = ref([]);
-const modelList = ref([]);
+const originalData = ref([]);
+const modelList = ref([]);
const isExpand = ref(false);
const [Grid, gridApi] = useVbenVxeGrid({
@@ -90,6 +91,18 @@ const sortableInstance = ref(null);
/** 解决 v-model 问题,使用计算属性 */
const expandKeys = computed(() => (isExpand.value ? ['1'] : []));
+const { hasAccessByCodes } = useAccess();
+/** 权限校验:通过 computed 解决列表的卡顿问题 */
+const hasPermiUpdate = computed(() => {
+ return hasAccessByCodes(['bpm:model:update']);
+});
+const hasPermiDelete = computed(() => {
+ return hasAccessByCodes(['bpm:model:delete']);
+});
+const hasPermiDeploy = computed(() => {
+ return hasAccessByCodes(['bpm:model:deploy']);
+});
+
/** 处理模型的排序 */
function handleModelSort() {
// 保存初始数据并确保数据完整
@@ -145,21 +158,9 @@ async function handleModelSortSubmit() {
message.error('排序数据异常,请重试');
return;
}
-
// 保存排序
const ids = modelList.value.map((item) => item.id);
-
- // 检查是否有所有必要的ID
- if (ids.length === props.categoryInfo.modelList.length) {
- // 使用排序后的数据
- await updateModelSortBatch(ids);
- } else {
- console.warn('排序数据不完整,尝试使用原始数据');
- // 如果数据不完整,使用原始数据
- const originalIds = props.categoryInfo.modelList.map((item) => item.id);
- await updateModelSortBatch(originalIds);
- }
-
+ await updateModelSortBatch(ids);
// 刷新列表
isModelSorting.value = false;
message.success('排序模型成功');
@@ -520,11 +521,9 @@ const handleRenameSuccess = () => {
class="mr-2.5 h-9 w-9 flex-shrink-0 rounded"
alt="图标"
/>
-
-
- {{ row.name }}
-
-
+
+ {{ row.name }}
+
@@ -598,13 +597,12 @@ const handleRenameSuccess = () => {
-
@@ -613,7 +611,7 @@ const handleRenameSuccess = () => {
size="small"
class="px-1"
@click="handleDeploy(row)"
- :disabled="!isManagerUser(row)"
+ :disabled="!isManagerUser(row) || !hasPermiDeploy"
>
发布
@@ -654,7 +652,7 @@ const handleRenameSuccess = () => {
删除
diff --git a/apps/web-antd/src/views/bpm/model/modules/data.ts b/apps/web-antd/src/views/bpm/model/modules/data.ts
index 58701f71c..2406f3857 100644
--- a/apps/web-antd/src/views/bpm/model/modules/data.ts
+++ b/apps/web-antd/src/views/bpm/model/modules/data.ts
@@ -4,12 +4,12 @@ import type { BpmModelApi } from '#/api/bpm/model';
import { DICT_TYPE } from '#/utils';
/** 列表的字段 */
-export function useGridColumns(): VxeTableGridOptions
['columns'] {
+export function useGridColumns(): VxeTableGridOptions['columns'] {
return [
{
field: 'name',
title: '流程名称',
- minWidth: 250,
+ minWidth: 200,
slots: { default: 'name' },
},
{
@@ -21,7 +21,7 @@ export function useGridColumns(): VxeTableGridOptions['colu
{
field: 'type',
title: '流程类型',
- minWidth: 150,
+ minWidth: 120,
cellRender: {
name: 'CellDict',
props: { type: DICT_TYPE.BPM_MODEL_TYPE },
@@ -36,12 +36,12 @@ export function useGridColumns(): VxeTableGridOptions['colu
{
field: 'deploymentTime',
title: '最后发布',
- minWidth: 260,
+ minWidth: 280,
slots: { default: 'deploymentTime' },
},
{
title: '操作',
- width: 200,
+ width: 150,
fixed: 'right',
slots: { default: 'actions' },
},
diff --git a/apps/web-antd/src/views/bpm/processInstance/create/index.vue b/apps/web-antd/src/views/bpm/processInstance/create/index.vue
index 313d77ff1..8c519daa4 100644
--- a/apps/web-antd/src/views/bpm/processInstance/create/index.vue
+++ b/apps/web-antd/src/views/bpm/processInstance/create/index.vue
@@ -161,7 +161,7 @@ const processDefinitionGroup = computed(() => {
string,
BpmProcessDefinitionApi.ProcessDefinitionVO[]
> = {};
- categoryList.value.forEach((category: BpmCategoryApi.CategoryVO) => {
+ categoryList.value.forEach((category: BpmCategoryApi.Category) => {
if (grouped[category.code]) {
orderedGroup[category.code] = grouped[
category.code
@@ -203,7 +203,7 @@ const availableCategories = computed(() => {
const availableCategoryCodes = Object.keys(processDefinitionGroup.value);
// 过滤出有流程的分类
- return categoryList.value.filter((category: BpmCategoryApi.CategoryVO) =>
+ return categoryList.value.filter((category: BpmCategoryApi.Category) =>
availableCategoryCodes.includes(category.code),
);
});
From e2a449351e1cfa9913c5afbd895a07721db4d101 Mon Sep 17 00:00:00 2001
From: jason <2667446@qq.com>
Date: Sun, 15 Jun 2025 10:56:53 +0800
Subject: [PATCH 12/16] =?UTF-8?q?feat:=20[BPM=20=E5=B7=A5=E4=BD=9C?=
=?UTF-8?q?=E6=B5=81]=20=E6=B5=81=E7=A8=8B=E6=8A=A5=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/web-antd/src/api/bpm/definition/index.ts | 1 +
.../web-antd/src/router/routes/modules/bpm.ts | 12 ++
.../modules/category-draggable-model.vue | 27 ++-
.../views/bpm/processInstance/report/data.ts | 153 ++++++++++++++
.../bpm/processInstance/report/index.vue | 200 ++++++++++++++++++
5 files changed, 384 insertions(+), 9 deletions(-)
create mode 100644 apps/web-antd/src/views/bpm/processInstance/report/data.ts
create mode 100644 apps/web-antd/src/views/bpm/processInstance/report/index.vue
diff --git a/apps/web-antd/src/api/bpm/definition/index.ts b/apps/web-antd/src/api/bpm/definition/index.ts
index b7e22bea9..adf26c5ad 100644
--- a/apps/web-antd/src/api/bpm/definition/index.ts
+++ b/apps/web-antd/src/api/bpm/definition/index.ts
@@ -15,6 +15,7 @@ export namespace BpmProcessDefinitionApi {
formType?: number;
bpmnXml?: string;
simpleModel?: string;
+ formFields?: string[];
}
}
diff --git a/apps/web-antd/src/router/routes/modules/bpm.ts b/apps/web-antd/src/router/routes/modules/bpm.ts
index 5fc572eb2..02e8b0b1f 100644
--- a/apps/web-antd/src/router/routes/modules/bpm.ts
+++ b/apps/web-antd/src/router/routes/modules/bpm.ts
@@ -98,6 +98,18 @@ const routes: RouteRecordRaw[] = [
keepAlive: true,
},
},
+ {
+ path: 'process-instance/report',
+ component: () => import('#/views/bpm/processInstance/report/index.vue'),
+ name: 'BpmProcessInstanceReport',
+ meta: {
+ title: '数据报表',
+ activeMenu: '/bpm/manager/model',
+ icon: 'carbon:data-2',
+ hideInMenu: true,
+ keepAlive: true,
+ },
+ },
],
},
];
diff --git a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
index fed9ecf6a..2f9228f6f 100644
--- a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
+++ b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue
@@ -284,7 +284,7 @@ function handleModelCommand(command: string, row: any) {
break;
}
case 'handleReport': {
- console.warn('报表待实现', row);
+ handleReport(row);
break;
}
default: {
@@ -360,6 +360,17 @@ function handleDefinitionList(row: any) {
});
}
+/** 跳转到流程报表页面 */
+function handleReport(row: any) {
+ router.push({
+ name: 'BpmProcessInstanceReport',
+ query: {
+ processDefinitionId: row.processDefinition.id,
+ processDefinitionKey: row.key,
+ },
+ });
+}
+
/** 更新 modelList 模型列表 */
const updateModelList = useDebounceFn(() => {
const newModelList = props.categoryInfo.modelList;
@@ -567,7 +578,6 @@ const handleRenameSuccess = () => {
>
{{ row.formName }}
-
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/copy-task-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/copy-task-node-config.vue
index 658392f83..5ee69a89a 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/copy-task-node-config.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/copy-task-node-config.vue
@@ -222,7 +222,7 @@ defineExpose({ showCopyTaskNodeConfig }); // 暴露方法给父组件
/>
{{ nodeName }}
-
+
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue
index c8c8511a5..951ca5f1a 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue
@@ -171,7 +171,7 @@ defineExpose({ openDrawer }); // 暴露方法给父组件
@click="clickIcon()"
>
{{ nodeName }}
-
+
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition.vue
index 6a39cce2f..a75b39010 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/modules/condition.vue
@@ -188,7 +188,7 @@ defineExpose({ validate });
>
{{ nodeName }}
-
+
@@ -266,7 +266,7 @@ defineExpose({ openDrawer }); // 暴露方法给父组件
@click="deleteRouterGroup(index)"
>
-
+
@@ -287,7 +287,7 @@ defineExpose({ openDrawer }); // 暴露方法给父组件
@click="addRouterGroup"
>
-
+
新增路由分支
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/start-user-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/start-user-node-config.vue
index 0c12a2104..1dba53ebd 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/start-user-node-config.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/start-user-node-config.vue
@@ -158,7 +158,7 @@ defineExpose({ showStartUserNodeConfig });
{{ nodeName }}
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue
index 5e3add0d5..dc9d095d7 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/trigger-node-config.vue
@@ -399,7 +399,7 @@ onMounted(() => {
/>
{{ nodeName }}
-
+
@@ -456,7 +456,7 @@ onMounted(() => {
@click="deleteFormSetting(index)"
>
-
+
@@ -486,7 +486,7 @@ onMounted(() => {
@click="addFormSettingCondition(index, formSetting)"
>
-
+
添加条件
@@ -561,7 +561,7 @@ onMounted(() => {
@click="addFormFieldSetting(formSetting)"
>
-
+
添加修改字段
@@ -579,7 +579,7 @@ onMounted(() => {
@click="addFormSetting"
>
-
+
添加设置
@@ -604,7 +604,7 @@ onMounted(() => {
@click="deleteFormSetting(index)"
>
-
+
@@ -635,7 +635,7 @@ onMounted(() => {
@click="addFormSettingCondition(index, formSetting)"
>
-
+
添加条件
@@ -673,7 +673,7 @@ onMounted(() => {
@click="addFormSetting"
>
-
+
添加设置
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/user-task-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/user-task-node-config.vue
index 441a2b7ef..e02e0413f 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/user-task-node-config.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/user-task-node-config.vue
@@ -595,7 +595,7 @@ onMounted(() => {
/>
{{ nodeName }}
-
+
@@ -1135,7 +1135,7 @@ onMounted(() => {
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes/copy-task-node.vue b/apps/web-antd/src/components/simple-process-design/components/nodes/copy-task-node.vue
index 5f07ffa5c..720e35e89 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes/copy-task-node.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes/copy-task-node.vue
@@ -91,13 +91,13 @@ function deleteNode() {
{{ NODE_DEFAULT_TEXT.get(BpmNodeTypeEnum.COPY_TASK_NODE) }}
-
+
-
+
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue b/apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue
index 1d543c0ba..978b0b058 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue
@@ -201,7 +201,7 @@ function recursiveFindParentNode(
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes/router-node.vue b/apps/web-antd/src/components/simple-process-design/components/nodes/router-node.vue
index 91c86b96e..211ce6723 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes/router-node.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes/router-node.vue
@@ -91,13 +91,13 @@ function deleteNode() {
{{ NODE_DEFAULT_TEXT.get(BpmNodeTypeEnum.ROUTER_BRANCH_NODE) }}
-
+
diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes/trigger-node.vue b/apps/web-antd/src/components/simple-process-design/components/nodes/trigger-node.vue
index f373ae065..bdf39b55b 100644
--- a/apps/web-antd/src/components/simple-process-design/components/nodes/trigger-node.vue
+++ b/apps/web-antd/src/components/simple-process-design/components/nodes/trigger-node.vue
@@ -93,13 +93,13 @@ function deleteNode() {
{{ NODE_DEFAULT_TEXT.get(BpmNodeTypeEnum.TRIGGER_NODE) }}
-
+