element UI —— form表单中Radio单选框进行切换 & 表单验证rule动态校验-validator & 保存前进行form表单校验后才能上传-validate

element UI —— form表单中Radio单选框进行切换 & 表单验证rule动态校验-validator & 保存前进行form表单校验后才能上传-validate

1、效果图

在这里插入图片描述

2、代码

结构

<!-- ruleForm  定义的ref名字   rules-绑定的规则 -->
<el-form :model="form" class="form" ref="ruleForm" :rules="rules" label-width="180px">
    <el-form-item label="检查范围" prop="checkRange">
        <el-radio-group v-model="form.checkRange" @change="changeCheckRange">
          <el-radio :label="'3'">按省份</el-radio>
          <el-radio :label="'4'">按城市</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="请选择省份" prop="adminCode" size="small" v-if="labelVal === '3'">
        <el-select v-model="form.adminCode" filterable multiple placeholder="请选择省份" @change="changeLevel">
          <el-option
            v-for="item in byLevelList"
            :key="item.adminCode"
            :label="item.adminName"
            :value="item.adminCode">
          </el-option>
        </el-select>
        <span class="color-red">(省份控件,支持检索,可多选)</span>
      </el-form-item>
      <el-form-item label="请选择城市" prop="adminCode" size="small" v-if="labelVal === '4'">
        <el-select v-model="form.adminCode" filterable multiple placeholder="请选择城市" @change="changeLevel">
          <el-option
            v-for="item in byLevelList"
            :key="item.adminCode"
            :label="item.adminName"
            :value="item.adminCode">
          </el-option>
        </el-select>
        <span class="color-red">(城市控件,支持检索,可多选)</span>
      </el-form-item>
          <el-form-item>
        <el-button type="primary" @click="onSubmit">确定</el-button>
        <el-button @click="backToList">取消</el-button>
      </el-form-item>
</el-form>

数据

<script>
export default {
  data () {
    const validatePass = (rule, value, callback) => { //自定义规则校验
      if (value.length > 0) {
        callback()
      } else {
        if (this.labelVal === '3') {
          callback(new Error('请输入省份'))
        } if (this.labelVal === '4') {
          callback(new Error('请输入城市'))
        }
      }
    }  
      
    return{
        byLevelList: [],
        labelVal: '3',
        form:{
           adminName: [],
           adminCode: [],
        },
        rules: {
            name: [
              { required: true, message: '请选择任务', trigger: 'change' }
            ],
            adminCode: [ // validator  定义名字
              { validator: validatePass, trigger: 'blur' }
            ],            
        }
    },
   methods: {
    // 创建检查--提交
    onSubmit () {
      this.checkFormAdd()
    },
    // 创建检查--取消
    backToList () {
      this.$router.back(); //返回上一页
    },
    /**
     * 切换检查范围
     * @param {*} val  选中的检查范围
     */
    changeCheckRange (val) {
      this.labelVal = val
      let labelValList = ['3', '4']
      if (labelValList.includes(val)) {
        this.levelParam = Number(val) === 4 ? 2 : 1
        this.form.adminCode = []
        this.$nextTick(() => {
          this.$refs['ruleForm'].clearValidate();
        });
        this.getAllListByLevel()
      }
    },
    /**
     * 获取省份和城市
     *  @param {number} level  1-省份  2-城市
     *  @returns {any}
     */
    getAllListByLevel () {
      const param = {
        level: this.levelParam
      }
      ajax.NPGet('check_getAllListByLevel', param).then(res => {
        this.byLevelList = res
      })
    },
    /**
     * 切换省份或城市
     * @param {Int} val  选中的省份或城市
     */
    changeLevel (val) {
      this.form.adminName = []
      this.byLevelList.forEach(el => {
        val.forEach(item => {
          if (item === el.adminCode) {
            this.form.adminName.push(el.adminName)
          }
        })
      })
    },
    /**
     * 创建检查
     * @param {object} param  form表单
     * @returns {*}
     */
    checkFormAdd () {
      // ruleForm-定义的ref   valid-必填项没有填,不调接口  输入后,进行保存提交
      this.$refs.ruleForm.validate(valid => {
        if (!valid) return false;
        let param = this.form
        checkAdd(param).then((res) => {
          this.$message.success('新增成功!');
          this.$router.back();
        }, err => {
          this.$message.error('新增失败!');
        });
      })
    },
  }
}
</script>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
怎么写? 对于框的校验,有以下几种方式: 1. 使用rules规则数组 在单中,可以设置rules规则数组,来进行校验。在框的情况下,可以使用如下规则: ```javascript rules: { radio: [ { required: true, message: &#39;请择一个&#39;, trigger: &#39;change&#39; } ] } ``` 其中,radio框的字段名,required示必,message校验失败的提示信息,trigger示触发校验的事件,默认为blur。 2. 使用自定义校验函数 在单中也可以使用自定义的校验函数来进行校验,比如: ```javascript rules: { radio: [ { validator: validateRadio, trigger: &#39;change&#39; } ] }, methods: { validateRadio(rule, value, callback) { if (value) { callback(); } else { callback(new Error(&#39;请择一个&#39;)); } } } ``` 其中,validateRadio是自定义的校验函数,rule和value是校验规则和值,callback是回调函数,用于返回校验结果和提示信息。 3. 使用el-form-item的prop和rules属性 在el-form-item中,可以设置prop属性来指定字段名,同时可以设置rules属性来进行校验,例如: ```html &lt;el-form-item label=&quot;&quot; prop=&quot;radio&quot; :rules=&quot;[{ required: true, message: &#39;请择一个&#39;, trigger: &#39;change&#39; }]&quot;&gt; &lt;el-radio-group v-model=&quot;form.radio&quot;&gt; &lt;el-radio :label=&quot;1&quot;&gt;项1&lt;/el-radio&gt; &lt;el-radio :label=&quot;2&quot;&gt;项2&lt;/el-radio&gt; &lt;el-radio :label=&quot;3&quot;&gt;项3&lt;/el-radio&gt; &lt;/el-radio-group&gt; &lt;/el-form-item&gt; ``` 其中,prop指定了框的字段名,rules属性指定了校验规则,可以和rules属性一样设置。 以上三种方式都能够实现框的校验,具体可以根据实际情况择适合自己的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值