多个el-tab共用一个表单校验问题

需求是这样的,有多项tab,切换不同的tab,显示的输入框是一样的,但有的tab需要必填,有的tab则不需要必填。效果图如下:(带星号和不带星号)

 <el-tabs v-model="activeName" @tab-click="handleTabsClick">

        <el-tab-pane

                v-for="item in 6"

                :key="item"

                :label="item"

                :name="item"

                style="width: 150px"

        ></el-tab-pane>

</el-tab>

<el-form ref="addGoodsForm" label-width="86px" :rules="rules" :model="addGoodsForm" class="addGoodsForm" :inline="true">

            <el-form-item v-if="activeName == '5'" label="品牌" prop="brandNorules">

             <!-- 其他:不需要校验品牌 -->

             <el-input v-model="addGoodsForm.brandNorules" placeholder="请输入" maxlength="30" show-word-limit autocomplete="off" size="small"></el-input>

        </el-form-item>

        <el-form-item v-else label="品牌" prop="brand">

             <el-input v-model="addGoodsForm.brand" placeholder="请输入" maxlength="30" show-word-limit autocomplete="off" size="small"></el-input>

        </el-form-item>

        <el-form-item label="用途" prop="useType" :rules="[{ required: activeName == '5' ? false : true, message: '请选择用途', trigger: 'change'}]">

              <el-select v-model="addGoodsForm.useType" placeholder="请选择" size="small">

                   <el-option v-for="item in dictArr.BATTERY_PURPOSE" :key="item.value" :label="item.name" :value="item.name" />

               </el-select>

        </el-form-item>

</el-form>

   data() {

const checkBrandRules = (rule, value, callback) => {

      if (!value || value === '' || !this.addGoodsForm.brandNorules)  {

        callback()

      } else if (!this.checks.text.norText.test(value)) {

        callback(new Error('品牌只能输入:中英文数字'))

      }

      return callback()

    }

    const checkBrand = (rule, value, callback) => {

      if (value === '' || !this.addGoodsForm.brand) {

        return callback(new Error('请输入品牌'))

      } else {

        this.addGoodsForm.brand = this.addGoodsForm.brand.trim()

        if (this.addGoodsForm.brand.length < 1) {

          return callback(new Error('品牌最少需要输入1个字符'))

        } else if (!this.checks.text.norText.test(value)) {

          callback(new Error('品牌只能输入:中英文数字'))

        }

        return callback()

      }

    }

    return {

        rules: {

            brandNorules: [{ required: false, validator: checkBrandRules, trigger: 'blur' }], // 品牌

            brand: [{ required: true, validator: checkBrand, trigger: 'blur' }], // 品牌

        }

    }

}

猜你喜欢

转载自blog.csdn.net/qq_42080594/article/details/129538843