zoukankan      html  css  js  c++  java
  • element表格合并列

    需求:我们在做指标打分时,会一级指标下面有多个二级指标,我们在做表格时需要把一级指标合并

    如图:

     js代码:

     html绑定一个element内置方法

     js的方法

    完整代码:

    <template>
      <!-- 全部汇总结果 -->
      <div style="100%;height: calc(100% - 110px);" id="group9_allResult">
        <div class="tableList" style="height: calc(100% - 0px);" v-if="sendChild.tabFlag ==='R'" key="007">
          <el-table border :data="tableDataList" :span-method="objectSpanMethod" v-loading="loading">
            <el-table-column :label="indexLayerNameP" min-width="160" align="left" prop="firstColumn" show-overflow-tooltip></el-table-column>
            <el-table-column :label="indexLayerNameLast" min-width="160" align="center" prop="secondColumn" show-overflow-tooltip></el-table-column>
            <el-table-column min-width="220" v-for="(ele,index) in tableTitleList" :label="ele.orgName" :prop="'S'+ele.id" align="center" show-overflow-tooltip :key="index">
              <el-table-column min-width="110" label="分数" :prop="'S'+ele.id" align="center" show-overflow-tooltip></el-table-column>
              <el-table-column min-width="110" label="备注" :prop="'SREMARK'+ele.id"  align="center" show-overflow-tooltip></el-table-column>
            </el-table-column>
          </el-table>
        </div>
        <div class="tableList" style="height: calc(100% - 0px);" v-else-if="sendChild.tabFlag ==='S'" key="009">
          <el-table show-summary border :data="tableDataList" :span-method="objectSpanMethod" v-loading="loading" :summary-method="getSummaries">
            <el-table-column :label="indexLayerNameP" min-width="160" align="left" prop="firstColumn" show-overflow-tooltip></el-table-column>
            <el-table-column :label="indexLayerNameLast" min-width="160" align="center" prop="secondColumn" show-overflow-tooltip></el-table-column>
            <el-table-column min-width="220" v-for="(ele,index) in tableTitleList" :label="ele.orgName" :prop="'S'+ele.id" align="center" show-overflow-tooltip :key="index">
              <el-table-column min-width="110" label="分数" :prop="'S'+ele.id" align="center" show-overflow-tooltip></el-table-column>
              <el-table-column min-width="110" label="备注" :prop="'SREMARK'+ele.id"  align="center" show-overflow-tooltip></el-table-column>
            </el-table-column>
          </el-table>
        </div>
        <div class="tableList" style="height: calc(100% - 0px);" v-else key="008">
          <el-table show-summary border :data="tableDataList" :span-method="objectSpanMethod" v-loading="loading" :summary-method="getSummaries1">
            <el-table-column :label="indexLayerNameP" min-width="160" align="left" prop="firstColumn" show-overflow-tooltip></el-table-column>
            <el-table-column :label="indexLayerNameLast" min-width="160" align="center" prop="secondColumn" show-overflow-tooltip></el-table-column>
            <el-table-column min-width="160" v-for="(ele,i) in tableTitleList" :label="ele.orgName" :prop="'S'+ele.id" align="center" show-overflow-tooltip :key="i">
            </el-table-column>
          </el-table>
        </div>
      </div>
    </template>
    <script>
      import RequestUrl from "../../reqUrl.js";
      import elTable from "@/components/fix/table";
      export default {
        mixins: [RequestUrl],
        props: {
          sendChild: {}
        },
        components: {
          elTable
        },
        data() {
          return {
            Remarks:[
              {name:"这是2"},
              // {name:"这是3"},
              // {name:"这是4"},
              // {name:"这是5"},
            ],
            Fraction:[
              {score:"18"},
              // {name:"这是3"},
              // {name:"这是4"},
              // {name:"这是5"},
            ],
            loading: false,
            tableTitleList: [],
            tableDataList: [],
            tableShow: false,
            indexLayerNameP: "上级指标名称",
            indexLayerNameLast: "扣分标准",
            // 1
            spanArr1: [],
            pos1: 0, // spanArr 的索引
            // 2
            spanArr2: [],
            pos2: 0, // spanArr 的索引
            assessmentId:"",
            data:[{
              assessmentId: "391956387819885568",
              assessmentOrgCode: null,
              assessmentType: null,
              branchOffice: "001",
              branchOfficeName: "微服务一组",
              listdata:[{
                name:"备注",
                id:"391956387819885568"
              }],
              scoredata:[{
                name:"备注",
                id:"391956387819885568"
              }],
            },
            ],
          };
        },
        mounted() {
            this.assessmentId = sessionStorage.getItem("assessmentId");
          this.getObjectList();
          this.getFormData();
          this.getAssessmentIndexLayerName();
        },
        methods: {
          getSummaries(param){
          const {columns,data} = param;
          const sums = []
          columns.forEach((column,index)=>{
            // console.log("返回结果",columns,column,data)
            switch (index) {
              case 0:
                sums[index]='总计'
                break;
              case 1:
                sums[index]==''
                break;
              default:
                if(column.label == "备注"){
                  sums[index]==''
                }else{
                  const values = data.map(item => Number(item[column.property]));
                    if (!values.every(value => isNaN(value))) {
                      sums[index] = values.reduce((prev, curr) => {
                        const value = Number(curr);
                        if (!isNaN(value)) {
                          return prev + curr;
                        } else {
                          return prev;
                        }
                      }, 0);
                      sums[index] += '';
                    } else {
                      sums[index] = 'N/A';
                    }
                }
              }
            })
            return sums;
          },
          getSummaries1(param){
          const {columns,data} = param;
          const sums = []
          columns.forEach((column,index)=>{
            // console.log("返回结果",columns,column,data)
            switch (index) {
              case 0:
                sums[index]='总计'
                break;
              case 1:
                sums[index]==''
                break;
              default:
                  const values = data.map(item => Number(item[column.property]));
                    if (!values.every(value => isNaN(value))) {
                      sums[index] = values.reduce((prev, curr) => {
                        const value = Number(curr);
                        if (!isNaN(value)) {
                          return prev + curr;
                        } else {
                          return prev;
                        }
                      }, 0);
                      sums[index] += '';
                    } else {
                      sums[index] = 'N/A';
                    }
                }
            })
            return sums;
          },
          getAssessmentIndexLayerName() {
            let _this = this;
            _this.$http.post(_this.getAssessmentIndexLevel_null, {
              id: this.assessmentId
            }).then(function(res) {
              if(!res.data.success) {
                _this.$message({
                  message: "查询指标层级名失败!",
                  type: "error"
                });
                return;
              }
              let layerNameData = res.data.data;
              if(layerNameData.layerNameP) {
                _this.indexLayerNameP = layerNameData.layerNameP;
              }
              if(layerNameData.layerName) {
                _this.indexLayerNameLast = layerNameData.layerName;
              }
            }, function(error) {
              _this.$message({
                message: "查询指标层级名失败!",
                type: "error"
              });
            });
          },
          getObjectList() {
            // var flag = this.$publics.getSystemSignal(); //党建云 false 多租户 true
            // var url = "/party/assessment/Assessment/Object/findAssessmentObjectList";
            // var urlxf = "/party/assessment/XfAssessment/Object/findAssessmentObjectList";
            var obj = {
                branchOffice: this.sendChild.branchOffice,
              assessmentId: this.assessmentId
            }
            this.$publics._getPublicMethod(this.getAssessmentObjList_null, obj).then(getData => {
                this.tableTitleList = getData;
              })
    
            // if(flag) {
            //   this.$publics._getPublicMethod(urlxf, obj).then(getData => {
            //     this.tableTitleList = getData;
            //   })
            // } else {
            //   this.$publics._getPublicMethod(url, obj).then(getData => {
            //     this.tableTitleList = getData;
            //   })
            // }
          },
          getFormData() {
            this.loading = true;
            this.sendChild.isLoading = true;
            console.log("输出9999",this.sendChild)
            var flag = this.$publics.getSystemSignal(); //党建云 false 多租户 true
            var url = "/party/assessment/Assessment/ResultStatistics/getAssessmentResultStatistics";
            var urlxf = "/party/assessment/XfAssessment/ResultStatistics/getAssessmentResultStatistics";
            //scoreType 四个tab页传不同参数  汇总结果 R  自评分 Z  初评分 S 系统评分 X
            var obj = {
              assessmentId: this.assessmentId,
              scoreType: this.sendChild.tabFlag,
              department: this.sendChild.department,
              branchOffice: this.sendChild.branchOffice
            }
            if(flag) {
              this.$publics._getPublicMethod(urlxf, obj).then(getData => {
                console.log("输出结果",getData)
                if(getData.success){
                  this.dealData(getData)
                }else{
                  this.loading = false;
                  this.$message({
                    message: "查询指标层级名失败!",
                    type: "error"
                  });
                return;
                }
              })
            } else {
              this.$publics._getPublicMethod(url, obj).then(getData => {
                console.log("输出结果1",getData)
                this.dealData(getData)
                // if(getData.success){
                //   this.dealData(getData)
                // }else{
                //   this.loading = false;
                //   this.$message({
                //     message: "查询指标层级名失败!",
                //     type: "error"
                //   });
                // }
              })
            }
          },
          dealData(data) {  //请求回来的数据做处理
            this.tableDataList = [];
            data && data.map((el) => {
              let newel = JSON.parse(JSON.stringify(el));
              newel.firstColumn = el.pIndexName;
              newel.secondColumn = el.indexName;
              this.tableDataList.push(newel);
            })
            this.spanArr1 = [];
            this.spanArr2 = [];
            for(var i = 0; i < this.tableDataList.length; i++) {
              if(i === 0) {
                this.spanArr1.push(1);
                this.pos1 = 0;
                this.spanArr2.push(1);
                this.pos2 = 0;
              } else {
                // 判断当前元素与上一个元素是否相同(第1)
                if(this.tableDataList[i].firstColumn === this.tableDataList[i - 1].firstColumn) {  //那个字段要合并就判断上一个和下一个的字段是否相同
                  this.spanArr1[this.pos1] += 1;   //相同就累加
                  this.spanArr1.push(0);
                } else {
                  this.spanArr1.push(1);  //
                  this.pos1 = i;
                }
              }
            }
            this.loading = false;
            this.sendChild.isLoading = false;
          },
          objectSpanMethod({
            row,
            column,
            rowIndex,
            columnIndex
          }) {
            if(columnIndex === 0) { //第几列合并判断
              const _row = this.spanArr1[rowIndex];
              const _col = _row > 0 ? 1 : 0;
              return {
                rowspan: _row,
                colspan: _col
              };
            }
          }
        }
      };
    </script>
    <style>
        #group9_allResult .tableList .el-table{
            overflow: scroll;
        }
        #group9_allResult .el-table__body-wrapper{
            overflow: visible;
            height: auto;
        }
        #group9_allResult .el-table__header-wrapper{
            overflow: visible;
        }
      #group9_allResult .el-table .cell {
        /* white-space: pre-wrap!important; */
    
        line-height: 24px;
      }
    </style>
  • 相关阅读:
    造数据
    自定义注解
    利用线程池,同步线程实现并发
    ThreadPoolExecutor 线程池
    velocity 模板
    [python] 解析xml文件
    url 中需要转义的字符
    Appium 坑
    TestNG 101
    【python】print · sys.stdout · sys.stderr
  • 原文地址:https://www.cnblogs.com/Jerry1208/p/12598319.html
Copyright © 2011-2022 走看看