首页 > 其他分享 >基于 ElementUi框架的 table组件制作的 报表功能

基于 ElementUi框架的 table组件制作的 报表功能

时间:2023-10-26 11:34:56浏览次数:37  
标签:return name ElementUi value 组件 table 整治 data const

<template>
  <!-- 月周计划报表 -->
  <div class="monthPlanForm">
    <el-table :data="tableData" :span-method="spanMethod" style="width: 100%">
      <el-table-column type="index" width="50"> </el-table-column>
      <el-table-column v-for="(it, i) in tableCol" :key="i" :label="it.name">
        <el-table-column v-for="(child, i) in it.children" :key="i" :prop="child.value" :label="child.name" width="120">
        </el-table-column>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  props: {
    tableCol: {
      type: Array,
      default() {
        return [];
        // return [
        //   {
        //     name: '',
        //     children: [
        //       {
        //         name: '地市',
        //       },
        //       {
        //         name: '月计划总整治量',
        //       },
        //       {
        //         name: '光缆',
        //       },
        //     ],
        //   },
        //   {
        //     name: '地市月进度',
        //     children: [
        //       {
        //         name: '计划整治数',
        //       },
        //       {
        //         name: '完成整治数',
        //       },
        //       {
        //         name: '整治完成率',
        //       },
        //     ],
        //   },
        //   {
        //     name: '代维月进度',
        //     children: [
        //       {
        //         name: '代维单位',
        //       },
        //       {
        //         name: '计划整治数',
        //       },
        //       {
        //         name: '完成整治数',
        //       },
        //       {
        //         name: '整治完成率',
        //       },
        //     ],
        //   },
        //   {
        //     name: '代维回退率',
        //     children: [
        //       {
        //         name: '回退作业项数',
        //       },
        //       {
        //         name: '提交作业项数',
        //       },
        //       {
        //         name: '回退率',
        //       },
        //     ],
        //   },
        //   {
        //     name: '周进展',
        //     children: [
        //       {
        //         name: '第一周进展',
        //       },
        //       {
        //         name: '第二周进展',
        //       },
        //       {
        //         name: '第三周进展',
        //       },
        //       {
        //         name: '第四周进展',
        //       },
        //     ],
        //   },
        // ];
      },
    },

    tableData: {
      type: Array,
      default() {
        return [];
      },
    },

    arraySpanMethod: {
      type: Array,
      default: () => [],
    },
  },

  watch: {
    tableData() {
      this.init();
    },
  },

  data() {
    return {
      filterData: {},
    };
  },

  mounted() {
    this.init();
  },

  methods: {
    init() {
      this.filterData = [];
      this.arraySpanMethod.forEach((e, i) => {
        this.handletableData(this.tableData.concat(), i);
      });
    },

    spanMethod({ row, column, rowIndex, columnIndex }) {
      const { property } = column;
      const filterData = this.filterData[property];

      if (!filterData) {
        return {
          rowspan: 1,
          colspan: 1,
        };
      }

      const count = filterData[rowIndex];

      if (count) {
        return {
          rowspan: count,
          colspan: 1,
        };
      }

      return {
        rowspan: 0,
        colspan: 0,
      };
    },

    spanMethod1({ row, column, rowIndex, columnIndex }) {
      let { property } = column;
      const ary = this.arraySpanMethod.find((e) => e.name === property);

      if (ary) {
        property = ary.to || property;

        const value = this.tableData[rowIndex][property];

        for (let i = 1; i < 999; i++) {
          //   if (!this.tableData[rowIndex + i]) {
          //     return {
          //       rowspan: i,
          //       colspan: 1,
          //     };
          //   }

          if (this.tableData[rowIndex - i] && value === this.tableData[rowIndex - i][property]) {
            return {
              rowspan: 0,
              colspan: 0,
            };
          }

          if (!this.tableData[rowIndex + i] || value !== this.tableData[rowIndex + i][property]) {
            return {
              rowspan: i,
              colspan: 1,
            };
          }
        }
      }

      return {
        rowspan: 1,
        colspan: 1,
      };
    },

    // 处理数据
    handletableData(data, arraySpanMethodIndex = 0) {
      const span = this.arraySpanMethod[arraySpanMethodIndex];

      if (span) {
        const { from } = span;
        const spanName = span.name;
        const filed = span.to || span.name;

        // data.sort((a, b) => a[spanName] - b[spanName]);

        const date = this.filterData;

        let oldName = '';

        const setName = [];

        let oldIndex = 0;

        let fromString = null;

        data.forEach((element, i) => {
          if (oldName === element[filed] && (!fromString || fromString === element[from])) {
            date[spanName][oldIndex]++;
          } else {
            if (!date[spanName]) {
              date[spanName] = {};
            }
            date[spanName][i] = 1;
            oldIndex = i;

            if (from) {
              fromString = element[from];
            }

            oldName = element[filed];
            setName.push(oldName);
          }
        });
      }
    },
  },
};
</script>

