mirror of
http://112.124.100.131/GFRS/ebiz-h5.git
synced 2025-12-22 03:36:44 +08:00
Merge branch 'feature/个险业绩排行优化' into dev
This commit is contained in:
@@ -9,13 +9,17 @@
|
|||||||
<table class="myTable mb30" cellspacing="0" cellpadding="0">
|
<table class="myTable mb30" cellspacing="0" cellpadding="0">
|
||||||
<tr>
|
<tr>
|
||||||
<th class="sticky th-rank">排名</th>
|
<th class="sticky th-rank">排名</th>
|
||||||
<th v-for="(column, index) in columns" :key="index" :class="{ fixedWidth: index === 0, orgName: index === 0 && dataType !== 2 }">
|
<th v-for="(column, index) in columns" :key="index" :class="{ fixedWidth: index === 0, orgName: index === 0 }">
|
||||||
{{ column.name }}
|
{{ column.name }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr v-show="values.length !== 0">
|
||||||
|
<td class="sticky bleft bright" colspan="2">合计</td>
|
||||||
|
<td class="bright" v-for="(total, i) in totals" :key="i">{{ total | blankFilter }}</td>
|
||||||
|
</tr>
|
||||||
<tr v-for="(value, index) in values" :key="index">
|
<tr v-for="(value, index) in values" :key="index">
|
||||||
<td class="sticky bleft bright">{{ index + 1 }}</td>
|
<td class="sticky bleft bright">{{ index + 1 }}</td>
|
||||||
<td v-for="(key, i) in needGettingKey" :key="i" class="bright" :class="{ orgName: key === 'name' && dataType !== 2 }">
|
<td v-for="(key, i) in needGettingKey" :key="i" class="bright" :class="{ orgName: i === 0 }">
|
||||||
{{ value[key] | blankFilter }}
|
{{ value[key] | blankFilter }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -84,53 +88,73 @@ export default {
|
|||||||
tableColumns: [
|
tableColumns: [
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
{ name: '机构', key: 'name' },
|
{ isInt: false, name: '机构', key: 'name' },
|
||||||
{ name: '预收标保(万元)', key: 'ysbb' },
|
{ isInt: false, name: '预收标保(万元)', key: 'ysbb' },
|
||||||
{ name: '预收件数(件)', key: 'ysjs' },
|
{ isInt: true, name: '预收件数(件)', key: 'ysjs' },
|
||||||
{ name: '承保标保(万元)', key: 'bzbf' },
|
{ isInt: false, name: '承保标保(万元)', key: 'bzbf' },
|
||||||
{ name: '承保件数(件)', key: 'cbjs' }
|
{ isInt: true, name: '承保件数(件)', key: 'cbjs' }
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '机构', key: 'name' },
|
{ isInt: false, name: '机构', key: 'name' },
|
||||||
{ name: '预收标保(万元)', key: 'ysbb' },
|
{ isInt: false, name: '预收标保(万元)', key: 'ysbb' },
|
||||||
{ name: '预收件数(件)', key: 'ysjs' },
|
{ isInt: true, name: '预收件数(件)', key: 'ysjs' },
|
||||||
{ name: '承保标保(万元)', key: 'bzbf' },
|
{ isInt: false, name: '承保标保(万元)', key: 'bzbf' },
|
||||||
{ name: '承保件数(件)', key: 'cbjs' },
|
{ isInt: true, name: '承保件数(件)', key: 'cbjs' },
|
||||||
{ name: '承保同比', key: 'cbtb' },
|
{ isInt: false, name: '承保同比', key: 'cbtb' },
|
||||||
{ name: '承保环比', key: 'cbhb' }
|
{ isInt: false, name: '承保环比', key: 'cbhb' }
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '机构', key: 'name' },
|
{ isInt: false, name: '机构', key: 'name' },
|
||||||
{ name: '承保标保(万元)', key: 'bzbf' },
|
{ isInt: false, name: '承保标保(万元)', key: 'bzbf' },
|
||||||
{ name: '标保目标', key: 'bbmb' },
|
{ isInt: false, name: '标保目标', key: 'bbmb' },
|
||||||
{ name: '标保目标达成率', key: 'bbmbdcl' },
|
{ isInt: false, name: '标保目标达成率', key: 'bbmbdcl' },
|
||||||
{ name: '差距', key: 'cj' }
|
{ isInt: false, name: '差距', key: 'cj' }
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '机构', key: 'name' },
|
{ isInt: false, name: '机构', key: 'name' },
|
||||||
{ name: '承保标保(万元)', key: 'bzbf' }
|
{ isInt: false, name: '承保标保(万元)', key: 'bzbf' }
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '机构', key: 'name' },
|
{ isInt: false, name: '机构', key: 'name' },
|
||||||
{ name: '活动人力(人)', key: 'hdrl' },
|
{ isInt: true, name: '活动人力(人)', key: 'hdrl' },
|
||||||
{ name: '合格人力(人)', key: 'hgrl' },
|
{ isInt: true, name: '合格人力(人)', key: 'hgrl' },
|
||||||
{ name: '桂冠人力(人)', key: 'ggrl' },
|
{ isInt: true, name: '桂冠人力(人)', key: 'ggrl' },
|
||||||
{ name: '桂冠正式会员(人)', key: 'gghy' },
|
{ isInt: true, name: '桂冠正式会员(人)', key: 'gghy' },
|
||||||
{ name: '双冠人力(人)', key: 'sgrl' },
|
{ isInt: true, name: '双冠人力(人)', key: 'sgrl' },
|
||||||
{ name: '新增人力(人)', key: 'xzrl' }
|
{ isInt: true, name: '新增人力(人)', key: 'xzrl' }
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '产品', key: 'productName' },
|
{ isInt: false, name: '产品', key: 'productName' },
|
||||||
{ name: '承保标保(万元)', key: 'cbbb' },
|
{ isInt: false, name: '承保标保(万元)', key: 'cbbb' },
|
||||||
{ name: '承保件数(件)', key: 'cbItems' },
|
{ isInt: true, name: '承保件数(件)', key: 'cbItems' },
|
||||||
{ name: '保费占比(%)', key: 'percent' }
|
{ isInt: false, name: '保费占比(%)', key: 'percent' }
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
values: []
|
values: [],
|
||||||
|
totals: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
calculateTotal() {
|
||||||
|
this.totals = []
|
||||||
|
let columns = JSON.parse(JSON.stringify(this.columns))
|
||||||
|
columns.splice(0, 1)
|
||||||
|
console.dir(columns)
|
||||||
|
for (let column of columns) {
|
||||||
|
let key = column.key
|
||||||
|
let total = this.values.reduce((prevVal, currVal) => {
|
||||||
|
let count = column.isInt ? parseInt(currVal[key]) : parseFloat(currVal[key])
|
||||||
|
return prevVal + count
|
||||||
|
}, 0)
|
||||||
|
|
||||||
|
if (column.isInt) {
|
||||||
|
this.totals.push(total)
|
||||||
|
} else {
|
||||||
|
this.totals.push(parseFloat(total.toFixed(2)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
setShortName() {
|
setShortName() {
|
||||||
for (let org of this.values) {
|
for (let org of this.values) {
|
||||||
for (let shortName of orgShortNames) {
|
for (let shortName of orgShortNames) {
|
||||||
@@ -145,24 +169,28 @@ export default {
|
|||||||
case 'prem':
|
case 'prem':
|
||||||
this.values = data.list ? data.list : []
|
this.values = data.list ? data.list : []
|
||||||
this.setShortName()
|
this.setShortName()
|
||||||
|
this.calculateTotal()
|
||||||
break
|
break
|
||||||
case 'active':
|
case 'active':
|
||||||
this.values = data.listRL ? data.listRL : []
|
this.values = data.listRL ? data.listRL : []
|
||||||
this.setShortName()
|
this.setShortName()
|
||||||
|
this.calculateTotal()
|
||||||
break
|
break
|
||||||
case 'product':
|
case 'product':
|
||||||
this.values = data.productDTO ? data.productDTO : []
|
this.values = data.productDTO ? data.productDTO : []
|
||||||
this.calculate()
|
this.calculate()
|
||||||
|
this.calculateTotal()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
calculate() {
|
calculate() {
|
||||||
let allPrice = this.values.reduce((prevVal, currVal) => {
|
let allPrice = this.values.reduce((prevVal, currVal) => {
|
||||||
return prevVal + Number(currVal.cbbb)
|
return prevVal + parseFloat(currVal.cbbb)
|
||||||
}, 0)
|
}, 0)
|
||||||
this.values.map(product => {
|
this.values.map(product => {
|
||||||
product.allPrice = allPrice.toFixed(2)
|
product.allPrice = allPrice
|
||||||
product.percent = ((product.cbbb / allPrice) * 100).toFixed(2)
|
let percent = ((product.cbbb / allPrice) * 100).toFixed(8)
|
||||||
|
product.percent = percent
|
||||||
return product
|
return product
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -177,7 +205,16 @@ export default {
|
|||||||
},
|
},
|
||||||
filters: {
|
filters: {
|
||||||
blankFilter(val) {
|
blankFilter(val) {
|
||||||
|
if (isNaN(parseFloat(val))) {
|
||||||
return val ? val : '-'
|
return val ? val : '-'
|
||||||
|
} else {
|
||||||
|
let res = parseFloat(val).toFixed(2)
|
||||||
|
if (res.endsWith('.00')) {
|
||||||
|
return res.split('.')[0]
|
||||||
|
} else {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -262,4 +299,8 @@ th.fixedWidth {
|
|||||||
position: sticky;
|
position: sticky;
|
||||||
left: 59px;
|
left: 59px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user