循環(huán)表單+表格動態(tài)校驗規(guī)則

1.demo 功能如下

截屏2022-01-11 10.51.33.png

2.代碼結(jié)構(gòu)如下

  <div style="min-height: 100px">
      <el-form :model="sjqxForm" ref="siqxForm">
        <el-row v-for="(v, i) in tables" :key="i" class="table-box">
          <el-form :ref="v.formRef" :model="v.formData" class="table-form">
            <el-table :data="v.formData.tableData">
              <el-table-column
                v-for="(item, index) in v.tableColumns"
                :key="index + item.prop"
                :prop="item.prop"
                :label="item.label"
                :width="item.width"
                :show-overflow-tooltip="true"
              >
                <template slot-scope="scope">
                  <el-form-item
                    v-if="item.prop == 'operations'"
                    :prop="'tableData.' + scope.$index + '.operations'"
                    :rules="tabRules.operations"
                  >
                    <el-select
             
                      v-model="scope.row.operations"
                      multiple
                      collapse-tags
                      :loading="scope.row.operationsLoading"
                      placeholder="請選擇"
                    >
                      <el-option
                        v-for="item in operationsList"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option>
                    </el-select>
                    <span v-else>{{ scope.row.operations }}</span>
                  </el-form-item>
                  <el-form-item
                    v-else-if="item.prop == 'extraData'"
                    :prop="'tableData.' + scope.$index + '.extraData'"
                    :rules="tabRules.extraData"
                  >
                    <el-select
                      v-if="isAddType === 1"
                      v-model="scope.row.extraData"
                      placeholder="請選擇" @visible-change="getExtraDataList($event, scope.row)"
                    >
                      <el-option
                        v-for="item in extraDataList"
                        :key="item.value"
                        :label="item.label"
                        :value="item"
                      >
                      </el-option>
                    </el-select>
                    <span v-else>{{ scope.row.extraDataLabel }}</span>
                  </el-form-item>
                  <el-form-item
                    v-else-if="item.prop == 'objName'"
                    :prop="'tableData.' + scope.$index + '.objName'"
                    :rules="tabRules.obj"
                  >
                    <template v-if="isAddType === 1">
                      <el-select
                        v-if="scope.row.dsType === 'HDFS'"
                        v-model="scope.row.objName"
                        multiple
                        collapse-tags
                        filterable
                        remote
                        reserve-keyword
                        placeholder="請選擇"
                        clearable
                        :remote-method="queryHdfsData"
                        @visible-change="
                          getObjNameList(
                            $event,
                            scope.row.extraData.value,
                            scope.row
                          )
                        "
                      >
                        <el-option
                          v-for="item in objNameList"
                          :key="item.value"
                          :label="item.label"
                          :value="item"
                        >
                        </el-option>
                      </el-select>
                      <el-select
                        v-else
                        v-model="scope.row.objName"
                        multiple
                        collapse-tags
                        clearable
                        placeholder="請選擇"
                        :loading="scope.row.objNameLoading"
                        @visible-change="
                          getObjNameList(
                            $event,
                            scope.row.extraData.value,
                            scope.row
                          )
                        "
                      >
                        <el-option
                          v-for="item in objNameList"
                          :key="item.value"
                          :label="item.label"
                          :value="item"
                        >
                        </el-option>
                      </el-select>
                    </template>
                    <span v-else>{{ scope.row.objNameLabel }}</span>
                  </el-form-item>
                  <el-form-item
                    v-else-if="item.prop == 'recursion'"
                    :prop="'tableData.' + scope.$index + '.recursion'"
                    :rules="tabRules.recursion"
                  >
                    <el-select
                      v-model="scope.row.recursion"
                      placeholder="請選擇"
                    >
                      <el-option label="不包含" :value="0"> </el-option>
                      <el-option label="包含" :value="1"> </el-option>
                    </el-select>
                  </el-form-item>
                  <span v-else>{{ scope.row[item.prop] }}</span>
                </template>
              </el-table-column>
              <el-table-column
                prop="extraData"
                v-if="isAddType !== 1"
                width="200px"
                :show-overflow-tooltip="true"
                label="標(biāo)識詳情"
              >
                <template slot-scope="scope">
                  <span>{{ scope.row.extraData }}</span>
                </template>
              </el-table-column>
              <el-table-column fixed="right" label="操作" width="100">
                <template slot-scope="scope">
                  <el-button
                    type="text"
                    size="small"
                    :disabled="isAddType !== 1"
                    @click="
                      addRow(v.formData.tableData, scope.$index, scope.row)
                    "
                    >添加</el-button
                  >
                  <el-button
                    type="text"
                    size="small"
                    :disabled="isAddType !== 1"
                    @click="
                      delRow(v.formData.tableData, scope.$index, scope.row)
                    "
                    >刪除</el-button
                  >
                </template>
              </el-table-column>
            </el-table>
          </el-form>
        </el-row>
       
      </el-form>
    </div>
    
    
    export default{
         tables: [],
      tableColumns: {
        HDFS: [
          { prop: "dsTypeLabel", label: "數(shù)據(jù)類型", width: "100px" },
          { prop: "objName", label: "路徑", width: "300px" },
          { prop: "operations", label: "操作權(quán)限", width: "" },
          { prop: "recursion", label: "是否包含子文件", width: "200px" }
        ],
        HIVE: [
          { prop: "dsTypeLabel", label: "數(shù)據(jù)類型", width: "100px" },
          { prop: "extraData", label: "庫名", width: "" },
          { prop: "objName", label: "表名", width: "200px" },
          { prop: "operations", label: "操作權(quán)限", width: "200px" }
        ],
        KUDU: [
          { prop: "dsTypeLabel", label: "數(shù)據(jù)類型", width: "100px" },
          { prop: "extraData", label: "庫名", width: "" },
          { prop: "objName", label: "表名", width: "200px" },
          { prop: "operations", label: "操作權(quán)限", width: "200px" }
        ]
    }

3.校驗規(guī)則

tabRules: {
        obj: [
          {
            required: true,
            message: "請選擇",
            trigger: "change"
          }
        ],
        extraData: [
          {
            required: true,
            message: "請選擇",
            trigger: "change"
          }
        ],
        perations: [
          {
            red: true,
            age: "請選擇",
            igger: "change"
          }
        ],
        operations: [
          {
            required: true,
            message: "請選擇",
            trigger: "change"
          }
        ]
      },

4.設(shè)置props

  :prop="'tableData.' + scope.$index + '.operations'"

5.使用promise 做每個表單的校驗

let newArr = []; //承接promise的返回結(jié)果
          let _self = this;
          this.tables.forEach((item, index) => {
            //將有權(quán)限的表單做校驗等等
            checkForm(item.formRef); //校驗
          });

          function checkForm (arrName) {
            //根據(jù)form表單的ref管跺,動態(tài)生成promise右锨,再對其坐表單校驗乾忱,都通過了再去做處理
            let result = new Promise(function (resolve, reject) {
              _self.$refs[arrName][0].validate(valid => {
                if (valid) {
                  resolve();
                } else {
                  reject();
                }
              });
            });
            newArr.push(result); //push 得到promise的結(jié)果
          }
          // 校驗通過
          Promise.all(newArr)
            .then(() => {
                console.log('所有表單校驗通過')
            }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖懈万,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挤庇,居然都是意外死亡钞速,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門嫡秕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渴语,“玉大人,你說我怎么就攤上這事昆咽〖菪祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵掷酗,是天一觀的道長调违。 經(jīng)常有香客問我,道長泻轰,這世上最難降的妖魔是什么技肩? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮浮声,結(jié)果婚禮上虚婿,老公的妹妹穿的比我還像新娘。我一直安慰自己泳挥,他們只是感情好然痊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屉符,像睡著了一般剧浸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矗钟,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天唆香,我揣著相機(jī)與錄音,去河邊找鬼吨艇。 笑死躬它,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秸应。 我是一名探鬼主播虑凛,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼软啼!你這毒婦竟也來了桑谍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祸挪,失蹤者是張志新(化名)和其女友劉穎锣披,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贿条,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雹仿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了整以。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胧辽。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖公黑,靈堂內(nèi)的尸體忽然破棺而出邑商,到底是詐尸還是另有隱情,我是刑警寧澤凡蚜,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布人断,位于F島的核電站,受9級特大地震影響朝蜘,放射性物質(zhì)發(fā)生泄漏恶迈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一谱醇、第九天 我趴在偏房一處隱蔽的房頂上張望暇仲。 院中可真熱鬧,春花似錦枣抱、人聲如沸熔吗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桅狠。三九已至,卻和暖如春轿秧,著一層夾襖步出監(jiān)牢的瞬間中跌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工菇篡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漩符,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓驱还,卻偏偏與公主長得像嗜暴,于是被迫代替她去往敵國和親凸克。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容