element 表单验证 深层验证绑定

这篇具有很好参考价值的文章主要介绍了element 表单验证 深层验证绑定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

直接上代码 :prop 和prop 都可以,vue2和vue3或者是element、elementplus都可以用

table

<template>
    <div class="page page-table">
        <section class="page-query-form">
            <breadcrumb :hasLine="false" />
        </section>
        <div class="table-content" style="height:calc(100% - 70rem)">
            <el-form label-position="top" ref="ruleForm" label-width="80px" :model="formData">
                <div class="type-name">
                    <span>人员信息</span>
                </div>
                <el-row :gutter="20">
                    <el-col :span="5">
                        <el-form-item label="人员姓名" :prop="'clientStaffVo.name'" :rules="rules.name">
                            <el-input size="small"   v-model="formData.clientStaffVo.name" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="4">
                        <el-form-item label="人员性别" :prop="'clientStaffVo.sex'" :rules="rules.sex">
                            <el-radio-group v-model="formData.clientStaffVo.sex">
                                <el-radio label="1"></el-radio>
                                <el-radio label="0"></el-radio>
                            </el-radio-group>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item label="联系电话" prop="clientStaffVo.phone" :rules="rules.phone">
                            <el-input size="small"   v-model="formData.clientStaffVo.phone" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item label="身份证号" prop="clientStaffVo.cardId" :rules="rules.cardId">
                            <el-input size="small"   v-model="formData.clientStaffVo.cardId" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item label="工作单位" prop="clientStaffVo.unit" :rules="rules.unit">
                            <el-input  size="small"  v-model="formData.clientStaffVo.unit" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="5">
                        <el-form-item label="上传身份证" prop="clientStaffVo.cardUpload" :rules="rules.cardUpload">
                            <div class="file-box">
                                <IDCardUploader @uploadDone='uploadDone' :list='formData.clientStaffVo.cardUpload' fieldName='cardUpload' prefix='cardUpload' text="身份证人像面"></IDCardUploader>
                                <!-- <IDCardUploader @uploadDone='uploadDone' :list='formData.clientStaffVo.cardUploadOpposite' fieldName='cardUploadOpposite' prefix='cardUploadOpposite' text="身份证国徽面"></IDCardUploader> -->
                            </div>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item :label="'身份证国徽面'" prop="clientStaffVo.cardUploadOpposite" :rules="rules.cardUploadOpposite">
                            <div class="file-box">
                                <IDCardUploader @uploadDone='uploadDone' :list='formData.clientStaffVo.cardUploadOpposite' fieldName='cardUploadOpposite' prefix='cardUploadOpposite' text="身份证国徽面"></IDCardUploader>
                            </div>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item label="上传驾驶证" prop="id">
                            <div class="file-box">
                                <IDCardUploader @uploadDone='uploadDone' :list='formData.clientStaffVo.drivingUpload' fieldName='drivingUpload' prefix='drivingUpload' text="上传驾驶证"></IDCardUploader>
                                <!-- <IDCardUploader @uploadDone='uploadDone' :list='formData.clientStaffVo.drivingUploadOpposite' fieldName='drivingUploadOpposite' prefix='drivingUploadOpposite' text="上传驾驶证副业"></IDCardUploader> -->
                            </div>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item label="上传驾驶证副业" prop="id">
                            <div class="file-box">
                                <IDCardUploader @uploadDone='uploadDone' :list='formData.clientStaffVo.drivingUploadOpposite' fieldName='drivingUploadOpposite' prefix='drivingUploadOpposite' text="上传驾驶证副业"></IDCardUploader>
                            </div>
                        </el-form-item>
                    </el-col>

                </el-row>
                <div class="type-name">
                    <span>来访车辆信息</span>
                </div>
                <el-row :gutter="20">
                    <el-col :span="5">
                        <el-form-item label="车牌号码">
                            <el-input  size="small"   v-model="formData.clientCarVo.licensePlateNum" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item label="随行人数">
                            <el-select size="small"   v-model="formData.clientCarVo.num" placeholder="请选择">
                                <el-option v-for="item in dictMapList.numList" :key="item.value" :label="item.label" :value="item.value">
                                </el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                </el-row>
                <div class="type-name">
                    <span>预约时间</span>
                </div>
                <el-row :gutter="20">
                    <el-col :span="5">
                        <el-form-item label="预计进企时间" prop="gmtInto" :rules="rules.gmtInto">
                            <el-date-picker size="small"  :picker-options="startPickerOptions"   v-model="formData.gmtInto" type="datetime" value-format="yyyy-MM-dd HH:mm" placeholder="选择日期时间">
                            </el-date-picker>
                        </el-form-item>
                    </el-col>
                    <el-col :span="5">
                        <el-form-item label="预计离企时间" prop="gmtLeave" :rules="rules.gmtLeave">
                            <el-date-picker  size="small" :picker-options="endPickerOptions"    v-model="formData.gmtLeave" type="datetime" value-format="yyyy-MM-dd HH:mm" placeholder="选择日期时间">
                            </el-date-picker>
                        </el-form-item>
                    </el-col>
                </el-row>
                <div class="type-name">
                    <span>访问事由</span>
                </div>
                <el-row :gutter="20">
                    <el-col :span="5">
                        <el-form-item label="被访企业 "  prop="enterprise"   :rules='rules.enterprise'>
                            <el-select  size="small"  v-model="formData.enterprise"    placeholder="请选择">
                                <el-option v-for="item in dictMapList.enterpriseList" :key="item.id" :label="item.label" :value="item.id" @click.native="checkedenterprise(item)">
                                </el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :span="4">
                        <el-form-item label="被访人员" prop="name" :rules="rules.name">
                            <el-input size="small"   v-model="formData.name" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="4">
                        <el-form-item label="被访人电话" prop="phone" :rules="rules.phone">
                            <el-input size="small"    v-model="formData.phone" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="4">
                        <el-form-item label="被访人部门" prop="departmentId" :rules="rules.departmentId">
                            <el-input size="small"    v-model="formData.departmentId" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="7">
                        <el-form-item label="来访事由" prop="reasons" :rules="rules.reasons">
                            <el-input size="small"    v-model="formData.reasons" placeholder="请输入"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <div class="btns">
                <el-button type="primary" @click="handleConfirm">提交预约</el-button>
                <el-button plain @click="handlerest">重置</el-button>
            </div>
        </div>
    </div>
