jeecg-boot 列表自定义列实现

骑猪看日落 2022-12-19 03:50 423阅读 0赞

文章目录

  • 功能说明:
    • 功能预览:
  • 实现方法:
    • 一. 增加初始化配置
  • 注意事项:

功能说明:

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

功能预览:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现方法:

一. 增加初始化配置

  1. data() 方法中配置

    //表头
    columns:[],
    //列设置
    settingColumns:[],
    //列定义
    defColumns: [{

    1. title: '#',
    2. dataIndex: '',
    3. key: 'rowIndex',
    4. width: 60,
    5. align: "center",
    6. customRender: function (t, r, index) {
    7. return parseInt(index) + 1;
    8. }
    9. },
    10. {
    11. title: '姓名',
    12. align: "center",
    13. dataIndex: 'name'
    14. },
    15. .......
    16. .......
    17. ]

    说明:
    columns:列表展示的列,初始为空。
    settingColumns:保存勾选的列设置
    defColumns:定义列表可以展示的列信息

  2. 增加设置按钮,两种实现方式任选其一即可
    (一)第一种在列表外增加设置按钮

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

    { item.title }}

    1. </template>
    2. </template>
    3. </a-row>
    4. </a-checkbox-group>
    5. </template>
    6. <a><a-icon type="setting" />设置</a>
    7. </a-popover>
    8. </span>

(二)

  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">{
  8. { item.title }}</a-checkbox></a-col>
  9. </template>
  10. </template>
  11. </a-row>
  12. </a-checkbox-group>
  13. </a-card>
  14. </div>
  15. <a-icon slot="filterIcon" type='setting' :style="{ fontSize:'16px',color: '#108ee9' }" />
  16. 在这里插入代码片
  1. 实现checkbox @change

    //列设置更改事件

    1. onColSettingsChange (checkedValues) {
    2. var key = this.$route.name+":colsettings";
    3. Vue.ls.set(key, checkedValues, 7 * 24 * 60 * 60 * 1000)
    4. this.settingColumns = checkedValues;
    5. const cols = this.defColumns.filter(item => {
    6. if(item.key =='rowIndex'|| item.dataIndex=='action'){
    7. return true
    8. }
    9. if (this.settingColumns.includes(item.dataIndex)) {
    10. return true
    11. }
    12. return false
    13. })
    14. this.columns = cols;
    15. },
  2. 页面加载时实现列的初始化方法

    initColumns(){

    1. //权限过滤(列权限控制时打开,修改第二个参数为授权码前缀)
    2. //this.defColumns = colAuthFilter(this.defColumns,'testdemo:');
    3. var key = this.$route.name+":colsettings";
    4. let colSettings= Vue.ls.get(key);
    5. if(colSettings==null||colSettings==undefined){
    6. let allSettingColumns = [];
    7. this.defColumns.forEach(function (item,i,array ) {
    8. allSettingColumns.push(item.dataIndex);
    9. })
    10. this.settingColumns = allSettingColumns;
    11. this.columns = this.defColumns;
    12. }else{
    13. this.settingColumns = colSettings;
    14. const cols = this.defColumns.filter(item => {
    15. if(item.key =='rowIndex'|| item.dataIndex=='action'){
    16. return true;
    17. }
    18. if (colSettings.includes(item.dataIndex)) {
    19. return true;
    20. }
    21. return false;
    22. })
    23. this.columns = cols;
    24. }
    25. }
  3. created中调用:

    created() {

    1. this.initColumns();
    2. },

注意事项:

引入注意事项

  1. 需要引入vue

    import Vue from ‘vue’

  2. 增加设时按钮的第一种方式

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

    { item.title }}

    1. </template>
    2. </template>
    3. </a-row>
    4. </a-checkbox-group>
    5. </template>
    6. <a><a-icon type="setting" />设置</a>
    7. </a-popover>
    8. </span>

在这里插入图片描述

  1. 增加设时按钮的第二种方式









    {

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

在这里插入图片描述
在这里插入图片描述

  1. 原文地址

发表评论

表情:
评论列表 (有 0 条评论,423人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Element Table实现用户定义

    需求:文件列表用户自定义 基础:之前已经实现了文件列表的功能,但是是固定表头的列表 期初,我们是根据用户提出的要求展示相应的列,没有做过多的考虑,因此,我们当时直接固定了列

    相关 定义进度条列表

    自定义进度条列表:自己写的一个类 ,使用非常简单,非常适合新手学习。 (因为我就是新手,通过学了这个之后,以后绘制其他的图也是差不多这样,能够做到举一反三!事半功倍!非常值得