jeecg-boot 列表自定义列实现

功能说明:

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

功能预览:

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

实现方法:

一. 增加初始化配置

  1. data() 方法中配置
 //表头
 columns:[],
 //列设置
settingColumns:[],
//列定义
defColumns: [{
            title: '#',
            dataIndex: '',
            key: 'rowIndex',
            width: 60,
            align: "center",
            customRender: function (t, r, index) {
              return parseInt(index) + 1;
            }
          },
          {
            title: '姓名',
            align: "center",
            dataIndex: 'name'
          },
          .......
          .......
      ]
说明:
columns:列表展示的列,初始为空。
settingColumns:保存勾选的列设置
defColumns:定义列表可以展示的列信息
  1. 增加设置按钮,两种实现方式任选其一即可
    (一)第一种在列表外增加设置按钮
     <span style="float:right;">
          <a @click="loadData()"><a-icon type="sync" />刷新</a>
          <a-divider type="vertical" />
          <a-popover title="自定义列" trigger="click" placement="leftBottom">
            <template slot="content">
              <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
                <a-row>
                  <template v-for="(item,index) in defColumns">
                    <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
                        <a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col>
                    </template>
                  </template>
                </a-row>
              </a-checkbox-group>
            </template>
            <a><a-icon type="setting" />设置</a>
          </a-popover>
        </span>

(二)

{
            title: '操作',
            dataIndex: 'action',
            align: "center",
            scopedSlots: {
              filterDropdown: 'filterDropdown',
              filterIcon: 'filterIcon',
              customRender: 'action'},
          }

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

<div slot="filterDropdown">
          <a-card>
            <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
              <a-row>
                <template v-for="(item,index) in defColumns">
                  <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
                    <a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col>
                  </template>
                </template>
              </a-row>
            </a-checkbox-group>
          </a-card>
        </div>
        <a-icon slot="filterIcon" type='setting' :style="{ fontSize:'16px',color:  '#108ee9' }" />
在这里插入代码片
  1. 实现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;
      },
  1. 页面加载时实现列的初始化方法
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;
        }
      }
  1. created中调用:
created() {
      this.initColumns();
    },

注意事项:

引入注意事项

  1. 需要引入vue
import Vue from 'vue'
  1. 增加设时按钮的第一种方式
 <span style="float:right;">
          <a @click="loadData()"><a-icon type="sync" />刷新</a>
          <a-divider type="vertical" />
          <a-popover title="自定义列" trigger="click" placement="leftBottom">
            <template slot="content">
              <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
                <a-row>
                  <template v-for="(item,index) in defColumns">
                    <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
                        <a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col>
                    </template>
                  </template>
                </a-row>
              </a-checkbox-group>
            </template>
            <a><a-icon type="setting" />设置</a>
          </a-popover>
        </span>

在这里插入图片描述

  1. 增加设时按钮的第二种方式
<div slot="filterDropdown">
          <a-card>
            <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
              <a-row>
                <template v-for="(item,index) in defColumns">
                  <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
                    <a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col>
                  </template>
                </template>
              </a-row>
            </a-checkbox-group>
          </a-card>
        </div>
 {
            title: '操作',
            dataIndex: 'action',
            align: "center",
            scopedSlots: {
              filterDropdown: 'filterDropdown',
              filterIcon: 'filterIcon',
              customRender: 'action'},
          }

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

  1. 原文地址
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我无法找到关于"jeecg-boot 前端for循环"的具体实现。引用和引用提到了关于jeecg-boot的数据库设计和视图的使用,但没有提及前端for循环的实现方法。jeecg-boot是一个基于Spring Boot和MyBatis的开源快速开发平台,它提供了一套代码生成器和一些默认的前端控件,但具体的前端for循环实现可能需要根据具体的业务需求进行自定义开发。 如果你需要在jeecg-boot前端页面中使用for循环,你可以通过以下步骤实现: 1. 在前端页面中使用JavaScript的for循环语句来遍历数据。 2. 根据具体的业务需求,使用for循环来生成动态的HTML元素或执行其他操作。 以下是一个示例,展示了在jeecg-boot前端页面中使用for循环来遍历数据并生成动态的HTML元素的方法: ```javascript <script> // 假设data是一个包含多个对象的数组 var data = [{name: 'John', age: 25}, {name: 'Jane', age: 30}, {name: 'Bob', age: 35}]; // 使用for循环遍历数据 for (var i = 0; i < data.length; i++) { var item = data[i]; // 根据数据生成动态的HTML元素 var div = document.createElement('div'); div.innerHTML = 'Name: ' + item.name + ', Age: ' + item.age; // 将生成的元素添加到页面中的某个容器中 document.getElementById('container').appendChild(div); } </script> ``` 请注意,以上示例仅为演示目的,具体的实现方法可能因具体业务需求而异。你可以根据自己的需求进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值