elementUI 動態生成幾行幾列 table-2

elementUI 動態生成幾行幾列 table

如今碰到一個需求:就是根據用戶選擇的行列,來自動生成相應大小的 table,以下這個實現還不完善,由於數據不對,只是實現了動態的效果,僅是提供一種實現思路吧,後續我會再想一想看怎麼實現爲好,先記錄一下吧

直接看代碼吧

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>elementUI table 動態生成列</title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <style type="text/css">
    @import url("https://unpkg.com/element-ui/lib/theme-chalk/index.css");
  </style>
</head>
<body>

<div id="app">

  <el-form inline>

    <!--先選擇 排數-->
    <el-form-item label="請選擇排" style="margin-left: 50px;">
      <el-select style="width: 100% ;" v-model="row1" placeholder="請選擇排" @change="row1Change">
        <el-option v-for="item in floorNumList" :key="item.floorId"
                   :value="item.floorId"></el-option>
      </el-select>
    </el-form-item>

    <!--再選擇 列數-->
    <el-form-item label="請選擇列">
      <el-select style="width: 100% ;" v-model="col1" placeholder="請選擇列" @change="col1Change">
        <el-option v-for="item in floorNumList" :key="item.floorId"
                   :value="item.floorId"></el-option>
      </el-select>
    </el-form-item>






    <el-table ref="multipleTable" :data="rowDataList1" style="width:80%; border: 2px solid red; max-height: 500px; margin-left: 30px;" highlight-current-row  :cell-style="cellStyle">
      <el-table-column fixed type="selection" align="center" width="50" label="列"></el-table-column>
<!--      <el-table-column type="index" align="center" width="50" label="索引"></el-table-column>-->
      <el-table-column v-for="col in colDataList1" :prop="col.id" :label="col.id" align="center" >
        <el-table-column prop="id" align="center" >
          <template slot-scope="scope">
            <el-button @click="handleClick(scope.row, col.id, scope.$index)" class="el-icon-cherry" v-bind:style="{ color: activeColor}">></el-button>
          </template>
        </el-table-column>
      </el-table-column>

    </el-table>

  </el-form>


  </div>


</div>




<script>
  let vm = new Vue({
    el: '#app',
    data(){
      return{
        floorNumList: [
          {floorId: 1},
          {floorId: 2},
          {floorId: 3},
          {floorId: 4},
          {floorId: 5},
          {floorId: 6},
          {floorId: 7},
          {floorId: 8},
          {floorId: 9},
          {floorId: 10}
        ],
        floorNum: '',


        // 第1層 默認選擇的排數 和 列數
        row1: 1,
        col1: 1,
        // 第2層 默認選擇的排數 和 列數
        row2: 1,
        col2: 1,
        // 第3層 默認選擇的排數 和 列數
        row3: 1,
        col3: 1,
        // 第4層 默認選擇的排數 和 列數
        row4: 1,
        col4: 1,
        // 第5層 默認選擇的排數 和 列數
        row5: 1,
        col5: 1,

        activeColor: 'green',

        colPos: '',
        rowPos: '',



        rowDataList1: [{  // 默認給一個對象,即默認狀態是 1行數據
          id: Math.ceil(Math.random()*100)
        }],

        colDataList1: [
          {id: '1'}
        ],
      }
    },
    methods:{
      col1Change(){
        // 每觸發一次,清空數據
        this.colDataList1 = [{id: '1'}];
        // 取得 選中的第一層的第一排的數值
        let len = this.col1;
        if(len > 1){
          for (let i = 2; i <= len; i++){
            this.colDataList1.push({id: i + ''});
          }
          return this.colDataList1;
        }else{
          return this.colDataList1;
        }
      },

      row1Change(){
        // 每觸發一次,清空數據
        this.rowDataList1 = [{ id: Math.ceil(Math.random()*100)}];
        let len = this.row1;
        if (len > 1){
          for (let i = 2; i <= len ; i++){
            this.rowDataList1.push({id: Math.ceil(Math.random()*100) + i});
          }
          return this.rowDataList1;
        }else {
          return this.rowDataList1;
        }
      },


      handleClick(row, col, index) {
        // console.log(JSON.stringify(row));
        // console.log(JSON.stringify(col));
        // console.log("點擊的cell 行數: " + JSON.stringify(index)); // index 是 行數,0 表示第一行,從 0 開始
        // 一點擊獲取 行縱座標
        this.colPos = col;
        this.rowPos = index;
      },

      cellStyle({row, column, rowIndex, columnIndex}){
        // console.log(JSON.stringify(row))
        // console.log(JSON.stringify(column))
        // console.log("要渲染的行數: " + JSON.stringify(rowIndex))
        // console.log(JSON.stringify(columnIndex))

        if(rowIndex == 0 && columnIndex == 0){
          return '';
        }else {
          if(rowIndex == this.rowPos && columnIndex == this.colPos){ //指定座標
            return 'background: pink';
          }else{
            return '';
          }
        }

      },

    }
  });
</script>
</body>


</html>
爲了方便你們直接使用理解,我這裏使用的腳本等都是在線連接,確保你們直接 down 下來就能運行處效果的。

效果圖

clipboard.png

聲明

原創手敲不易,轉載請註明出處,謝謝。我是 拉丁小毛,歡迎你們關注我哦,一塊兒交流,共同進步。有問題能夠 郵我哦(util.you.com@gmail.com)
相關文章
相關標籤/搜索