From 221918bba28d2384d03c596a68256d7832e4a0e0 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期一, 06 一月 2025 13:30:50 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/bpm/model/form/FormDesign.vue | 137 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 137 insertions(+), 0 deletions(-) diff --git a/src/views/bpm/model/form/FormDesign.vue b/src/views/bpm/model/form/FormDesign.vue new file mode 100644 index 0000000..98aee6d --- /dev/null +++ b/src/views/bpm/model/form/FormDesign.vue @@ -0,0 +1,137 @@ +<template> + <el-form ref="formRef" :model="modelData" :rules="rules" label-width="120px" class="mt-20px"> + <el-form-item label="表单类型" prop="formType" class="mb-20px"> + <el-radio-group v-model="modelData.formType"> + <el-radio + v-for="dict in getIntDictOptions(DICT_TYPE.BPM_MODEL_FORM_TYPE)" + :key="dict.value" + :value="dict.value" + > + {{ dict.label }} + </el-radio> + </el-radio-group> + </el-form-item> + <el-form-item v-if="modelData.formType === 10" label="流程表单" prop="formId"> + <el-select v-model="modelData.formId" clearable style="width: 100%"> + <el-option v-for="form in formList" :key="form.id" :label="form.name" :value="form.id" /> + </el-select> + </el-form-item> + <el-form-item v-if="modelData.formType === 20" label="表单提交路由" prop="formCustomCreatePath"> + <el-input + v-model="modelData.formCustomCreatePath" + placeholder="请输入表单提交路由" + style="width: 330px" + /> + <el-tooltip + class="item" + content="自定义表单的提交路径,使用 Vue 的路由地址,例如说:bpm/oa/leave/create.vue" + effect="light" + placement="top" + > + <Icon icon="ep:question" class="ml-5px" /> + </el-tooltip> + </el-form-item> + <el-form-item v-if="modelData.formType === 20" label="表单查看地址" prop="formCustomViewPath"> + <el-input + v-model="modelData.formCustomViewPath" + placeholder="请输入表单查看的组件地址" + style="width: 330px" + /> + <el-tooltip + class="item" + content="自定义表单的查看组件地址,使用 Vue 的组件地址,例如说:bpm/oa/leave/detail.vue" + effect="light" + placement="top" + > + <Icon icon="ep:question" class="ml-5px" /> + </el-tooltip> + </el-form-item> + <!-- 表单预览 --> + <div + v-if="modelData.formType === 10 && modelData.formId && formPreview.rule.length > 0" + class="mt-20px" + > + <div class="flex items-center mb-15px"> + <div class="h-15px w-4px bg-[#1890ff] mr-10px"></div> + <span class="text-15px font-bold">表单预览</span> + </div> + <form-create + v-model="formPreview.formData" + :rule="formPreview.rule" + :option="formPreview.option" + /> + </div> + </el-form> +</template> + +<script lang="ts" setup> +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' +import * as FormApi from '@/api/bpm/form' +import { setConfAndFields2 } from '@/utils/formCreate' + +const props = defineProps({ + modelValue: { + type: Object, + required: true + }, + formList: { + type: Array, + required: true + } +}) + +const emit = defineEmits(['update:modelValue']) + +const formRef = ref() + +// 创建本地数据副本 +const modelData = computed({ + get: () => props.modelValue, + set: (val) => emit('update:modelValue', val) +}) + +// 表单预览数据 +const formPreview = ref({ + formData: {}, + rule: [], + option: { + submitBtn: false, + resetBtn: false, + formData: {} + } +}) + +// 监听表单ID变化,加载表单数据 +watch( + () => modelData.value.formId, + async (newFormId) => { + if (newFormId && modelData.value.formType === 10) { + const data = await FormApi.getForm(newFormId) + setConfAndFields2(formPreview.value, data.conf, data.fields) + // 设置只读 + formPreview.value.rule.forEach((item: any) => { + item.props = { ...item.props, disabled: true } + }) + } else { + formPreview.value.rule = [] + } + }, + { immediate: true } +) + +const rules = { + formType: [{ required: true, message: '表单类型不能为空', trigger: 'blur' }], + formId: [{ required: true, message: '流程表单不能为空', trigger: 'blur' }], + formCustomCreatePath: [{ required: true, message: '表单提交路由不能为空', trigger: 'blur' }], + formCustomViewPath: [{ required: true, message: '表单查看地址不能为空', trigger: 'blur' }] +} + +/** 表单校验 */ +const validate = async () => { + await formRef.value?.validate() +} + +defineExpose({ + validate +}) +</script> -- Gitblit v1.9.3