zoukankan      html  css  js  c++  java
  • vue element-ui的el-table和el-form嵌套使用表单校验


    表格是el-table自动获取的后台数据,每行都有el-input的验证,这样一个rules的规则就不能匹配到每一行,所以要是用动态的prop和rules规则
    关键一
    此处 data中定义的变量,params:表格数据,后台查询获得;paramsRules:校验规则
    关键二
    此处 :model、:rules
    关键三
    此处 :prop="'params.' + scope.$index + '.min'"和:rules="paramsForm.paramsRules.min"即动态对应上每行数据的校验规则
    <template>
      <div>
        <el-form :model="paramsForm" ref="rForm" :rules="paramsForm.paramsRules">
          <el-table
            :data="paramsForm.params"
            style=" 100%"
            border
            stripe
            max-height="990"
            highlight-current-row
          >
            <el-table-column
              fixed
              width="55"
              align="center"
                label="序号"
              show-overflow-tooltip
              type="index"
              :index="indexMethod"
            >
            </el-table-column>
            <el-table-column align="center" type="selection" width="55">
            </el-table-column>
    
            <el-table-column
              label="检测类型"
              align="center"
              width="160"
              prop="kpiName"
              sortable
              show-overflow-tooltip
            >
              <template slot-scope="scope">
                <span>{{ scope.row.kpiName }}</span>
              </template>
            </el-table-column>
    
            <el-table-column label="检测开关" align="center">
              <template slot-scope="scope">
                <el-switch
                  v-model="scope.row.kpiStatus"
                  :disabled="isDisabled"
                  active-text="关闭"
                  inactive-text="开启"
                >
                </el-switch>
              </template>
            </el-table-column>
            <el-table-column label="报警阈值" align="center">
              <template slot-scope="scope">
                <el-row>
                  <el-col :span="10" style="height: 23px">
                    <el-form-item
                      v-if="scope.row.kpiType === 'range'"
                      :prop="'params.' + scope.$index + '.min'"
                      :rules="paramsForm.paramsRules.min"
                    >
                      <el-input
                        v-model.number="scope.row.min"
                        size="small"
                        :disabled="isDisabled"
                      ></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="1">-</el-col>
                  <el-col :span="10">
                    <el-form-item
                      v-if="scope.row.kpiType === 'range'"
                      :prop="'params.' + scope.$index + '.max'"
                      :rules="paramsForm.paramsRules.max"
                    >
                      <el-input
                        v-model.number="scope.row.max"
                        size="small"
                        :disabled="isDisabled"
                      ></el-input>
                    </el-form-item>
                  </el-col>
                </el-row>
              </template>
            </el-table-column>
          </el-table>
          <el-form-item size="large" align="center" style="padding-top: 30px">
            <el-button type="primary" @click="submitForm">提交</el-button>
            <el-button @click="resetForm">重置</el-button>
          </el-form-item>
        </el-form>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          isDisabled: false,
          paramsForm: {
            params: [
              {
                kpiName: "视频丢失",
                id: "",
                kpiStatus: false,
                kpiType: "other",
                min: "",
                max: "",
              },
              {
                kpiName: "画面抖动",
                id: "",
                kpiStatus: false,
                kpiType: "other",
                min: "",
                max: "",
              },
              {
                kpiName: "画面冻结",
                id: "",
                kpiStatus: false,
                kpiType: "other",
                min: "",
                max: "",
              },
              {
                kpiName: "镜头遮挡",
                id: "",
                kpiStatus: false,
                kpiType: "other",
                min: "",
                max: "",
              },
              {
                kpiName: "图像过亮",
                id: "",
                kpiStatus: false,
                kpiType: "range",
                min: 60,
                max: 120,
              },
              {
                kpiName: "图像过暗",
                id: "",
                kpiStatus: false,
                kpiType: "range",
                min: 10,
                max: 60,
              },
            ],
            paramsRules: {
              min: [
                {
                  type: "number",
                  required: false,
                  min: 1,
                  max: 120,
                  message: "数值范围(1-120)",
                  trigger: "blur",
                },
              ],
              max: [
                {
                  type: "number",
                  required: false,
                  min: 1,
                  max: 120,
                  message: "数值范围(1-120)",
                  trigger: "blur",
                },
              ],
            },
          },
        };
      },
      methods: {
        indexMethod(index) {
          return index + 1;
        },
        submitForm() {
          this.$refs["rForm"].validate((valid) => {
            if (!valid) return;
            // TODO 提交表单
            console.log("success");
          });
        },
        resetForm() {
          this.$refs["rForm"].resetFields();
        },
      },
    };
    </script>
    
    <style lang="scss" scoped>
    </style>
  • 相关阅读:
    hdu4841 圆桌问题[STL vector]
    hdu1002 A + B Problem II[大数加法]
    hdu1501 Zipper[简单DP]
    C语言学习之结构体
    C++学习之从C到C++
    一键自动格式化你的代码
    C标准库string.h中几个常用函数的使用详解
    Jlink使用技巧系列教程索引
    Jlink使用技巧之合并烧写文件
    Jlink使用技巧之烧写SPI Flash存储芯片
  • 原文地址:https://www.cnblogs.com/7c89/p/14286338.html
Copyright © 2011-2022 走看看