• vue+elementui table表格递归生成多级表头


    vue+elementui table表格递归生成多级表头
    前言
    1.tableView.vue
    2.tableItem.vue(子组件)
    3.columnItem.vue(递归组件)
    如图所示

    前言
    近期在写一个后台管理系统的项目,需要表格动态生成多级表头,项目中使用了递归组件,自己总结一下加深记忆.话不多说,直接上代码.
    1.tableView.vue

    <template>
      <div>
        <table-item :tableData="tableData" :col="col"></table-item>
      </div>
    </template>
    <script>
    import tableItem from "./tableItem";
    export default {
      name: "TableView",
      components: {
        tableItem,
      },
      data() {
        return {
            //树型结构表头数据
          col: [
            {
              prop: "date",
              label: "日期",
            },
            {
              label: "配送信息",
              children: [
                {
                  prop: "name",
                  label: "姓名",
                },
                {
                  label: "地址",
                  children: [
                    {
                      prop: "province",
                      label: "省份",
                    },
                    {
                      prop: "city",
                      label: "市区",
                    },
                    {
                      prop: "address",
                      label: "城镇",
                    },
                  ],
                },
              ],
            },
            {
              prop: "remark",
              label: "备注",
            },
          ],
          //表格数据
          tableData: [
            {
              date: "2020-05-03",
              name: "王小虎",
              province: "上海",
              city: "普陀区",
              address: "上海市普陀区金沙江路 1518 弄",
              remark: "无",
            },
            {
              date: "2020-05-02",
              name: "王小明",
              province: "上海",
              city: "浦东新区",
              address: "上海市浦东新区顾唐路 518 弄",
              remark: "学生",
            },
              {
              date: "2020-05-02",
              name: "王小明",
              province: "上海",
              city: "浦东新区",
              address: "上海市浦东新区顾唐路 518 弄",
              remark: "学生",
            },
              {
              date: "2020-05-02",
              name: "王小明",
              province: "上海",
              city: "浦东新区",
              address: "上海市浦东新区顾唐路 518 弄",
              remark: "学生",
            },
              {
              date: "2020-05-02",
              name: "王小明",
              province: "上海",
              city: "浦东新区",
              address: "上海市浦东新区顾唐路 518 弄",
              remark: "学生",
            },
          ],
        };
      },
    };
    </script>
    <style scoped></style>
    

    2.tableItem.vue(子组件)

    <template>
      <div>
        <el-table
          :show-summary="isShowSum"
          :data="tableData"
          :height="height"
          style=" 100%"
          :header-cell-style="{
            background: '#eff2f6',
            color: 'rgba(0, 0, 0, 0.85)',
            fontSize: '14px',
            'text-align': alignType,
          }"
        >
          <el-table-column
            v-if="isShowBox"
            type="selection"
            width="55"
            align="center"
          >
          </el-table-column>
          <template>
            <column-item
              v-for="item in col"
              :key="item.label"
              :col="item"
            ></column-item>
          </template>
          <template #empty>
            <div class="empty" style="height:200px;">
              <img
                class="empty-img"
                style="margin:30px auto;height:102px;134px;"
                src=""
                alt
              />
              <span class="empty-desc">暂无数据</span>
            </div>
          </template>
        </el-table>
      </div>
    </template>
    <script>
    import ColumnItem from "./columnItem";
    export default {
      name: "TableItem",
      components: {
        ColumnItem,
      },
      props: {
        //表格数据
        tableData: {
          type: Array,
          default: () => [],
        },
        //树型结构表头数据
        col: {
          type: Array,
          default: () => [],
        },
        //是否在表格下方显示合计
        isShowSum: {
          type: Boolean,
          default: false,
        },
        //判断单元格文字是居中还是左对齐显示,默认居中
        alignType: {
          type: String,
          default: "center",
        },
        //设置表格高度,固定表头
        height: {
          type: String,
          default: null,//默认不固定表头
        },
        //判断是否显示多选框
        isShowBox: {
          type: Boolean,
          default: false,//默认不展示
        },
      },
      data() {
        return {};
      },
      created() {},
      methods: {},
    };
    </script>
    <style>
    /* 处理表格表头和内容错位问题 */
    .el-table th.gutter {
      display: table-cell !important;
    }
    .el-table th,
    .el-table td {
      padding: 7px 0 !important;
    }
    </style>
    

    3.columnItem.vue(递归组件)

    <template>
      <el-table-column
        :prop="col.prop"
        :label="col.label"
        :align="alignType"
      >
        <template v-for="(item, index) of col.children">
          <column-item v-if="item.children" :key="index" :col="item"></column-item>
          <el-table-column
            v-else
            :key="index"
            :label="item.label"
            :prop="item.prop"
            :align="alignType"
          ></el-table-column>
        </template>
      </el-table-column>
    </template>
    
    <script>
    export default {
      name: "ColumnItem",
      props: {
        col: {
          type: Object,
        },
        //判断单元格文字是居中还是左对齐显示
        alignType: {
          type: String,
          default: "center",//默认居中
        },
      },
    };
    </script>
    <style scoped></style>
    

    如图所示

    转自:https://blog.csdn.net/tsw529/article/details/107629302?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-107629302-blog-123517582.pc_relevant_multi_platform_whitelistv2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-107629302-blog-123517582.pc_relevant_multi_platform_whitelistv2&utm_relevant_index=1

  • 相关阅读:
    [hdu3853]LOOPS(概率dp)
    [poj2096]Collecting Bugs(概率dp)
    lintcode-42-最大子数组 II
    lintcode-39-恢复旋转排序数组
    lintcode-36-翻转链表 II
    lintcode-34-N皇后问题 II
    lintcode-33-N皇后问题
    lintcode-32-最小子串覆盖
    lintcode-31-数组划分
    lintcode-30-插入区间
  • 原文地址:https://www.cnblogs.com/axingya/p/16467056.html
Copyright © 2020-2023  润新知