当前位置: 首页 > news >正文

ant-design a-from-model的校验

目前有一个需求,就是使用ant-desing for vue 1.7.8版本的框架做一个表单,但是在过程中出现了Bug,现在想要记录下来:
遇到的bug:我有一个下拉框,这个下拉框旁边有一个选择的弹出框,在弹出框点击确认后,可以赋值到下拉框,下拉框也可以选择,但是有一个bug,那就是如果我先在弹出框选择了,并且赋值了,这个时候我再在下拉框选择,会出现校验不通过,会有一个提示。后面修复了。

一、VUE 代码

我这里使用的a-form-model的表单,并且使用了循环

<div v-for="(form, formIndex) in formDataList" :key="form.tid" class="problem_form_wrapper"><div style="margin-bottom: 15px;text-align: right;"><a-button class="delete_btn" type="primary" @click="handleDelete(form.tid)" icon="delete">删除问题</a-button></div><div class="table-page-search-wrapper"><a-form-model :model="form" :ref="`form_${form.tid}`" layout="inline"><a-input v-decorator.trim="['planCode', planCode]" type="hidden"></a-input><a-input v-decorator.trim="['issuesId', form.issuesId]" type="hidden"></a-input><a-row :gutter="30" style="margin-bottom: 10px;"><a-col :span="12"><a-form-model-item label="问题编号:" :rules="{ required: true, message: '请输入问题编号' }" prop="issuesCode"><a-input v-model="form.issuesCode" :allowClear="true" :disabled="true"> </a-input></a-form-model-item></a-col><a-col :span="12"><a-form-model-item label="问题类别:" :rules="{ required: true, message: '请选择问题类别' }" prop="issuesTypeVal"><a-cascader v-model="form.issuesTypeVal" :options="groups" placeholder="请选择问题类别" clearable /></a-form-model-item></a-col></a-row><a-row :gutter="30" style="margin-bottom: 10px;"><a-col :span="12"><a-form-model-item label="隐患等级:" :rules="{ required: true, message: '请选择隐患等级' }"prop="hiddenLevelVal"><a-cascader v-model="form.hiddenLevelVal" :options="hiddenLeveOptions" placeholder="请选择隐患等级"@change="onChange($event, formIndex)" clearable /></a-form-model-item></a-col><a-col :span="12"><a-form-model-item label="问题所属单位:"><a-select v-model="form.issuesDepm" placeholder="请选择问题所属单位"><a-select-option v-for="item in issuesUnit" :key="item.value" :value="item.value">{{item.label}}</a-select-option></a-select></a-form-model-item></a-col></a-row><a-row :gutter="30" style="margin-bottom: 10px;"><a-col :span="12"><a-form-model-item label="是否违章:" :rules="{ required: true, message: '请选择是否违章' }" prop="isBreak"><a-radio-group v-model="form.isBreak"><a-radio value="0"></a-radio><a-radio value="1"></a-radio></a-radio-group></a-form-model-item></a-col><a-col :span="12"><a-form-model-item label="违章代码:":rules="{ required: form.isBreak == '1', message: '请选择违章代码', trigger: ['change', 'blur'] }"prop="violationsCoding"><a-select style="width: 70%;" :options="viotionOptions" showSearch@select="(value) => onSelect(value, formIndex)" v-model="form.violationsCoding" placeholder="请选择":filterOption="filterOption"></a-select><a @click="openCode(formIndex)" style="margin-left: 20px">快速查找</a></a-form-model-item></a-col></a-row><a-row :gutter="30" style="padding-bottom: 60px;"><a-col :span="12"><a-form-model-item label="违章类型:"><a-input v-model="form.violationsType" :disabled="true" placeholder="请输入违章类型"></a-input></a-form-model-item></a-col><a-col :span="12"><a-form-model-item label="违章现象:"><a-textarea v-model="form.violationsPhenomena" :disabled="true" placeholder="请输入违章现象" :rows="3" /></a-form-model-item></a-col></a-row><a-row :gutter="30" style="padding-bottom: 90px;"><a-col :span="12"><a-form-model-item label="问题描述:" :rules="{ required: true, message: '请填写问题描述' }"prop="issuesDescriptions"><a-textarea v-model="form.issuesDescriptions" placeholder="请输入问题描述" :rows="4" /></a-form-model-item></a-col><a-col :span="12"><a-form-model-item label="整改建议:" :rules="{ required: true, message: '请填写整改建议' }" prop="suggest"><a-textarea v-model="form.suggest" placeholder="请输入整改建议" :rows="4" /></a-form-model-item></a-col></a-row><a-row :gutter="30" style="margin-bottom: 10px;"><a-col :span="12"><a-form-model-item label="计划完成时间:" :rules="{ required: true, message: '请填写计划完成时间' }"prop="completeTime"><a-date-picker v-model="form.completeTime" placeholder="请选择计划完成时间" format="YYYY-MM-DD"valueFormat="YYYY-MM-DD" style="width: 100%;" /></a-form-model-item></a-col></a-row><a-row :gutter="30" style="margin-bottom: 60px;"><a-col :span="24"><a-form-model-item label="检查图片:" prop="imagePath"><a-upload :ref="'upload' + formIndex" name="file" :action="uploadAction" :headers="tokenHeader"multiple list-type="picture-card" :defaultFileList="form.imageList" @preview="handlePreview"@change="function (info) { handleUploadChange(info, form.tid, formIndex) }":remove="function (info) { handleRemove(info, form.tid) }" :uploadMessage="'只支持图片格式'":accept="'.jpg,.png,.dwg,.jpeg,.gif,.bmp,.tiff,.svg'" :before-upload="beforeUpload"><div v-if="form.imagePath.length < 255"><a-icon type="plus" /><div class="ant-upload-text">上传<br> <span style="font-size: 12px">(可以上传多张图片)</span> </div></div></a-upload></a-form-model-item></a-col></a-row><!-- 违章现象选择弹窗 --><a-modal :visible="breakRuleVisibleCode" :footer="null" @cancel="handleCancelBreakRuleAddCode" width="60%"title="关联违章"><div class="table-page-search-wrapper"><a-form layout="inline"><a-row :gutter="24"><a-col :md="18" :sm="8"><a-form-item label="违章现象"><a-input placeholder="请输入违章现象" v-model="regulations"></a-input></a-form-item></a-col><span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"><a-col :md="6" :sm="24"><a-button type="primary" @click="onSelectRegulations(true)">查询</a-button><a-button style="margin-left: 8px" @click="onSelectRegulations(false)">重置</a-button></a-col></span></a-row></a-form></div><a-table ref="table" size="middle" rowKey="id" :columns="vcolumns" :dataSource="viotionRecords":bodyStyle="{ maxHeight: '500px', overflow: 'auto' }" :scroll="{ y: 500, x: '100%' }":virtual="false"><span slot="action" slot-scope="text, record"><a-button key="back" @click="handleCancelBreak(record, breakIndex)"> 选择 </a-button></span></a-table></a-modal><a-modal :visible="previewVisible" :footer="null" @cancel="handleCancelPreview"><img style="width: 100%" :src="previewImage" /></a-modal></a-form-model></div></div>

