瀏覽代碼

投标决策分析结果页、添加loading

TANGSHIZHE 4 年之前
父節點
當前提交
5884088de2

+ 36 - 16
src/components/forecast/ForLayout.vue

@@ -7,7 +7,7 @@
           <slot name="proname"></slot>
         </div>
         <div class="bidfor_search" v-if="search">
-           <SearchInput @submit="getRecovery" :onlySelect="searchConfig.select" :ajaxType="searchConfig.type"></SearchInput>
+           <SearchInput :placeholder="placeholder.text" @submit="getRecovery" :onlySelect="searchConfig.select" :ajaxType="searchConfig.type"></SearchInput>
         </div>
         <slot name="bidImg"></slot>
       </div>
@@ -30,6 +30,14 @@ export default {
       type: Boolean,
       default: true
     },
+    placeholder: {
+      type: Object,
+      default () {
+        return {
+          text: ''
+        }
+      }
+    },
     searchConfig: {
       type: Object,
       default () {
@@ -70,8 +78,13 @@ export default {
         getFollowAssociationList({ entName: data.text }).then(res => {
           if (res && res.error_msg === '' && res.data) {
             // 企业情报
-            this.$store.commit('forcast/setEntFollowSearch', res.data)
-            this.$store.commit('forcast/setType', this.type)
+            if (data.events === 'select') {
+              // 联想跳转
+              this.$router.push(`/entportrayal/${data.data.entId}`)
+            } else {
+              this.$store.commit('forcast/setType', this.type)
+              this.$store.commit('forcast/setEntFollowSearch', res.data)
+            }
           }
         })
       } else if (this.searchConfig.type === 'bidfor') {
@@ -80,22 +93,15 @@ export default {
           console.log(res)
           if (res.error_code === 0) {
             // 中标企业预测
-            if (data.events === 'onEnter') {
-              if (data.data) {
-                this.$store.commit('forcast/setList', res.data)
-                this.$store.commit('forcast/setType', this.type)
-              } else {
-                this.$store.commit('forcast/setList', [])
-                this.$store.commit('forcast/setType', this.type)
-              }
-            } else if (data.events === 'select') {
+            this.$store.commit('forcast/setType', this.type)
+            if (data.events === 'select') {
+              // 联想跳转
               const result = [data.data]
               this.$store.commit('forcast/setHistoryList', result)
               this.$router.push(`/bidforlimit/${data.data.s_id}/${data.data.sourceinfoid}`)
             } else {
-              // const result = []
+              // 点击搜索按钮\键盘Enter事件
               this.$store.commit('forcast/setList', res.data)
-              // this.$router.push(`/bidforlimit/${result.data.s_id}/${data.data.sourceinfoid}`)
             }
           }
         })
@@ -105,8 +111,22 @@ export default {
           console.log(res)
           if (res.error_code === 0) {
             // 投标决策分析
-            this.$store.commit('forcast/setType', this.type)
-            this.$store.commit('forcast/setPolicyList', res.data)
+            // 键盘Enter事件
+            // if (data.events === 'onEnter') {
+            //   this.$store.commit('forcast/setPolicyList', res.data)
+            // } else
+            if (data.events === 'select') {
+              // 联想跳转
+              const result = [data.data]
+              this.$store.commit('forcast/setHistoryPolicyList', result)
+              this.$router.push(`/analysis/result/${data.data.s_id}/${data.data.sourceinfoid}`)
+            } else {
+              // 点击搜索按钮
+              // const result = []
+              this.$store.commit('forcast/setType', this.type)
+              this.$store.commit('forcast/setPolicyList', res.data)
+              // this.$router.push(`/bidforlimit/${result.data.s_id}/${data.data.sourceinfoid}`)
+            }
           }
         })
       }

+ 61 - 30
src/components/forecast/ForLimit.vue

@@ -6,7 +6,7 @@
     <div class="limit_main">
       <!-- 采购内容 -->
       <div class="pur_content">
-        <div class="pur_con_label">采购内容:</div>
+        <div class="pur_con_label"><span class="muststar">*</span>采购内容:</div>
         <div class="pur_con_value">
           <div class="con_ipt_complete" v-for="(item, index) in content" :key="index">
             <span class="con_val">{{item}}<span class="con_del" @click="conDel(index)"></span></span>
@@ -15,13 +15,15 @@
             <input type="text" class="con_val" placeholder="请输入采购内容" v-model="unitContent" @change="setPurContent()">
             <span class="con_del"></span>
           </div>
+          <div class="add_div">
+            <span class="add_content" @click="addCon"></span>
+          </div>
         </div>
-        <span class="add_content" @click="addCon"></span>
       </div>
       <!-- 采购单位  项目预算 -->
       <div class="pro_other">
         <div class="pur_company pur_common">
-          <div class="pur_com_label pur_common_label">采购单位:</div>
+          <div class="pur_com_label pur_common_label"><span class="muststar">*</span>采购单位:</div>
           <input type="text" placeholder="请输入采购单位" class="pur_com_ipt" v-model="unitValue" @blur="setBlurEvent" @input="setCompany($event)">
           <div class="select_list" v-if="isShow">
             <ul class="select_ul">
@@ -40,8 +42,8 @@
         ref="areaSelector"
         selectorType="line"
         :singleChoice="true"
-        :initCityMap="backArea">
-        <slot name="header">选择区域:</slot>
+        :initCityMap="baseInfo.area">
+        <div slot="header"><span class="muststar">*</span>选择区域:</div>
       </AreaSelector>
       <!-- 提示 -->
       <div class="limit_tips">请确保以上所有内容的准确性,以免信息不够完善造成预测失败,从而浪费预测额度。</div>
@@ -88,12 +90,13 @@ export default {
   watch: {
     baseInfo (newVal, oldVal) {
       if (newVal) {
-        if (newVal.area && newVal.area !== '') {
-          const p = this.getAreaInfo(newVal.area)
-          this.backArea = p
-        }
+        // if (newVal.area && newVal.area !== '') {
+        //   const p = this.getAreaInfo(newVal.area)
+        //   this.backArea = p
+        // }
         if (newVal.buyerContent && newVal.buyerContent.length !== 0) {
-          this.content = newVal.buyerContent
+          // this.content = newVal.buyerContent
+          this.content = this.getBuyContent(newVal.buyerContent)
         }
         if (newVal.buyer && newVal.buyer !== '') {
           this.unitValue = newVal.buyer
@@ -140,6 +143,17 @@ export default {
       this.unitContent = ''
       this.isAdd = false
     },
+    // 回显采购内容
+    getBuyContent (data) {
+      const arr = []
+      data.forEach(function (item) {
+        item.key.forEach(function (iitem) {
+          console.log(iitem)
+          arr.push(iitem)
+        })
+      })
+      return arr
+    },
     // 添加采购内容
     addCon () {
       this.isAdd = true
@@ -150,11 +164,13 @@ export default {
     },
     // 联想采购单位
     getCompany (com) {
+      console.log(com)
       this.unitValue = com
-      this.isShow = false
     },
     setBlurEvent () {
-      this.isShow = false
+      setTimeout(() => {
+        this.isShow = false
+      }, 300)
     },
     // 采购单位
     setCompany (e) {
@@ -181,7 +197,7 @@ export default {
       })
     },
     startFore () {
-      this.area = this.getCitys()
+      this.area = this.baseInfo.area
       const arr = []
       this.content.forEach(function (item) {
         const conList = {
@@ -211,14 +227,22 @@ export default {
     padding: 32px 40px;
     width: 1200px;
     background: #ffffff;
-    ::v-deep {
-      .s-line .select-list {
-        .country,
-        .city-list .province {
-          display: none;
+    .limit_main{
+      ::v-deep {
+        .s-line .select-list {
+          .country,
+          .city-list .province {
+            display: none;
+          }
+        }
+        .selector-card.s-line .selector-card-header {
+          min-width: 60px;
         }
       }
     }
+    .muststar{
+      color: #f66;
+    }
     input::placeholder{
       font-size: 14px;
       font-weight: 400;
@@ -247,7 +271,7 @@ export default {
       .pur_content{
         margin-top: 23px;
         display: flex;
-        align-items: center;
+        align-items: flex-start;
         .pur_con_label{
           margin-right: 20px;
           height: 24px;
@@ -258,10 +282,10 @@ export default {
           line-height: 24px;
         }
         .pur_con_value{
+          flex: 1;
           display: flex;
-          align-items: center;
+          align-items: flex-start;
           flex-wrap: wrap;
-          height: 36px;
           .con_ipt{
             display: flex;
             align-items: center;
@@ -281,7 +305,7 @@ export default {
           .con_ipt_complete{
             display: flex;
             align-items: center;
-            margin-right: 12px;
+            margin:0 12px 12px 0;
             height: 36px;
             .con_val{
               height: 30px;
@@ -306,20 +330,27 @@ export default {
             }
           }
         }
-        .add_content{
-          margin-left: 20px;
+        .add_div{
           display: flex;
-          width: 20px;
-          height: 20px;
-          background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASqSURBVHgBzVk9TBxXEP5mdjnHkkNIG/mkKyMgAhfBgcZnKZGAKIWFRMq4CDVYSQ/ug4A6UewWS5aLSDmKSDk3nIyLEAmsdLnorNQEOZINu28883bv+PEBd8vffRL33u6+3f12/t7MQMiI/l+eFyWIB4npFgkNgtAjgh67RoQtcaiCpYoYf8JxeeOrT8vIAGpnceHJHz3X3oumiWSmTqaNF1UdUI4R3/9rbLjaxn2tEXv/ajQrIjONkyIvhamkD9gU6VqNrkTbvEPbdsnlpDu3E+RjketE8Qg5GVOxXm/cCjxsleiJBPtX1qZ10VxDYoRlSPAoJqmgDYTgPpFoSqeTyWNQjR3uv/hy6CGyEvxk5flCQ2oiFcnRtIv4JU4BguRZ5Ls6USFZ3By9ee/o9U2Q2NruE50WVR/bumg+Yv4RZwgGviXnvlcG3fqO9fBN1+31Oze2mqx7F9eu7P7uyQE1YkycNTmDOsxPjukLs2UlORglAsGJBE2tdoORky4lB97EOUFANcc84UmqQPpWni0cXnNAxb2ltbvK+IGpVXL4/LT21ipCuD6Nm49N3SLu3ub4Z4v1aw0JflyqFAJgNmU9f1HkDKYlYf7Bv5t5dlB94B2CAYJZjU8FCyNZbS5w8Vog7hkywGxS372q2uvZvbozWz/vVWzSCxH8bXO1u6Gs0lNy/9oYE3+EDEhDkP/A8HXXh+bVXoImvXTF8kWq9jDMaXR4ZPMot+PjL6c/RRtjE/PlY9n/BjRtA1lWglAs7tVUNTdxCpxWxY3nqC0ne3d8m8GuaCeFsIIOAYFKNoqmcax+PWAHqua2Nv/zhIN74SeEotlgweaRqhgdAuFg1UZV74D+ScEOXI46hmAs+M9GNbueEGmeV082j8Ke4Z6MurMcg2Mdkkm5aAJq3BgdjlANccuYWpp+nBRjDoZOethZhRkn0h3YRLkxCXySGL6RbnQIOJZ8Oq3q1kfrNtNScQQdAgrgbV1Tr39YED/1B0AfOgSBJMIiR+vqMJJIUDCKDoFAy1QDuzJvjA2XvaMAeTXyYVw2Itdn4Uw1WjVuSZiJZcmPlJSCl4kgwFQ6LduPJxju5JIaQPA1i2spGJ8HaNd7rxeSdR5QJ+jrUYGXonrzIrIiqc4yb5kc+oLet0bqbZHGTqKF81watEe0yppCBlgwz5pThs6/c9Jsry69AwRNiuKcv6DboH6Ju7CwY6pVYon0tF+zv6l0YC/29Wii6m6NRT9fhD0aOQ7c47QFsnS4mdS0N9NfWmu0PvTLJhydTyGVFOzywIcV7c9sjg/dOLymaTajJd8da+joNK9f8FtWmzyWnNpc0k3wKVz5f20eNVt3bPut/9e1RV0xna5c1q+cP600vUq7sKCGnuz9qtaN8aGZI9ef9MDeUuUuad1MaWlgRJPytL2mEsfRiLY1LMZNps/xTrm/D5OJoMH3bYTniOibfadrVgkKXEXANSdU85kw0nwu2v2AAh4Bc6++ZFQllW/cqVJ7pWGt2qQfmIngYaJqN7caEm0VPsbK0qvXucVWiO3dlhH9pUpR/71Q1L7JABwV1N0K2Otjb1kirO3ddfXSp5Yx+aQkA94CrA4PHUTAUL8AAAAASUVORK5CYII=) no-repeat;
-          background-size: contain;
-          cursor: pointer;
+          justify-content: center;
+          align-items: center;
+          height: 36px;
+          .add_content{
+            margin-left: 20px;
+            display: flex;
+            width: 20px;
+            height: 20px;
+            background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASqSURBVHgBzVk9TBxXEP5mdjnHkkNIG/mkKyMgAhfBgcZnKZGAKIWFRMq4CDVYSQ/ug4A6UewWS5aLSDmKSDk3nIyLEAmsdLnorNQEOZINu28883bv+PEBd8vffRL33u6+3f12/t7MQMiI/l+eFyWIB4npFgkNgtAjgh67RoQtcaiCpYoYf8JxeeOrT8vIAGpnceHJHz3X3oumiWSmTqaNF1UdUI4R3/9rbLjaxn2tEXv/ajQrIjONkyIvhamkD9gU6VqNrkTbvEPbdsnlpDu3E+RjketE8Qg5GVOxXm/cCjxsleiJBPtX1qZ10VxDYoRlSPAoJqmgDYTgPpFoSqeTyWNQjR3uv/hy6CGyEvxk5flCQ2oiFcnRtIv4JU4BguRZ5Ls6USFZ3By9ee/o9U2Q2NruE50WVR/bumg+Yv4RZwgGviXnvlcG3fqO9fBN1+31Oze2mqx7F9eu7P7uyQE1YkycNTmDOsxPjukLs2UlORglAsGJBE2tdoORky4lB97EOUFANcc84UmqQPpWni0cXnNAxb2ltbvK+IGpVXL4/LT21ipCuD6Nm49N3SLu3ub4Z4v1aw0JflyqFAJgNmU9f1HkDKYlYf7Bv5t5dlB94B2CAYJZjU8FCyNZbS5w8Vog7hkywGxS372q2uvZvbozWz/vVWzSCxH8bXO1u6Gs0lNy/9oYE3+EDEhDkP/A8HXXh+bVXoImvXTF8kWq9jDMaXR4ZPMot+PjL6c/RRtjE/PlY9n/BjRtA1lWglAs7tVUNTdxCpxWxY3nqC0ne3d8m8GuaCeFsIIOAYFKNoqmcax+PWAHqua2Nv/zhIN74SeEotlgweaRqhgdAuFg1UZV74D+ScEOXI46hmAs+M9GNbueEGmeV082j8Ke4Z6MurMcg2Mdkkm5aAJq3BgdjlANccuYWpp+nBRjDoZOethZhRkn0h3YRLkxCXySGL6RbnQIOJZ8Oq3q1kfrNtNScQQdAgrgbV1Tr39YED/1B0AfOgSBJMIiR+vqMJJIUDCKDoFAy1QDuzJvjA2XvaMAeTXyYVw2Itdn4Uw1WjVuSZiJZcmPlJSCl4kgwFQ6LduPJxju5JIaQPA1i2spGJ8HaNd7rxeSdR5QJ+jrUYGXonrzIrIiqc4yb5kc+oLet0bqbZHGTqKF81watEe0yppCBlgwz5pThs6/c9Jsry69AwRNiuKcv6DboH6Ju7CwY6pVYon0tF+zv6l0YC/29Wii6m6NRT9fhD0aOQ7c47QFsnS4mdS0N9NfWmu0PvTLJhydTyGVFOzywIcV7c9sjg/dOLymaTajJd8da+joNK9f8FtWmzyWnNpc0k3wKVz5f20eNVt3bPut/9e1RV0xna5c1q+cP600vUq7sKCGnuz9qtaN8aGZI9ef9MDeUuUuad1MaWlgRJPytL2mEsfRiLY1LMZNps/xTrm/D5OJoMH3bYTniOibfadrVgkKXEXANSdU85kw0nwu2v2AAh4Bc6++ZFQllW/cqVJ7pWGt2qQfmIngYaJqN7caEm0VPsbK0qvXucVWiO3dlhH9pUpR/71Q1L7JABwV1N0K2Otjb1kirO3ddfXSp5Yx+aQkA94CrA4PHUTAUL8AAAAASUVORK5CYII=) no-repeat;
+            background-size: contain;
+            cursor: pointer;
+            line-height: 36px;
+          }
         }
       }
       .pro_other{
         display: flex;
         align-items: center;
-        margin-top: 20px;
+        margin-top: 8px;
         .pur_common{
           display: flex;
           align-items: center;

+ 21 - 17
src/components/forecast/ForeCast.vue

@@ -3,7 +3,7 @@
     <div class="listData_title">{{ title }}</div>
     <!-- 中标企业预测-->
     <ul class="listData_ul" v-if="type=='bidfor'">
-      <li class="list_li" v-for="(item, index) in listState.list.slice((listState.pageNum - 1) * listState.pageSize, listState.pageNum * listState.pageSize)" :key="index" @click="goBidForcast(item.s_id, item.sourceinfoid)">
+      <li class="list_li" v-for="(item, index) in listState.list.slice((listState.pageNum - 1) * listState.pageSize, listState.pageNum * listState.pageSize)" :key="index" @click="goBidForcast(item)">
         <div class="list_name">{{item.projectname}}</div>
         <div class="list_unit">
           <div class="pur_unit">
@@ -22,7 +22,7 @@
       <li class="list_li_result list_li" v-for="(item, index) in listState.list.slice((listState.pageNum - 1)* listState.pageSize, listState.pageNum * listState.pageSize)" :key="index" @click="goEntPor(item.entId)">
         <div class="list_li_left">
           <div class="result_chart">
-            <el-progress type="circle" :show-text="true"  :color="activeColor(index)" :width="44" :stroke-width="4" :percentage="item.score"></el-progress>
+            <el-progress type="circle" :show-text="true"  :color="activeColor(index)" :width="44" :stroke-width="4" :percentage="item.weight"></el-progress>
             <div class="bidrete_text">中标概率</div>
           </div>
         </div>
@@ -47,7 +47,7 @@
     </ul>
     <!-- 投标决策分析  -->
     <ul class="listData_ul" v-if="type=='bidpolicy'">
-      <li class="list_li" v-for="(item, index) in listState.list.slice((listState.pageNum - 1) * listState.pageSize, listState.pageNum * listState.pageSize)" :key="index" @click="goForcast(item.s_id, item.sourceinfoid)">
+      <li class="list_li" v-for="(item, index) in listState.list.slice((listState.pageNum - 1) * listState.pageSize, listState.pageNum * listState.pageSize)" :key="index" @click="goForcast(item)">
         <div class="list_name">{{item.projectname}}</div>
         <div class="list_unit">
           <div class="pur_unit">
@@ -63,7 +63,7 @@
     </ul>
     <!-- 企业情报 -->
     <ul class="listData_ul" v-if="type=='entintel'">
-      <li class="list_li" v-for="(item, index) in listState.list" :key="index" @click="goViewEnt(item.s_entId)">
+      <li class="list_li" v-for="(item, index) in listState.list.slice((listState.pageNum - 1) * listState.pageSize, listState.pageNum * listState.pageSize)" :key="index" @click="goViewEnt(item.s_entId)">
         <div class="list_name">{{item.s_entname}}</div>
         <div class="list_unit">
           <div class="pur_unit">
@@ -72,7 +72,7 @@
           </div>
           <div class="pur_unit">
             <span class="unit_label">注册资本:</span>
-            <span class="unit_name entname">{{item.f_capital?moneyUnit(item.f_capital):'--'}}</span>
+            <span class="unit_name entname">{{item.f_capital?moneyUnit(item.f_capital*10000):'--'}}</span>
           </div>
           <div class="pur_unit">
             <span class="unit_label">企业地址:</span>
@@ -212,6 +212,11 @@ export default {
     if (this.type === 'potensimilar') {
       this.potenSimiData(this.potenResult)
     }
+    // 我关注的企业
+    // if (this.type === 'entintel') {
+    //   console.log(this.myDataObj)
+    //   this.entInitData(this.myDataObj)
+    // }
     // 企业搜索
     if (this.type === 'entintelRes') {
       this.entSearchData(this.entSearch)
@@ -286,7 +291,8 @@ export default {
     resInitData (list) {
       if (list && list.length !== 0) {
         list.forEach(function (item) {
-          item.score = Number((item.score * 100).toFixed(0))
+          console.log(item)
+          item.weight = Number((item.weight * 100).toFixed(0))
           if (item.employee_no === '') {
             item.employee_no = '--'
           }
@@ -304,7 +310,8 @@ export default {
       }
     },
     entInitData (obj) {
-      if (obj.list.length !== 0) {
+      if (obj && obj.list.length !== 0) {
+        console.log(obj.total)
         this.listState.list = obj.list
         this.listState.total = obj.total
       } else {
@@ -374,18 +381,15 @@ export default {
         })
       }
     },
-    goBidForcast (id, sid) {
-      this.$router.push(`/bidforlimit/${id}/${sid}`)
-      const result = []
-      this.mydata.forEach(function (item, i) {
-        if (id === item.s_id) {
-          result.push(item)
-        }
-      })
+    goBidForcast (data) {
+      const result = [data]
       this.$store.commit('forcast/setHistoryList', result)
+      this.$router.push(`/bidforlimit/${data.s_id}/${data.sourceinfoid}`)
     },
-    goForcast (id, sid) {
-      this.$router.push(`/analysis/result/${id}/${sid}`)
+    goForcast (data) {
+      const result = [data]
+      this.$store.commit('forcast/setHistoryPolicyList', result)
+      this.$router.push(`/analysis/result/${data.s_id}/${data.sourceinfoid}`)
     },
     goViewEnt (id) {
       this.$router.push(`/entportrayal/${id}`)

+ 1 - 1
src/components/report-data/ProjectTop.vue

@@ -154,7 +154,7 @@ export default {
     width: 100%;
     .pro_list{
       padding: 24px;
-      width: 840px;
+      // width: 840px;
       opacity: 1;
       background: #f5f6f7;
       border-radius: 4px;

+ 1 - 2
src/components/report-data/SelectMonth.vue

@@ -134,8 +134,7 @@ export default {
   display: flex;
   justify-content: flex-start;
   margin: 0 auto;
-  padding: 30px 0 0;
-  width: 840px;
+  padding: 30px 40px 0;
   height: auto;
   border-bottom: 1px solid #ececec;
   .select_label{

+ 3 - 0
src/store/forcast.js

@@ -29,9 +29,12 @@ export default {
     // 投标决策分析
     setPolicyList (state, list) {
       state.policyList = list
+    },
+    setHistoryPolicyList (state, list) {
       state.historyPolicyList = list.concat(state.historyPolicyList)
       localStorage.setItem('bigmember-POLICY_DATA', JSON.stringify(state.historyPolicyList))
     },
+    // 企业情报搜索列表
     setEntFollowSearch (state, list) {
       state.entList = list
     },

+ 1 - 1
src/views/bid-forecast/BidForecast.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="bid-forcast">
-    <forLayOut :searchConfig="{ type: 'bidfor'}">
+    <forLayOut :placeholder="{ text: '输入需要预测的项目名称'}" :searchConfig="{ type: 'bidfor'}">
       <span class="icon_ai" slot="icon"></span>
       <span class="bidfor_text" slot="proname">中标企业预测</span>
       <img class="bidfor_img" src="@/assets/images/item_7.png" alt="" slot="bidImg">

+ 18 - 17
src/views/bid-forecast/BidForecastLimit.vue

@@ -2,7 +2,7 @@
   <div class="bid-forcast-limit">
     <ForLimit :baseInfo="baseInfo" @getLimit="getLimit"></ForLimit>
     <!-- 项目摘要 -->
-    <div class="bid_abstract" v-if="proShow">
+    <div class="bid_abstract" v-if="proShow" v-loading="loading">
       <div class="bid_abs_title">项目摘要</div>
       <div class="bid_abs_content">
         <div class="bid_abs_inforone">
@@ -26,6 +26,7 @@
         </div>
       </div>
     </div>
+    <ForeCast v-loading="loading" type="bidforResult" title="预测项目" :resData="resData" v-if="proShow"></ForeCast>
     <el-dialog
       title="提示信息"
       :visible.sync="isperfect"
@@ -39,13 +40,12 @@
         <el-button type="primary" @click="isperfect = false">确 定</el-button>
       </span>
     </el-dialog>
-    <ForeCast type="bidforResult" title="预测项目" :resData="resData" v-if="proShow"></ForeCast>
   </div>
 </template>
 
 <script>
 import ForLimit from '@/components/forecast/ForLimit.vue'
-import { Dialog, Button } from 'element-ui'
+import { Dialog, Button, Loading } from 'element-ui'
 import { getResultDetail, getProjectInfo, getForWData, getForWStatus, getForWResult } from '@/api/modules'
 import ForeCast from '@/components/forecast/ForeCast'
 export default {
@@ -54,7 +54,8 @@ export default {
     ForLimit,
     ForeCast,
     [Dialog.name]: Dialog,
-    [Button.name]: Button
+    [Button.name]: Button,
+    [Loading.name]: Loading
   },
   data () {
     return {
@@ -64,6 +65,7 @@ export default {
         buyerContent: [],
         budget: 0
       },
+      loading: false,
       // 刚开始隐藏项目摘要和预测项目
       proShow: false,
       baseInfo: {}, // 项目摘要及类似项目分析基础数据(渲染页面及需传给子组件使用)
@@ -87,16 +89,10 @@ export default {
     async getBaseInfo () {
       const data = {
         ptid: this.paramlist.ptid,
-        sourceinfoid: this.paramlist.sid,
-        D: 'detail'
+        sourceinfoid: this.paramlist.sid
       }
       const res = await getProjectInfo(data)
       if (res.error_code === 0 && res.data) {
-        if (res.data.s_subscopeclass) {
-          if (res.data.s_subscopeclass.indexOf('_') > -1) {
-            res.data.s_subscopeclass = res.data.s_subscopeclass.substring(0, res.data.s_subscopeclass.indexOf('_'))
-          }
-        }
         this.baseInfo = res.data
       } else {
         console.log(res.error_code)
@@ -104,13 +100,16 @@ export default {
     },
     // 获取筛选条件
     getLimit (data) {
-      this.getProForWData(data)
-    },
-    async getProForWData (data) {
-      if (Object.keys(data.area).length === 0) {
+      console.log(data)
+      if (Object.keys(data.area).length !== 0 && data.buyerContent.length !== 0 && data.buyer !== '') {
+        this.getProForWData(data)
+      } else {
         this.isperfect = true
-        return
       }
+    },
+    async getProForWData (data) {
+      this.proShow = true
+      this.loading = true
       const getcity = data.area[Object.keys(data.area)[0]]
       let aloneCity = ''
       if (getcity.length !== 0) {
@@ -156,10 +155,12 @@ export default {
                 this.fid = res.data.id
                 this.getProForWResult(res.data.id)
                 clearInterval(timer)
+                this.loading = false
               }
             } else {
               clearInterval(timer)
               this.isperfect = true
+              this.loading = false
             }
           }
         })
@@ -172,7 +173,7 @@ export default {
           this.resquestData = res.data.requestData
           if (res.data.responseData && res.data.responseData.length !== 0) {
             this.resData = res.data.responseData
-            this.proShow = true
+            this.loading = false
           } else {
             this.proShow = false
           }

+ 48 - 5
src/views/bid-policy/AnalysisResult.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="analysis-result">
     <PolicyLimit :baseInfo="baseInfo" @dataList="getLimit"></PolicyLimit>
-    <div class="digest" v-show="proShow">
+    <div class="digest" v-show="proShow" v-loading="loading">
       <div class="digest_head">
         <span class="digest_head_title">项目摘要</span>
-        <div class="digest_head_follow">
+        <div class="digest_head_follow" @click="entFollow()">
           <span :class="follow.classActive"></span>
           <span class="follow_text">{{follow.text}}</span>
         </div>
@@ -56,7 +56,7 @@ import AnalysisChart from '../portrayal/components/AnalysisChart'
 import AnalysisDetailList from '../portrayal/components/AnalysisDetailList'
 import PolicyLimit from './components/PolicyLimit'
 import Empty from '@/components/common/Empty'
-import { Tabs, TabPane } from 'element-ui'
+import { Tabs, TabPane, Loading } from 'element-ui'
 // 该页面需要调用的接口
 import { getFollowInfo, addFollow, cancelFollow, getProjectInfo, getAnalysisResult } from '@/api/modules/' // eslint-disable-line
 export default {
@@ -64,6 +64,7 @@ export default {
   components: {
     [Tabs.name]: Tabs,
     [TabPane.name]: TabPane,
+    [Loading.name]: Loading,
     AnalysisChart,
     PolicyLimit,
     AnalysisDetailList,
@@ -71,9 +72,11 @@ export default {
   },
   data () {
     return {
+      loading: false,
       follow: {
         classActive: 'icon_heart_gray',
-        text: '关注'
+        text: '关注',
+        type: 0
       },
       activeName: '1',
       baseInfo: {}, // 项目摘要及类似项目分析基础数据(渲染页面及需传给子组件使用)
@@ -95,7 +98,6 @@ export default {
   computed: {},
   created () {
     this.getBaseInfo()
-    // this.getResult()
   },
   mounted () {},
   methods: {
@@ -120,6 +122,7 @@ export default {
           console.log(res.data.s_subscopeclass)
         }
         this.baseInfo = res.data
+        this.getEntIsFollow(res.data.infoid)
       } else {
         console.log(res.error_code)
       }
@@ -164,12 +167,51 @@ export default {
         return '请选择行业'
       }
     },
+    // 查看是否已关注项目
+    getEntIsFollow (id) {
+      getFollowInfo({ sid: id }).then(res => {
+        if (!res.data.flag) {
+          this.follow.classActive = 'icon_heart_gray'
+          this.follow.text = '关注'
+          this.follow.type = 0
+        } else {
+          this.follow.classActive = 'icon_heart_red'
+          this.follow.text = '已关注'
+          this.follow.type = 1
+        }
+      })
+    },
+    // 关注项目
+    entFollow () {
+      console.log()
+      if (this.follow.type === 0) {
+        addFollow({ sid: this.baseInfo.infoid }).then(res => {
+          console.log(res)
+          if (res.data) {
+            this.follow.classActive = 'icon_heart_red'
+            this.follow.text = '已关注'
+            this.follow.type = 1
+          }
+        })
+      } else {
+        cancelFollow({ sid: this.baseInfo.infoid }).then(res => {
+          console.log(res)
+          if (res.data && res.data === 'success') {
+            this.follow.classActive = 'icon_heart_gray'
+            this.follow.text = '关注'
+            this.follow.type = 0
+          }
+        })
+      }
+    },
     // 获取筛选条件
     getLimit (data) {
       this.getResult(data)
     },
     // 获取分析结果
     async getResult (item) {
+      this.proShow = true
+      this.loading = true
       const data = {
         appVersion: '',
         area: item.area,
@@ -187,6 +229,7 @@ export default {
       const res = await getAnalysisResult(data)
       if (res.error_code === 0) {
         this.proShow = true
+        this.loading = false
         if (res.data.status === -2) {
           console.log('不展示')
           this.flag.details = false

+ 1 - 1
src/views/bid-policy/BidPolicy.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="bid-policy">
-    <forLayOut :searchConfig="{ type: 'bidpolicy'}">
+    <forLayOut :placeholder="{ text: '输入需要预测的项目名称'}" :searchConfig="{ type: 'bidpolicy'}">
       <span class="icon_toubiao" slot="icon"></span>
       <span class="bidfor_text" slot="proname">投标决策分析</span>
       <img class="bidfor_img" src="@/assets/images/item_5.png" alt="" slot="bidImg">

+ 63 - 25
src/views/bid-policy/components/PolicyLimit.vue

@@ -5,13 +5,13 @@
         <span class="limit_head_name">{{baseInfo.projectname}}</span>
       </div>
       <div class="limit_bot">
-        <div class="btn_bidfor">
+        <div class="btn_bidfor" @click="goBidForUrl">
           <span class="icon_ai"></span>
           <span class="btn_text">中标企业预测</span>
         </div>
         <div class="purcontent">
           <span class="icon_square"></span>
-          <span class="pur_set">采购内容设置</span>
+          <span class="pur_set" @click="setPurContent('采购内容设置')">采购内容设置</span>
         </div>
       </div>
     </div>
@@ -40,8 +40,9 @@
               class="sec_ipt"
               :disabled="moneySec"
               placeholder="请输入金额"
-              @input="getValue"
-              v-model="input">
+              @input="getValueMin"
+              @blur="minBlur"
+              v-model="range.minPrice">
               <i slot="suffix" class="el-input__icon">
                 万元
               </i>
@@ -51,8 +52,9 @@
               class="sec_ipt"
               :disabled="moneySec"
               placeholder="请输入金额"
-              @input="getValue2"
-              v-model="input2">
+              @input="getValueMax"
+              @blur="maxBlur"
+              v-model="range.maxPrice">
               <i slot="suffix" class="el-input__icon">
                 万元
               </i>
@@ -85,8 +87,6 @@ export default {
   },
   data () {
     return {
-      input: '',
-      input2: '',
       backArea: {},
       moneySec: true,
       range: {
@@ -103,6 +103,9 @@ export default {
           const p = this.getAreaInfo(newVal.area)
           this.backArea = p
         }
+        if (!newVal.s_subscopeclass) {
+          newVal.s_subscopeclass = {}
+        }
       }
     }
   },
@@ -136,11 +139,11 @@ export default {
         return { [info.province]: [info.city] }
       }
     },
-    getValue (val) {
-      this.range.minPrice = Number(val)
+    getValueMin (e) {
+      this.range.minPrice = e.replace(/[^\d{1,}\\.\d{1,}|\d{1,}]/g, '').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/\.{2,}/g, '.').replace(/^(\\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
     },
-    getValue2 (val) {
-      this.range.maxPrice = Number(val)
+    getValueMax (e) {
+      this.range.maxPrice = e.replace(/[^\d{1,}\\.\d{1,}|\d{1,}]/g, '').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/\.{2,}/g, '.').replace(/^(\\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
     },
     getSection (num) {
       console.log(num)
@@ -155,24 +158,59 @@ export default {
       }
       console.log(this.range.minPrice, this.range.maxPrice)
     },
+    // 价格区间大小翻转判断
+    minAndMaxSort () {
+      const min = this.range.minPrice
+      const max = this.range.maxPrice
+      if (Number(max) < Number(min) && max !== '' && min !== '') {
+        this.range.minPrice = max
+        this.range.maxPrice = min
+      }
+    },
+    minBlur () {
+      this.minAndMaxSort()
+    },
+    maxBlur () {
+      this.minAndMaxSort()
+    },
+    // 采购内容设置
+    setPurContent (title) {
+      console.log(title)
+      this.$router.push({
+        path: '/subscribe/scope',
+        query: {
+          title: title
+        }
+      })
+    },
+    // 中标企业预测跳转
+    goBidForUrl (id) {
+      this.$router.push(`/bidforlimit/${this.baseInfo.id}/${this.baseInfo.infoid}`)
+    },
     // 开始分析
     StartAnsisy () {
       // 处理行业数据
       const instudys = this.$refs.industrySel.getSelected()
-      let ComArr = []
-      for (var item in instudys) {
-        let inStr = ''
-        let inArr = ''
-        console.log(item)
-        instudys[item].forEach(function (data) {
-          console.log(data)
-          inStr = item + '_' + data
-          inArr += inStr + ','
-        })
-        console.log(inArr)
-        ComArr += inArr
+      console.log(instudys)
+      let industryStr = ''
+      if (JSON.stringify(instudys) === '{}') {
+        industryStr = ''
+      } else {
+        let ComArr = []
+        for (var item in instudys) {
+          let inStr = ''
+          let inArr = ''
+          console.log(item)
+          instudys[item].forEach(function (data) {
+            console.log(data)
+            inStr = item + '_' + data
+            inArr += inStr + ','
+          })
+          console.log(inArr)
+          ComArr += inArr
+        }
+        industryStr = ComArr.split(',').slice(0, ComArr.split(',').length - 1) + ''
       }
-      const industryStr = ComArr.split(',').slice(0, ComArr.split(',').length - 1) + ''
       // 处理采购内容数据
       const scopeArr = this.$refs.scopeSelector.getState()
       const newScopearr = []

+ 14 - 4
src/views/ent-intel/EntIntel.vue

@@ -1,11 +1,11 @@
 <template>
   <div class="ent-intel">
-    <forLayOut :searchConfig="{ type: 'follow'}">
+    <forLayOut :placeholder="{ text:'输入企业名称'}" :searchConfig="{ type: 'follow'}">
       <span class="icon_ent" slot="icon"></span>
       <span class="bidfor_text" slot="proname">企业情报</span>
       <img class="bidfor_img" src="@/assets/images/item_2.png" alt="" slot="bidImg">
       <template v-slot:main>
-        <ForeCast type="entintel" v-if="type==0"  title="我关注的企业" slot="main" :myDataObj="forcast"></ForeCast>
+        <ForeCast type="entintel" v-if="type==0"  title="我关注的企业" slot="main" :myDataObj="myDataObj"></ForeCast>
         <ForeCast type="entintelRes" v-if="type==1" title="近似企业" slot="main" :entSearch="forcastSer"></ForeCast>
       </template>
     </forLayOut>
@@ -23,9 +23,17 @@ export default {
     ForeCast,
     forLayOut
   },
+  data () {
+    return {
+      myDataObj: {
+        list: [],
+        total: 0
+      }
+    }
+  },
   computed: {
     ...mapState({
-      forcast: state => state.forcast.entObject,
+      // forcast: state => state.forcast.entObject,
       forcastSer: state => state.forcast.entList,
       type: state => state.forcast.type
     })
@@ -39,7 +47,9 @@ export default {
       getFollowtList().then(res => {
         console.log(res)
         if (res.error_code === 0 && res.data) {
-          this.$store.commit('forcast/setEntFollowList', res.data)
+          this.myDataObj.list = res.data.list
+          this.myDataObj.total = res.data.total
+          // this.$store.commit('forcast/setEntFollowList', res.data)
         }
       })
     }

+ 1 - 1
src/views/potential-for/PotenTial.vue

@@ -4,7 +4,7 @@
       <span class="icon_qianzai" slot="icon"></span>
       <span class="bidfor_text" slot="proname">潜在项目预测</span>
       <img class="bidfor_img" src="@/assets/images/item_4.png" alt="" slot="bidImg">
-      <ForeCast type="potential" :potenObj="potenObj" title="潜在项目" slot="main"></ForeCast>
+      <ForeCast type="potential" :potenObj="potenObj" title="潜在项目预测" slot="main"></ForeCast>
     </forLayOut>
   </div>
 </template>

+ 95 - 97
src/views/reportData/pageMonth.vue

@@ -1,106 +1,104 @@
 <template>
-  <Layout>
-    <div class="page_week">
-      <div class="page_week_main">
-        <!-- 选择月报时间 -->
-        <div class="week_time">
-          <SelectMonth @selectYm="selectYear"></SelectMonth>
-        </div>
-        <!-- 数据报告-周报 -->
-        <div class="dataReport">
-          <div class="dataReport_main">
-            <div class="data_r_head">
-              <div class="data_r_title">数据报告-月报</div>
-              <div class="data_r_week">({{dateFormatter(start * 1000, 'MM月dd日')}}-{{dateFormatter(end * 1000, 'MM月dd日')}})</div>
-            </div>
-            <div class="data_keys">
-              <span class="keys_label">订阅关键词组:</span>
-              <span class="list_key">{{keywordsGroup}}</span>
-            </div>
-            <div class="data_line"></div>
-            <div class="data_item">
-              <p class="item_handle">数据来源:已为您推送的招标项目信息</p>
-              <p class="item_handle">项目预算/项目规模:少量预算金额、中标金额未公开或为空的项目,将通过剑鱼标讯预测模型进行填补,可能会与实际项目预算、项目规模略有差距;</p>
-              <p class="item_handle">项目重复统计:一个招标项目可能同属于多个关键词组,故各关键词组的数据统计之和可能大于整体市场的统计。</p>
-            </div>
-          </div>
-        </div>
-        <div class="echartsView">
-          <!-- 项目数量 -->
-          <div class="chart" v-if="pCount.show">
-            <div class="chart_title">项目数量</div>
-            <BarLineChart :datas="pCount.data" :options="pCount.options"></BarLineChart>
-          </div>
-          <!-- 项目规模 -->
-          <div class="chart" v-if="pScale.show">
-            <div class="chart_title">项目规模</div>
-            <BarLineChart :datas="pScale.data" :options="pScale.options"></BarLineChart>
-          </div>
-          <!-- 本月项目数量 -->
-          <div class="chart" v-if="curMonthCount.show">
-            <div class="chart_title">本月项目数量</div>
-            <DuoToneChart :datas="curMonthCount.data"></DuoToneChart>
-          </div>
-          <!-- 本月项目规模 -->
-          <div class="chart" v-if="curMonthScale.show">
-            <div class="chart_title">本月项目规模</div>
-            <BarLineChart :datas="curMonthScale.data" :options="curMonthScale.options"></BarLineChart>
-          </div>
-          <!-- 本月项目数量分布 -->
-          <div class="chart" v-if="curMonthCountArea.show">
-            <div class="chart_title">本月项目数量分布</div>
-            <MapChart :datas="curMonthCountArea.data" :options="curMonthCountArea.options"></MapChart>
-          </div>
-          <!-- 本月项目规模分布 -->
-          <div class="chart" v-if="curMonthScaleArea.show">
-            <div class="chart_title">本月项目规模分布</div>
-            <MapChart :datas="curMonthScaleArea.data" :options="curMonthScaleArea.options"></MapChart>
-          </div>
-          <!-- 本月项目数量TOP10采购行业 7-->
-          <div class="chart" v-if="countTop.show">
-            <div class="chart_title">本月项目数量TOP10采购行业</div>
-            <DuoToneChart :datas="countTop.data"></DuoToneChart>
-          </div>
-          <!-- 本月项目规模TOP10采购行业 8-->
-          <div class="chart" v-if="scaleTop.show">
-            <div class="chart_title">本月项目规模TOP10采购行业</div>
-            <DuoToneChart :datas="scaleTop.data"></DuoToneChart>
-          </div>
-          <!-- 本月项目平均规模TOP10采购行业 9-->
-          <div class="chart" v-if="averageTop.show">
-            <div class="chart_title">本月项目平均规模TOP10采购行业</div>
-            <DuoToneChart :datas="averageTop.data"></DuoToneChart>
-          </div>
-          <!-- 本月中标企业注册地分布 10-->
-          <div class="chart" v-if="curMonthRegArea.show">
-            <div class="chart_title">本月中标企业注册地分布</div>
-            <MapChart :datas="curMonthRegArea.data" :options="curMonthRegArea.options"></MapChart>
-          </div>
-          <!-- 本月中标企业注册资本分布 11-->
-          <div class="chart" v-if="capitalTop.show">
-            <div class="chart_title">本月中标企业注册资本分布</div>
-            <DuoToneChart :datas="capitalTop.data"></DuoToneChart>
-          </div>
-          <!-- 本月中标企业中标项目数量分布 12-->
-          <div class="chart" v-if="curMonthBidCount.show">
-            <div class="chart_title">本月中标企业中标项目数量分布</div>
-            <BarLineChart :datas="curMonthBidCount.data" :options="curMonthBidCount.options"></BarLineChart>
-          </div>
-          <!-- 本月采购单位排行榜 13-->
-          <div class="chart" v-if="unitTop.show">
-            <div class="chart_title">本月采购单位排行榜</div>
-            <DuoToneChart :datas="unitTop.data"></DuoToneChart>
+  <Layout class="page_week">
+    <div class="page_week_main">
+      <!-- 选择月报时间 -->
+      <div class="week_time">
+        <SelectMonth @selectYm="selectYear"></SelectMonth>
+      </div>
+      <!-- 数据报告-周报 -->
+      <div class="dataReport">
+        <div class="dataReport_main">
+          <div class="data_r_head">
+            <div class="data_r_title">数据报告-月报</div>
+            <div class="data_r_week">({{dateFormatter(start * 1000, 'MM月dd日')}}-{{dateFormatter(end * 1000, 'MM月dd日')}})</div>
           </div>
-          <!-- 本月中标企业排行榜 14 -->
-          <div class="chart" v-if="bidEntTop.show">
-            <ProjectTop type="winner" title="本月中标企业排行榜" :data="bidEntTop.data"></ProjectTop>
+          <div class="data_keys">
+            <span class="keys_label">订阅关键词组:</span>
+            <span class="list_key">{{keywordsGroup}}</span>
           </div>
-          <!-- 本月项目规模排行榜 15 -->
-          <div class="chart" v-if="curScaleTop.show">
-            <ProjectTop type="bidamount" title="本月项目规模排行榜" :data="curScaleTop.data"></ProjectTop>
+          <div class="data_line"></div>
+          <div class="data_item">
+            <p class="item_handle">数据来源:已为您推送的招标项目信息</p>
+            <p class="item_handle">项目预算/项目规模:少量预算金额、中标金额未公开或为空的项目,将通过剑鱼标讯预测模型进行填补,可能会与实际项目预算、项目规模略有差距;</p>
+            <p class="item_handle">项目重复统计:一个招标项目可能同属于多个关键词组,故各关键词组的数据统计之和可能大于整体市场的统计。</p>
           </div>
         </div>
       </div>
+      <div class="echartsView">
+        <!-- 项目数量 -->
+        <div class="chart" v-if="pCount.show">
+          <div class="chart_title">项目数量</div>
+          <BarLineChart :datas="pCount.data" :options="pCount.options"></BarLineChart>
+        </div>
+        <!-- 项目规模 -->
+        <div class="chart" v-if="pScale.show">
+          <div class="chart_title">项目规模</div>
+          <BarLineChart :datas="pScale.data" :options="pScale.options"></BarLineChart>
+        </div>
+        <!-- 本月项目数量 -->
+        <div class="chart" v-if="curMonthCount.show">
+          <div class="chart_title">本月项目数量</div>
+          <DuoToneChart :datas="curMonthCount.data"></DuoToneChart>
+        </div>
+        <!-- 本月项目规模 -->
+        <div class="chart" v-if="curMonthScale.show">
+          <div class="chart_title">本月项目规模</div>
+          <BarLineChart :datas="curMonthScale.data" :options="curMonthScale.options"></BarLineChart>
+        </div>
+        <!-- 本月项目数量分布 -->
+        <div class="chart" v-if="curMonthCountArea.show">
+          <div class="chart_title">本月项目数量分布</div>
+          <MapChart :datas="curMonthCountArea.data" :options="curMonthCountArea.options"></MapChart>
+        </div>
+        <!-- 本月项目规模分布 -->
+        <div class="chart" v-if="curMonthScaleArea.show">
+          <div class="chart_title">本月项目规模分布</div>
+          <MapChart :datas="curMonthScaleArea.data" :options="curMonthScaleArea.options"></MapChart>
+        </div>
+        <!-- 本月项目数量TOP10采购行业 7-->
+        <div class="chart" v-if="countTop.show">
+          <div class="chart_title">本月项目数量TOP10采购行业</div>
+          <DuoToneChart :datas="countTop.data"></DuoToneChart>
+        </div>
+        <!-- 本月项目规模TOP10采购行业 8-->
+        <div class="chart" v-if="scaleTop.show">
+          <div class="chart_title">本月项目规模TOP10采购行业</div>
+          <DuoToneChart :datas="scaleTop.data"></DuoToneChart>
+        </div>
+        <!-- 本月项目平均规模TOP10采购行业 9-->
+        <div class="chart" v-if="averageTop.show">
+          <div class="chart_title">本月项目平均规模TOP10采购行业</div>
+          <DuoToneChart :datas="averageTop.data"></DuoToneChart>
+        </div>
+        <!-- 本月中标企业注册地分布 10-->
+        <div class="chart" v-if="curMonthRegArea.show">
+          <div class="chart_title">本月中标企业注册地分布</div>
+          <MapChart :datas="curMonthRegArea.data" :options="curMonthRegArea.options"></MapChart>
+        </div>
+        <!-- 本月中标企业注册资本分布 11-->
+        <div class="chart" v-if="capitalTop.show">
+          <div class="chart_title">本月中标企业注册资本分布</div>
+          <DuoToneChart :datas="capitalTop.data"></DuoToneChart>
+        </div>
+        <!-- 本月中标企业中标项目数量分布 12-->
+        <div class="chart" v-if="curMonthBidCount.show">
+          <div class="chart_title">本月中标企业中标项目数量分布</div>
+          <BarLineChart :datas="curMonthBidCount.data" :options="curMonthBidCount.options"></BarLineChart>
+        </div>
+        <!-- 本月采购单位排行榜 13-->
+        <div class="chart" v-if="unitTop.show">
+          <div class="chart_title">本月采购单位排行榜</div>
+          <DuoToneChart :datas="unitTop.data"></DuoToneChart>
+        </div>
+        <!-- 本月中标企业排行榜 14 -->
+        <div class="chart" v-if="bidEntTop.show">
+          <ProjectTop type="winner" title="本月中标企业排行榜" :data="bidEntTop.data"></ProjectTop>
+        </div>
+        <!-- 本月项目规模排行榜 15 -->
+        <div class="chart" v-if="curScaleTop.show">
+          <ProjectTop type="bidamount" title="本月项目规模排行榜" :data="curScaleTop.data"></ProjectTop>
+        </div>
+      </div>
     </div>
   </Layout>
 </template>

+ 9 - 12
src/views/reportData/pageWeek.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="page_week">
+  <Layout class="page_week">
     <div class="page_week_main">
       <!-- 选择周报时间 -->
       <div class="week_time">
@@ -84,12 +84,13 @@
       </div>
     </div>
     <div class="page_week_artical"></div>
-  </div>
+  </Layout>
 </template>
 
 <script>
 
 import SelectMonth from '@/components/report-data/SelectMonth.vue'
+import Layout from '@/components/common/ContentLayout'
 import CompanyDetail from '@/components/report-data/CompanyDetail.vue'
 import ProjectTop from '@/components/report-data/ProjectTop.vue'
 import { getReportDetail, getReportIndex } from '@/api/modules'
@@ -105,7 +106,8 @@ export default {
     ProjectTop,
     DuoToneChart,
     BarLineChart,
-    Empty
+    Empty,
+    Layout
   },
   data () {
     return {
@@ -419,8 +421,6 @@ export default {
     margin: 32px auto;
     display: flex;
     justify-content: space-between;
-    width: 1200px;
-    height: auto;
     .chart-title{
       padding: 32px 0 16px;
       font-size: 18px;
@@ -429,11 +429,9 @@ export default {
       font-family: 'Microsoft YaHei, Microsoft YaHei-Regular';
     }
     .page_week_main{
-      width: 920px;
-      height: auto;
       .week_time{
         padding-bottom: 24px;
-        width: 920px;
+        // width: 920px;
         min-height: 349px;
         opacity: 1;
         background: #ffffff;
@@ -443,15 +441,14 @@ export default {
           overflow: hidden;
         }
         .select_report{
+          padding: 0 40px;
           margin: 24px auto;
           display: flex;
-          justify-content: space-between;
+          // justify-content: space-between;
           align-content: space-between;
           flex-wrap: wrap;
-          width: 840px;
-          height: 210px;
           .week_report{
-            margin-bottom: 16px;
+            margin:0 16px 16px 0;
             padding: 0 16px;
             width: 412px;
             opacity: 1;