From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/bpm/model/form/FormDesign.vue | 129 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 129 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..e1ca27f
--- /dev/null
+++ b/src/views/bpm/model/form/FormDesign.vue
@@ -0,0 +1,129 @@
+<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 === BpmModelFormType.NORMAL" 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 === BpmModelFormType.CUSTOM" label="琛ㄥ崟鎻愪氦璺敱" prop="formCustomCreatePath">
+ <el-input
+ v-model="modelData.formCustomCreatePath"
+ placeholder="璇疯緭鍏ヨ〃鍗曟彁浜よ矾鐢�"
+ style="width: 330px"
+ />
+ <el-tooltip
+ class="item"
+ content="鑷畾涔夎〃鍗曠殑鎻愪氦璺緞锛屼娇鐢� Vue 鐨勮矾鐢卞湴鍧�锛屼緥濡傝锛歜pm/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 === BpmModelFormType.CUSTOM" label="琛ㄥ崟鏌ョ湅鍦板潃" prop="formCustomViewPath">
+ <el-input
+ v-model="modelData.formCustomViewPath"
+ placeholder="璇疯緭鍏ヨ〃鍗曟煡鐪嬬殑缁勪欢鍦板潃"
+ style="width: 330px"
+ />
+ <el-tooltip
+ class="item"
+ content="鑷畾涔夎〃鍗曠殑鏌ョ湅缁勪欢鍦板潃锛屼娇鐢� Vue 鐨勭粍浠跺湴鍧�锛屼緥濡傝锛歜pm/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 === BpmModelFormType.NORMAL && 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'
+import { BpmModelFormType } from '@/utils/constants'
+
+const props = defineProps({
+ formList: {
+ type: Array,
+ required: true
+ }
+})
+
+const formRef = ref()
+
+// 鍒涘缓鏈湴鏁版嵁鍓湰
+const modelData = defineModel<any>()
+
+// 琛ㄥ崟棰勮鏁版嵁
+const formPreview = ref({
+ formData: {},
+ rule: [],
+ option: {
+ submitBtn: false,
+ resetBtn: false,
+ formData: {}
+ }
+})
+
+// 鐩戝惉琛ㄥ崟ID鍙樺寲锛屽姞杞借〃鍗曟暟鎹�
+watch(
+ () => modelData.value.formId,
+ async (newFormId) => {
+ if (newFormId && modelData.value.formType === BpmModelFormType.NORMAL) {
+ 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.8.0