我上面的代码直接复制的,懒得删减。

二、方法

 //点击搜索弹出违章类型搜索openCode(index) {this.breakRuleVisibleCode = truethis.breakIndex = index},onSelect(value, index) {this.myMethod(value, index);const formRef = this.$refs[`form_${this.formDataList[index].tid}`];},myMethod(value, index) {let newData = this.viotionRecords.filter(item => item.code === value)[0];this.$set(this.formDataList[index], 'violationsCoding', value);this.$set(this.formDataList[index], 'violationsType', newData.violationsType);this.$set(this.formDataList[index], 'violationsPhenomena', newData.regulations);this.$nextTick(() => {const formRef = this.$refs[`form_${this.formDataList[index].tid}`]?.[index];formRef.clearValidate('violationsCoding')});this.$forceUpdate()},handleCancelBreak(record, index) {this.myMethod(record.code, this.breakIndex)this.breakRuleVisibleCode = false;

主要的解决方法就是用了同一个赋值的 方法,以前是分开的: this.myMethod(record.code, this.breakIndex)

http://www.dtcms.com/a/330267.html

相关文章:

  • poetry
  • 《深入解析C++中的Map容器:键值对存储的终极指南》
  • 基于51单片机zigbee的病房呼叫系统
  • Datawhale AI夏令营 「2025全球AI攻防挑战赛-赛道一:图片全要素交互认证-生成赛」的赛事项目实践
  • springboot接口请求参数校验
  • 双椒派E2000D系统盘制作全攻略
  • 在腾讯云CodeBuddy上实现一个AI聊天助手
  • 实盘回测一体的期货策略开发:tqsdk获取历史数据并回测,附python代码
  • java循环分页查询数据,任何把查询到的数据,分批处理,多线程提交到数据库清洗数据
  • 第十二节:粒子系统:海量点渲染
  • 远程办公,如何轻松访问公司内网?出差在外也能远程控制局域网内电脑、外网直接连接到指定端口应用
  • 基于通用优化软件GAMS的数学建模和优化分析(GAMS安装和介绍、GAMS程序编写、GAMS程序调试)
  • Ubuntu22.04轻松安装Qt与OpenCV库
  • 【力扣】面试经典150题总结02-双指针、滑动窗口
  • Kubernetes 网络排错
  • 《嵌入式Linux应用编程(四):Linux Framebuffer图形编程》
  • 数学建模算法-day[17]
  • 【Spring Ai框架】
  • CMake笔记:配置(Configure)、生成(Generate)和构建(Build)
  • 软件架构重构:从混沌到有序的系统性演进
  • 第6节 torch.nn介绍
  • 什么是脏读、幻读、不可重复读?
  • linux编程----文件(framebuffer)
  • 正则表达式解析(三)
  • 方法论基础。
  • 与Deepseek对话了解无线电通信知识
  • 自动曝光算法参考
  • Linux Framebuffer(帧缓冲)与基本 UI 绘制技术
  • GitHub宕机时的协作方案
  • 力扣 hot100 Day72