合并:扩展 点击 el-table 表格的数据会展开

默认:

当我们点击年的时候会展开 年下面的 、月、月入款、月未到款

像下面这样

 下面是代码实现

在年下面加一个点击事件 ---   @click="YEAR(scope.row,scope.$index)"

   <el-table-column label="年" align="center" key="y_Time" prop="y_Time" v-if="columns[0].visible">
            <template slot-scope="scope">
              <el-button style="color:rgb(8,0,255);cursor:pointer" type="text" @click="YEAR(scope.row,scope.$index)">
                <U>
                  {{ scope.row.y_Time }}
                </U>
              </el-button>
            </template>
          </el-table-column>

重要的问题 :

        这个需求必须先进行  合并  跨列

        1:把年、年入款 、年未到款 。。。进行跨列

        请看我的这个文章,里面有跨列

      Element vue :span-method=“objectSpanMethod“ 实现跨列-----合并_万众瞩目.的博客-CSDN博客

        我的是 | 第一列,第五列,第六列 进行了跨列

如果有问题可以加我主页微信问

下面的是我的全部代码

<template>
  <div class="app-container">
    <el-row :gutter="20">
      <el-col :span="mainwidth" :xs="24">
        <el-form :model="BalanceFrom" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
          <template>
            <div>
              <el-divider content-position="left"><span color="#2894FF"><h2>入款金额合计</h2></span></el-divider>
            </div>
          </template>
          <br>
          <!--条件选择-->
          <el-form-item label="条件选择" label-width="150px">
            <el-input
              v-model="BalanceFrom.value"
              placeholder="查询值"
              clearable
              size="small"
              style="width: 350px"
              @keyup.enter.native="handleQuery"
            >
              <el-select
                v-model="BalanceFrom.type"
                placeholder="查询条件"
                clearable
                slot="prepend"
                style="width: 110px"
              >
                <el-option
                  v-for="dict in typeOptions"
                  :key="dict.dictValue"
                  :label="dict.dictLabel"
                  :value="dict.dictValue"
                />
              </el-select>
            </el-input>
          </el-form-item>

          <el-form-item>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
          </el-form-item>
          <br>
          <!-- 销售工程师 -->
          <el-form-item label="销售工程师" prop="status" label-width="150px">
            <el-select
              v-model="BalanceFrom.c_userName"
              placeholder="请选中"
              clearable
              size="small"
              style="width: 115px"
            >
              <el-option
                v-for="item in SalesOption"
                :key="item.user_id"
                :label="item.nick_name"
                :value="item.user_id"
              />
            </el-select>
          </el-form-item>
          <!--入款状态-->
          <el-form-item label="入款状态" prop="status" label-width="80px">
            <el-select
              v-model="BalanceFrom.Dio_DsID"
              placeholder="请选中"
              clearable
              readonly="readonly"
              size="small"
              style="width: 115px"
            >
              <el-option
                v-for="dict in Remittance_State"
                :key="dict.dictValue"
                :label="dict.dictLabel"
                :value="dict.dictValue"
              />
            </el-select>
          </el-form-item>

        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"
                       :columns="columns"></right-toolbar>

        <el-table v-loading="loading" ref="table" :data="BalanceList" :span-method="objectSpanMethod" border
                  @selection-change="handleSelectionChange">
          <el-table-column label="年" align="center" key="y_Time" prop="y_Time" v-if="columns[0].visible">
            <template slot-scope="scope">
              <el-button style="color:rgb(8,0,255);cursor:pointer" type="text" @click="YEAR(scope.row,scope.$index)">
                <U>
                  {{ scope.row.y_Time }}
                </U>
              </el-button>
            </template>
          </el-table-column>
          <el-table-column label="月" align="center" prop="M" v-if="columns[1].visible">
          </el-table-column>
          <el-table-column label="月入款" align="center" prop="M_Dio_Deposit_Total" v-if="columns[2].visible"/>
          <el-table-column label="月未到款" align="center" prop="M_Dio_Unpaid" v-if="columns[3].visible"/>
          <el-table-column label="年入款" align="center" prop="Dio_Deposit_Total" v-if="columns[4].visible"/>
          <el-table-column label="年末到款" align="center" prop="Dio_Unpaid" v-if="columns[5].visible"/>
        </el-table>

        <br>

        <el-form-item  prop="status" label-width="120px">
          <span style="color: red"><b>未到款金额汇总 : </b></span>
          <el-input size="small" style="width: 178px" readonly="readonly" v-model="BalanceFrom.Dio_Deposit_Total" >

          </el-input>

        </el-form-item>

        </el-form>
      </el-col>
    </el-row>
  </div>

