231 lines
7.3 KiB
Java
231 lines
7.3 KiB
Java
<template>
|
||
<a-card :bordered="false">
|
||
<a-row>
|
||
<a-col>
|
||
<a-switch v-bind="pageSwitchProps" v-model="pageSwitch"/>
|
||
</a-col>
|
||
<a-col>
|
||
<a-table
|
||
v-bind="tableProps"
|
||
@change="handleTableChange"
|
||
style="margin-top: 20px"
|
||
>
|
||
</a-table>
|
||
</a-col>
|
||
</a-row>
|
||
</a-card>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name: 'TableTotal',
|
||
data() {
|
||
return {
|
||
columns: [
|
||
{
|
||
title: '#',
|
||
width: '180px',
|
||
align: 'center',
|
||
dataIndex: 'rowIndex',
|
||
customRender: function (text, r, index) {
|
||
return (text !== '总计') ? (parseInt(index) + 1) : text
|
||
}
|
||
},
|
||
{
|
||
title: '姓名',
|
||
dataIndex: 'name',
|
||
width: 180,
|
||
},
|
||
{
|
||
title: '贡献点',
|
||
dataIndex: 'point',
|
||
width: 180,
|
||
},
|
||
{
|
||
title: '等级',
|
||
dataIndex: 'level',
|
||
width: 180,
|
||
},
|
||
{
|
||
title: '更新时间',
|
||
dataIndex: 'updateTime',
|
||
width: 180,
|
||
},
|
||
],
|
||
/* 分页参数 */
|
||
ipagination:{
|
||
current: 1,
|
||
pageSize: 10,
|
||
},
|
||
dataSource: [
|
||
{ id:"1",name: '张三', point: 23, level: 3, updateTime: '2019-8-14' },
|
||
{ name: '小王', point: 6, level: 1, updateTime: '2019-8-13' },
|
||
{ name: '李四', point: 53, level: 8, updateTime: '2019-8-12' },
|
||
{ name: '小红', point: 44, level: 5, updateTime: '2019-8-11' },
|
||
{ name: '王五', point: 97, level: 10, updateTime: '2019-8-10' },
|
||
{ name: '小明', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
{ name: '小张', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
{ name: '小六', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
{ name: '小五', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
{ name: '小赵', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
{ name: '李华', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
{ name: '小康', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
{ name: '小鹿', point: 33, level: 2, updateTime: '2019-8-10' },
|
||
],
|
||
newArr:[],
|
||
newDataSource:[],
|
||
footerDataSource: [],
|
||
pageSwitch:true
|
||
}
|
||
},
|
||
computed:{
|
||
// 数据表格的固定属性
|
||
tableProps(){
|
||
let tableProps = {
|
||
size: 'middle',
|
||
rowKey:'rowIndex',
|
||
columns: this.columns,
|
||
scroll: {x: true},
|
||
}
|
||
let renderFooter = this.footerDataSource.length === 0 ? null : () => this.renderTableFooter(tableProps)
|
||
return {
|
||
...tableProps,
|
||
ref: 'table',
|
||
class: 'chart-data-list',
|
||
pagination:this.pageSwitch?this.ipagination:false,
|
||
columns: this.columns,
|
||
dataSource: this.dataSource,
|
||
footer: renderFooter,
|
||
}
|
||
},
|
||
pageSwitchProps() {
|
||
return {
|
||
checkedChildren: '分页',
|
||
unCheckedChildren: '分页',
|
||
style: {
|
||
position: 'absolute',
|
||
right: '0px',
|
||
top: '-10px'
|
||
}
|
||
}
|
||
},
|
||
},
|
||
mounted() {
|
||
// this.tableAddTotalRow(this.columns, this.dataSource)
|
||
/*新增分页合计方法*/
|
||
this.newDataSource=this.dataSource
|
||
this.dataHandling(1,this.ipagination.pageSize)
|
||
},
|
||
watch:{
|
||
//update-begin---author:wangshuai ---date:20220209 for:[JTC-494]常用示例->表格合计写法改成新的写法------------
|
||
'pageSwitch':function(val){
|
||
if(!val){
|
||
this.dataHandling('-1',0)
|
||
}else{
|
||
this.dataHandling(1,this.ipagination.pageSize)
|
||
}
|
||
},
|
||
'ipagination.current':function(val) {
|
||
this.dataHandling(val,this.ipagination.pageSize)
|
||
},
|
||
//当合计行变化时,绑定滚动条
|
||
'footerDataSource': {
|
||
async handler(dataSource) {
|
||
// 当底部合计行有值,并且显示出来时,再同步滚动条
|
||
if (dataSource && dataSource.length > 0) {
|
||
await this.$nextTick()
|
||
// 同步表与footer滚动
|
||
let dom = this.$refs.table.$el.querySelectorAll('.ant-table-body')[0]
|
||
let footerDom = this.$refs.footerTable.$el.querySelectorAll('.ant-table-body')[0]
|
||
dom.addEventListener(
|
||
'scroll',
|
||
() => {
|
||
footerDom.scrollLeft = dom.scrollLeft
|
||
},
|
||
true,
|
||
)
|
||
}
|
||
},
|
||
//update-end---author:wangshuai ---date:20220209 for:[JTC-494]常用示例->表格合计写法改成新的写法------------
|
||
}
|
||
},
|
||
methods: {
|
||
/** 表格增加合计行 */
|
||
tableAddTotalRow(columns, dataSource) {
|
||
let numKey = 'rowIndex'
|
||
let totalRow = { [numKey]: '合计' }
|
||
columns.forEach(column => {
|
||
let { key, dataIndex } = column
|
||
if (![key, dataIndex].includes(numKey)) {
|
||
|
||
let total = 0
|
||
dataSource.forEach(data => {
|
||
total += /^\d+\.?\d?$/.test(data[dataIndex]) ? Number.parseInt(data[dataIndex]) : Number.NaN
|
||
console.log(data[dataIndex], ':', (/^\d+\.?\d?$/.test(data[dataIndex]) ? Number.parseInt(data[dataIndex]) : Number.NaN))
|
||
})
|
||
|
||
if (Number.isNaN(total)) {
|
||
total = '-'
|
||
}
|
||
totalRow[dataIndex] = total
|
||
}
|
||
})
|
||
|
||
dataSource.push(totalRow)
|
||
},
|
||
handleTableChange(pagination, filters, sorter) {
|
||
this.ipagination = pagination;
|
||
},
|
||
//update-begin---author:wangshuai ---date:20220209 for:[JTC-494]常用示例->表格合计写法改成新的写法------------
|
||
/*如果分页走这个方法*/
|
||
dataHandling(pageNo,pageSize) {
|
||
//根据当前页数和每页显示条数分割数组
|
||
let arrs = [];
|
||
//如果pageNo不是-1(不分页),那么需要对数据进行分页计算
|
||
if(pageNo!=-1){
|
||
arrs = this.newDataSource.slice((pageNo-1)*pageSize,pageNo*pageSize)
|
||
}else{
|
||
arrs = this.newDataSource
|
||
}
|
||
let newDataSource=[];
|
||
let newArr= { };
|
||
newArr.rowIndex="总计"
|
||
let level=0;
|
||
let point=0;
|
||
//每一项的数值相加
|
||
for (let j=0;j<arrs.length;j++){
|
||
level+=arrs[j].level;
|
||
point+=arrs[j].point;
|
||
}
|
||
newArr.level=level;
|
||
newArr.point=point;
|
||
newDataSource.push(newArr);
|
||
//给foot底部数组赋值
|
||
this.footerDataSource = newDataSource;
|
||
},
|
||
// 渲染表格底部合计行
|
||
renderTableFooter(tableProps) {
|
||
let h = this.$createElement
|
||
return h('a-table', {
|
||
ref: 'footerTable',
|
||
props: {
|
||
...tableProps,
|
||
pagination: false,
|
||
dataSource: this.footerDataSource,
|
||
showHeader: false,
|
||
},
|
||
})
|
||
//update-end---author:wangshuai ---date:20220209 for:[JTC-494]常用示例->表格合计写法改成新的写法------------
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped lang="less">
|
||
/deep/ .chart-data-list .ant-table-footer .ant-table-body{
|
||
overflow: hidden !important;
|
||
}
|
||
/deep/ .ant-table-footer{
|
||
padding:0;
|
||
}
|
||
</style> |