默认:
当我们点击年的时候会展开 年下面的 、月、月入款、月未到款
像下面这样
下面是代码实现
在年下面加一个点击事件 --- @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>