ant-table自定义表格,表头和表格拆分,自定义点击事件,扁平化数据处理拆分(vue2)

图例:

1.首先是正常的引用组件,这块没啥好讲的

  <a-table

          :columns="columns"

          :data-source="dataList"

          bordered

          size="middle"

          :scroll="{y: 800}"

          :pagination="false"

        />

二:如果只需要添加点击事件,可以通过以下代码实现,自定义可参考下部分代码:

 customRender: (text, row, index) => {

            let _this = this;

            const child = _this.$createElement("a", {

              domProps: {

                innerHTML: text,

              },

              on: {

                click: function () {

                  _this.customHandleDetail(row.name, "A01");

                },

              },

            });

            let obj = {

              children: child,

              attrs: {},

            };

            return obj;

          },



2.主要是columns的相关配置,其中dataList是我们接口获取到的扁平数据,其中点击事件customHandleDetail()为自定义点击事件,获取传入recode.name和自身的key,可以根据自己需要进行传参

  columns: [   

       //图例:第五列的配置,包含多个子集

 {

          title: "名称5",

          align: "center",

          children: [

            {

              title: "0人",

              dataIndex: "B01",

              key: "B01",

              width: 50,

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

                  },

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "B01");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

            {

              title: "1-2人",

              dataIndex: "B02",

              key: "B02",

              width: 50,

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

//这里需要做点击事件,所以使用a标签,不需要的可以使用div或者p

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

                  },

//点击事件以及传参

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "B02");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

            {

              title: "3-5人",

              dataIndex: "B03",

              key: "B03",

              width: 50,

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

                  },

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "B03");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

            {

              title: "6-9人",

              dataIndex: "B04",

              key: "B04",

              width: 50,

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

                  },

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "B04");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

            {

              title: "10人及以上",

              dataIndex: "B05",

              key: "B05",

              width: 50,

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

                  },

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "B05");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

          ],

        },


//图例:第七、第八列配置

 {

          title: "名称6",

          dataIndex: "C01",

          key: "C01",

          width: 50,

          align: "center",

          customRender: (text, record) => {

            const dynamicContents = [];

//一个单元格内需要展示的字段:如果值存在,则渲染,如果不存在则不渲染,进行过滤循环后展

//示

// 根据需要添加更多字段,

            const fieldNames = ["C011", "C012", "C013", "C014", "C015", "C016"];

            fieldNames.forEach((fieldName) => {

              if (record[fieldName]) {

                dynamicContents.push(<p>{record[fieldName]}</p>);

              }

            });

            const hasDynamicContents = dynamicContents.length > 0;

//如果上面数组都没有值或者都为null,则展示默认的值:C01

            if (!hasDynamicContents) {

              return <div class="center-content">{text}</div>;

            }

            return (

              <div class="center-content">

                {dynamicContents.map((content, index) => (

                  <div key={index}>

                    {content}

                    {index < dynamicContents.length - 1 && <hr class="center-content" />}

                  </div>

                ))}

              </div>

            );

          },

        },

//图例:最后一列的配置   

         {

              title: "测试1",

              dataIndex: "E15",

              width: 50,

              key: "E15",

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

                  },

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "E15");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

          ],

        },

        {

          title: "名称10",

          align: "center",

          children: [

            {

              title: "测试1",

              dataIndex: "F01",

              key: "F01",

              width: 50,

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

//若需要设置字体颜色,可以在这里加入style

                  },

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "F01");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

            {

              title: "测试1",

              dataIndex: "F02",

              key: "F02",

              width: 50,

              align: "center",

              customRender: (text, row, index) => {

                let _this = this;

                const child = _this.$createElement("a", {

                  domProps: {

                    innerHTML: text,

                  },

                  on: {

                    click: function () {

                      _this.customHandleDetail(row.name, "F02");

                    },

                  },

                });

                let obj = {

                  children: child,

                  attrs: {},

                };

                return obj;

              },

            },

          ],

        },

      ],

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用 `customHeaderRow` 属性来自定义 Ant Design Vue 表格表头,然后在自定义表头中添加一个“+”按钮。 以下是一个示例代码: ```html <template> <a-table :columns="columns" :data-source="tableData" :custom-header-row="renderHeader" ></a-table> </template> <script> export default { data() { return { columns: [ { title: "Name", dataIndex: "name", key: "name" }, { title: "Age", dataIndex: "age", key: "age" }, { title: "Address", dataIndex: "address", key: "address" } ], tableData: [ { key: "1", name: "John Brown", age: 32, address: "New York No. 1 Lake Park" }, { key: "2", name: "Jim Green", age: 42, address: "London No. 1 Lake Park" }, { key: "3", name: "Joe Black", age: 32, address: "Sidney No. 1 Lake Park" } ] }; }, methods: { renderHeader(columns, i) { const customHeader = { children: "+", attrs: { colSpan: 1, rowSpan: 1, class: "custom-header", title: "Add column" }, on: { click: event => { console.log("Add column clicked!"); } }; if (i === 0) { columns.unshift(customHeader); } else if (i === columns.length - 1) { columns.push(customHeader); } return columns; } } }; </script> <style> .custom-header { cursor: pointer; color: #1890ff; font-weight: bold; } </style> ``` 在上面的示例代码中,我们使用 `customHeaderRow` 属性来调用 `renderHeader` 方法来自定义表头。在 `renderHeader` 方法中,我们首先创建了一个包含“+”字符的自定义表头对象,并为其设置了一些属性和事件。然后,我们根据自定义表头的位置将其添加到表头列的开头或结尾,并返回更新后的列数组。 最后,我们使用 CSS 将自定义表头的样式设置为粗体和蓝色,并将鼠标光标设置为指针。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值