|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<div class="market-analysis-result">
|
|
|
- <div class="analysis-result-anchors pd-lr20">
|
|
|
+ <div class="analysis-result-anchors">
|
|
|
<div class="analysis-dimensions analysis-wrap" v-fixed-nav>
|
|
|
<div class="analysis-label">报告分析维度:</div>
|
|
|
<div class="analysis-content">
|
|
@@ -53,12 +53,15 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 项目规模分布 -->
|
|
|
- <div class="sub-section project-scatter" v-if="sections.projectScatter.dataAlready">
|
|
|
+ <div class="sub-section project-scatter"
|
|
|
+ v-if="!sections.loaded.top3 || (sections.projectScatter.dataAlready && sections.loaded.top3)"
|
|
|
+ v-loading="!sections.loaded.top3">
|
|
|
<div class="sub-section-header">
|
|
|
<div class="sub-section-title">项目规模分布</div>
|
|
|
</div>
|
|
|
<div class="sub-section-content">
|
|
|
<ProjectScatter
|
|
|
+ v-if="sections.projectScatter.dataAlready"
|
|
|
:chartData="sections.projectScatter.chartData"
|
|
|
:tableData="sections.projectScatter.tableData"
|
|
|
/>
|
|
@@ -86,71 +89,93 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 地区分布 -->
|
|
|
- <div class="sub-section area-scatter" v-if="sections.areaScatter.dataAlready">
|
|
|
+ <div class="sub-section area-scatter"
|
|
|
+ v-if="(!sections.loaded.top3 && notOneAreaFilter) || (sections.areaScatter.dataAlready && sections.loaded.top3 && notOneAreaFilter)"
|
|
|
+ v-loading="!sections.loaded.top3">
|
|
|
<div class="sub-section-header">
|
|
|
<div class="sub-section-title">地区分布</div>
|
|
|
</div>
|
|
|
<div class="sub-section-content">
|
|
|
<MarketAreaScatter
|
|
|
+ v-if="sections.projectScatter.dataAlready"
|
|
|
:chartData="sections.areaScatter.chartData"
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="top3-table-list pd-lr20">
|
|
|
- <div class="ar-table" v-if="sections.areaScatter.projectCountTop3">
|
|
|
+ <div class="ar-table"
|
|
|
+ v-if="!sections.loaded.top3 || (sections.areaScatter.projectCountTop3 && sections.loaded.top3)"
|
|
|
+ v-loading="!sections.loaded.top3">
|
|
|
<p class="ar-table-title">项目数量TOP3地区的重点中标单位</p>
|
|
|
- <Top3Table :tableData="sections.areaScatter.projectCountTop3" />
|
|
|
+ <Top3Table v-if="sections.areaScatter.projectCountTop3" :tableData="sections.areaScatter.projectCountTop3" />
|
|
|
</div>
|
|
|
- <div class="ar-table" v-if="sections.areaScatter.projectAmountTop3">
|
|
|
+ <div class="ar-table"
|
|
|
+ v-if="!sections.loaded.top3 || (sections.areaScatter.projectAmountTop3 && sections.loaded.top3)"
|
|
|
+ v-loading="!sections.loaded.top3">
|
|
|
<p class="ar-table-title">项目金额TOP3地区的重点中标单位</p>
|
|
|
- <Top3Table :tableData="sections.areaScatter.projectAmountTop3" />
|
|
|
+ <Top3Table v-if="sections.areaScatter.projectAmountTop3" :tableData="sections.areaScatter.projectAmountTop3" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 客户分布 -->
|
|
|
- <div class="sub-section user-scatter" v-if="sections.userScatter.list.length">
|
|
|
+ <div class="sub-section user-scatter"
|
|
|
+ v-if="!sections.loaded.top3 || (sections.userScatter.list.length && sections.loaded.top3)"
|
|
|
+ v-loading="!sections.loaded.top3">
|
|
|
<div class="sub-section-header">
|
|
|
<div class="sub-section-title">客户分布</div>
|
|
|
</div>
|
|
|
<div class="sub-section-content">
|
|
|
- <MarketUserScatter :chartData="sections.userScatter.list" />
|
|
|
+ <MarketUserScatter v-if="sections.userScatter.list.length" :chartData="sections.userScatter.list" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="top3-table-list pd-lr20">
|
|
|
- <div class="ar-table" v-if="sections.userScatter.projectCountTop3">
|
|
|
+ <div class="ar-table"
|
|
|
+ v-if="!sections.loaded.top3 || (sections.userScatter.projectCountTop3 && sections.loaded.top3)"
|
|
|
+ v-loading="!sections.loaded.top3">
|
|
|
<p class="ar-table-title">项目数量TOP3客户类型的重点中标单位</p>
|
|
|
- <Top3Table :tableData="sections.userScatter.projectCountTop3" />
|
|
|
+ <Top3Table v-if="sections.userScatter.projectCountTop3" :tableData="sections.userScatter.projectCountTop3" />
|
|
|
</div>
|
|
|
- <div class="ar-table" v-if="sections.userScatter.projectAmountTop3">
|
|
|
+ <div class="ar-table"
|
|
|
+ v-if="!sections.loaded.top3 || (sections.userScatter.projectAmountTop3 && sections.loaded.top3)"
|
|
|
+ v-loading="!sections.loaded.top3">
|
|
|
<p class="ar-table-title">项目金额TOP3客户类型的重点中标单位</p>
|
|
|
- <Top3Table :tableData="sections.userScatter.projectAmountTop3" />
|
|
|
+ <Top3Table v-if="sections.userScatter.projectAmountTop3" :tableData="sections.userScatter.projectAmountTop3" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 细分市场 -->
|
|
|
- <div class="sub-section market-refine" v-if="sections.market.refine.dataAlready">
|
|
|
+ <div class="sub-section market-refine"
|
|
|
+ v-if="!sections.loaded.segment || (sections.market.refine.dataAlready && sections.loaded.segment)"
|
|
|
+ v-loading="!sections.loaded.segment">
|
|
|
<div class="sub-section-header">
|
|
|
<div class="sub-section-title">细分市场</div>
|
|
|
</div>
|
|
|
<div class="sub-section-content">
|
|
|
<MarketSegment
|
|
|
+ v-if="sections.market.refine.dataAlready"
|
|
|
:projectCountData="sections.market.refine.projectCountData"
|
|
|
:projectAmountData="sections.market.refine.projectAmountData"
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="top3-table-list pd-lr20">
|
|
|
- <div class="ar-table" v-if="sections.market.refine.projectCountTop3">
|
|
|
+ <div class="ar-table"
|
|
|
+ v-if="!sections.loaded.segment || (sections.market.refine.projectCountTop3 && sections.loaded.segment)"
|
|
|
+ v-loading="!sections.loaded.segment">
|
|
|
<p class="ar-table-title">细分市场的重点中标单位-项目数量</p>
|
|
|
- <Top3Table :tableData="sections.market.refine.projectCountTop3" />
|
|
|
+ <Top3Table v-if="sections.market.refine.projectCountTop3" :tableData="sections.market.refine.projectCountTop3" />
|
|
|
</div>
|
|
|
- <div class="ar-table" v-if="sections.market.refine.projectAmountTop3">
|
|
|
+ <div class="ar-table"
|
|
|
+ v-if="!sections.loaded.segment || (sections.market.refine.projectAmountTop3 && sections.loaded.segment)"
|
|
|
+ v-loading="!sections.loaded.segment">
|
|
|
<p class="ar-table-title">细分市场的重点中标单位-项目金额</p>
|
|
|
- <Top3Table :tableData="sections.market.refine.projectAmountTop3" />
|
|
|
+ <Top3Table v-if="sections.market.refine.projectAmountTop3" :tableData="sections.market.refine.projectAmountTop3" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</section>
|
|
|
<div class="bg-grey-h24" v-if="buyerclassSectionShow"></div>
|
|
|
- <section class="analysis-result-section" v-if="buyerclassSectionShow">
|
|
|
+ <section class="analysis-result-section"
|
|
|
+ v-if="!sections.loaded.buyerWinner || (buyerclassSectionShow && sections.loaded.buyerWinner)"
|
|
|
+ v-loading="!sections.loaded.buyerWinner">
|
|
|
<div class="analysis-result-title pd-lr20">采购单位</div>
|
|
|
<div class="analysis-result-content sub-section-list">
|
|
|
<!-- 采购规模分布 -->
|
|
@@ -159,42 +184,44 @@
|
|
|
<div class="sub-section-title">采购规模分布</div>
|
|
|
</div>
|
|
|
<div class="sub-section-content">
|
|
|
- <BuyerScaleScatter :chartData="sections.buyerclass.chartData" />
|
|
|
+ <BuyerScaleScatter v-if="buyerclassSectionShow" :chartData="sections.buyerclass.chartData" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="top3-table-list pd-lr20">
|
|
|
<div class="ar-table buyerclass-count-top3" v-if="sections.buyerclass.projectCountTop3">
|
|
|
<p class="ar-table-title">项目数量TOP3采购单位及其重点合作中标单位</p>
|
|
|
- <Top3Table :tableData="sections.buyerclass.projectCountTop3" />
|
|
|
+ <Top3Table v-if="buyerclassSectionShow" :tableData="sections.buyerclass.projectCountTop3" />
|
|
|
</div>
|
|
|
<div class="ar-table buyerclass-amount-top3" v-if="sections.buyerclass.projectAmountTop3">
|
|
|
<p class="ar-table-title">采购金额TOP3采购单位及其重点合作中标单位</p>
|
|
|
- <Top3Table :tableData="sections.buyerclass.projectAmountTop3" />
|
|
|
+ <Top3Table v-if="buyerclassSectionShow" :tableData="sections.buyerclass.projectAmountTop3" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</section>
|
|
|
<div class="bg-grey-h24" v-if="winnerSectionShow"></div>
|
|
|
- <section class="analysis-result-section" v-if="winnerSectionShow">
|
|
|
+ <section class="analysis-result-section"
|
|
|
+ v-if="!sections.loaded.buyerWinner || (winnerSectionShow && sections.loaded.buyerWinner)"
|
|
|
+ v-loading="!sections.loaded.buyerWinner">
|
|
|
<div class="analysis-result-title pd-lr20">中标单位</div>
|
|
|
<div class="analysis-result-content sub-section-list">
|
|
|
<!-- 中标规模分布 -->
|
|
|
- <div class="sub-section winner-scatter" v-if="sections.winner.dataAlready">
|
|
|
+ <div class="sub-section winner-scatter">
|
|
|
<div class="sub-section-header">
|
|
|
<div class="sub-section-title">中标规模分布</div>
|
|
|
</div>
|
|
|
<div class="sub-section-content">
|
|
|
- <BidderScaleScatter :chartData="sections.winner.chartData" />
|
|
|
+ <BidderScaleScatter v-if="sections.winner.dataAlready" :chartData="sections.winner.chartData" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="top3-table-list pd-lr20">
|
|
|
- <div class="ar-table winner-count-top3" v-if="sections.winner.projectCountTop3">
|
|
|
+ <div class="ar-table winner-count-top3">
|
|
|
<p class="ar-table-title">项目数量TOP3中标单位及其重点合作采购单位</p>
|
|
|
- <Top3Table :tableData="sections.winner.projectCountTop3" />
|
|
|
+ <Top3Table v-if="sections.winner.projectCountTop3" :tableData="sections.winner.projectCountTop3" />
|
|
|
</div>
|
|
|
- <div class="ar-table winner-amount-top3" v-if="sections.winner.projectAmountTop3">
|
|
|
+ <div class="ar-table winner-amount-top3">
|
|
|
<p class="ar-table-title">中标金额TOP3中标单位及其重点合作采购单位</p>
|
|
|
- <Top3Table :tableData="sections.winner.projectAmountTop3" />
|
|
|
+ <Top3Table v-if="sections.winner.projectAmountTop3" :tableData="sections.winner.projectAmountTop3" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -332,6 +359,13 @@ export default {
|
|
|
]
|
|
|
},
|
|
|
sections: {
|
|
|
+ loaded: {
|
|
|
+ overview: false, // 1, 市场概括与时间分布
|
|
|
+ top10: false, // 2, 项目规模Top10
|
|
|
+ top3: false, // 3, 项目规模分布/地区规模分布/客户分布/地区分布及客户分布&Top3(table+chart)
|
|
|
+ segment: false, // 4, 细分市场
|
|
|
+ buyerWinner: false // 5, 采购单位/中标单位&Top3(table+chart)
|
|
|
+ },
|
|
|
market: {
|
|
|
overview: [],
|
|
|
refine: {
|
|
@@ -406,6 +440,11 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
+ notOneAreaFilter () {
|
|
|
+ const area = this.reportFilters.area
|
|
|
+ const showArea = area && (Object.keys(area).length > 1 || Object.keys(area).length === 0)
|
|
|
+ return showArea
|
|
|
+ },
|
|
|
buyerclassSectionShow () {
|
|
|
const winnerState = this.sections.buyerclass
|
|
|
return winnerState.dataAlready && winnerState.projectCountTop3 && winnerState.projectAmountTop3
|
|
@@ -447,14 +486,10 @@ export default {
|
|
|
const flagArr = [
|
|
|
0, // 筛选条件
|
|
|
// 1, // 市场概括与时间分布
|
|
|
- 2, // 项目规模分布
|
|
|
- 3, // 项目规模Top10
|
|
|
+ 2, // 项目规模Top10
|
|
|
+ 3, // 项目规模分布/地区规模分布/客户分布/地区分布及客户分布&Top3(table+chart)
|
|
|
4, // 细分市场
|
|
|
- 5, // 采购单位
|
|
|
- 6, // 中标单位
|
|
|
- 7, // 地区规模分布
|
|
|
- 8, // 客户分布
|
|
|
- 9 // 地区分布及客户分布Top3
|
|
|
+ 5 // 采购单位/中标单位&Top3(table+chart)
|
|
|
]
|
|
|
|
|
|
flagArr.forEach(this.getReport)
|
|
@@ -494,30 +529,32 @@ export default {
|
|
|
}
|
|
|
// 时间分布
|
|
|
this.sortTimeScatter(data)
|
|
|
+ this.sections.loaded.overview = true
|
|
|
} else if (flag === 2) {
|
|
|
- // 项目规模分布
|
|
|
- this.sortProjectScatter(data.projectScale)
|
|
|
- } else if (flag === 3) {
|
|
|
// 项目规模Top10
|
|
|
this.sortProjectTop10(data.ProjectTop10)
|
|
|
+ this.sections.loaded.top10 = true
|
|
|
+ } else if (flag === 3) {
|
|
|
+ // 项目规模分布/地区规模分布/客户分布/地区分布及客户分布&Top3(table+chart)
|
|
|
+ // 项目规模分布
|
|
|
+ this.sortProjectScatter(data.projectScale)
|
|
|
+ // 地区规模分布
|
|
|
+ this.sortAreaScatter(data.area_infos)
|
|
|
+ // 客户分布
|
|
|
+ this.sortUserScatter(data.customer_scale)
|
|
|
+ // 地区分布及客户分布Top3
|
|
|
+ this.sortAreaUserTop3(data)
|
|
|
+ this.sections.loaded.top3 = true
|
|
|
} else if (flag === 4) {
|
|
|
// 细分市场
|
|
|
this.sortMarketRefineData(data)
|
|
|
+ this.sections.loaded.segment = true
|
|
|
} else if (flag === 5) {
|
|
|
- // 采购单位
|
|
|
+ // 采购单位/中标单位&Top3(table+chart)
|
|
|
this.sortBuyerclassData(data)
|
|
|
- } else if (flag === 6) {
|
|
|
// 中标单位分析
|
|
|
this.sortWinnerData(data)
|
|
|
- } else if (flag === 7) {
|
|
|
- // 地区规模分布
|
|
|
- this.sortAreaScatter(data.area_infos)
|
|
|
- } else if (flag === 8) {
|
|
|
- // 客户分布
|
|
|
- this.sortUserScatter(data.customer_scale)
|
|
|
- } else if (flag === 9) {
|
|
|
- // 地区分布及客户分布Top3
|
|
|
- this.sortAreaUserTop3(data)
|
|
|
+ this.sections.loaded.buyerWinner = true
|
|
|
}
|
|
|
},
|
|
|
formatSelectTime (value) {
|
|
@@ -590,18 +627,18 @@ export default {
|
|
|
list[1].count = projectTotalMoney.count
|
|
|
list[1].unit = projectTotalMoney.unit
|
|
|
|
|
|
- list[1].ringRatio = profile.projctamount_ratio ? (profile.projctamount_ratio * 100).toFixed(4) : 0
|
|
|
+ list[1].ringRatio = profile.projctamount_ratio ? (profile.projctamount_ratio * 100).toFixed(2) : 0
|
|
|
// 项目平均金额
|
|
|
const projectAvgMoney = this.moneyUnit(profile.projectavgmoney ? profile.projectavgmoney : 0)
|
|
|
list[2].count = projectAvgMoney.count
|
|
|
list[2].unit = projectAvgMoney.unit
|
|
|
- list[2].ringRatio = profile.projectavgmoney_ratio ? (profile.projectavgmoney_ratio * 100).toFixed(4) : 0
|
|
|
+ list[2].ringRatio = profile.projectavgmoney_ratio ? (profile.projectavgmoney_ratio * 100).toFixed(2) : 0
|
|
|
// 中标单位数
|
|
|
list[3].count = profile.winnercount ? profile.winnercount : 0
|
|
|
list[3].ringRatio = profile.winnercount_ratio ? (profile.winnercount_ratio * 100).toFixed(2) : 0
|
|
|
// 采购单位数
|
|
|
list[4].count = profile.buyercount ? profile.buyercount : 0
|
|
|
- list[4].ringRatio = profile.winnercount_ratio ? (profile.winnercount_ratio * 100).toFixed(2) : 0
|
|
|
+ list[4].ringRatio = profile.buyercount_ratio ? (profile.buyercount_ratio * 100).toFixed(2) : 0
|
|
|
|
|
|
const totalCount = list.reduce((total, item) => item.count + total, 0)
|
|
|
|
|
@@ -846,7 +883,8 @@ export default {
|
|
|
// }
|
|
|
|
|
|
const areaChartData = {
|
|
|
- columns: ['项目所在地', '项目数量', '项目金额'],
|
|
|
+ columns: ['项目所在地', '项目数量'],
|
|
|
+ sColumns: ['项目金额'],
|
|
|
rows: []
|
|
|
}
|
|
|
let total = 0
|
|
@@ -855,13 +893,13 @@ export default {
|
|
|
const field = {
|
|
|
[areaChartData.columns[0]]: 'area',
|
|
|
[areaChartData.columns[1]]: 'total',
|
|
|
- [areaChartData.columns[2]]: 'amount'
|
|
|
+ [areaChartData.sColumns[0]]: 'amount'
|
|
|
}
|
|
|
areaList.forEach(item => {
|
|
|
const row = {}
|
|
|
- areaChartData.columns.forEach(column => {
|
|
|
+ areaChartData.columns.concat(areaChartData.sColumns).forEach(column => {
|
|
|
if (field[column] === 'amount') {
|
|
|
- row[column] = formatPrice(item[field[column]] / 10000)
|
|
|
+ row[column] = formatPrice(item[field[column]] / 10000) - 0
|
|
|
} else {
|
|
|
row[column] = item[field[column]]
|
|
|
}
|
|
@@ -907,11 +945,11 @@ export default {
|
|
|
},
|
|
|
sorAreaTop3 (data) {
|
|
|
const tableDataCount = {
|
|
|
- columns: ['序号', '地区:项目数量(个),占比', '前3中标单位:中标数量(个),该地区占比'],
|
|
|
+ columns: ['序号', '地区:项目数量(个),占比', '前3中标单位:中标数量(个)'], // ,该地区占比
|
|
|
rows: []
|
|
|
}
|
|
|
const tableDataAmount = {
|
|
|
- columns: ['序号', '地区:项目金额(万元),占比', '前3中标单位:中标金额(万元),该地区占比'],
|
|
|
+ columns: ['序号', '地区:项目金额(万元),占比', '前3中标单位:中标金额(万元)'], // ,该地区占比
|
|
|
rows: []
|
|
|
}
|
|
|
|
|
@@ -924,12 +962,13 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: item.area_count + '个',
|
|
|
- percent: formatPrice(item.area_scale * 100) + '%',
|
|
|
+ percent: item.area_scale ? `${formatPrice(item.area_scale * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner', // 用于判断采购单位或者中标单位
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.winner,
|
|
|
winner_value: w.winner_total ? `${w.winner_total}个` : 0,
|
|
|
- winner_percent: w.total_scale ? `${formatPrice(w.total_scale * 100)}%` : 0,
|
|
|
+ // winner_percent: w.total_scale ? `${formatPrice(w.total_scale * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.winner.length : 0
|
|
|
}
|
|
|
tableDataCount.rows.push(row)
|
|
@@ -939,7 +978,7 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: item.area_count + '个',
|
|
|
- percent: formatPrice(item.area_scale * 100) + '%',
|
|
|
+ percent: item.area_scale ? `${formatPrice(item.area_scale * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
tableDataCount.rows.push(row)
|
|
@@ -956,12 +995,13 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: formatPrice(item.area_amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.area_scale * 100) + '%',
|
|
|
+ percent: item.area_scale ? `${formatPrice(item.area_scale * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner',
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.winner,
|
|
|
- winner_value: w.winner_amount ? `${formatPrice(w.winner_amount / 10000)}万元` : 0,
|
|
|
- winner_percent: w.amount_scale ? `${formatPrice(w.amount_scale * 100)}%` : 0,
|
|
|
+ winner_value: w.winner_amount ? `${formatPrice(w.winner_amount / 10000)}万元` : '-',
|
|
|
+ // winner_percent: w.amount_scale ? `${formatPrice(w.amount_scale * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.winner.length : 0
|
|
|
}
|
|
|
tableDataAmount.rows.push(row)
|
|
@@ -971,7 +1011,7 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: formatPrice(item.area_amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.area_scale * 100) + '%',
|
|
|
+ percent: item.area_scale ? `${formatPrice(item.area_scale * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
tableDataAmount.rows.push(row)
|
|
@@ -988,11 +1028,11 @@ export default {
|
|
|
},
|
|
|
sorUserTop3 (data) {
|
|
|
const tableDataCount = {
|
|
|
- columns: ['序号', '客户类型:项目数量(个),占比', '前3中标单位:中标数量(个),该客户类型占比'],
|
|
|
+ columns: ['序号', '客户类型:项目数量(个),占比', '前3中标单位:中标数量(个)'], // ,该客户类型占比
|
|
|
rows: []
|
|
|
}
|
|
|
const tableDataAmount = {
|
|
|
- columns: ['序号', '客户类型:项目金额(万元),占比', '前3中标单位:中标金额(万元),该客户类型占比'],
|
|
|
+ columns: ['序号', '客户类型:项目金额(万元),占比', '前3中标单位:中标金额(万元)'], // ,该客户类型占比
|
|
|
rows: []
|
|
|
}
|
|
|
|
|
@@ -1005,12 +1045,13 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: item.buyclass_count + '个',
|
|
|
- percent: formatPrice(item.buyclass_scale * 100) + '%',
|
|
|
+ percent: item.buyclass_scale ? `${formatPrice(item.buyclass_scale * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner', // 用于判断采购单位或者中标单位
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.winner,
|
|
|
winner_value: w.winner_total ? `${w.winner_total}个` : 0,
|
|
|
- winner_percent: w.total_scale ? `${formatPrice(w.total_scale * 100)}%` : 0,
|
|
|
+ // winner_percent: w.total_scale ? `${formatPrice(w.total_scale * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.winner.length : 0
|
|
|
}
|
|
|
tableDataCount.rows.push(row)
|
|
@@ -1020,7 +1061,7 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: item.area_count + '个',
|
|
|
- percent: formatPrice(item.area_scale * 100) + '%',
|
|
|
+ percent: item.buyclass_scale ? `${formatPrice(item.buyclass_scale * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
tableDataCount.rows.push(row)
|
|
@@ -1037,12 +1078,13 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: formatPrice(item.buyclass_amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.buyclass_scale * 100) + '%',
|
|
|
+ percent: item.buyclass_scale ? `${formatPrice(item.buyclass_scale * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner', // 用于判断采购单位或者中标单位
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.winner,
|
|
|
- winner_value: w.winner_amount ? `${formatPrice(w.winner_amount / 10000)}万元` : 0,
|
|
|
- winner_percent: w.amount_scale ? `${formatPrice(w.amount_scale * 100)}%` : 0,
|
|
|
+ winner_value: w.winner_amount ? `${formatPrice(w.winner_amount / 10000)}万元` : '-',
|
|
|
+ // winner_percent: w.amount_scale ? `${formatPrice(w.amount_scale * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.winner.length : 0
|
|
|
}
|
|
|
tableDataAmount.rows.push(row)
|
|
@@ -1052,7 +1094,7 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: formatPrice(item.area_amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.area_scale * 100) + '%',
|
|
|
+ percent: item.buyclass_scale ? `${formatPrice(item.buyclass_scale * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
tableDataAmount.rows.push(row)
|
|
@@ -1115,11 +1157,11 @@ export default {
|
|
|
},
|
|
|
sortRefineTop3 (data) {
|
|
|
const tableDataCount = {
|
|
|
- columns: ['序号', '细分市场:项目数量(个),占比', '前3中标单位:中标数量(个),该细分市场占比'],
|
|
|
+ columns: ['序号', '细分市场:项目数量(个),占比', '前3中标单位:中标数量(个)'], // ,该细分市场占比
|
|
|
rows: []
|
|
|
}
|
|
|
const tableDataAmount = {
|
|
|
- columns: ['序号', '细分市场:项目金额(万元),占比', '前3中标单位:中标金额(万元),该细分市场占比'],
|
|
|
+ columns: ['序号', '细分市场:项目金额(万元),占比', '前3中标单位:中标金额(万元)'], // ,该细分市场占比
|
|
|
rows: []
|
|
|
}
|
|
|
|
|
@@ -1132,11 +1174,13 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: item.total + '个',
|
|
|
+ percent: item.prop ? `${formatPrice(item.prop * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner',
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.name,
|
|
|
winner_value: w.value ? `${w.value}个` : 0,
|
|
|
- winner_percent: w.prop ? `${formatPrice(w.prop * 100)}%` : 0,
|
|
|
+ // winner_percent: w.prop ? `${formatPrice(w.prop * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.totalTop.length : 0
|
|
|
}
|
|
|
tableDataCount.rows.push(row)
|
|
@@ -1146,6 +1190,7 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: item.total + '个',
|
|
|
+ percent: item.prop ? `${formatPrice(item.prop * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
tableDataCount.rows.push(row)
|
|
@@ -1162,11 +1207,13 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: formatPrice(item.amount / 10000) + '万元',
|
|
|
+ percent: item.prop ? `${formatPrice(item.prop * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner',
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.name,
|
|
|
- winner_value: w.value ? `${formatPrice(w.value / 10000)}万元` : 0,
|
|
|
- winner_percent: w.prop ? `${formatPrice(w.prop * 100)}%` : 0,
|
|
|
+ winner_value: w.value ? `${formatPrice(w.value / 10000)}万元` : '-',
|
|
|
+ // winner_percent: w.prop ? `${formatPrice(w.prop * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.amountTop.length : 0
|
|
|
}
|
|
|
tableDataAmount.rows.push(row)
|
|
@@ -1176,6 +1223,7 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: formatPrice(item.amount / 10000) + '万元',
|
|
|
+ percent: item.prop ? `${formatPrice(item.prop * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
tableDataAmount.rows.push(row)
|
|
@@ -1231,11 +1279,11 @@ export default {
|
|
|
},
|
|
|
sortBuyerclassTableData (data) {
|
|
|
const dataCount = {
|
|
|
- columns: ['序号', '采购单位:采购数量(个),占比', '前3中标单位:中标数量(个),占该采购单位'],
|
|
|
+ columns: ['序号', '采购单位:采购数量(个)', '前3中标单位:中标数量(个)'], // ,占比 | ,占该采购单位
|
|
|
rows: []
|
|
|
}
|
|
|
const dataAmount = {
|
|
|
- columns: ['序号', '采购单位:采购金额(万元),占比', '前3中标单位:中标金额(万元),占该采购单位'],
|
|
|
+ columns: ['序号', '采购单位:采购金额(万元)', '前3中标单位:中标金额(万元)'], // ,占比 | ,占该采购单位
|
|
|
rows: []
|
|
|
}
|
|
|
|
|
@@ -1247,13 +1295,16 @@ export default {
|
|
|
const row = {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
+ name_type: 'buyer',
|
|
|
+ name_id: item.name,
|
|
|
value: item.number + '个',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
+ // percent: item.accounted ? `${formatPrice(item.accounted * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner',
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.name,
|
|
|
winner_value: w.number ? `${w.number}个` : 0,
|
|
|
- winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
+ // winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.winnertop3.length : 0
|
|
|
}
|
|
|
dataCount.rows.push(row)
|
|
@@ -1262,8 +1313,10 @@ export default {
|
|
|
const row = {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
+ name_type: 'buyer',
|
|
|
+ name_id: item.name,
|
|
|
value: item.number + '个',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
+ // percent: item.accounted ? `${formatPrice(item.accounted * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
dataCount.rows.push(row)
|
|
@@ -1279,13 +1332,16 @@ export default {
|
|
|
const row = {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
+ name_type: 'buyer',
|
|
|
+ name_id: item.name,
|
|
|
value: formatPrice(item.amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
+ // percent: item.accounted ? `${formatPrice(item.accounted * 100)}%` : '',
|
|
|
winner_id: w.id,
|
|
|
+ winner_type: 'winner',
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.name,
|
|
|
- winner_value: w.amount ? `${formatPrice(w.amount / 10000)}万元` : 0,
|
|
|
- winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
+ winner_value: w.amount ? `${formatPrice(w.amount / 10000)}万元` : '-',
|
|
|
+ // winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.winnertop3.length : 0
|
|
|
}
|
|
|
dataAmount.rows.push(row)
|
|
@@ -1294,8 +1350,10 @@ export default {
|
|
|
const row = {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
+ name_type: 'buyer',
|
|
|
+ name_id: item.name,
|
|
|
value: formatPrice(item.amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
+ // percent: item.accounted ? `${formatPrice(item.accounted * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
dataAmount.rows.push(row)
|
|
@@ -1352,11 +1410,11 @@ export default {
|
|
|
},
|
|
|
sortWinnerTableData (data) {
|
|
|
const dataCount = {
|
|
|
- columns: ['序号', '中标单位:中标数量(个),占比', '前3采购单位:采购数量(个),占该中标单位'],
|
|
|
+ columns: ['序号', '中标单位:中标数量(个)', '前3采购单位:采购数量(个)'], // ,占比 | ,占该中标单位
|
|
|
rows: []
|
|
|
}
|
|
|
const dataAmount = {
|
|
|
- columns: ['序号', '中标单位:中标金额(万元),占比', '前3采购单位:采购金额(万元),占该中标单位'],
|
|
|
+ columns: ['序号', '中标单位:中标金额(万元)', '前3采购单位:采购金额(万元)'], // ,占比 | ,占该中标单位
|
|
|
rows: []
|
|
|
}
|
|
|
|
|
@@ -1368,13 +1426,16 @@ export default {
|
|
|
const row = {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
+ name_type: 'winner',
|
|
|
+ name_id: item.id,
|
|
|
value: item.number + '个',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
- winner_id: w.id,
|
|
|
+ // percent: item.accounted ? `${formatPrice(item.accounted * 100)}%` : '',
|
|
|
+ winner_id: w.name,
|
|
|
+ winner_type: 'buyer',
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.name,
|
|
|
winner_value: w.number ? `${w.number}个` : 0,
|
|
|
- winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
+ // winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.buyertop3.length : 0
|
|
|
}
|
|
|
dataCount.rows.push(row)
|
|
@@ -1384,7 +1445,9 @@ export default {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
value: item.number + '个',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
+ name_type: 'winner',
|
|
|
+ name_id: item.id,
|
|
|
+ // percent: item.accounted ? `${formatPrice(item.accounted * 100)}%` : '',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
dataCount.rows.push(row)
|
|
@@ -1400,13 +1463,16 @@ export default {
|
|
|
const row = {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
+ name_type: 'winner',
|
|
|
+ name_id: item.id,
|
|
|
value: formatPrice(item.amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
- winner_id: w.id,
|
|
|
+ // percent: formatPrice(item.accounted * 100) + '%',
|
|
|
+ winner_id: w.name,
|
|
|
+ winner_type: 'buyer',
|
|
|
winner_index: i + 1,
|
|
|
winner_name: w.name,
|
|
|
- winner_value: w.amount ? `${formatPrice(w.amount / 10000)}万元` : 0,
|
|
|
- winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
+ winner_value: w.amount ? `${formatPrice(w.amount / 10000)}万元` : '-',
|
|
|
+ // winner_percent: w.accounted ? `${formatPrice(w.accounted * 100)}%` : 0,
|
|
|
rowspan: i === 0 ? item.buyertop3.length : 0
|
|
|
}
|
|
|
dataAmount.rows.push(row)
|
|
@@ -1415,8 +1481,10 @@ export default {
|
|
|
const row = {
|
|
|
index: index + 1,
|
|
|
name: item.name,
|
|
|
+ name_type: 'winner',
|
|
|
+ name_id: item.id,
|
|
|
value: formatPrice(item.amount / 10000) + '万元',
|
|
|
- percent: formatPrice(item.accounted * 100) + '%',
|
|
|
+ // percent: formatPrice(item.accounted * 100) + '%',
|
|
|
rowspan: 1
|
|
|
}
|
|
|
dataAmount.rows.push(row)
|
|
@@ -1472,7 +1540,12 @@ export default {
|
|
|
<style lang="scss">
|
|
|
.report-dropdown-menu {
|
|
|
border-color: $color-text--highlight;
|
|
|
+ min-width: 100px;
|
|
|
.el-dropdown-menu__item {
|
|
|
+ padding-left: 0;
|
|
|
+ padding-right: 0;
|
|
|
+ text-align: center;
|
|
|
+ white-space: nowrap;
|
|
|
&:hover {
|
|
|
color: $color-text--highlight;
|
|
|
}
|
|
@@ -1560,12 +1633,12 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.pd-lr20 {
|
|
|
- padding: 0 20px;
|
|
|
+.el-loading-parent--relative {
|
|
|
+ min-height: 300px;
|
|
|
}
|
|
|
|
|
|
-.market-analysis-result {
|
|
|
- padding: 20px 0;
|
|
|
+.pd-lr20 {
|
|
|
+ padding: 0 20px;
|
|
|
}
|
|
|
|
|
|
i.el-icon-caret-bottom {
|
|
@@ -1575,6 +1648,11 @@ i.el-icon-caret-bottom {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+.analysis-result-anchors {
|
|
|
+ padding: 20px;
|
|
|
+ border-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
.analysis-wrap {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
@@ -1590,12 +1668,14 @@ i.el-icon-caret-bottom {
|
|
|
font-size: 12px;
|
|
|
.limit-time {
|
|
|
color: #1d1d1d;
|
|
|
+ font-size: 14px;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.analysis-result-section {
|
|
|
position: relative;
|
|
|
+ border-radius: 4px;
|
|
|
.analysis-result-title {
|
|
|
position: relative;
|
|
|
display: flex;
|
|
@@ -1653,7 +1733,11 @@ i.el-icon-caret-bottom {
|
|
|
.dimensions-options {
|
|
|
position: relative;
|
|
|
padding: 4px 14px;
|
|
|
+ color: #1D1D1D;
|
|
|
border: 1px solid #E0E0E0;
|
|
|
+ &:not(:last-of-type) {
|
|
|
+ border-right: none;
|
|
|
+ }
|
|
|
&:hover,
|
|
|
&.highlight {
|
|
|
color: #fff;
|