<style></style>

 

 

调用方式为

<template>
  <!-- 测试任务详情 -->
  <div class="queryComplanyTaskTotal">
    <FormItem ref="supplyFormItem" :layout="layout" :form.sync="form">
      <template slot="canshu">
        <search-form ref="searchForm" slot="searchBox" :searchItems="searchItems" @onSearch="onSearch" />
      </template>
      <template slot="table">
        <month-plan-form
          :tableCol="tableCol"
          :tableData="tableData"
          :arraySpanMethod="arraySpanMethod"
        ></month-plan-form>
      </template>
    </FormItem>
  </div>
</template>

<script>
import MonthPlanForm from 'components/business/reportForms/monthPlanForm.vue';
import { queryComplanyTaskTotal } from '@/api/router/renovate';
import SearchForm from '@/components/searchForm/searchForm.vue';
import FormItem from '@/components/formItem';

export default {
  components: {
    MonthPlanForm,
    SearchForm,
    FormItem,
  },
  data() {
    return {
      form: {},

      layout: [
        {
          title: '地市标准化整治任务进度(整治项)',
          render: 'canshu',
        },
        {
          title: '',
          render: 'table',
        },
      ],

      searchItems: [
        {
          type: 'dataPicker',
          label: '年份',
          initValue: '',
          props: {
            type: 'month',
            format: 'yyyy-MM',
            fieldName: 'year',
            placeholder: '选择年份',
            minWidth: '236px',
          },
        },
        // {
        //   type: 'input',
        //   label: '标题',
        //   initValue: '',
        //   props: {
        //     fieldName: 'title',
        //     minWidth: '236px',
        //   },
        // },
        // {
        //   type: 'select',
        //   label: '任务状态',
        //   initValue: '',
        //   props: {
        //     fieldName: 'status',
        //     options: this.common().orderCompanyViewStatus,
        //     minWidth: '178px',
        //   },
        // },
      ],
      tableCol: [
        {
          name: '',
          children: [
            {
              name: '地市',
              value: 'cityName',
            },
            {
              name: '月计划总整治量',
              value: 'cityPlanNum',
            },
            {
              name: '整治类型',
              value: 'subCategory',
            },
            {
              name: '整治内容',
              value: 'middleCategory',
            },
          ],
        },
        {
          name: '地市月进度',
          children: [
            {
              name: '计划整治数',
              value: 'projectPlanNum',
            },
            {
              name: '完成整治数',
              value: 'projectFinishNum',
            },
            {
              name: '整治完成率',
              value: 'projectRate',
            },
          ],
        },
        {
          name: '代维月进度',
          children: [
            {
              name: '代维单位',
              value: 'complanyName',
            },
            {
              name: '计划整治数',
              value: 'complanyPlanNum',
            },
            {
              name: '完成整治数',
              value: 'complanyFinishNum',
            },
            {
              name: '整治完成率',
              value: 'complanyRate',
            },
          ],
        },
        {
          name: '代维回退率',
          children: [
            {
              name: '回退作业项数',
              value: 'companyFallbackNum',
            },
            {
              name: '提交作业项数',
              value: 'complanySubmitToNum',
            },
            {
              name: '回退率',
              value: 'complanyFallbackRate',
            },
          ],
        },
        {
          name: '周进展',
          children: [
            {
              name: '第一周进展',
              value: 'firstWeek',
            },
            {
              name: '第二周进展',
              value: 'secondWeek',
            },
            {
              name: '第三周进展',
              value: 'thirdWeek',
            },
            {
              name: '第四周进展',
              value: 'fourthWeek',
            },
            {
              name: '第五周进展',
              value: 'fifthWeek',
            },
            {
              name: '第六周进展',
              value: 'sixthWeek',
            },
          ],
        },
      ],
      tableData: [],
      arraySpanMethod: [
        { name: 'cityName' },
        {
          name: 'cityPlanNum',
          to: 'cityName',
        },
        {
          name: 'subCategory',
          from: 'cityName',
        },
        {
          name: 'middleCategory',
          from: 'cityName',
        },
        {
          name: 'projectPlanNum',
          to: 'middleCategory',
        },
        {
          name: 'projectFinishNum',
          to: 'middleCategory',
        },
        {
          name: 'projectRate',
          to: 'middleCategory',
        },
      ],

      param: {
        data: {
          year: 2023,
          month: 10,
          // cityId: '',
          // subCategory: '',
          // middleCategory: '',
        },
        pageNo: 1,
        pageSize: 100,
      },
    };
  },
  mounted() {
    this.init();
  },
  methods: {
    init() {
      this.getData().then((res) => {
        if (Number(res.code) === 200) {
          this.tableData = res.data.data;
        }
      });
    },

    getData() {
      return queryComplanyTaskTotal(this.param);
    },

    onSearch(form) {
      const time = form.year?.split('-');

      if (time) {
        this.param.data.year = time[0];
        this.param.data.month = time[1];
      } else {
        this.param.data.year = '2023';
        this.param.data.month = '10';
      }

      this.init();
    },
  },
};
</script>

