From c5e844460e9bb7d3f41439130dcdabc775a12091 Mon Sep 17 00:00:00 2001
From: jason <2667446@qq.com>
Date: Fri, 16 May 2025 14:05:52 +0800
Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=B5=81=E7=A8=8B=E6=A8=A1?=
=?UTF-8?q?=E5=9E=8B=E6=96=B0=E5=A2=9E:=20=E5=9F=BA=E6=9C=AC=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/web-antd/src/api/bpm/definition/index.ts | 2 +
.../web-antd/src/router/routes/modules/bpm.ts | 13 +-
.../src/views/bpm/model/form/index.vue | 493 ++++++++++++++++++
.../bpm/model/form/modules/basic-info.vue | 432 +++++++++++++++
apps/web-antd/src/views/bpm/model/index.vue | 11 +-
5 files changed, 945 insertions(+), 6 deletions(-)
create mode 100644 apps/web-antd/src/views/bpm/model/form/index.vue
create mode 100644 apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue
diff --git a/apps/web-antd/src/api/bpm/definition/index.ts b/apps/web-antd/src/api/bpm/definition/index.ts
index 3a59b987..562b0009 100644
--- a/apps/web-antd/src/api/bpm/definition/index.ts
+++ b/apps/web-antd/src/api/bpm/definition/index.ts
@@ -9,6 +9,8 @@ export namespace BpmProcessDefinitionApi {
version: number;
deploymentTime: number;
suspensionState: number;
+ modelType: number;
+ modelId: string;
formType?: number;
bpmnXml?: string;
simpleModel?: string;
diff --git a/apps/web-antd/src/router/routes/modules/bpm.ts b/apps/web-antd/src/router/routes/modules/bpm.ts
index 734e7c43..9afede3f 100644
--- a/apps/web-antd/src/router/routes/modules/bpm.ts
+++ b/apps/web-antd/src/router/routes/modules/bpm.ts
@@ -27,7 +27,6 @@ const routes: RouteRecordRaw[] = [
},
],
},
-
{
path: 'process-instance/detail',
component: () => import('#/views/bpm/processInstance/detail/index.vue'),
@@ -47,6 +46,18 @@ const routes: RouteRecordRaw[] = [
};
},
},
+ {
+ path: 'manager/model/create',
+ component: () => import('#/views/bpm/model/form/index.vue'),
+ name: 'BpmModelCreate',
+ meta: {
+ title: '创建流程',
+ activePath: '/bpm/manager/model',
+ icon: 'carbon:flow-connection',
+ hideInMenu: true,
+ keepAlive: true,
+ },
+ },
],
},
];
diff --git a/apps/web-antd/src/views/bpm/model/form/index.vue b/apps/web-antd/src/views/bpm/model/form/index.vue
new file mode 100644
index 00000000..aab32573
--- /dev/null
+++ b/apps/web-antd/src/views/bpm/model/form/index.vue
@@ -0,0 +1,493 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ formData.name || '创建流程' }}
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
{{
+ step.title
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
new file mode 100644
index 00000000..c5170df2
--- /dev/null
+++ b/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dict.label }}
+
+
+
+
+
+
+ {{ dict.label }}
+
+
+
+
+
+
+
+
+
+ {{ user.nickname?.substring(0, 1) }}
+
+ {{ user.nickname }}
+
+
+
+
+
+
+
+ {{ dept.name }}
+
+
+
+
+
+
+
+
+
+
+ {{ user.nickname?.substring(0, 1) }}
+
+ {{ user.nickname }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/bpm/model/index.vue b/apps/web-antd/src/views/bpm/model/index.vue
index 118b27b9..bb59e3f7 100644
--- a/apps/web-antd/src/views/bpm/model/index.vue
+++ b/apps/web-antd/src/views/bpm/model/index.vue
@@ -25,6 +25,7 @@ import {
updateCategorySortBatch,
} from '#/api/bpm/category';
import { getModelList } from '#/api/bpm/model';
+import { router } from '#/router';
// 流程分类对话框
import CategoryForm from '../category/modules/form.vue';
@@ -35,7 +36,6 @@ const [CategoryFormModal, categoryFormModalApi] = useVbenModal({
connectedComponent: CategoryForm,
destroyOnClose: true,
});
-
// 模型列表加载状态
const modelListSpinning = refAutoReset(false, 3000);
// 保存排序状态
@@ -103,7 +103,9 @@ const handleQuery = () => {
/** 新增模型 */
const createModel = () => {
- // TODO 新增模型
+ router.push({
+ name: 'BpmModelCreate',
+ });
};
/** 处理下拉菜单命令 */
@@ -160,6 +162,8 @@ const handleCategorySortSubmit = async () => {
+
+
{
-
-
-
From 2d153de6dcbdb45ff6ea4ab8170820322a0ee0ae Mon Sep 17 00:00:00 2001
From: jason <2667446@qq.com>
Date: Sun, 18 May 2025 17:53:17 +0800
Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=B5=81=E7=A8=8B=E6=A8=A1?=
=?UTF-8?q?=E5=9E=8B=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=9F=BA=E6=9C=AC=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF,=20=E9=83=A8=E9=97=A8=E9=80=89=E6=8B=A9=E7=BB=84?=
=?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dept-select-modal/dept-select-modal.vue | 160 ++++++++++++++++++
.../src/components/dept-select-modal/index.ts | 1 +
.../src/views/bpm/model/form/index.vue | 41 ++---
.../bpm/model/form/modules/basic-info.vue | 45 +++--
4 files changed, 216 insertions(+), 31 deletions(-)
create mode 100644 apps/web-antd/src/components/dept-select-modal/dept-select-modal.vue
create mode 100644 apps/web-antd/src/components/dept-select-modal/index.ts
diff --git a/apps/web-antd/src/components/dept-select-modal/dept-select-modal.vue b/apps/web-antd/src/components/dept-select-modal/dept-select-modal.vue
new file mode 100644
index 00000000..69968ce3
--- /dev/null
+++ b/apps/web-antd/src/components/dept-select-modal/dept-select-modal.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/components/dept-select-modal/index.ts b/apps/web-antd/src/components/dept-select-modal/index.ts
new file mode 100644
index 00000000..d373be44
--- /dev/null
+++ b/apps/web-antd/src/components/dept-select-modal/index.ts
@@ -0,0 +1 @@
+export { default as DeptSelectModal } from './dept-select-modal.vue';
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 aab32573..7764d634 100644
--- a/apps/web-antd/src/views/bpm/model/form/index.vue
+++ b/apps/web-antd/src/views/bpm/model/form/index.vue
@@ -12,7 +12,7 @@ import { useTabs } from '@vben/hooks';
import { ArrowLeft } from '@vben/icons';
import { useUserStore } from '@vben/stores';
-import { Button, message } from 'ant-design-vue';
+import { Button, Card, message } from 'ant-design-vue';
import { getCategorySimpleList } from '#/api/bpm/category';
import { getProcessDefinition } from '#/api/bpm/definition';
@@ -467,27 +467,28 @@ onBeforeUnmount(() => {
-
-
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 c5170df2..07a47a96 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
@@ -2,6 +2,8 @@
import type { Rule } from 'ant-design-vue/es/form';
import type { SelectValue } from 'ant-design-vue/es/select';
+import type { PropType } from 'vue';
+
import type { BpmCategoryApi } from '#/api/bpm/category';
import type { SystemDeptApi } from '#/api/system/dept';
import type { SystemUserApi } from '#/api/system/user';
@@ -20,18 +22,25 @@ import {
Tooltip,
} from 'ant-design-vue';
+import { DeptSelectModal } from '#/components/dept-select-modal';
import { ImageUpload } from '#/components/upload';
import { UserSelectModal } from '#/components/user-select-modal';
import { DICT_TYPE, getBoolDictOptions, getIntDictOptions } from '#/utils';
-const props = withDefaults(
- defineProps<{
- categoryList: BpmCategoryApi.CategoryVO[];
- deptList: SystemDeptApi.Dept[];
- userList: SystemUserApi.User[];
- }>(),
- {},
-);
+const props = defineProps({
+ categoryList: {
+ type: Array as PropType,
+ required: true,
+ },
+ userList: {
+ type: Array as PropType,
+ required: true,
+ },
+ deptList: {
+ type: Array as PropType,
+ required: true,
+ },
+});
// 表单引用
const formRef = ref();
@@ -45,6 +54,7 @@ const selectedStartDepts = ref([]);
// 选中的流程管理员
const selectedManagerUsers = ref([]);
const userSelectFormRef = ref();
+const deptSelectFormRef = ref();
const currentSelectType = ref<'manager' | 'start'>('start');
// 选中的用户
const selectedUsers = ref();
@@ -99,8 +109,14 @@ const openStartUserSelect = () => {
/** 打开部门选择 */
const openStartDeptSelect = () => {
- // TODO 部门选择组件暂时还没有
- console.warn('部门选择功能暂未实现');
+ deptSelectFormRef.value.open(selectedStartDepts.value);
+};
+/** 处理部门选择确认 */
+const handleDeptSelectConfirm = (depts: SystemDeptApi.Dept[]) => {
+ modelData.value = {
+ ...modelData.value,
+ startDeptIds: depts.map((d) => d.id),
+ };
};
/** 打开管理员选择 */
@@ -343,7 +359,7 @@ defineExpose({
:key="dept.id"
class="relative flex h-9 items-center rounded-full bg-gray-100 pr-2"
>
-
+
{{ dept.name }}
+
+