From e5875000e60d4976f159f287ae3773f1d11960b3 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期五, 22 十二月 2023 17:36:56 +0800 Subject: [PATCH] 调整FYForm表单逻辑 --- src/components/form/FYForm.vue | 104 +++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 79 insertions(+), 25 deletions(-) diff --git a/src/components/form/FYForm.vue b/src/components/form/FYForm.vue index 7509183..a305bde 100644 --- a/src/components/form/FYForm.vue +++ b/src/components/form/FYForm.vue @@ -1,24 +1,19 @@ -<!-- 鍦烘櫙鍩烘湰淇℃伅缂栬緫 --> <template> <el-form :inline="false" :model="formObj" ref="formRef" - :rules="rules" + :rules="allRules" label-position="right" label-width="150px" > <slot name="form-item" :formObj="formObj"></slot> - <el-form-item> - <el-button - :disabled="!edit" - type="primary" - @click="onSubmit" - :loading="loading" + <el-form-item v-if="showButtons"> + <el-button :disabled="!edit" type="primary" @click="onSubmit" :loading="loading" >鎻愪氦</el-button > - <el-button :disabled="!edit" @click="onReset">閲嶇疆</el-button> - <el-button v-if="enableCancelBtn" @click="onCancel">鍙栨秷</el-button> + <el-button v-if="useReset" :disabled="!edit" @click="onReset">閲嶇疆</el-button> + <el-button v-if="useCancel" @click="onCancel">鍙栨秷</el-button> </el-form-item> </el-form> </template> @@ -31,7 +26,7 @@ * 鍙紶鍏ュ垵濮嬭〃鍗曟暟鎹甪ormInfo锛岃〃鍗曟牎楠岃鍒檙ules * 瀹炵幇submit鍜宑ancel瑙﹀彂鍑芥暟 */ -import { defineProps, defineEmits, reactive, ref, watch } from 'vue'; +import { defineProps, defineEmits, reactive, ref, watch, computed, defineExpose } from 'vue'; import { useFormConfirm } from '@/composables/formConfirm'; const props = defineProps({ @@ -39,25 +34,69 @@ formInfo: Object, //琛ㄥ崟妫�楠岃鍒� rules: Object, + showButtons: { + type: Boolean, + default: true + }, //鍙栨秷鎸夐挳鏄惁鍙敤 - enableCancelBtn: Boolean, + useCancel: Boolean, + //閲嶇疆鎸夐挳鏄惁鍙敤 + useReset: Boolean, //瑙﹀彂閲嶇疆 - reset: Boolean, + doClear: Boolean, //閫氱煡缂栬緫鐘舵�� - isEdit: Boolean, + isEdit: Boolean }); //瑙﹀彂鍑芥暟锛屾彁浜ゅ拰鍙栨秷 const emit = defineEmits(['submit', 'cancel', 'update:isEdit']); +const baseRules = reactive({ + _usertype: [ + { + required: true, + message: '鐢ㄦ埛绫诲瀷涓嶈兘涓虹┖', + trigger: 'change' + } + ], + _locations: [ + { + required: true, + message: '琛屾斂鍖哄垝涓嶈兘涓虹┖', + trigger: 'change', + // validator: (rule, value, callback) => { + // if (!value) { + // callback(new Error('Please input the age')); + // } else { + // callback() + // } + // } + } + ], + _scenetype: [ + { + required: true, + message: '鍦烘櫙绫诲瀷涓嶈兘涓虹┖', + trigger: 'change', + // validator: (rule, value, callback) => { + // if (!value) { + // callback(new Error('Please input the age')); + // } else { + // callback() + // } + // } + } + ] +}); + //琛ㄥ崟鎿嶄綔鍑芥暟 -const { formObj, formRef, edit, onSubmit, onCancel, onReset } = useFormConfirm({ +const { formObj, formRef, edit, onSubmit, onCancel, onReset, clear } = useFormConfirm({ submit: { - do: submit, + do: submit }, cancel: { - do: cancel, - }, + do: cancel + } }); //鍔犺浇鐘舵�� @@ -67,10 +106,18 @@ function submit() { loading.value = true; return new Promise((resolve, reject) => { - emit('submit', formObj, () => { - loading.value = false; - resolve(); - }); + emit( + 'submit', + formObj, + () => { + loading.value = false; + resolve(); + }, + (err) => { + loading.value = false; + reject(err); + } + ); }); } @@ -79,20 +126,25 @@ emit('cancel'); } +const allRules = computed(() => { + return { ...baseRules, ...props.rules }; +}); + //鐩戝惉琛ㄥ崟鍒濆鏁版嵁浼犲叆 watch( () => props.formInfo, (nValue) => { formObj.value = nValue; - } + }, + { deep: true, immediate: true } ); //鐩戝惉琛ㄥ崟閲嶇疆鍔熻兘瑙﹀彂 watch( - () => props.reset, + () => props.doClear, (nValue) => { if (nValue) { - onReset(); + clear(); } } ); @@ -101,6 +153,8 @@ watch(edit, (nValue) => { emit('update:isEdit', nValue); }); + +defineExpose({ formObj, onSubmit, onCancel, onReset }); </script> <style scoped></style> -- Gitblit v1.9.3