Skip to content

Commit abbaeab

Browse files
committed
Vue3 重构:重构工作流的表单
1 parent 6f8499c commit abbaeab

File tree

7 files changed

+262
-276
lines changed

7 files changed

+262
-276
lines changed

src/api/bpm/form/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,45 +11,45 @@ export type FormVO = {
1111
}
1212

1313
// 创建工作流的表单定义
14-
export const createFormApi = async (data: FormVO) => {
14+
export const createForm = async (data: FormVO) => {
1515
return await request.post({
1616
url: '/bpm/form/create',
1717
data: data
1818
})
1919
}
2020

2121
// 更新工作流的表单定义
22-
export const updateFormApi = async (data: FormVO) => {
22+
export const updateForm = async (data: FormVO) => {
2323
return await request.put({
2424
url: '/bpm/form/update',
2525
data: data
2626
})
2727
}
2828

2929
// 删除工作流的表单定义
30-
export const deleteFormApi = async (id: number) => {
30+
export const deleteForm = async (id: number) => {
3131
return await request.delete({
3232
url: '/bpm/form/delete?id=' + id
3333
})
3434
}
3535

3636
// 获得工作流的表单定义
37-
export const getFormApi = async (id: number) => {
37+
export const getForm = async (id: number) => {
3838
return await request.get({
3939
url: '/bpm/form/get?id=' + id
4040
})
4141
}
4242

4343
// 获得工作流的表单定义分页
44-
export const getFormPageApi = async (params) => {
44+
export const getFormPage = async (params) => {
4545
return await request.get({
4646
url: '/bpm/form/page',
4747
params
4848
})
4949
}
5050

5151
// 获得动态表单的精简列表
52-
export const getSimpleFormsApi = async () => {
52+
export const getSimpleFormList = async () => {
5353
return await request.get({
5454
url: '/bpm/form/list-all-simple'
5555
})

src/router/modules/remaining.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,14 @@ const remainingRouter: AppRouteRecordRaw[] = [
225225
children: [
226226
{
227227
path: '/manager/form/edit',
228-
component: () => import('@/views/bpm/form/formEditor.vue'),
228+
component: () => import('@/views/bpm/form/FormEditor.vue'),
229229
name: 'bpmFormEditor',
230230
meta: {
231231
noCache: true,
232232
hidden: true,
233233
canTo: true,
234234
title: '设计流程表单',
235-
activeMenu: 'bpm/manager/form/formEditor'
235+
activeMenu: '/bpm/manager/form'
236236
}
237237
},
238238
{

src/views/bpm/form/FormEditor.vue

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<template>
2+
<ContentWrap>
3+
<!-- 表单设计器 -->
4+
<fc-designer ref="designer" height="780px">
5+
<template #handle>
6+
<el-button round size="small" type="primary" @click="handleSave">
7+
<Icon icon="ep:plus" class="mr-5px" /> 保存
8+
</el-button>
9+
</template>
10+
</fc-designer>
11+
</ContentWrap>
12+
13+
<!-- 表单保存的弹窗 -->
14+
<Dialog title="保存表单" v-model="modelVisible" width="600">
15+
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="80px">
16+
<el-form-item label="表单名" prop="name">
17+
<el-input v-model="formData.name" placeholder="请输入表单名" />
18+
</el-form-item>
19+
<el-form-item label="状态" prop="status">
20+
<el-radio-group v-model="formData.status">
21+
<el-radio
22+
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
23+
:key="dict.value"
24+
:label="dict.value"
25+
>
26+
{{ dict.label }}
27+
</el-radio>
28+
</el-radio-group>
29+
</el-form-item>
30+
<el-form-item label="备注" prop="remark">
31+
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
32+
</el-form-item>
33+
</el-form>
34+
<template #footer>
35+
<div class="dialog-footer">
36+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
37+
<el-button @click="modelVisible = false">取 消</el-button>
38+
</div>
39+
</template>
40+
</Dialog>
41+
</template>
42+
<script setup lang="ts">
43+
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
44+
import { CommonStatusEnum } from '@/utils/constants'
45+
import * as FormApi from '@/api/bpm/form'
46+
import { encodeConf, encodeFields, setConfAndFields } from '@/utils/formCreate'
47+
48+
const { t } = useI18n() // 国际化
49+
const message = useMessage() // 消息
50+
const { query } = useRoute() // 路由
51+
52+
const designer = ref() // 表单设计器
53+
const modelVisible = ref(false) // 弹窗是否展示
54+
const formLoading = ref(false) // 表单的加载中:提交的按钮禁用
55+
const formData = ref({
56+
name: '',
57+
status: CommonStatusEnum.ENABLE,
58+
remark: ''
59+
})
60+
const formRules = reactive({
61+
name: [{ required: true, message: '表单名不能为空', trigger: 'blur' }],
62+
status: [{ required: true, message: '开启状态不能为空', trigger: 'blur' }]
63+
})
64+
const formRef = ref() // 表单 Ref
65+
66+
/** 处理保存按钮 */
67+
const handleSave = () => {
68+
modelVisible.value = true
69+
}
70+
71+
/** 提交表单 */
72+
const submitForm = async () => {
73+
// 校验表单
74+
if (!formRef) return
75+
const valid = await formRef.value.validate()
76+
if (!valid) return
77+
// 提交请求
78+
formLoading.value = true
79+
try {
80+
const data = formData.value as FormApi.FormVO
81+
data.conf = encodeConf(designer) // 表单配置
82+
data.fields = encodeFields(designer) // 表单字段
83+
if (!data.id) {
84+
await FormApi.createForm(data)
85+
message.success(t('common.createSuccess'))
86+
} else {
87+
await FormApi.updateForm(data)
88+
message.success(t('common.updateSuccess'))
89+
}
90+
modelVisible.value = false
91+
} finally {
92+
formLoading.value = false
93+
}
94+
}
95+
96+
/** 初始化 **/
97+
onMounted(async () => {
98+
// 场景一:新增表单
99+
const id = query.id as unknown as number
100+
if (!id) {
101+
return
102+
}
103+
// 场景二:修改表单
104+
const data = await FormApi.getForm(id)
105+
formData.value = data
106+
setConfAndFields(designer, data.conf, data.fields)
107+
})
108+
</script>

src/views/bpm/form/form.data.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/views/bpm/form/formEditor.vue

Lines changed: 0 additions & 157 deletions
This file was deleted.

0 commit comments

Comments
 (0)