列表自定义列实现

功能说明:

  1. 页面自定义设置列表需要选择的列,设置组件集成的两种方法,一个是在列表外增加设置组件,一个是在列表表头增加设置组件
  2. 具体代码案例参照【常用示例-单表模型示例】功能

功能预览:

输入图片说明输入图片说明输入图片说明

实现方法:

一. 增加初始化配置

1 . data() 方法中配置
  1. //表头
  2. columns:[],
  3. //列设置
  4. settingColumns:[],
  5. //列定义
  6. defColumns: [{
  7. title: '#',
  8. dataIndex: '',
  9. key: 'rowIndex',
  10. width: 60,
  11. align: "center",
  12. customRender: function (t, r, index) {
  13. return parseInt(index) + 1;
  14. }
  15. },
  16. {
  17. title: '姓名',
  18. align: "center",
  19. dataIndex: 'name'
  20. },
  21. .......
  22. .......
  23. ]
  24. 说明:
  25. columns:列表展示的列,初始为空。
  26. settingColumns:保存勾选的列设置
  27. defColumns:定义列表可以展示的列信息
2. 增加设置按钮,两种实现方式任选其一即可

(1)第一种在列表外增加设置按钮

  1. <a-popover title="自定义列" trigger="click" placement="leftBottom">
  2. <template slot="content">
  3. <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
  4. <a-row>
  5. <template v-for="(item,index) in defColumns">
  6. <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
  7. <a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col>
  8. </template>
  9. </template>
  10. </a-row>
  11. </a-checkbox-group>
  12. </template>
  13. <a><a-icon type="setting" />自定义列</a>
  14. </a-popover>

(2)第二种在表头列中扩展按钮在操作列定义中增加插槽设置

  1. {
  2. title: '操作',
  3. dataIndex: 'action',
  4. align: "center",
  5. scopedSlots: {
  6. filterDropdown: 'filterDropdown',
  7. filterIcon: 'filterIcon',
  8. customRender: 'action'},
  9. }

<a-table></a-table> 中增加插槽代码

  1. <div slot="filterDropdown">
  2. <a-card>
  3. <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
  4. <a-row>
  5. <template v-for="(item,index) in defColumns">
  6. <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
  7. <a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col>
  8. </template>
  9. </template>
  10. </a-row>
  11. </a-checkbox-group>
  12. </a-card>
  13. </div>
  14. <a-icon slot="filterIcon" type='setting' :style="{ fontSize:'16px',color: '#108ee9' }" />
3. 实现checkbox @change
//列设置更改事件
      onColSettingsChange (checkedValues) {
        var key = this.$route.name+":colsettings";
        Vue.ls.set(key, checkedValues, 7 * 24 * 60 * 60 * 1000)
        this.settingColumns = checkedValues;
        const cols = this.defColumns.filter(item => {
          if(item.key =='rowIndex'|| item.dataIndex=='action'){
            return true
          }
          if (this.settingColumns.includes(item.dataIndex)) {
            return true
          }
          return false
        })
        this.columns =  cols;
      },

4. 页面加载时实现列的初始化方法

initColumns(){
        //权限过滤(列权限控制时打开,修改第二个参数为授权码前缀)
        //this.defColumns = colAuthFilter(this.defColumns,'testdemo:');

        var key = this.$route.name+":colsettings";
        let colSettings= Vue.ls.get(key);
        if(colSettings==null||colSettings==undefined){
          let allSettingColumns = [];
          this.defColumns.forEach(function (item,i,array ) {
            allSettingColumns.push(item.dataIndex);
          })
          this.settingColumns = allSettingColumns;
          this.columns = this.defColumns;
        }else{
          this.settingColumns = colSettings;
          const cols = this.defColumns.filter(item => {
            if(item.key =='rowIndex'|| item.dataIndex=='action'){
              return true;
            }
            if (colSettings.includes(item.dataIndex)) {
              return true;
            }
            return false;
          })
          this.columns =  cols;
        }
      }

created中调用:

created() {
      this.initColumns();
    },