Vue3+Ts+Element-Plus多级表头以及动态合并单元格

打印 上一主题 下一主题

主题 515|帖子 515|积分 1545

Vue3+Ts+element-PLUS 多级表头以及动态合并单元格

先看效果:


  • 起首得话可以先去官网把多级表头拿过来改一下
  1. <el-table
  2.   stripe
  3.   border
  4.   :maxHeight="windowHeight - 385"
  5.   :data="tableData"
  6.   style="width: 100%"
  7.   :span-method="objectSpanMethod"
  8. >
  9.   <el-table-column align="center" prop="demo" label="demo" />
  10.   <el-table-column width="200" prop="demo1" label="demo1" show-overflow-tooltip>
  11.   </el-table-column>
  12.   <el-table-column align="center" label="学习需求">
  13.     <el-table-column align="center" :prop="`xuexixuqiu`" label="不感兴趣">
  14.       <template #default="{ row }">
  15.         <span v-if="!row.xuexixuqiu">
  16.           <el-icon size="20" color="red">
  17.             <CircleCloseFilled />
  18.           </el-icon>
  19.         </span>
  20.       </template>
  21.     </el-table-column>
  22.     <el-table-column align="center" :prop="`xuexixuqiu`" label="感兴趣">
  23.       <template #default="{ row }">
  24.         <span v-if="row.xuexixuqiu">
  25.           <el-icon size="20" color="green">
  26.             <SuccessFilled />
  27.           </el-icon>
  28.         </span>
  29.       </template>
  30.     </el-table-column>
  31.   </el-table-column>
  32.   <el-table-column align="center" label="你好">
  33.     <el-table-column align="center" prop="qianming1" label="1签名" />
  34.     <el-table-column align="center" prop="qianming2" label="2签名" />
  35.   </el-table-column>
  36.   <el-table-column align="center" label="再见">
  37.     <el-table-column align="center" prop="zaijian1" label="再见1" width="120" />
  38.     <el-table-column align="center" prop="zaijian2" label="再见2" width="120" />
  39.     <el-table-column align="center" prop="zaijian3" label="再见3" />
  40.     <el-table-column align="center" prop="zaijian4" label="再见4" width="120" />
  41.   </el-table-column>
  42. </el-table>
复制代码

  • 合并引用方式
  1. import { getRowSpanMethod } from "./hooks";
  2. const objectSpanMethod = computed(() => {
  3.   return getRowSpanMethod(props.tableData, ["demo"]);
  4. });
复制代码

  • ts 部门
  1. /**
  2. * 合并相同数据,导出合并列所需的方法(只适合el-table)
  3. * @param {Object} data
  4. * @param {Object} rowSpanArray
  5. */
  6. export function getRowSpanMethod(data: any, rowSpanArray: any) {
  7.   /**
  8.    * 要合并列的数据
  9.    */
  10.   const rowSpanNumObject: any = {};
  11.   //初始化 rowSpanNumObject
  12.   rowSpanArray.map((item: any) => {
  13.     rowSpanNumObject[item] = new Array(data.length).fill(1, 0, 1).fill(0, 1);
  14.     rowSpanNumObject[`${item}-index`] = 0;
  15.   });
  16.   //计算相关的合并信息
  17.   for (let i = 1; i < data.length; i++) {
  18.     rowSpanArray.map((key: any) => {
  19.       const index = rowSpanNumObject[`${key}-index`];
  20.       if (data[i][key] === data[i - 1][key]) {
  21.         rowSpanNumObject[key][index]++;
  22.       } else {
  23.         rowSpanNumObject[`${key}-index`] = i;
  24.         rowSpanNumObject[key][i] = 1;
  25.       }
  26.     });
  27.   }
  28.   //提供合并的方法并导出
  29.   // @ts-ignore
  30.   const spanMethod = function ({ row, column, rowIndex, columnIndex }) {
  31.     if (rowSpanArray.includes(column["property"])) {
  32.       const rowspan = rowSpanNumObject[column["property"]][rowIndex];
  33.       if (rowspan > 0) {
  34.         return { rowspan: rowspan, colspan: 1 };
  35.       }
  36.       return { rowspan: 0, colspan: 0 };
  37.     }
  38.     return { rowspan: 1, colspan: 1 };
  39.   };
  40.   return spanMethod;
  41. }
复制代码
4.数据结构
  1. const tableData: User[] = [
  2.   {
  3.     demo: "项目1",
  4.     demo1: "数据1111111111",
  5.     xuexixuqiu: false,
  6.     qianming1: "wang",
  7.     qianming2: "fang",
  8.     zaijian1: "A",
  9.     zaijian2: "好,太好了",
  10.     zaijian3: "再见3",
  11.     zaijian4: "再见4",
  12.   },
  13.   {
  14.     demo: "项目1",
  15.     demo1: "数据1111111111",
  16.     xuexixuqiu: false,
  17.     qianming1: "wang",
  18.     qianming2: "fang",
  19.     zaijian1: "A",
  20.     zaijian2: "好,太好了",
  21.     zaijian3: "再见3",
  22.     zaijian4: "再见4",
  23.   },
  24.   {
  25.     demo: "项目2",
  26.     demo1: "数据1111111111",
  27.     xuexixuqiu: false,
  28.     qianming1: "wang",
  29.     qianming2: "fang",
  30.     zaijian1: "A",
  31.     zaijian2: "好,太好了",
  32.     zaijian3: "再见3",
  33.     zaijian4: "再见4",
  34.   },
  35.   {
  36.     demo: "项目2",
  37.     demo1: "数据1111111111",
  38.     xuexixuqiu: false,
  39.     qianming1: "wang",
  40.     qianming2: "fang",
  41.     zaijian1: "A",
  42.     zaijian2: "好,太好了",
  43.     zaijian3: "再见3",
  44.     zaijian4: "再见4",
  45.   },
  46.   {
  47.     demo: "项目2",
  48.     demo1: "数据1111111111",
  49.     xuexixuqiu: false,
  50.     qianming1: "wang",
  51.     qianming2: "fang",
  52.     zaijian1: "A",
  53.     zaijian2: "好,太好了",
  54.     zaijian3: "再见3",
  55.     zaijian4: "再见4",
  56.   },
  57. ];
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表