<style lang="less">
.test {
  height: 100%;
}
</style>

 

标签:return,name,ElementUi,value,组件,table,整治,data,const
From: https://www.cnblogs.com/liao1992/p/17789007.html

相关文章

  • Hadoop-大数据组件版本号查看
    1.操作系统cat /etc/redhat-release; 2.JDKjava-version 3.SCALAscala --version 4.MySQLmysql--version 5.Zookeeperps-ef|grep-E“zookeeper-.*.jar” 6.Hadoophadoopversion 7.Hivehive --version 8.Hbasehbaseversion 9.Sparkspark-subm......
  • Openstack组件介绍
    Openstack七大组件介绍,OpenStack是一套laas解决方案,OpenStack是一个开源的云计算管理平台,以Apache许可证为授权Horizon组件——Horizon为OpenStack服务的Web控制面板,可以管理实例、镜像、创建密钥对,对实例添加卷、操作Swift容器等。——Horizon具有如下一些特点:——实力管理:创建、......
  • 甘特图组件DHTMLX Gantt用例 - 如何自定义任务、月标记和网格新外观
    dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。本文将为大家揭示DHTMLXGantt自定义的典型用例,包括自定义任务、网格的新外观等,来展示其功能的强大性!用例-新建项目外观、当前月份标记和可折叠网格D......
  • vue和element ui 滑块组件 重置验证滑块父组件ref调用子组件函数,子组件调用自己dom标
    css3可以改变图片的颜色了。从此再也不用设计出多张图,而且随时可以修改。下面就简单介绍下css3中是如何做到改变背景图片的颜色效果的。方式一:利用css3滤镜filter中的drop-shadow代码如下:<style>.icon{display:inline-block;width:180px;height:180px;bac......
  • [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/
     永久解决方法:在/etc/sysctl.conf中添加:net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1执行sysctl-p时刷新sysctl-p如果出现缺少文件的现象sysctl:cannotstat/proc/sys/net/bridge/bridge-nf-call-iptables:没有那个文......
  • 在 Windows 11 中,你可以使用 PowerShell 命令 Get-WindowsCapability 来查询 Windows
    在Windows11中,你可以使用PowerShell命令Get-WindowsCapability来查询Windows组件功能。这个命令可以列出当前安装的所有Windows组件功能,以及它们的状态。以下是使用Get-WindowsCapability命令查询Windows组件功能的步骤:打开PowerShell终端:可以通过在任务栏中搜......
  • 在 Windows 7 中,你可以使用命令行工具 cmd 来查询 添加安装 卸载 Windows 组件功能。
    在Windows7中,你可以使用命令行工具cmd来查询Windows组件功能。你可以使用dism命令来列出当前安装的所有Windows组件功能。以下是使用dism命令查询Windows组件功能的步骤:打开命令提示符(cmd):可以通过在开始菜单中搜索"cmd"并打开它,或者按下Win+R组合键,输入"c......
  • 在Windows10中 PowerShell ,你可以使用以下命令来查询 Windows 组件功能
    在Windows10中PowerShell,你可以使用以下命令来查询Windows组件功能:powershellGet-WindowsOptionalFeature-Online这个命令会列出当前已安装的Windows组件功能以及可用的但尚未安装的功能。如果你只想查看已安装的功能,可以使用以下命令:powershellGet-WindowsOptionalF......
  • ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
    1.报错信息#docker-composeup-dCreatingnetwork"2023-10-25-xcheck-net"withthedefaultdriverERROR:FailedtoSetupIPtables:UnabletoenableSKIPDNATrule:(iptablesfailed:iptables--wait-tnat-IDOCKER-ibr-7b14cc2d1da4-jRETURN:......
  • 使用 content scripts 和 Vue Router 等技术在当前页面中注入和显示 Vue 单文件组件
    要在当前页面中注入和显示Vue单文件组件,您需要按照以下步骤操作:创建一个Vue项目:首先,确保您有一个Vue项目,包括您的Vue单文件组件以及相应的构建配置。将构建后的文件添加到插件目录:将Vue项目构建后生成的HTML、CSS和JavaScript文件添加到您的Chrome插件的目录中。编......