|
@@ -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 && oneAreaFilter">
|
|
|
+ <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,7 +440,7 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
- oneAreaFilter () {
|
|
|
+ notOneAreaFilter () {
|
|
|
const area = this.reportFilters.area
|
|
|
const showArea = area && (Object.keys(area).length > 1 || Object.keys(area).length === 0)
|
|
|
return showArea
|
|
@@ -495,9 +529,11 @@ export default {
|
|
|
}
|
|
|
// 时间分布
|
|
|
this.sortTimeScatter(data)
|
|
|
+ this.sections.loaded.overview = true
|
|
|
} else if (flag === 2) {
|
|
|
// 项目规模Top10
|
|
|
this.sortProjectTop10(data.ProjectTop10)
|
|
|
+ this.sections.loaded.top10 = true
|
|
|
} else if (flag === 3) {
|
|
|
// 项目规模分布/地区规模分布/客户分布/地区分布及客户分布&Top3(table+chart)
|
|
|
// 项目规模分布
|
|
@@ -508,14 +544,17 @@ export default {
|
|
|
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)
|
|
|
// 中标单位分析
|
|
|
this.sortWinnerData(data)
|
|
|
+ this.sections.loaded.buyerWinner = true
|
|
|
}
|
|
|
},
|
|
|
formatSelectTime (value) {
|
|
@@ -1501,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;
|
|
|
}
|
|
@@ -1589,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 {
|
|
@@ -1604,6 +1648,11 @@ i.el-icon-caret-bottom {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+.analysis-result-anchors {
|
|
|
+ padding: 20px;
|
|
|
+ border-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
.analysis-wrap {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
@@ -1619,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;
|
|
@@ -1682,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;
|