</template>

<script>
    import Amap from '@/components/amap/index.vue';
    import breadcrumb from '@/components/breadcrumb/index.vue';
    import * as config from '@/common/env.json';
    import IDCardUploader from '@/components/id-card-uploader/id-card-uploader.vue';
    export default {
        components: { breadcrumb, Amap, IDCardUploader },
        data() {
            return {
                rules: {
                    name: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['empty', 'blank'] }
                    ],
                    sex: [
                        { required: true, message: '请选择', trigger: ['blur', 'change'] },
                    ],
                    phone: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['mobile'] }
                    ],
                    cardId: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['id'] }
                    ],
                    unit: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['empty', 'blank'] }
                    ],
                    gmtInto: [
                        { required: true, message: '请选择', trigger: ['blur', 'change'] },
                    ],
                    gmtLeave: [
                        { required: true, message: '请选择', trigger: ['blur', 'change'] },
                    ],
                    enterprise: [
                        { required: true, message: '请选择', trigger: ['blur', 'change'] },
                    ],
                    name: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['empty', 'blank'] }
                    ],
                    phone: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['mobile'] }
                    ],
                    departmentId: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['empty', 'blank'] }
                    ],
                    reasons: [
                        { required: true, message: '请输入', trigger: ['blur', 'change'] },
                        { validator: this.validation, check: ['empty', 'blank'] }
                    ],
                    cardUpload: [
                        { required: true, message: '请上传', trigger: ['blur', 'change'] },
                    ],
                    cardUploadOpposite: [
                        { required: true, message: '请上传', trigger: ['blur', 'change'] },
                    ],
                },
                dictMapList: {
                    numList: [
                        { label: '1人', value: 1 },
                        { label: '2人', value: 2 },
                        { label: '3人', value: 3 },
                        { label: '4人', value: 4 },
                        { label: '5人', value: 5 },
                        { label: '6人', value: 6 },
                        { label: '8人', value: 8 },
                        { label: '9人', value: 9 },
                        { label: '10人', value: 10 },
                        { label: '15人', value: 15 },
                    ],
                    enterpriseList: [],
                    areaList: [],
                },
                formData: {
                    clientCarVo: {
                        carType: null,
                        rsqasUpload: null,
                        num: null,
                        travelUpload: '',
                        travelUploadOpposite: '',
                    },
                    clientStaffVo: {
                        cardId: null,
                        cardUpload: '',
                        cardUploadOpposite: '',
                        drivingUpload: '',
                        drivingUploadOpposite: '',
                        name: null,
                        phone: null,
                        sex: null,
                        unit: null,
                    },
                },
            }
        },
        created() {
            this.getTyep().then(() => {
                if (this.$route.query.id) {
                    this.getInfo()
                }
            })

        },
        methods: {
            startPickerOptions: {
                disabledDate(time) {
                    return time.getTime() < (Date.now() - 3600 * 1000 * 24)
                },
                selectableRange: '00:00:00 - 23:59:59',
            },
            checkedenterprise(item) {
                this.formData.clientCarVo.socialCode = item.value;
                this.formData.clientStaffVo.socialCode = item.value;
            },
            getInfo() {
                this.$api.apiClientStaffSubscribeInfo({ id: this.$route.query.id }).then((res) => {
                    if (res.success) {
                        this.formData = res.data;
                        this.formData.enterprise=Number(this.formData.enterprise)
                    }
                })
            },
            uploadDone(val, fileName) {
                this.formData.clientStaffVo[fileName] = val;
                this.$refs.ruleForm.validate();
            },

            async getTyep() {
                await this.$api.apiDictSelectDictMap({ key: 'industrial_area,economic_trade' }).then((res) => {
                    if (res.success) {
                        this.dictMapList.areaList = res.data.industrial_area;
                        this.dictMapList.economicTrade = res.data.economic_trade;
                    };
                })
                this.dictMapList.enterpriseList = await this.$api.apiSelectEnterpriseInfoNames({ name: null }).then(res => {
                    return res.data.map(i => {
                        return {
                            id: i.id,
                            value: i.socialCreditCode,
                            label: i.enterpriseName,
                        }
                    })
                });
            },
            handlerest() {
                this.$confirm('', {
                    dangerouslyUseHTMLString: true,
                    message: `<h2>操作确认</h2><span>该操作不可逆,是否确认重置填写的数据?</span>`,
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    showClose: false,
                    type: 'warning',
                }).then(() => {
                    if (this.$route.query.id) {
                        this.getInfo();
                    } else {
                        this.formData = {
                            clientCarVo: {
                                carType: null,
                                rsqasUpload: null,
                                num: null,
                                travelUpload: '',
                                travelUploadOpposite: '',
                            },
                            clientStaffVo: {
                                cardId: null,
                                cardUpload: '',
                                cardUploadOpposite: '',
                                drivingUpload: '',
                                drivingUploadOpposite: '',
                                name: null,
                                phone: null,
                                sex: null,
                                unit: null,
                            },
                        };
                         this.$refs.ruleForm.resetFields();
                    }
                })
            },
            async handleConfirm() {
                this.$refs.ruleForm.validate((valid) => {
                    if (valid) {
                        let params = JSON.parse(JSON.stringify(this.formData));
                        if (this.$route.query.id) {
                            this.$api.apiClientStaffSubscribeUpdate(params).then((res) => {
                                if (res.success) {
                                    this.$notify({
                                        title: '操作成功',
                                        message: '数据提交成功',
                                        type: 'success',
                                        duration: 1000,
                                        position: 'top-left',
                                    });
                                }
                            })
                        } else {
                            this.$api.apiClientStaffSubscribeSave(params).then((res) => {
                                if (res.success) {
                                    this.$notify({
                                        title: '操作成功',
                                        message: '数据提交成功',
                                        type: 'success',
                                        duration: 1000,
                                        position: 'top-left',
                                    });
                                    this.formData = {
                                        clientCarVo: {
                                            carType: null,
                                            rsqasUpload: null,
                                            num: null,
                                            travelUpload: '',
                                            travelUploadOpposite: '',
                                        },
                                        clientStaffVo: {
                                            cardId: null,
                                            cardUpload: '',
                                            cardUploadOpposite: '',
                                            drivingUpload: '',
                                            drivingUploadOpposite: '',
                                            name: null,
                                            phone: null,
                                            sex: null,
                                            unit: null,
                                        },
                                    };
                                    this.$refs.ruleForm.resetFields();

                                }
                            })
                        }


                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
        }
    }
</script>

<style lang="less" scoped>
.table-content{
    .scrollbar();
}
.type-name{
    span{display: inline-block;border-bottom: 2px solid#409EFF; padding: 5px 0;}
}
.btns{ text-align: center;}
.file-box{ display: flex; justify-content: space-around;}
</style>

form:文章来源地址https://www.toymoban.com/news/detail-620168.html

到了这里,关于element 表单验证 深层验证绑定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【vue】element-ui的form数组表单验证(循环表单验证)

    基于 vue2.0 的 element-ui 的 form 表单验证比较简单,但是有些同学可能对于 数组类型 的表单验证无从下手,这里我基于一个我自己项目中的例子,展示一下怎么进行数组的表单验证。 项目截图: 上代码,为了让大家看起来比较清晰,我删掉了无关的代码: 咱们把数组验证的部

    2024年02月07日
    浏览(55)
  • vue:element-ui表单动态验证规则

    实现当是否发送消息选择是时,业务类型字段必填。 当你在一个表单中使用 el-form 和 el-form-item 来创建表单项时, el-form-item 的 :rules 属性可以用来设置该表单项的验证规则。我们希望根据用户在 \\\"是否发送消息\\\" 这个表单项中的选择动态设置 \\\"业务类型\\\" 这个表单项的验证规则

    2024年01月23日
    浏览(48)
  • Vue3 element-plus表单嵌套表格实现动态表单验证

    部分效果图如下: 另表格有添加和删除按钮,点击提交进行表单验证。 首先data格式必须是对象包裹数组 给表单绑定form数据 表格绑定tableData数据 给表单项增加验证规则 rules对应data rules对象,prop对应表单字段(注意是表格里每一行对应的字段 forms.tableData[下标].key) prop的关

    2024年02月14日
    浏览(44)
  • Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能

    原创/朱季谦 最近通过Vue + Element ui实现了动态表单功能,该功能还包括了动态表单新增行、删除行、动态表单验证、动态表单提交功能,趁热打铁,将开发心得记录下来,方便以后再遇到类似功能时,直接拿来应用。 简化的页面效果图如下: 最开始,我是用了纯粹的表格形

    2024年02月04日
    浏览(49)
  • 在Vue框架项目里通过Element Plus实现表单验证

    最近一直在忙着做项目,在这个过程中也遇到了很多问题,之前虽然也有做笔记总结,但从未发过文章,这是第一次尝试,既为分享,也为记录,写得不好请各位多多指正。 言归正传,相信大家经常都会遇到要处理表单验证的环节,而我在最近的项目中也遇到需要做表单验证

    2024年02月16日
    浏览(43)
  • element ui input 深层循环v-model绑定默认数据删除不了的情况

    例子: 在项目开发中遇到的,简单记录一下  给input一个@input方法  使其更新视图,这样子就可以正常编辑删除了 出现这种情况是vue不能检测到对象属性的添加或者删除导致视图无法更新

    2024年02月15日
    浏览(81)
  • vue+Element项目中v-for循环+表单验证

    表单验证的时候: prop改为 “:prop”,形式为\\\'input.\\\' + index + \\\'.ptock\\\' \\\'input.\\\' + index + \\\'.ptock’就是数据结构与数据 每一个循环中的都需要加:rules :prop=\\\"\\\'input.\\\' + index + \\\'.ptock\\\'\\\"的写法也可以是 模板字符串  

    2024年02月15日
    浏览(42)
  • 解决Vue+Element UI使用表单rules国际化时From表单验证信息不能实时更新

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 博主在工作之余开始进行自动化测试平台的开发,虽然已经996一个月了但是还是在使劲挤时间做这件事情,目前平台使用前端框架 vue-element-admin 进行简化后二次开发,目前保留了原框架中的国际化

    2024年02月13日
    浏览(47)
  • vue element form rules表单规则验证,输入框有值,但验证始终不消失问题的个人解决办法

             做项目时在el-form中遇到了设定了表单验证规则,但只要输入值就显示未输入的情况:         根据网上查找的结果,rules中的名称要与from-item中的prop别名相同,看了一下没问题    后来在网上看到这篇文章:vue element form表单规则验证,有值,但验证始终不消失

    2024年02月12日
    浏览(53)
  • Vue element-ui form 表单 前端提交和后端的接收

    一、前端 1、新建弹窗dialog 2、在数据(data)里面绑定(return)数据 3、在method里新建方法 二、后端 1、在配置好mybatis-plus的前提下 2、在控制类中添加方法 3、@RequestBody注解的使用 @requestBody注解的使用 - 西风恶 - 博客园 (cnblogs.com)

    2024年02月15日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包