1. 程式人生 > 其它 >(element-ui) table表格通過多選框控制列表項顯隱 table表格列拖拽排序

(element-ui) table表格通過多選框控制列表項顯隱 table表格列拖拽排序

<template>
  <div class="container">
    <el-card>
      <div class="btn">
        <el-popover placement="right" title="列篩選" trigger="click" width="130">
          <el-checkbox-group v-model="checkedColumns" size="mini">
            <el-checkbox v-for="item in checkBoxGroup" :key="item" :label="item" :value="item"></el-checkbox>
          </el-checkbox-group>
          <el-button slot="reference" type="primary" size="small" plain><i class="el-icon-arrow-down el-icon-menu" /> 列表項展示篩選</el-button>
        </el-popover>
      </div>
      <el-table :data="tableData" stripe border row-key="id" align="left" style="width: 100%;text-align:center">
        <el-table-column v-for
="(item, index) in dropCol" :key="`col_${index}`" v-if="dropCol[index].istrue" :prop="dropCol[index].prop" :label="item.label" :width="item.width"> </el-table-column> </el-table> </el-card> </div> </template> <script> // 安裝並引入sortablejs 排序用的 import Sortable from 'sortablejs' export
default { data() { return {
   //表格表頭 dropCol: [ { width:
'160', label: '訂單編號', istrue: true, prop: 'num1' }, { width: '180', label: '退款單號', istrue: true, prop: 'num2' }, { label:
'訂單歸屬', istrue: true, prop: 'num3' }, { label: '銷售渠道', istrue: true, prop: 'num4' }, { label: '退款渠道', istrue: true, prop: 'num5' }, { label: '退款時間', istrue: true, prop: 'num6' }, { width: '160', label: '訂單數量', istrue: true, prop: 'num7' }, { label: '訂單金額', istrue: true, prop: 'num8' } ],
  //表格表頭 col: [ { width:
'160', label: '訂單編號', istrue: true, prop: 'num1' }, { width: '180', label: '退款單號', istrue: true, prop: 'num2' }, { label: '訂單歸屬', istrue: true, prop: 'num3' }, { label: '銷售渠道', istrue: true, prop: 'num4' }, { label: '退款渠道', istrue: true, prop: 'num5' }, { label: '退款時間', istrue: true, prop: 'num6' }, { width: '160', label: '訂單數量', istrue: true, prop: 'num7' }, { label: '訂單金額', istrue: true, prop: 'num8' } ], checkBoxGroup: [], checkedColumns: [],
    //表格 行 資料 tableData: [ { id:
'1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00', num14: '5.00' }, { id: '1', num1: '8975972309-84085', num2: 'TK_8475970984099', num3: '榮譽小區', num4: '線上', num5: '線上', num6: '2021-09-09 12:34:13', num7: '50', num8: '32.00' } ] } }, created() { // 列篩選 this.dropCol.forEach((item, index) => { this.checkBoxGroup.push(item.label) this.checkedColumns.push(item.label) }) this.checkedColumns = this.checkedColumns let UnData = localStorage.getItem(this.colTable) UnData = JSON.parse(UnData) if (UnData != null) { this.checkedColumns = this.checkedColumns.filter(item => { return !UnData.includes(item) }) } }, // 監聽列隱藏 watch: { checkedColumns(val, value) { let arr = this.checkBoxGroup.filter(i => !val.includes(i)) // 未選中 localStorage.setItem(this.colTable, JSON.stringify(arr)) this.dropCol.filter(i => { if (arr.indexOf(i.label) != -1) { i.istrue = false } else { i.istrue = true } }) } }, mounted() { // 阻止預設行為 document.body.ondrop = function(event) { event.preventDefault() event.stopPropagation() } this.columnDrop() }, methods: { //列拖拽 columnDrop() { const wrapperTr = document.querySelector('.el-table__header-wrapper tr') this.sortable = Sortable.create(wrapperTr, { animation: 180, delay: 0, // onEnd拖拽結束後的回撥 onEnd: evt => { const oldItem = this.dropCol[evt.oldIndex] this.dropCol.splice(evt.oldIndex, 1) this.dropCol.splice(evt.newIndex, 0, oldItem) } }) } } } </script> <style lang="less" scoped></style>