From 39bc0778560a1e7c9ded6c706fb38abeb1403241 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期一, 04 八月 2025 11:46:16 +0800 Subject: [PATCH] 设备台账添加必填校验 --- src/views/index.vue | 10 ----- src/views/equipmentManagement/ledger/Modal.vue | 30 ++++++++------ src/views/equipmentManagement/ledger/Form.vue | 39 ++++++++++++------- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/src/views/equipmentManagement/ledger/Form.vue b/src/views/equipmentManagement/ledger/Form.vue index 68934ff..f7029ee 100644 --- a/src/views/equipmentManagement/ledger/Form.vue +++ b/src/views/equipmentManagement/ledger/Form.vue @@ -1,5 +1,5 @@ <template> - <el-form :model="form" label-width="100px"> + <el-form :model="form" label-width="100px" :rules="formRules" ref="formRef"> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="璁惧鍚嶇О" prop="deviceName"> @@ -37,7 +37,6 @@ placeholder="璇疯緭鍏ュ惈绋庡崟浠�" maxlength="10" @change="mathNum" - @input="handleNumberInput" /> </el-form-item> </el-col> @@ -45,7 +44,7 @@ <el-form-item label="鍚◣鎬讳环" prop="taxIncludingPriceTotal"> <el-input v-model="form.taxIncludingPriceTotal" - placeholder="璇疯緭鍏ュ惈绋庢�讳环" + placeholder="鑷姩鐢熸垚" type="number" disabled /> @@ -76,7 +75,7 @@ <el-form-item label="涓嶅惈绋庢�讳环" prop="unTaxIncludingPriceTotal"> <el-input v-model="form.unTaxIncludingPriceTotal" - placeholder="璇疯緭鍏ヤ笉鍚◣鎬讳环" + placeholder="鑷姩鐢熸垚" type="number" disabled /> @@ -114,10 +113,21 @@ calculateTaxExclusiveTotalPrice, } from "@/utils/summarizeTable"; import { ElMessage } from "element-plus"; +import {ref} from "vue"; defineOptions({ name: "璁惧鍙拌处琛ㄥ崟", }); +const formRef = ref(null); +const formRules = { + deviceName: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }], + deviceModel: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }], + supplierName: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }], + unit: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }], + number: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }], + taxIncludingPriceUnit: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }], + taxRate: [{ required: true, trigger: "change", message: "璇疯緭鍏�" }], +} const { form, resetForm } = useFormData({ deviceName: undefined, // 璁惧鍚嶇О @@ -170,22 +180,23 @@ } }; -const handleNumberInput = (value) => { - // 绉婚櫎鎵�鏈夐潪鏁板瓧瀛楃 - let num = value.replace(/[^\d.]/g, ""); +// 娓呴櫎琛ㄥ崟鏍¢獙鐘舵�� +const clearValidate = () => { + formRef.value?.clearValidate(); +}; - // 闄愬埗闀垮害涓�10 - if (num.length > 10) { - num = num.slice(0, 10); - } - - // 鏇存柊鍊� - form.taxIncludingPriceUnit = num; +// 閲嶇疆琛ㄥ崟鏁版嵁鍜屾牎楠岀姸鎬� +const resetFormAndValidate = () => { + resetForm(); + clearValidate(); }; defineExpose({ form, loadForm, resetForm, + clearValidate, + resetFormAndValidate, + formRef, }); </script> diff --git a/src/views/equipmentManagement/ledger/Modal.vue b/src/views/equipmentManagement/ledger/Modal.vue index d228701..0cea56c 100644 --- a/src/views/equipmentManagement/ledger/Modal.vue +++ b/src/views/equipmentManagement/ledger/Modal.vue @@ -15,6 +15,7 @@ import { addLedger, editLedger } from "@/api/equipmentManagement/ledger"; import Form from "./Form.vue"; import { ElMessage } from "element-plus"; +const { proxy } = getCurrentInstance() defineOptions({ name: "璁惧鍙拌处鏂板缂栬緫", @@ -33,22 +34,25 @@ closeModal, } = useModal({ title: "璁惧鍙拌处" }); -const sendForm = async () => { - loading.value = true; - const { code } = id.value - ? await editLedger({ id: id.value, ...formRef.value.form }) - : await addLedger(formRef.value.form); - if (code == 200) { - emits("success"); - ElMessage({ message: "鎿嶄綔鎴愬姛", type: "success" }); - close(); - } else { - loading.value = false; - } +const sendForm = () => { + proxy.$refs.formRef.$refs.formRef.validate(async valid => { + if (valid) { + const {code} = id.value + ? await editLedger({id: id.value, ...formRef.value.form}) + : await addLedger(formRef.value.form); + if (code == 200) { + emits("success"); + ElMessage({message: "鎿嶄綔鎴愬姛", type: "success"}); + close(); + } else { + loading.value = false; + } + } + }) }; const close = () => { - formRef.value.resetForm(); + formRef.value.resetFormAndValidate(); closeModal(); }; diff --git a/src/views/index.vue b/src/views/index.vue index 852ef6a..3854453 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -337,16 +337,6 @@ } ]) -// 鍚堝悓閲戦鍒嗘瀽鏁版嵁 -const contractList = [ - { name: '娣卞湷绉戞妧鏈夐檺鍏徃', percent: 36, value: 4544, color: '#4fc3f7' }, - { name: '鍖椾含绉戞妧鏈夐檺鍏徃', percent: 20, value: 4000, color: '#81c784' }, - { name: '骞垮窞绉戞妧鏈夐檺鍏徃', percent: 16, value: 3113, color: '#ffb74d' }, - { name: '涓婃捣绉戞妧鏈夐檺鍏徃', percent: 10, value: 2341, color: '#ba68c8' }, - { name: '鍗椾含绉戞妧鏈夐檺鍏徃', percent: 9, value: 1231, color: '#e57373' }, - { name: '鍖椾含鏈潵绉戞妧鏈夐檺鍏徃', percent: 9, value: 1231, color: '#64b5f6' } -] - // 寰呭姙浜嬮」 const todoList = ref([]) const radio1 = ref(1) -- Gitblit v1.9.3