|
@@ -38,7 +38,7 @@
|
|
|
</div>
|
|
|
<div class="static-page--main">
|
|
|
<div class="strong-text">报告解读:</div>
|
|
|
- <p>1.本报告深度融合各政府采购、公共资源交易中心及企事业网站的招标采购信息,利用云计算、大数据和人工智能技术进行数据挖掘分析整理。。</p>
|
|
|
+ <p>1.本报告深度融合各政府采购、公共资源交易中心及企事业网站的招标采购信息,利用云计算、大数据和人工智能技术进行数据挖掘分析整理。</p>
|
|
|
<p> 2.八大分析维度深度透视,助您秒懂采购单位,精准分析需求偏好与供应商网络,抢占合作先机:</p>
|
|
|
<p class="flex-text"><span>√</span>年度项目概览:全年度采购活动一目了然。</p>
|
|
|
<p class="flex-text"><span>√</span>月度采购规模:洞察月度变化,捕捉采购节奏。</p>
|
|
@@ -159,125 +159,127 @@
|
|
|
<div class="chart-tips text-center">
|
|
|
注:采购规模指中标金额,少数缺失的中标金额,用项目预算补充。
|
|
|
</div>
|
|
|
+ <common-table :tableInfo="monthScale.tableData"></common-table>
|
|
|
+ <div><span class="tip-red">*</span>按照“时间”排序,最多展示最近2年记录。</div>
|
|
|
</div>
|
|
|
- <common-table :tableInfo="monthScale.tableData"></common-table>
|
|
|
- <div><span class="tip-red">*</span>按照“时间”排序,最多展示最近2年记录。</div>
|
|
|
|
|
|
- </section>
|
|
|
-
|
|
|
- <!-- 采购规模分布 -->
|
|
|
- <h2>4.采购规模分布</h2>
|
|
|
- <div class="sub-section" v-if="buyScaleFb.show">
|
|
|
- <div style="padding: 0 12px 12px; font-size: 12px; color: #9b9ca3">
|
|
|
- 单位(元)
|
|
|
+ <!-- 采购规模分布 -->
|
|
|
+ <h2>4.采购规模分布</h2>
|
|
|
+ <div class="sub-section" v-if="buyScaleFb.show">
|
|
|
+ <div style="padding: 0 12px 12px; font-size: 12px; color: #9b9ca3">
|
|
|
+ 单位(元)
|
|
|
+ </div>
|
|
|
+ <hot-chart
|
|
|
+ v-if="buyScaleFb.flag"
|
|
|
+ ref="hotChart"
|
|
|
+ :datas="buyScaleFb.data"
|
|
|
+ :options="buyScaleFb.options"
|
|
|
+ ></hot-chart>
|
|
|
+ <div class="chart-tips" style="margin-bottom:10px;">
|
|
|
+ 注:平均节支率=(全部项目预算-全部中标金额)/全部项目预算,是指价格减让部分与原价的比率,仅统计预算和中标金额同时存在的项目。
|
|
|
+ </div>
|
|
|
+ <common-table class="sub-section" :tableInfo="buyScaleFb.tableData"></common-table>
|
|
|
+ <div><span class="tip-red">*</span>按照“项目数量”排序,最多展示前10条记录。</div>
|
|
|
</div>
|
|
|
- <hot-chart
|
|
|
- v-if="buyScaleFb.flag"
|
|
|
- ref="hotChart"
|
|
|
- :datas="buyScaleFb.data"
|
|
|
- :options="buyScaleFb.options"
|
|
|
- ></hot-chart>
|
|
|
- <div class="chart-tips" style="margin-bottom:10px;">
|
|
|
- 注:平均节支率=(全部项目预算-全部中标金额)/全部项目预算,是指价格减让部分与原价的比率,仅统计预算和中标金额同时存在的项目。
|
|
|
+ <h2>5.各类招标方式占比</h2>
|
|
|
+ <!-- 各类招标方式占比 -->
|
|
|
+ <div class="sub-section" v-if="bidType.show">
|
|
|
+ <double-bar-chart :datas="bidType.data"></double-bar-chart>
|
|
|
</div>
|
|
|
- <common-table class="sub-section" :tableInfo="buyScaleFb.tableData"></common-table>
|
|
|
- <div><span class="tip-red">*</span>按照“项目数量”排序,最多展示前10条记录。</div>
|
|
|
- </div>
|
|
|
- <h2>5.各类招标方式占比</h2>
|
|
|
- <!-- 各类招标方式占比 -->
|
|
|
- <div class="sub-section" v-if="bidType.show">
|
|
|
- <double-bar-chart :datas="bidType.data"></double-bar-chart>
|
|
|
- </div>
|
|
|
- <!-- 各行业项目平均节支率 -->
|
|
|
- <h2>6.各行业项目平均节支率</h2>
|
|
|
- <div class="sub-section" v-if="savingsRate.show">
|
|
|
- <line-chart
|
|
|
- class="sub-section"
|
|
|
- v-if="savingsRate.flag"
|
|
|
- :options="savingsRate.options"
|
|
|
- :datas="savingsRate.data"
|
|
|
- ></line-chart>
|
|
|
-<!-- 列表数据-->
|
|
|
- <el-table v-if="savingsRate.tableData.rows" :data="savingsRate.tableData.rows" border>
|
|
|
- <el-table-column label="行业" prop="行业" width="100px" align="center"></el-table-column>
|
|
|
- <el-table-column label="平均节支率" align="center">
|
|
|
- <el-table-column
|
|
|
- v-for="item in savingsRate.tableData.columns"
|
|
|
- align="center"
|
|
|
- header-align="center"
|
|
|
- type="index"
|
|
|
- :label="item"
|
|
|
- :prop="item"
|
|
|
- >
|
|
|
- <template slot-scope="scope">
|
|
|
- {{scope.row[item]}}
|
|
|
- </template>
|
|
|
+ <!-- 各行业项目平均节支率 -->
|
|
|
+ <h2>6.各行业项目平均节支率</h2>
|
|
|
+ <div class="sub-section" v-if="savingsRate.show">
|
|
|
+ <line-chart
|
|
|
+ class="sub-section"
|
|
|
+ v-if="savingsRate.flag"
|
|
|
+ :options="savingsRate.options"
|
|
|
+ :datas="savingsRate.data"
|
|
|
+ ></line-chart>
|
|
|
+ <!-- 列表数据-->
|
|
|
+ <el-table v-if="savingsRate.tableData.rows" :data="savingsRate.tableData.rows" border>
|
|
|
+ <el-table-column label="行业" prop="行业" width="100px" align="center"></el-table-column>
|
|
|
+ <el-table-column label="平均节支率" align="center">
|
|
|
+ <el-table-column
|
|
|
+ v-for="item in savingsRate.tableData.columns"
|
|
|
+ align="center"
|
|
|
+ header-align="center"
|
|
|
+ type="index"
|
|
|
+ :label="item"
|
|
|
+ :prop="item"
|
|
|
+ >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{scope.row[item]}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- <!-- 各行业项目规模占比 -->
|
|
|
- <h2>7.各行业项目规模占比</h2>
|
|
|
- <div class="sub-section" v-if="projectScale.show">
|
|
|
- <pie-chart
|
|
|
- v-if="projectScale.flag"
|
|
|
- :height="'326px'"
|
|
|
- :options="projectScale.options"
|
|
|
- :datas="projectScale.data"
|
|
|
- ></pie-chart>
|
|
|
- <common-table class="sub-section" :tableInfo="projectScale.tableData"></common-table>
|
|
|
- </div>
|
|
|
- <!-- 重点合作企业 -->
|
|
|
- <h2>8.重点合作企业</h2>
|
|
|
- <div id="import-cooperative-ent" v-if="client.data.length > 0">
|
|
|
- <common-table class="sub-section" :tableInfo="client.tableData"></common-table>
|
|
|
- <div><span class="tip-red">*</span>按照“中标金额”排序,最多展示前100条记录。</div>
|
|
|
- </div>
|
|
|
- <!-- 首次合作企业 -->
|
|
|
- <h2>9.首次合作企业</h2>
|
|
|
- <div class="sub-section" v-if="firhz.data.length > 0">
|
|
|
- <common-table class="sub-section" :tableInfo="firhz.tableData"></common-table>
|
|
|
- <div><span class="tip-red">*</span>按照“中标金额”排序,最多展示前100条记录。</div>
|
|
|
- </div>
|
|
|
- <!-- 合作企业注册资本分布 -->
|
|
|
- <h2>10.合作企业注册资本分布</h2>
|
|
|
- <div class="sub-section" v-if="capital.show">
|
|
|
- <bar-chart
|
|
|
- v-if="capital.flag"
|
|
|
- id="capital"
|
|
|
- :options="capital.options"
|
|
|
- :datas="capital.data"
|
|
|
- ></bar-chart>
|
|
|
- </div>
|
|
|
- <!-- 合作企业年龄分布 -->
|
|
|
- <h2>11.合作企业年龄分布</h2>
|
|
|
- <div class="sub-section" v-if="age.show">
|
|
|
- <bar-chart
|
|
|
- v-if="age.flag"
|
|
|
- id="age"
|
|
|
- :options="age.options"
|
|
|
- :datas="age.data"
|
|
|
- ></bar-chart>
|
|
|
- </div>
|
|
|
- <!-- 合作企业注册地分布 -->
|
|
|
- <h2 style="margin-top:610px;">12.合作企业注册地分布</h2>
|
|
|
- <div v-if="area.show">
|
|
|
- <map-chart
|
|
|
- v-if="area.flag"
|
|
|
- id="area"
|
|
|
- :options="area.options"
|
|
|
- :datas="area.data"
|
|
|
- ></map-chart>
|
|
|
- <common-table :tableInfo="area.tableData"></common-table>
|
|
|
- <div><span class="tip-red">*</span>按照“企业数量”排序,最多展示前10条记录。</div>
|
|
|
- </div>
|
|
|
- <!-- 重点合作代理机构 -->
|
|
|
- <h2>13.重点合作代理机构</h2>
|
|
|
- <div class="sub-section" v-if="agency.show">
|
|
|
- <common-table :tableInfo="agency.tableData"></common-table>
|
|
|
- <div><span class="tip-red">*</span>按照“项目数量”排序,最多展示前10条记录。</div>
|
|
|
- </div>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <!-- 各行业项目规模占比 -->
|
|
|
+ <h2>7.各行业项目规模占比</h2>
|
|
|
+ <div class="sub-section" v-if="projectScale.show">
|
|
|
+ <pie-chart
|
|
|
+ v-if="projectScale.flag"
|
|
|
+ :height="'326px'"
|
|
|
+ :options="projectScale.options"
|
|
|
+ :datas="projectScale.data"
|
|
|
+ ></pie-chart>
|
|
|
+ <common-table class="sub-section" :tableInfo="projectScale.tableData"></common-table>
|
|
|
+ </div>
|
|
|
+ <!-- 重点合作企业 -->
|
|
|
+ <h2>8.重点合作企业</h2>
|
|
|
+ <div id="import-cooperative-ent" v-if="client.data.length > 0">
|
|
|
+ <common-table class="sub-section" :tableInfo="client.tableData"></common-table>
|
|
|
+ <div><span class="tip-red">*</span>按照“中标金额”排序,最多展示前100条记录。</div>
|
|
|
+ </div>
|
|
|
+ <!-- 首次合作企业 -->
|
|
|
+ <h2>9.首次合作企业</h2>
|
|
|
+ <div class="sub-section" v-if="firhz.data.length > 0">
|
|
|
+ <common-table class="sub-section" :tableInfo="firhz.tableData"></common-table>
|
|
|
+ <div><span class="tip-red">*</span>按照“中标金额”排序,最多展示前100条记录。</div>
|
|
|
+ </div>
|
|
|
+ <!-- 合作企业注册资本分布 -->
|
|
|
+ <h2>10.合作企业注册资本分布</h2>
|
|
|
+ <div class="sub-section" v-if="capital.show">
|
|
|
+ <bar-chart
|
|
|
+ v-if="capital.flag"
|
|
|
+ id="capital"
|
|
|
+ :options="capital.options"
|
|
|
+ :datas="capital.data"
|
|
|
+ ></bar-chart>
|
|
|
+ </div>
|
|
|
+ <!-- 合作企业年龄分布 -->
|
|
|
+ <h2>11.合作企业年龄分布</h2>
|
|
|
+ <div class="sub-section" v-if="age.show">
|
|
|
+ <bar-chart
|
|
|
+ v-if="age.flag"
|
|
|
+ id="age"
|
|
|
+ :options="age.options"
|
|
|
+ :datas="age.data"
|
|
|
+ ></bar-chart>
|
|
|
+ </div>
|
|
|
+ <!-- 合作企业注册地分布 -->
|
|
|
+ <h2 style="margin-top:610px;">12.合作企业注册地分布</h2>
|
|
|
+ <div v-if="area.show">
|
|
|
+ <map-chart
|
|
|
+ v-if="area.flag"
|
|
|
+ id="area"
|
|
|
+ :options="area.options"
|
|
|
+ :datas="area.data"
|
|
|
+ ></map-chart>
|
|
|
+ <common-table :tableInfo="area.tableData"></common-table>
|
|
|
+ <div><span class="tip-red">*</span>按照“企业数量”排序,最多展示前10条记录。</div>
|
|
|
+ </div>
|
|
|
+ <!-- 重点合作代理机构 -->
|
|
|
+ <h2>13.重点合作代理机构</h2>
|
|
|
+ <div class="sub-section" v-if="agency.show">
|
|
|
+ <common-table :tableInfo="agency.tableData"></common-table>
|
|
|
+ <div><span class="tip-red">*</span>按照“项目数量”排序,最多展示前10条记录。</div>
|
|
|
+ </div>
|
|
|
+ </section>
|
|
|
<h1>二、招标动态</h1>
|
|
|
+ <!--联系二维码-->
|
|
|
+ <div class="split-line"></div>
|
|
|
+ <PageBottom />
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
@@ -295,8 +297,11 @@ import BlueProgressChart from '@/components/chart/BlueProgressChart'
|
|
|
import { getUnitChart, getVipUnitChart } from '@/api/modules/'
|
|
|
import ExportExcel from '@/components/export/excel'
|
|
|
import CommonTable from '@/views/download-pdf/components/CommonTable'
|
|
|
+import PageBottom from '@/views/download-pdf/components/PageBottom.vue'
|
|
|
import { bSort, dateFormatter, moneyUnit } from '@/utils/'
|
|
|
import ComputedPageEdge from './utils'
|
|
|
+import { getPdfDetail } from '@/api/modules/'
|
|
|
+
|
|
|
export default {
|
|
|
components: {
|
|
|
ExportExcel,
|
|
@@ -308,7 +313,8 @@ export default {
|
|
|
ProChart,
|
|
|
MapChart,
|
|
|
BlueProgressChart,
|
|
|
- CommonTable
|
|
|
+ CommonTable,
|
|
|
+ PageBottom
|
|
|
},
|
|
|
data () {
|
|
|
return {
|
|
@@ -317,16 +323,18 @@ export default {
|
|
|
buyer: ''
|
|
|
},
|
|
|
nowDate: dateFormatter(new Date(),'yyyy年MM月dd日'),
|
|
|
- filter: {
|
|
|
- entId: '',
|
|
|
- buyer: '中国移动通信集团',
|
|
|
- match: '',
|
|
|
- exactMatch: 0,
|
|
|
- matchRange: 'purchasing',
|
|
|
- scopeClass: '',
|
|
|
- timeRange: '2018_2024',
|
|
|
- buyerClass: ''
|
|
|
- },
|
|
|
+ // 页面报告id
|
|
|
+ sid: '',
|
|
|
+ // filter: {
|
|
|
+ // entId: '',
|
|
|
+ // buyer: '中国移动通信集团',
|
|
|
+ // match: '',
|
|
|
+ // exactMatch: 0,
|
|
|
+ // matchRange: 'purchasing',
|
|
|
+ // scopeClass: '',
|
|
|
+ // timeRange: '2018_2024',
|
|
|
+ // buyerClass: ''
|
|
|
+ // },
|
|
|
// 概况数据是否展示
|
|
|
baseShow: false,
|
|
|
// 概况数据
|
|
@@ -534,15 +542,32 @@ export default {
|
|
|
},
|
|
|
reqCount: 0,
|
|
|
computedPageNum: 1,
|
|
|
- catalogueHtml: ''
|
|
|
+ catalogueHtml: '',
|
|
|
+ allBool: []
|
|
|
}
|
|
|
},
|
|
|
+ watch: {
|
|
|
+ // allBool: {
|
|
|
+ // handler(newval) {
|
|
|
+ // if (newval.indexOf(true) !== -1) {
|
|
|
+ // this.emptyShow = false
|
|
|
+ // } else {
|
|
|
+ // this.emptyShow = true
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // deep: true
|
|
|
+ // }
|
|
|
+ },
|
|
|
created() {
|
|
|
- this.info.buyer = this.$route.query.buyerName || this.$route.query.id
|
|
|
+ if(this.$route.query.pid) {
|
|
|
+ this.sid = this.$route.query.pid
|
|
|
+ this.getData()
|
|
|
+ }
|
|
|
+ // this.info.buyer = this.$route.query.buyerName || this.$route.query.id
|
|
|
},
|
|
|
mounted() {
|
|
|
this.$nextTick(() => {
|
|
|
- this.getChartData(this.filter)
|
|
|
+ // this.getChartData(this.filter)
|
|
|
})
|
|
|
},
|
|
|
methods: {
|
|
@@ -553,6 +578,22 @@ export default {
|
|
|
}
|
|
|
return (money * 10e4) / 10e8
|
|
|
},
|
|
|
+ // 获取报告数据
|
|
|
+ async getData () {
|
|
|
+ const sid = this.sid
|
|
|
+ console.log(7777777)
|
|
|
+ console.log(sid)
|
|
|
+ const {data, error_code: code} = await getPdfDetail({sid})
|
|
|
+ if(data && code === 0) {
|
|
|
+ if (Object.keys(data).length > 0) {
|
|
|
+ this.showChart = true
|
|
|
+ this.initData('', data)
|
|
|
+ }
|
|
|
+ this.onAjaxLoaded()
|
|
|
+ } else {
|
|
|
+ this.showChart = false
|
|
|
+ }
|
|
|
+ },
|
|
|
// 获取招标动态
|
|
|
async getList() {
|
|
|
},
|
|
@@ -644,34 +685,6 @@ export default {
|
|
|
this.showChart = false
|
|
|
}
|
|
|
},
|
|
|
- getSectionChartData(type, newval) {
|
|
|
- const flagAjaxParams = {
|
|
|
- buyer: decodeURIComponent(this.info.buyer)
|
|
|
- }
|
|
|
- Object.assign(flagAjaxParams, newval)
|
|
|
- getUnitChart(flagAjaxParams).then((res) => {
|
|
|
- if (res.error_code === 0) {
|
|
|
- this.reqCount++
|
|
|
- if (res.data && Object.keys(res.data).length > 0) {
|
|
|
- this.showChart = true
|
|
|
- this.initData('', res.data)
|
|
|
- if (type === 'a') {
|
|
|
- this.reqCount = 0
|
|
|
- this.getSectionChartData('b', newval)
|
|
|
- } else if (type === 'b') {
|
|
|
- this.reqCount = 0
|
|
|
- this.getSectionChartData('c', newval)
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (this.reqCount < 5) {
|
|
|
- this.getSectionChartData(type, newval)
|
|
|
- } else {
|
|
|
- this.showChart = false
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
/* ******** 配置项部分 ******* */
|
|
|
configYears(options) {
|
|
|
options.legend.show = true
|
|
@@ -1748,9 +1761,9 @@ export default {
|
|
|
onAjaxLoaded() {
|
|
|
const pageEdge = new ComputedPageEdge({
|
|
|
firstPageNum: 4,
|
|
|
- callback: ({ pageNum, catalogue }) => {
|
|
|
+ callback: ({ pageNum, catalogueHtml }) => {
|
|
|
this.computedPageNum = pageNum
|
|
|
- this.catalogueHtml = catalogue
|
|
|
+ this.catalogueHtml = catalogueHtml
|
|
|
}
|
|
|
})
|
|
|
setTimeout(() => {
|