Browse Source

feat:项目明细接口联调

tsz 2 years ago
parent
commit
c61626aa79

+ 7 - 1
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/report_detail_month.css

@@ -190,11 +190,17 @@
   background-color: #fff;
 }
 
-#report_month .empty-container{
+.empty-container{
   background-color: #fff;
 }
 
 #report_month .empty-main.tip-text {
   color: #9B9CA3;
   font-size: .26rem;
+}
+
+.van-tabs__line{
+  background: linear-gradient(270.04deg, #25BEEE 0.03%, #2ABED1 74.46%);;
+  width: .48rem;
+  border-radius: .02rem;
 }

+ 38 - 1
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/report_detail_month.js

@@ -12,6 +12,8 @@ var vNode = {
         scrollTop:0,
         barChart: barChart,
         keywords:'',
+        area: {},
+        keywordsList: [],
         keyTip: '',
         dateVal:'',
         settings1:{
@@ -183,6 +185,16 @@ var vNode = {
         utils.iosBackRefresh()
     },
     methods: {
+      // 点击项目
+      setLinkUrl () {
+        location.href = '/jyapp/big/page/pro_follow_detail'
+      },
+      setBuyerLink (data) {
+        location.href = '/jyapp/big/page/unit_portrayal?entName=' + data.buyer
+      },
+      setWinnerLink (id) {
+        location.href = '/jyapp/big/page/ent_portrait?eId=' + id
+      },
       // 设置排序方式
       setsortType (data) {
         this.sortType = data
@@ -211,7 +223,27 @@ var vNode = {
           contentType: 'application/json',
           success: function(res) {
             if (res && res.error_code === 0 && res.data) {
-              this.projectInfo = res.data
+              if (this.listParams.pageNum === 1) {
+                this.projectInfo = res.data
+              } else {
+                this.projectInfo.list = this.projectInfo.list.concat(res.data.list)
+              }
+              res.data.total = res.data.total > 5000 ? 5000 : res.data.total
+              const pageTotalNum = res.data.total / this.listParams.pageSize
+              const pageResidue = res.data.total % this.listParams.pageSize
+              if (pageResidue > 0) {
+                if (this.listParams.pageNum > pageTotalNum) {
+                  this.vanlistParams.finished = true
+                } else {
+                  this.vanlistParams.finished = false
+                }
+              } else {
+                if (this.listParams.pageNum >= pageTotalNum) {
+                  this.vanlistParams.finished = true
+                } else {
+                  this.vanlistParams.finished = false
+                }
+              }
             } else {
               this.$toast(res.error_msg)
             }
@@ -425,9 +457,14 @@ var vNode = {
                         // 关键词组
                         if(res.data.item && res.data.item.length > 0 && res.data.item.toString() != '') {
                             that.keywords = res.data.item.join('、')
+                            that.keywordsList = res.data.item
                         } else {
                             that.keywords = '--'
                         }
+                        // 地区
+                        if (res.data.area) {
+                          that.area = res.data.area
+                        }
                         // 项目数量 1
                         if (res.data.project_count && res.data.project_count.length > 0) {
                             var pCount = res.data.project_count;

+ 86 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/report_detail_week.js

@@ -9,7 +9,9 @@ var vNode = {
     },
     data: {
         barChart: barChart,
+        keywordsList: [],
         keywords: '',
+        area: {},
         keyTip: '',
         dateVal: '',
         addCountSettings:{
@@ -55,6 +57,10 @@ var vNode = {
         },
         tabActive: '0',
         projectInfo: {},
+        vanlistParams: {
+          loading: false,
+          finished: false
+        },
         listParams: {
           sortType: 0, // 项目明细排序方式
           pageSize: 10,
@@ -62,6 +68,7 @@ var vNode = {
           start: parseInt(utils.getParam('start')),
           end: parseInt(utils.getParam('end'))
         },
+        filterData: {}
     },
     computed: {
         amountWinArr: function () {
@@ -78,6 +85,80 @@ var vNode = {
         this.getAllChartsData()
     },
     methods: {
+      setLinkUrl () {
+        location.href = '/jyapp/big/page/pro_follow_detail'
+      },
+      setBuyerLink (data) {
+        location.href = '/jyapp/big/page/unit_portrayal?entName=' + data.buyer
+      },
+      setWinnerLink (id) {
+        location.href = '/jyapp/big/page/ent_portrait?eId=' + id
+      },
+      // 设置排序方式
+      setsortType (data) {
+        this.sortType = data
+      },
+      showLoading: function () {
+        return this.$toast.loading({
+          duration: 0,
+          forbidClick: true,
+          message: 'loading...',
+        })
+      },
+      // 查询项目明细
+      confirm (data) {
+        this.filterData = data
+        const params = {
+          ...this.listParams,
+          ...data
+        }
+        this.getProjectInfo(params)
+      },
+      onListLoad: function () {
+        this.listParams.pageNum++
+        this.vanlistParams.loading = true
+        this.confirm(this.filterData)
+      },
+      getProjectInfo: function (params) {
+        const loading = this.showLoading()
+        $.ajax({
+          type: 'POST',
+          url: '/bigmember/report/projectInfo',
+          data: JSON.stringify(params),
+          contentType: 'application/json',
+          success: function(res) {
+            this.vanlistParams.loading = false
+            if (res && res.error_code === 0 && res.data) {
+              if (this.listParams.pageNum === 1) {
+                this.projectInfo = res.data
+              } else {
+                this.projectInfo.list = this.projectInfo.list.concat(res.data.list)
+              }
+              res.data.total = res.data.total > 5000 ? 5000 : res.data.total
+              const pageTotalNum = res.data.total / this.listParams.pageSize
+              const pageResidue = res.data.total % this.listParams.pageSize
+              if (pageResidue > 0) {
+                if (this.listParams.pageNum > pageTotalNum) {
+                  this.vanlistParams.finished = true
+                } else {
+                  this.vanlistParams.finished = false
+                }
+              } else {
+                if (this.listParams.pageNum >= pageTotalNum) {
+                  this.vanlistParams.finished = true
+                } else {
+                  this.vanlistParams.finished = false
+                }
+              }
+            } else {
+              this.$toast(res.error_msg)
+            }
+            if(loading) {
+              loading.clear()
+            }
+          }.bind(this)
+        })
+      },
         formatterWinData: function(data) {
             data.forEach(function(v,i){
                 v.parent = v.count / data[0].count*100 + "%";
@@ -129,9 +210,14 @@ var vNode = {
                     if(res.error_code == 0) {
                         if(res.data.item && res.data.item.length > 0 && res.data.item.toString() != '') {
                             that.keywords = res.data.item.join('、')
+                            that.keywordsList = res.data.item
                         } else {
                             that.keywords = '--'
                         }
+                        // 地区
+                        if (res.data.area) {
+                          that.area = res.data.area
+                        }
                         // 本周新增招标项目数量
                         if(res.data.zhao_matchitem && res.data.zhao_matchitem.length > 0){
                             that.curWeekAddBirds = that.formatterWinData(res.data.zhao_matchitem)

+ 385 - 5
src/jfw/modules/app/src/web/templates/big-member/page_report_detail_month.html

@@ -109,7 +109,387 @@
             <p>项目预算/项目规模:少量预算金额、中标金额未公开或为空的项目,在计算项目总预算、总规模时不参与统计;</p>
             <p>项目重复统计:一个招标项目可能同属于多个关键词组,故各关键词组的数据统计之和可能大于整体市场的统计。</p>
         </div>
-        <van-tabs v-model:active="tabActive" sticky>
+        <div v-if="utils.getParam('type')!='member'">
+          <!-- 项目数量 1-->
+          <div class="chart count_chart" v-if="isShow.show_1">
+            <div class="chart_title">项目数量</div>
+            <div>
+                <ve-histogram
+                    height="284px"
+                    :init-options="initRendererSvg"
+                    :data="pCountData"
+                    :after-config="barConfig1 "
+                    :extend="barChart.chartExtend">
+                </ve-histogram>
+            </div>
+            <div v-if="!getStatus" @click="goCollect('month_project_count')" class="mark-words">分析市场年度项目增长趋势!<em class="mark-icon-right"></em></div>
+          </div>
+          <!-- 项目规模 2-->
+          <div class="chart scale_chart" v-if="isShow.show_2">
+              <div class="chart_title">项目规模</div>
+              <div>
+                  <ve-histogram
+                      height="284px"
+                      :init-options="initRendererSvg"
+                      :data="pScaleData"
+                      :after-config="barConfig2"
+                      :settings="settings1"
+                      :extend="barChart.chartExtend">
+                  </ve-histogram>
+              </div>
+              <div v-if="!getStatus" @click="goCollect('month_project_bidamount_count')" class="mark-words">分析年度市场容量,挖掘销售商机!<em class="mark-icon-right"></em></div>
+          </div>
+          <!-- 本月项目数量 3-->
+          <div class="chart scale_chart" v-if="isShow.show_3">
+              <div class="chart_title">本月项目数量</div>
+              <div class="progress-bar-container">
+                  <div class="progress-bar-item" v-for="(item,index) in showCurMonthCount" :key="index">
+                      <div class="item-label">
+                          <span class="item-name">${item.item}</span>
+                          <span class="item-count" :class="[index < 3 && !getStatus ? 'shade': '']">${item.count}个</span>
+                      </div>
+                      <div class="item-progress">
+                          <span class="item-progress-count" :class="index > 2 ? 'blue-progress' : 'yellow-progress'" :style="{width: item.parent}"></span>
+                      </div>
+                  </div>
+              </div>
+              <div v-if="curMonthCount.list.length > 5 && !curMonthCount.showAll">
+                  <div class="more">
+                      <span @click="curMonthCount.showAll = true">查看更多</span>
+                  </div>
+              </div>
+              <div v-if="!getStatus" @click="goCollect('month_project_matchitem_count')" class="mark-words">分析行业市场容量,为企业决策提供数据支持!<em class="mark-icon-right"></em></div>
+          </div>
+          <!-- 本月项目规模 4-->
+          <div class="chart month_scale_chart" v-if="isShow.show_4">
+              <div class="chart_title">本月项目规模</div>
+              <div>
+                  <ve-histogram
+                      height="284px"
+                      :init-options="initRendererSvg"
+                      :data="curMonthScaleData"
+                      :settings="settings2"
+                      :after-config="monthScaleConfig"
+                      :extend="barChart2.chartExtend">
+                  </ve-histogram>
+              </div>
+              <div v-if="!getStatus" @click="goCollect('month_project_matchitem_bidamount')" class="mark-words">对比项目规模、环比增长率,分析市场变化趋势!<em class="mark-icon-right"></em></div>
+          </div>
+          <!-- 本月项目数量分布 5-->
+          <div class="chart month_scale_chart" v-if="isShow.show_5">
+              <div class="chart_title">本月项目数量分布</div>
+              <div>
+                  <ve-map
+                      height="400px"
+                      :init-options="initRendererSvg"
+                      :data="mapCountData"
+                      :after-config="mapCountConfig"
+                      :settings="mapSettings.chartSettings"
+                      :extend="mapSettings.chartExtend">
+                  </ve-map>
+              </div>
+              <div v-if="!getStatus" @click="goCollect('month_project_area_count')" class="mark-words">直观获取各省市场区域热度,帮助挖掘和拓展商机!<em class="mark-icon-right"></em></div>
+          </div>
+          <!-- 本月项目规模分布 6-->
+          <div class="chart" v-if="isShow.show_6">
+              <div class="chart_title">本月项目规模分布</div>
+              <div>
+                  <ve-map
+                      height="400px"
+                      :init-options="initRendererSvg"
+                      :data="mapScaleData"
+                      :after-config="mapScaleConfig"
+                      :settings="mapSettings2.chartSettings"
+                      :extend="mapSettings2.chartExtend">
+                  </ve-map>
+              </div>
+              <div v-if="!getStatus" @click="goCollect('month_project_area_bidamount')" class="mark-words">全面分析各省市场容量,帮助拓展渠道和市场!<em class="mark-icon-right"></em></div>
+          </div>
+          <!-- 本月项目数量TOP10采购行业 7-->
+          <div class="chart rank" v-if="isShow.show_7 && getStatus"> 
+              <!-- <div class="chart_title">本月项目数量TOP10采购行业</div> -->
+              <div class="chart_title">本月项目数量采购行业排行榜</div>
+              <div class="warm_">注:采购行业为“其它”不参与排名</div>
+              <div class="progress-bar-container">
+                  <div class="progress-bar-item" v-for="(item,index) in showCurMonthCountTop" :key="index">
+                      <div class="item-label">
+                          <span class="item-name">${item.buyerclass}</span>
+                          <span class="item-count">${item.count}个</span>
+                      </div>
+                      <div class="item-progress">
+                          <span class="item-progress-count" :class="index > 2 ? 'blue-progress' : 'yellow-progress'" :style="{width: item.parent}"></span>
+                      </div>
+                  </div>
+              </div>
+              <div v-if="curMonthCountTop.list.length > 5 && !curMonthCountTop.showAll">
+                  <div class="more">
+                      <!-- <span @click="curMonthCountTop.showAll = true">查看更多</span> -->
+                      <span @click="goTable('curMonthCountTop')">查看全部</span>
+                  </div>
+              </div>
+          </div>
+          <div v-if="!getStatus" >
+            <!-- <p class="example-title">本月项目数量TOP10采购行业</p> -->
+            <p class="example-title">本月项目数量采购行业排行榜</p>
+            <div class="vip_component" style="height:9.92rem;background:url('/common-module/collection/image/report/1.png') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_1" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/1-1.png'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月项目规模TOP10采购行业 8-->
+          <div class="chart rank" v-if="isShow.show_8  && getStatus">
+              <!-- <div class="chart_title">本月项目规模TOP10采购行业</div> -->
+              <div class="chart_title">本月项目规模采购行业排行榜</div>
+              <div class="warm_">注:采购行业为“其它”不参与排名</div>
+              <div class="progress-bar-container">
+                  <div class="progress-bar-item" v-for="(item,index) in showCurMonthScaleTop" :key="index">
+                      <div class="item-label">
+                          <span class="item-name">${item.buyerclass}</span>
+                          <span class="item-count">${item.bidamount}万元</span>
+                      </div>
+                      <div class="item-progress">
+                          <span class="item-progress-count" :class="index > 2 ? 'blue-progress' : 'yellow-progress'" :style="{width: item.parent}"></span>
+                      </div>
+                  </div>
+              </div>
+              <div v-if="curMonthScaleTop.list.length > 5 && !curMonthScaleTop.showAll">
+                  <div class="more">
+                      <!-- <span @click="curMonthScaleTop.showAll = true">查看更多</span> -->
+                      <span @click="goTable('curMonthScaleTop')">查看全部</span>
+                  </div>
+              </div>
+          </div>
+          <div v-if="!getStatus">
+            <!-- <p class="example-title">本月项目规模TOP10采购行业</p> -->
+            <p class="example-title">本月项目规模采购行业排行榜</p>
+            <div class="vip_component" style="height:9.92rem;background:url('/common-module/collection/image/report/2.png') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_2" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/2-1.png'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月项目平均规模TOP10采购行业 9-->
+          <div class="chart rank" v-if="isShow.show_9  && getStatus">
+              <!-- <div class="chart_title">本月项目平均规模TOP10采购行业</div> -->
+              <div class="chart_title">本月项目平均规模采购行业排行榜</div>
+              <div class="warm_">注:采购行业为“其它”不参与排名</div>
+              <div class="progress-bar-container">
+                  <div class="progress-bar-item" v-for="(item,index) in showAverageScaleTop" :key="index">
+                      <div class="item-label">
+                          <span class="item-name">${item.buyerclass}</span>
+                          <span class="item-count">${item.average}万元</span>
+                      </div>
+                      <div class="item-progress">
+                          <span class="item-progress-count" :class="index > 2 ? 'blue-progress' : 'yellow-progress'" :style="{width: item.parent}"></span>
+                      </div>
+                  </div>
+              </div>
+              <div v-if="averageScaleTop.list.length > 5 && !averageScaleTop.showAll">
+                  <div class="more">
+                      <!-- <span @click="averageScaleTop.showAll = true">查看更多</span> -->
+                      <span @click="goTable('averageScaleTop')">查看全部</span>
+                  </div>
+              </div>
+          </div>
+          <div v-if="!getStatus">
+            <!-- <p class="example-title">本月项目平均规模TOP10采购行业</p> -->
+            <p class="example-title">本月项目平均规模采购行业排行榜</p>
+            <div class="vip_component" style="height:9.92rem;background:url('/common-module/collection/image/report/3.png') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_3" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/3-1.png'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月中标企业注册地分布 10-->
+          <div class="chart" v-if="isShow.show_10  && getStatus">
+              <div class="chart_title">本月中标企业注册地分布</div>
+              <div>
+                  <ve-map
+                      ref="chartRegCount"
+                      :init-options="initRendererSvg"
+                      height="400px"
+                      :data="mapRegionData"
+                      :after-config="mapRegCountConfig"
+                      :settings="mapSettings3.chartSettings"
+                      :extend="mapSettings3.chartExtend">
+                  </ve-map>
+              </div>
+          </div>
+          <div v-if="!getStatus">
+            <p class="example-title">本月中标企业注册地分布</p>
+            <div class="vip_component" style="height:9.8rem;background:url('/common-module/collection/image/report/4.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_4" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/4-1.png?v={{Msg "seo" "version"}}'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月中标企业注册资本分布 11-->
+          <div class="chart rank" v-if="isShow.show_11  && getStatus">
+              <div class="chart_title">本月中标企业注册资本分布</div>
+              <div class="progress-bar-container">
+                  <div class="progress-bar-item" v-for="(item,index) in regCapitalTop.list" :key="index">
+                      <div class="item-label">
+                          <span class="item-name">${item.range}</span>
+                          <span class="item-count">${item.count}个</span>
+                      </div>
+                      <div class="item-progress">
+                          <span class="item-progress-count blue-progress" :style="{width: item.parent}"></span>
+                      </div>
+                  </div>
+              </div>
+          </div>
+          <div v-if="!getStatus">
+            <p class="example-title">本月中标企业注册资本分布</p>
+            <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/report/5.png') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_5" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/5-1.png'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月中标企业中标项目数量分布 12-->
+          <div class="chart month_scale_chart" v-if="isShow.show_12  && getStatus">
+              <div class="chart_title">本月中标企业中标项目数量分布</div>
+              <div>
+                  <ve-histogram
+                      height="284px"
+                      :init-options="initRendererSvg"
+                      :data="curWinEntCountData"
+                      :settings="settings3"
+                      :extend="barChart3.chartExtend">
+                  </ve-histogram>
+              </div>
+          </div>
+          <div v-if="!getStatus">
+            <p class="example-title">本月中标企业中标项目数量分布</p>
+            <div class="vip_component" style="height:10.24rem;background:url('/common-module/collection/image/report/6.png') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_6" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/6-1.png'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月采购单位排行榜 13-->
+          <div class="chart rank" v-if="isShow.show_13  && getStatus">
+              <div class="chart_title">本月采购单位排行榜</div>
+              <div class="progress-bar-container">
+                  <div class="progress-bar-item" v-for="(item,index) in showBuyerTop" :key="index">
+                      <div class="item-label">
+                          <span class="item-name">${item.buyer}</span>
+                          <span class="item-count">${item.count}个</span>
+                      </div>
+                      <div class="item-progress">
+                          <span class="item-progress-count" :class="index > 2 ? 'blue-progress' : 'yellow-progress'" :style="{width: item.parent}"></span>
+                      </div>
+                  </div>
+              </div>
+              <div v-if="buyerTop.list.length > 5 && !buyerTop.showAll">
+                  <div class="more">
+                      <span @click="buyerTop.showAll = true">查看更多</span>
+                  </div>
+              </div>
+          </div>
+          <div v-if="!getStatus">
+            <p class="example-title">本月采购单位排行榜</p>
+            <div class="vip_component" style="height:9.76rem;background:url('/common-module/collection/image/report/7.png') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_7" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/7-1.png'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月中标企业排行榜 14-->
+          <div class="chart rank" v-if="isShow.show_14  && getStatus">
+              <div class="chart_title">本月中标企业排行榜</div>
+              <div>
+                  <div class="current-list" v-for="(item,index) in showEntWinTop">
+                      <div class="win-name">
+                          <span v-if="index === 0" class="index first-index">${index + 1}</span>
+                          <span v-else-if="index === 1" class="index second-index">${index + 1}</span>
+                          <span v-else-if="index === 2" class="index third-index">${index + 1}</span>
+                          <span v-else class="index ">${index + 1}</span>
+                          <span class="title">${item.winner || '--'}</span>
+                      </div>
+                      <div class="item-double">
+                          <div class="item-single">
+                              <span class="i-label">企业类型</span>
+                              <span class="i-value">${item.type || '--'}</span>
+                          </div>
+                      </div>
+                      <div class="item-double">
+                          <div class="item-single">
+                              <span class="i-label">企业注册地</span>
+                              <span class="i-value">${item.area || '--'} ${item.city}</span>
+                          </div>
+                          <div class="item-single">
+                              <span class="i-label">注册资本(万元)</span>
+                              <span class="i-value">${item.capital || '--'}</span>
+                          </div>
+                      </div>
+                      <div class="item-double">
+                          <div class="item-single">
+                              <span class="i-label">注册时间</span>
+                              <span class="i-value">${item.establish_date || '--'}</span>
+                          </div>
+                          <div class="item-single">
+                              <span class="i-label">中标项目数量</span>
+                              <span class="i-value">${item.project_count || '--'}</span>
+                          </div>
+                      </div>
+                  </div>
+              </div>
+              <div v-if="curMonthEntWin.list.length > 3 && !curMonthEntWin.showAll">
+                  <div class="more">
+                      <span @click="curMonthEntWin.showAll = true">查看更多</span>
+                  </div>
+              </div>
+          </div>
+          <div v-if="!getStatus">
+            <p class="example-title">本月中标企业排行榜</p>
+            <div class="vip_component" style="height:10.4rem;background:url('/common-module/collection/image/report/8.png') no-repeat;background-size:100% 100%">
+              <month-report-example :status="bigStatus" :power="power" type="item_8" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/8-1.png'></month-report-example>
+            </div>
+          </div>
+          <!-- 本月项目规模排行榜 15-->
+          <div class="chart rank" v-if="isShow.show_15  && getStatus">
+              <div class="chart_title">本月项目规模排行榜</div>
+              <div>
+                  <div class="current-list" v-for="(item,index) in showScaleWin">
+                      <div class="win-name">
+                          <span v-if="index === 0" class="index first-index">${index + 1}</span>
+                          <span v-else-if="index === 1" class="index second-index">${index + 1}</span>
+                          <span v-else-if="index === 2" class="index third-index">${index + 1}</span>
+                          <span v-else class="index ">${index + 1}</span>
+                          <span class="title">${item.projectname}</span>
+                      </div>
+                      <div class="item-double">
+                          <div class="item-single">
+                              <span class="i-label">所在地</span>
+                              <span class="i-value">${item.area || '--'} ${item.city}</span>
+                          </div>
+                      </div>
+                      <div class="item-double">
+                          <div class="item-single">
+                              <span class="i-label">项目规模(万元)</span>
+                              <span>${item.bidamount || '--'}</span>
+                          </div>
+                          <div class="item-single">
+                              <span class="i-label">成交时间</span>
+                              <span class="i-value">${item.jgtime}</span>
+                          </div>
+                      </div>
+                      <div class="item-double">
+                          <div class="item-single">
+                              <span class="i-label">采购单位</span>
+                              <span class="i-value">${item.buyer}</span>
+                          </div>
+                      </div>
+                      <div class="item-double">
+                          <div class="item-single">
+                              <span class="i-label">中标单位</span>
+                              <span class="i-value">${item.winner}</span>
+                          </div>
+                      </div>
+                  </div>
+              </div>
+              <div v-if="curMonthScaleWin.list.length > 3 && !curMonthScaleWin.showAll">
+                  <div class="more">
+                      <span @click="curMonthScaleWin.showAll = true">查看更多</span>
+                  </div>
+              </div>
+            </div>
+            <div v-if="!getStatus">
+              <p class="example-title">本月项目规模排行榜</p>
+              <div class="vip_component" style="height:13.04rem;background:url('/common-module/collection/image/report/9.png') no-repeat;background-size:100% 100%">
+                <month-report-example :status="bigStatus" :power="power" type="item_9" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/report/9-1.png'></month-report-example>
+              </div>
+            </div>
+        </div>
+        <van-tabs v-else v-model:active="tabActive" sticky>
           <van-tab name="0" title="本月分析">
             <!-- 项目数量 1-->
             <div class="chart count_chart" v-if="isShow.show_1">
@@ -491,15 +871,15 @@
             </div>
           </van-tab>
           <van-tab name="1" title="本月项目明细">
-            <filter-component keyformat="phrases" @confirm="confirm"></filter-component>
+            <filter-component :arealist="area" :keyphraseslist="keywordsList" keyformat="phrases" @confirm="confirm"></filter-component>
             <div class="project-detail-list" v-if="Object.keys(projectInfo).length != 0 && projectInfo.list.length > 0">
               <project-header @setsort-type="setsortType"></project-header>
-              <project-cell :item="item" v-for="item in projectInfo.list" :key="item.id">
-                <div class="update-time" v-if="item.lastTime" >
+              <project-cell @set-winner-link="setWinnerLink" @set-link-url="setLinkUrl" :item="item" v-for="item in projectInfo.list" :key="item.id">
+                <div class="update-time">
                   <div class="update-time-label">
                     本月项目更新时间:
                   </div>
-                  <div class="update-time-content">2023-5-13</div>
+                  <div class="update-time-content">${item.lastTime?utils.dateFromNow(item.lastTime*1000):'--'}</div>
                 </div>
               </project-cell>
             </div>

+ 15 - 8
src/jfw/modules/app/src/web/templates/big-member/page_report_detail_week.html

@@ -325,17 +325,24 @@
             </div>
           </van-tab>
           <van-tab name="1" title="本周项目明细">
-            <filter-component keyformat="phrases" @confirm="confirm"></filter-component>
+            <filter-component :arealist="area" :keyphraseslist="keywordsList" keyformat="phrases" @confirm="confirm"></filter-component>
             <div class="project-detail-list" v-if="Object.keys(projectInfo).length != 0 && projectInfo.list.length > 0">
               <project-header @setsort-type="setsortType"></project-header>
-              <project-cell :item="item" v-for="item in projectInfo.list" :key="item.id">
-                <div class="update-time" v-if="item.lastTime" >
-                  <div class="update-time-label">
-                    本月项目更新时间:
+              <van-list
+                v-model:loading="vanlistParams.loading"
+                :finished="vanlistParams.finished"
+                finished-text="没有更多了"
+                @load="onListLoad"
+              >
+                <project-cell @set-winner-link="setWinnerLink" @set-buyer-link="setBuyerLink(item)" @set-link-url="setLinkUrl" :item="item" v-for="item in projectInfo.list" :key="item.id">
+                  <div class="update-time">
+                    <div class="update-time-label">
+                      本周项目更新时间:
+                    </div>
+                    <div class="update-time-content">${item.lastTime?utils.dateFromNow(item.lastTime*1000):'--'}</div>
                   </div>
-                  <div class="update-time-content">2023-5-13</div>
-                </div>
-              </project-cell>
+                </project-cell>
+              </van-list>
             </div>
             <empty v-else>暂无数据</empty>
           </van-tab>

+ 1 - 1
src/web/staticres/common-module/collection/css/index.css

@@ -709,11 +709,11 @@
     flex-basis: auto !important;
     width: 2.5rem;
     min-height: .8rem;
-    height: .8rem;
     background: #f5f6f7;
     border: 0;
     padding: 0;
     color: inherit;
+    word-break: break-all;
 }
 
 .unitType .van-tabs__nav--complete {

+ 41 - 7
src/web/staticres/common-module/collection/js/area-city-mobile.js

@@ -109,9 +109,31 @@ var areaCityMobileComponent = {
   },
   methods: {
     // 整理原始数据
-    getData: function () {
+    getData: function (newData) {
       var provinceListMapExp = this.provinceListMapExp
-
+      // 从父组件传进来的地区
+      if (newData) {
+        let newProList = []
+        Object.keys(provinceListMapExp).forEach((v, i) => {
+          provinceListMapExp[v].forEach(m => {
+            Object.keys(newData).forEach(n => {
+              if (m == n) {
+                newProList.push({
+                  [v]: [n]
+                })
+              }
+            })
+          })
+        })
+        // 合并并去重数组中的元素
+        const result = newProList.reduce((acc, cur) => {
+          Object.keys(cur).forEach(key => {
+            acc[key] = Array.from(new Set([...(acc[key] || []), ...cur[key]]))
+          })
+          return acc
+        }, {})
+        provinceListMapExp = result
+      }
       // 整理数据得到indexListMap(),同时获得indexList
       const provinceListMap = {}
       const indexList = []
@@ -126,7 +148,7 @@ var areaCityMobileComponent = {
           }
 
           if (pName !== '全国') {
-            const cities = this.getCitiesFromJSONMap(pName)
+            let cities = this.getCitiesFromJSONMap(pName)
             // console.log(pName, cities)
             // 筛选掉直辖市和特别行政区(台湾省也不不需要展开)
             if (cities.ProRemark === '省份' || cities.ProRemark === '自治区') {
@@ -135,10 +157,22 @@ var areaCityMobileComponent = {
               } else {
                 cities.city.forEach(c => {
                   // 将市区重组成一个新的对象
-                  return provinceExp.children.push({
-                    name: c.name,
-                    type: false
-                  })
+                  if(newData) {
+                    const apiArea = newData[pName]
+                    apiArea.forEach(v => {
+                      if (v == c.name) {
+                        return provinceExp.children.push({
+                          name: c.name,
+                          type: false
+                        })
+                      }
+                    })
+                  } else {
+                    return provinceExp.children.push({
+                      name: c.name,
+                      type: false
+                    })
+                  }
                 })
               }
             } else {

+ 45 - 12
src/web/staticres/common-module/collection/js/keyword-mobile.js

@@ -78,6 +78,18 @@ var keywordComponent = {
       type: String,
       default: 'all'
     },
+    keyphraseslist: {
+      type: Array,
+      default: [
+        // "智慧社区",
+        // "智慧园区",
+        // "智慧城市",
+        // "智慧楼宇",
+        // "数字乡村",
+        // "智慧工地",
+        // "智慧生活"
+      ]
+    },
     useKeyCard: {
       type: Boolean,
       default: false
@@ -141,12 +153,30 @@ var keywordComponent = {
           } else {
             _this.isvip = true
           }
-          _this.$nextTick(
-            _this.getData()
-          )
+          console.log(_this.keyphraseslist)
+          if (_this.keyphraseslist.length > 0) {
+            _this.tablist = _this.initKeyList(_this.keyphraseslist)
+          } else {
+            _this.$nextTick(
+              _this.getData()
+            )
+          }
         }
       })
     },
+    initKeyList (arr) {
+      const result = arr.map(item => ({
+        [item]: [
+          {
+            name: item,
+            text: item,
+            type: false
+          }
+        ],
+        type: false
+      }))
+      return result
+    },
     // 获取关键词数据
     getData: function(){
       const _this = this
@@ -311,15 +341,7 @@ var keywordComponent = {
           }
           if (_this.keyformat == 'phrases') {
             // 只显示关键词组
-            _this.tablist.forEach((v) => {
-              const ownKey = {
-                name: Object.keys(v)[0],
-                text: Object.keys(v)[0],
-                type: false
-              }
-              v[Object.keys(v)[0]] = []
-              v[Object.keys(v)[0]].push(ownKey)
-            })
+            _this.setInitList(_this.tablist)
           }
           _this.checkNoKey()
         },
@@ -328,6 +350,17 @@ var keywordComponent = {
         }
       })
     },
+    setInitList: function(arr) {
+      arr.forEach((v) => {
+        const ownKey = {
+          name: Object.keys(v)[0],
+          text: Object.keys(v)[0],
+          type: false
+        }
+        v[Object.keys(v)[0]] = []
+        v[Object.keys(v)[0]].push(ownKey)
+      })
+    },
     setState: function() {
       var _this = this
       let bool = true

+ 12 - 10
src/web/staticres/common-module/filter/css/project_cell.css

@@ -16,12 +16,6 @@
 }
 .project-cell .project-cell-title{
   width: 100%;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  display: -webkit-box;
-  -webkit-line-clamp: 2;
-  -webkit-box-orient: vertical;
-  word-break: break-all;
   font-size: 16px;
   line-height: 24px;
   color: #171826;
@@ -56,23 +50,31 @@
 }
 .project-cell .project-unit .van-cell .van-cell__title .unit_title{
   display: flex;
-  align-items: center;
 }
-.project-cell .project-unit .van-cell .van-cell__title span:first-child{
+.project-cell .project-unit .van-cell .van-cell__title .unit_title>span:first-child{
   font-size: .24rem;
   color: #9B9CA3;
 }
-.project-cell .project-unit .van-cell .van-cell__title span:last-child{
+.project-cell .project-unit .van-cell .van-cell__title .unit_title>span:last-child{
   display: block;
   width: 4.6rem;
   font-size: .26rem;
   color: #171826;
 }
+.project-cell .project-unit .van-cell .van-cell__title .unit_title .winnerText, .project-cell .project-unit .van-cell .van-cell__title .unit_title .buyerText{
+  text-decoration: underline;
+}
 .van-cell__label{
   display: flex;
   align-items: center;
 }
-.project-cell .project-update-time{
+.van-cell__label>span:first-child {
+  color: #9B9CA3;
+}
+.van-cell__label>span:last-child {
+  color: #171826;
+}
+.project-cell .project-update-time .update-time{
   display: flex;
   align-items: center;
   padding-left: .16rem;

+ 22 - 1
src/web/staticres/common-module/filter/js/filter_limit.js

@@ -40,6 +40,7 @@ var filterTemp = `
           <keyword-component
               ref="keywordSelector"
               protype="bigmember"
+              :keyphraseslist="keyphraseslist"
               :keyformat="keyformat"
               :use-key-card="true"
               @nokeys="showSetKeyTip"
@@ -128,11 +129,28 @@ var filterComponent = {
     cateComponent: cateComponent
   },
   props: {
-    // phrases: 关键词组,all:所有关键词
+    // phrases: 只显示关键词组,all:显示所有关键词
     keyformat: {
       type: String,
       default: 'all'
     },
+    // 关键词组列表
+    keyphraseslist: {
+      type: Array,
+      default: []
+    },
+    // 区域列表
+    arealist: {
+      type: Object,
+      default: {
+        // "四川": [
+        //   "成都市"
+        // ],
+        // "广东": [
+        //   "深圳市"
+        // ]
+      }
+    },
     title: {
       type: String,
       default: '筛选条件'
@@ -203,6 +221,9 @@ var filterComponent = {
       }
     }
   },
+  mounted () {
+    this.$refs.areaCitySelector.getData(this.arealist)
+  },
   methods: {
     cancel: function (e, key) {
       var dialog = this.filterDialogShow

+ 47 - 8
src/web/staticres/common-module/filter/js/project_cell.js

@@ -1,39 +1,39 @@
 var projectCellTemp = `
 <div class="project-cell">
-  <div class="project-cell-title">
+  <div @click="setLinkUrl(item)" class="project-cell-title ellipsis-2">
     {{ item.name }}
   </div>
   <div class="project-cell-tags">
     <span v-if="item.area">{{ item.area }}</span>
     <span v-if="item.bidStatus">{{ item.bidStatus }}</span>
     <span v-if="item.buyerClass">{{ item.buyerClass }}</span>
-    <span v-if="item.budget&&item.bidAmount">{{ utils.moneyUnit(item.budget || item.bidAmount)}}</span>
+    <span v-if="item.budget||item.bidAmount">{{ utils.moneyUnit(item.bidAmount || item.budget)}}</span>
   </div>
   <div class="project-unit">
-    <van-cell is-link>
+    <van-cell is-link @click="setBuyerLink(item)">
       <template #title>
         <div class="unit_title">
           <span>采购单位:</span>
-          <span class="ellipsis">{{ item.buyer }}</span>
+          <span class="ellipsis buyerText">{{ item.buyer }}</span>
           </div>
       </template>
       <template #label>
         <span>预算金额:</span>
-        <span>{{ utils.moneyUnit(item.budget) || '--' }}</span>
+        <span>{{ setBudget }}</span>
       </template>
     </van-cell>
   </div>
   <div class="project-unit">
-    <van-cell is-link>
+    <van-cell is-link @click="setWinnerLink($event, item)">
       <template #title>
         <div class="unit_title">
           <span>中标单位:</span>
-          <span class="ellipsis">广东省高速公路有限公司深汕西分公司</span>
+          <span v-html="setWinner"></span>
         </div>
       </template>
       <template #label>
         <span>中标金额:</span>
-        <span>{{ utils.moneyUnit(item.bidAmount) || '--' }}</span>
+        <span>{{ setBidAmount }}</span>
       </template>
     </van-cell>
   </div>
@@ -53,10 +53,49 @@ var projectCellComponent = {
       default: {}
     }
   },
+  computed: {
+    setBidAmount () {
+      return this.item.bidAmount ? utils.moneyUnit(this.item.bidAmount) : '--'
+    },
+    setBudget () {
+      return this.item.budget ? utils.moneyUnit(this.item.budget) : '--'
+    },
+    setWinner () {
+      if (this.item.winner) {
+        this.item.winner = this.item.winner.filter(str => str !== '')
+        this.item.winnerId = this.item.winnerId.filter(str => str !== '')
+        if (this.item.winner.length > 0) {
+          this.item.winner.map((v, i) => {
+            this.item.winner[i] = `<span class="winnerText" winnerId="${this.item.winnerId[i]}">${v}</span>`
+          })
+        }
+        return this.item.winner.join('、')
+      } else {
+        return '--'
+      }
+    }
+  },
   data () {
     return {
     }
   },
   methods: {
+    // 点击项目名称跳转到项目详情页
+    setLinkUrl (item) {
+      const params = {
+        sid: item.id
+      }
+      sessionStorage.setItem('bigvip-fid', JSON.stringify(params))
+      this.$emit('set-link-url')
+    },
+    // 点击采购单位到采购单位画像
+    setBuyerLink (item) {
+      this.$emit('set-buyer-link')
+    },
+    // 点击中标单位到企业画像
+    setWinnerLink (e, item) {
+      const winnerId = $(e.target).attr('winnerid')
+      this.$emit('set-winner-link', winnerId)
+    }
   }
 }

+ 1 - 0
src/web/staticres/common-module/public/css/empty.css

@@ -14,6 +14,7 @@
   align-items: center;
   flex-direction: column;
   justify-content: center;
+  margin-top: 0;
 }
 
 .empty-container .empty-main {