</template>

<script>
import tools from "@/utils/yunze/tools";
import {TotalfortIncome, AmountOfMoneyList} from "@/api/yunze/CWGL/remittance/remittance";
import {selNameidList} from "@/api/yunze/FHGL/FhglShippingApplication";
import {findSalesPartner} from "@/api/yunze/XSGL/customer/customer";

export default {

  data() {
    return {
      tools: tools,
      showSearch: true, // 显示搜索条件
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      mainwidth: 24,//宽度
      // 遮罩层
      loading: true,
      window: window,
      typeOptions: [],//条件选择
      Sales_Engineer: [],//销售工程师
      Remittance_State: [],//入款状态
      BalanceList: [],
      OrdBalanceList: [],
      // objectSpanMethod:()=>{},
      rowSpanArr: [],
      SalesOption: [],
      //参数
      BalanceFrom: {},
      position: '0',
      HeadquartersOption: [], //  总部门所有人
      HeadquartersnOrmalOption: [], //  总部门所有人 【状态正常 】

      //列信息
      columns: [
        {key: 1, label: `年`, visible: true},
        {key: 2, label: `月`, visible: true},
        {key: 3, label: `月入款`, visible: true},
        {key: 4, label: `月未到款`, visible: true},
        {key: 5, label: `年入款`, visible: true},
        {key: 6, label: `年未到款`, visible: true},
      ],
      fruits: ["Banana", "Orange", "Apple", "Mango"],
    }
  },

  created() {
    this.getList();

    //加载 入款状态
    if (window['Remittance_State'] != undefined && window['Remittance_State'] != null && window['Remittance_State'] != '') {
      this.Remittance_State = window['Remittance_State'];
    } else {
      this.getDicts("cwgl_Deposit_state").then(response => {
        window['Remittance_State'] = response.data;
        this.Remittance_State = window['Remittance_State'];
      });
    }

    //加载  销售
    if(window['SalesOption']!=undefined &&  window['SalesOption']!=null && window['SalesOption']!=''){
      this.SalesOption = window['SalesOption'];
      // this.SetAdminOption();
    }else{
      let map = {};
      map.isSales = 1;
      let Pwd_Str = tools.encrypt(JSON.stringify(map));
      findSalesPartner(Pwd_Str).then(response => {
        let jsonobj = JSON.parse(tools.Decrypt(response));
        if (jsonobj.code == 200) {
          window['SalesOption'] = jsonobj.Data;
          console.log(jsonobj.Data)
          this.SalesOption = window['SalesOption'];
          //console.log(this.SalesOption)
          // this.SetAdminOption();
        }else{
          this.msgError(jsonobj.msg);
        }
      })
    }


  },

  methods: {

    //设置管理员 选项
    SetAdminOption(){
      if(this.SalesOption!=null && this.SalesOption.length>0){
        this.AdminOption = [];
        for (let i = 0; i < this.SalesOption.length; i++) {
          let Obj = this.SalesOption[i];
          if(Obj.user_id=='1'){
            this.AdminOption.push(Obj);
          }
        }
      }
    },


    /*获取查询参数*/
    getParams() {

      if (this.$refs.dept != undefined & this.$refs.dept != null & this.$refs.dept != 'undefined') {
        //console.log(this.$refs.dept.getCheckedKeys());
        if (this.$refs.dept.getCheckedKeys().length > 0) {
          this.BalanceFrom.agent_id = this.$refs.dept.getCheckedKeys();
        }
      }
    },


    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.userId);
      this.single = selection.length != 1;
      this.multiple = !selection.length;
    },

    /**查询列表*/
    getList() {
      this.loading = true;
      // console.log(this.BalanceFrom)
      let Pwd_Str = tools.encrypt(JSON.stringify(this.BalanceFrom));
      this.getParams();
      TotalfortIncome(Pwd_Str).then(response => {
        let jsonobj = JSON.parse(tools.Decrypt(response));
        // console.log(jsonobj);
        if (jsonobj.code == 200) {
          this.BalanceList = jsonobj.Data;
          this.getRowSpan();
          this.Total();
        } else {
          this.msgError("获取数据异常,请联系管理员!");
        }
        this.loading = false;
      });
    },
    //求 年未到款总额
    Total() {
      let sum = '0';
      for (let i = 0; i < this.BalanceList.length; i++) {
        let Obj = this.BalanceList[i];
        sum = tools.accAdd(Obj.Dio_Unpaid, sum);
      }
      this.BalanceFrom.Dio_Deposit_Total = sum;
    },

    //  let Pmap = {"y_Time":'2022','Month':'06','Dio_Deposit':'100','Unpaid':'6000','Dio_Deposit_Total':'10','Dio_Unpaid':'30',};
    // // let map = this.BalanceFrom;
    //  let Arr = this.BalanceList.splice(1,1,map);
    //  console.log(Arr)
    //
    // console.log(row.startIndex)
    // this.BalanceList.splice(row.startIndex+1,0,map);
    // this.BalanceList.push(map);
    // console.log(this.BalanceList)

    // console.log(this.BalanceList.splice(1,1,this.BalanceFrom))
    // console.log(row.y_Time)


    // let map ={};
    // map.YEAR = row.y_Time;
    //  console.log(map)


    /**点击 年 触发事件*/
    YEAR(row, index) {

      //点击 年份时 判断 当前数据中是否已经有 年份下的 子数据 点击年下的-月数据 如果有 说明 当前 点击时去隐藏月数据 如果没有 加载 该年下的月数据
      //循环判断 y_Time 是否有多行
      let count = 0;
      for (let i = 0; i < this.BalanceList.length; i++) {
        let obj = this.BalanceList[i];

        if (obj.y_Time == row.y_Time) {
          count += 1
        }
      }
      let M = tools.Is_null(row.M);
      if (count > 1 || M == true) {
        //折叠 删除 多余 年份下月数据

        this.BalanceList[index].M_Time = '';
        this.BalanceList[index].M_Dio_Deposit_Total = '';
        this.BalanceList[index].M_Dio_Unpaid = '';
        this.BalanceList[index].M = '';

        console.log('折叠 删除 多余 年份下月数据')

        let BalanceList = JSON.parse(JSON.stringify(this.BalanceList));

        // console.log(BalanceList)

        let new_BalanceList = [];
        for (let i = 0; i < BalanceList.length; i++) {
          let obj = BalanceList[i];
          if (i != index) {
            console.log(obj.y_Time + "    " + row.y_Time)
            if (obj.y_Time != row.y_Time) {
              new_BalanceList.push(obj);
            }
          } else {
            obj.M_Dio_Deposit_Total = '';
            obj.M_Dio_Unpaid = '';
            obj.M = '';
            new_BalanceList.push(obj);
          }
        }
        this.BalanceList = new_BalanceList;
        console.log(new_BalanceList)
        this.getRowSpan();//自适应 y_Time 跨列

      } else {
        // 数据库加载 点击年份下月 数据
        this.loading = true;
        let map = {};
        map.YEAR = row.y_Time;
        // console.log(map)
        let Pwd_Str = tools.encrypt(JSON.stringify(map));
        AmountOfMoneyList(Pwd_Str).then(response => {
          let jsonobj = JSON.parse(tools.Decrypt(response));
          if (jsonobj.code == 200) {

            // jsonobj.Data.forEach((item) => { //把数组转换成对象
            //   console.dir(item)

            this.BalanceList[index].M_Time = jsonobj.Data[0].M_Time;
            this.BalanceList[index].M_Dio_Deposit_Total = jsonobj.Data[0].M_Dio_Deposit_Total;
            this.BalanceList[index].M_Dio_Unpaid = jsonobj.Data[0].M_Dio_Unpaid;
            this.BalanceList[index].M = jsonobj.Data[0].M;
            jsonobj.Data.splice(0, 1);
            // console.log(PmapArr)
            //console.log(this.BalanceList)
            for (let i = 0; i < jsonobj.Data.length; i++) {
              this.BalanceList.splice(index + 1 + i, 0, jsonobj.Data[i]);
            }

            // this.BalanceList.splice( index + 1, 0,item)
            this.getRowSpan();//自适应 y_Time 跨列

            // })

            // [{M_Dio_Deposit_Total=50450.0, M_Time=2022-01, M=01, M_Dio_Unpaid=26521.0, y_Time=2022},
            //{M_Dio_Deposit_Total=0.0, M_Time=2022-02, M=02, M_Dio_Unpaid=25597.0, y_Time=2022}]
            // {YEAR=2022}

            //  [{M_Dio_Deposit_Total=0.0, M_Time=2020-11, M=11, M_Dio_Unpaid=25597.0, y_Time=2020}]
            //  {YEAR=2020}

          } else {
            this.msgError("获取数据异常,请联系管理员!");
          }
          this.loading = false;

        });
        // let PmapArr = [{"y_Time":2022,'M_Time':'2022-1','M':'01','M_Dio_Deposit_Total':'100','M_Dio_Unpaid':'6000',"Dio_Deposit_Total":'99999',"Dio_Unpaid":'123456'},
        //   {"y_Time":2022,'M_Time':'2022-2','M':'02','M_Dio_Deposit_Total':'100','M_Dio_Unpaid':'6000',"Dio_Deposit_Total":'99999',"Dio_Unpaid":'123456'},
        //   {"y_Time":2022,'M_Time':'2022-3','M':'03','M_Dio_Deposit_Total':'100','M_Dio_Unpaid':'6000',"Dio_Deposit_Total":'99999',"Dio_Unpaid":'123456'}];


        //  this.BalanceList[index].M_Time = PmapArr[0].M_Time;
        //  this.BalanceList[index].M_Dio_Deposit_Total = PmapArr[0].M_Dio_Deposit_Total;
        //  this.BalanceList[index].M_Dio_Unpaid = PmapArr[0].M_Dio_Unpaid;
        //  this.BalanceList[index].M = PmapArr[0].M;
        //  PmapArr.splice(0,1);
        // // console.log(PmapArr)
        //  //console.log(this.BalanceList)
        //  for (let i = 0; i < PmapArr.length; i++) {
        //    this.BalanceList.splice(index+1+i,0,PmapArr[i]);
        //  }

        // this.getRowSpan();//自适应 y_Time 跨列
        //console.log(this.BalanceList)
      }
      //this.getRowSpan();//自适应 y_Time 跨列
    },

    // 处理合并表格数据
    getRowSpan() {
      this.rowSpanArr = [];
      this.BalanceList.forEach((item, index) => {
        if (index == 0) {
          this.rowSpanArr.push(1);
          this.position = 0;
        } else {
          if (this.BalanceList[index].y_Time == this.BalanceList[index - 1].y_Time) {
            this.rowSpanArr[this.position] += 1; //项目名称相同,合并到同一个数组中
            this.rowSpanArr.push(0);
            this.BalanceList[index].y_Time = this.BalanceList[index - 1].y_Time;
          } else {
            this.rowSpanArr.push(1);
            this.position = index;
          }

        }
      });
    },
    objectSpanMethod({row, column, rowIndex, columnIndex}) { //合并表格
      // 只合并区域位置   || columnIndex === 4 || columnIndex === 5
      if (columnIndex === 0 || columnIndex === 4 || columnIndex === 5) {
        const _row = this.rowSpanArr[rowIndex];
        return {
          rowspan: _row, //行
          colspan: 1 //列
        };
      }

      //隐藏单元格,否则单元格会错位,必不可少
      // if(columnIndex != null && columnIndex != ''){
      //   return { rowspan: 0, colspan: 0 };
      // }
    },


    /** 搜索按钮操作 */
    handleQuery() {
      this.BalanceFrom.page = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.BalanceFrom = {};
      this.handleQuery();
    },


  },
  name: "AmountOfMoney.vue"
}
</script>

<style lang="scss" scoped>




</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值