Преглед на файлове

周报月报修改、中标预测次数

TANGSHIZHE преди 4 години
родител
ревизия
a1983ff7af

+ 10 - 0
src/api/modules/forecast.js

@@ -110,3 +110,13 @@ export function getfollowCheck (data) {
     data: data
   })
 }
+
+// AI中标预测历史记录
+export function getBidAiused (data) {
+  data = qs.stringify(data)
+  return request({
+    url: '/use/aiused_history',
+    method: 'post',
+    data: data
+  })
+}

+ 1 - 0
src/components/forecast/ForLayout.vue

@@ -9,6 +9,7 @@
         <div class="bidfor_search" v-if="search">
            <SearchInput :placeholder="placeholder.text" @submit="getRecovery" :onlySelect="searchConfig.select" :ajaxType="searchConfig.type"></SearchInput>
         </div>
+        <slot name="bidfre"></slot>
         <slot name="bidImg"></slot>
       </div>
     </div>

+ 5 - 13
src/components/forecast/ForLimit.vue

@@ -49,7 +49,7 @@
       <div class="limit_tips">请确保以上所有内容的准确性,以免信息不够完善造成预测失败,从而浪费预测额度。</div>
       <!-- 预测按钮 -->
       <div class="forcast_btn">
-        <button class="start_btn" @click="startFore">开始预测</button>
+        <button class="start_btn" @click="startFore" :disabled="isClick">开始预测</button>
       </div>
     </div>
   </div>
@@ -60,7 +60,7 @@ import AreaSelector from '@/components/selector/AreaSelector.vue'
 import { getBidAssociation } from '@/api/modules/'
 import { moneyUnit } from '@/utils'
 export default {
-  props: ['baseInfo'],
+  props: ['baseInfo', 'setDisabled'],
   name: 'forlimit',
   components: {
     AreaSelector
@@ -69,6 +69,7 @@ export default {
     return {
       content: [],
       area: {},
+      isClick: false,
       isAdd: true,
       isShow: false,
       unitContent: '',
@@ -197,19 +198,10 @@ export default {
       })
     },
     startFore () {
+      this.isClick = true
       this.area = this.baseInfo.area
-      const arr = []
-      this.content.forEach(function (item) {
-        const conList = {
-          key: [item],
-          appendkey: [],
-          notkey: []
-        }
-        arr.push(conList)
-      })
-      console.log(arr)
       const limitparams = {
-        buyerContent: arr,
+        buyerContent: this.content,
         buyer: this.unitValue,
         budget: Number(this.unitBudget),
         area: this.area

+ 16 - 7
src/components/forecast/ForeCast.vue

@@ -213,10 +213,10 @@ export default {
       this.potenSimiData(this.potenResult)
     }
     // 我关注的企业
-    // if (this.type === 'entintel') {
-    //   console.log(this.myDataObj)
-    //   this.entInitData(this.myDataObj)
-    // }
+    if (this.type === 'entintel') {
+      console.log(this.myDataObj)
+      this.entInitData(this.myDataObj)
+    }
     // 企业搜索
     if (this.type === 'entintelRes') {
       this.entSearchData(this.entSearch)
@@ -272,7 +272,7 @@ export default {
     moneyUnit,
     initData (list, type) {
       if (list.length !== 0) {
-        this.listState.list = list
+        this.listState.list = this.unique(list)
         this.listState.total = list.length
       } else {
         this.listState.list = []
@@ -281,7 +281,7 @@ export default {
     },
     initPolicyData (list, type) {
       if (list && list.length !== 0) {
-        this.listState.list = list
+        this.listState.list = this.unique(list)
         this.listState.total = list.length
       } else {
         this.listState.list = []
@@ -310,6 +310,7 @@ export default {
       }
     },
     entInitData (obj) {
+      console.log(obj)
       if (obj && obj.list.length !== 0) {
         console.log(obj.total)
         this.listState.list = obj.list
@@ -395,7 +396,10 @@ export default {
       this.$router.push(`/entportrayal/${id}`)
     },
     goEntPor (id) {
-      this.$router.push(`/entportrayal/${id}`)
+      const routeUrl = this.$router.resolve({
+        path: `/entportrayal/${id}`
+      })
+      return window.open(routeUrl.href, '_blank')
     },
     goViewDetail (id) {
       this.$router.push({
@@ -418,6 +422,11 @@ export default {
         }
       })
     },
+    // 数组对象去重
+    unique (arr) {
+      const res = new Map()
+      return arr.filter((arr) => !res.has(arr.s_id) && res.set(arr.s_id, 1))
+    },
     onPageChange (p) {
       this.listState.pageNum = p
     }

+ 26 - 3
src/components/report-data/SelectMonth.vue

@@ -8,7 +8,7 @@
         </div>
         <ul class="week_many">
           <li class="option_week" v-for="(item, index) in listWeek" :key="index">
-            <span class="list_span" v-for="(data, i) in item" :class='{active:i==isActive&&index==isIndexActive}' :key="i" @click="getWeek(index, i, data)">{{data}}月</span>
+            <span class="list_span" v-for="(data, i) in item" :class='{active:i==isActive&&index==isIndexActive, getlastmonth:i==lastIndex}' :key="i" @click="getWeek(index, i, data)">{{data}}月</span>
           </li>
         </ul>
         <div class="putaway" @click="getManyTimes()" v-if="isMany">
@@ -29,6 +29,16 @@ export default {
   components: {
     [Icon.name]: name
   },
+  props: {
+    getTypeTime: {
+      type: Object,
+      default () {
+        return {
+          judgeTime: ''
+        }
+      }
+    }
+  },
   data () {
     return {
       listYear: [],
@@ -40,7 +50,8 @@ export default {
       btnText: '更多',
       iconClass: 'el-icon-arrow-down',
       week_starttime: '', // 第一个周报的时间
-      month_starttime: '' // 第一个月报的时间
+      month_starttime: '', // 第一个月报的时间
+      lastIndex: 0
     }
   },
   created () {
@@ -77,7 +88,19 @@ export default {
         var weeks = a
         aloneWeek.push(weeks + '')
       }
-      this.isActive = aloneWeek.length - 1
+      if (this.getTypeTime.judgeTime === 'month') {
+        this.isActive = aloneWeek.length - 2
+      } else {
+        this.isActive = aloneWeek.length - 1
+      }
+      // 月报不需要展示当月,加class隐藏
+      const _this = this
+      aloneWeek.forEach(function (time, i) {
+        console.log(time, nowweek)
+        if (nowweek === time) {
+          _this.lastIndex = i
+        }
+      })
       this.listWeek.push(aloneWeek)
       // 处理年份、添加12月
       const nowyear = dateFormatter(new Date(), 'yyyy')

+ 33 - 0
src/views/bid-forecast/BidForecast.vue

@@ -7,6 +7,7 @@
       <template v-slot:main>
         <ForeCast type="bidfor" :title="type==1?'近似项目':'预测历史'" slot="main" :mydata="forcast"></ForeCast>
       </template>
+      <div class="bid_fre" slot="bidfre">- 您的中标预测次数剩余:{{num}} 次 -</div>
     </forLayOut>
   </div>
 </template>
@@ -14,6 +15,7 @@
 <script>
 import forLayOut from '@/components/forecast/ForLayout.vue'
 import ForeCast from '@/components/forecast/ForeCast.vue'
+import { getBidAiused } from '@/api/modules'
 import { mapState } from 'vuex'
 export default {
   name: 'bid-forcast',
@@ -26,6 +28,23 @@ export default {
       forcast: state => state.forcast.list,
       type: state => state.forcast.type
     })
+  },
+  data () {
+    return {
+      num: 0
+    }
+  },
+  created () {
+    this.getBidNum()
+  },
+  methods: {
+    getBidNum () {
+      getBidAiused().then(res => {
+        if (res.error_code === 0) {
+          this.num = res.data.surplus
+        }
+      })
+    }
   }
 }
 </script>
@@ -42,5 +61,19 @@ export default {
     background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPOSURBVHgB7Zz/ddowEMe/9PX/thPEG5QN6k7QbFB3AtIJAhOETmB3gjQTJBuETGBvQDe4nJD9AsIg6wdCxPq8p+eHsYT9tXR3OtkAiUQikYiWCSKAiD7zJucy5XLFJWtLR9NuV1xexHYymazwnhGicLnl8kh21FxKLjneE+KCHEQ5JlaBS4YvIONyT6elvkih+KRnXNYUjpJLhtghaWdKOg911CKRHFLPdF5Er71GbJAUp6Z4+AlLvMdBJGOaZ+zGMTHwnWOnJxjyAf65Q3ziCIQHzWCIV4H4BGa8KRAnomffwxBvQ6y9OzXiZ8FDbT70YJ896BaXwcxkqHkRiOR8qIAdT1wqvE1ITfjf1v1nUEcMtbA3k+znVs9bbYigsiYzsq36SzIjQwhIxjy25EpbNwZ1a8fzmCMEZH7nei+wbUv0oqFzNleB1kOuz4cN+gE7FuoO9i7CpvxBGMTNyHUHOQlEchxnMKfBYcNaIRzaeZprD8phx1PbW/bg/Q2kZwvBV90BrgJ9gx07w4v2PcoCYZjqDjhHD3poe8k2O3FJO6kMkZQXdujq2AHWApFMbWYwZ9nTTtFjMP8iDF9wCsgu39Pn2ruk2r2yX+fyXd18R37sOq16EDdqm9JQbU+ONztwTTKXtCGwyz+IsUAkU5g3MKfBvmtXM31quxUuCXJLpZY9bamst3tRe9zjgfaCDLGPMEN4mwx2qK47R3+8M1X2L2Afbw3BTw6L5NqWLSbpiL7f7lsd8dKDdL89yAaRDOTmsGcJN07l8rWx1lAj/QiZaLKhsVlNUKggk2O+0QqktUHce1zsjkB17UJobYgP+YjLRhSx5XrC5fvOBD7ABXJLhgn6vFI5sO5ccy4+bJB2VOiGWAY3VtuzdpK2rBhYd0a7gWMDu7z1IapDGYVtdAKJMeoy9qfKXZoNr7qxeUX3gfZzTxntZgFymOHH8PNJiIlkTfbUJHPNJdlRtvXrA23PudyRGYNjn8ELh9yoMKwZ5J0SiSbx2daznZtfPLwqnBoWraLLozS5xlM8vBA7RtnKsQm06MlmHmVMAjUmDy10jEkgq4WAsQjU2HqtsQhkvYw0BoEal5hnDAI5Jf7HIJBTNtNVoAZxszKNe1RcBaoQN87L104CtXfnN+LlBY442yAWSSTkQz2NYUoDR3w/J51DpkE+KV9334XG6vWD4JB8y/Ac5HBkjOkOI5JAGpJAGpJAGpJAGkIJ1OA8NHAkiECBn33uqFznYUGhsC/61uTpbZ6gf25Cchm6gHy/I4N/xDK5eGJjOWTdPZFIJBIXzivEv8lElEfm8AAAAABJRU5ErkJggg==) no-repeat;
     background-size: contain;
   }
+  .bid_fre{
+    position: absolute;
+    top: 220px;
+    width: 100%;
+    font-size: 14px;
+    font-family: Microsoft YaHei, Microsoft YaHei-Regular;
+    font-weight: 400;
+    text-align: CENTER;
+    color: #ffffff;
+    line-height: 22px;
+  }
+  ::v-deep .for_main{
+    margin-top: -60px;
+  }
 }
 </style>

+ 10 - 4
src/views/bid-forecast/BidForecastLimit.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="bid-forcast-limit">
-    <ForLimit :baseInfo="baseInfo" @getLimit="getLimit"></ForLimit>
+    <ForLimit ref="forlimits" :baseInfo="baseInfo" :setDisabled="loading" @getLimit="getLimit"></ForLimit>
     <!-- 项目摘要 -->
     <div class="bid_abstract" v-if="proShow" v-loading="loading">
       <div class="bid_abs_title">项目摘要</div>
@@ -104,6 +104,7 @@ export default {
       if (Object.keys(data.area).length !== 0 && data.buyerContent.length !== 0 && data.buyer !== '') {
         this.getProForWData(data)
       } else {
+        this.$refs.forlimits.isClick = false
         this.isperfect = true
       }
     },
@@ -156,11 +157,14 @@ export default {
                 this.getProForWResult(res.data.id)
                 clearInterval(timer)
                 this.loading = false
+                this.$refs.forlimits.isClick = false
               }
             } else {
               clearInterval(timer)
               this.isperfect = true
               this.loading = false
+              this.proShow = false
+              this.$refs.forlimits.isClick = false
             }
           }
         })
@@ -174,14 +178,16 @@ export default {
           if (res.data.responseData && res.data.responseData.length !== 0) {
             this.resData = res.data.responseData
             this.loading = false
-          } else {
-            this.proShow = false
+            this.$refs.forlimits.isClick = false
           }
         }
       })
     },
     goViewPur (name) {
-      this.$router.push('/unitportrayal/' + name)
+      const routeUrl = this.$router.resolve({
+        path: '/unitportrayal/' + name
+      })
+      return window.open(routeUrl.href, '_blank')
     }
   }
 }

+ 15 - 8
src/views/reportData/pageMonth.vue

@@ -3,7 +3,7 @@
     <div class="page_week_main">
       <!-- 选择月报时间 -->
       <div class="week_time">
-        <SelectMonth @selectYear="selectYear"></SelectMonth>
+        <SelectMonth :getTypeTime="{judgeTime: 'month'}" @selectYm="selectYear"></SelectMonth>
       </div>
       <!-- 数据报告-周报 -->
       <div class="dataReport">
@@ -284,8 +284,7 @@ export default {
         if (res.data) {
           if (res.data.month_firsttime !== 0) {
             console.log(res.data.month_firsttime)
-            this.yearmonth = res.data.month_firsttime.toString().slice(0, 4)
-            this.getReportList(this.yearmonth)
+            this.getReportList(res.data.month_firsttime + '')
           }
         }
       })
@@ -295,8 +294,10 @@ export default {
       this.getReportList(data)
     },
     getReportList (time) {
-      getReportIndex({ ym: time }).then((res) => {
-        console.log(res)
+      console.log(time)
+      const setyear = time.slice(0, 4)
+      const that = this
+      getReportIndex({ ym: setyear }).then((res) => {
         if (res.data && res.data.list && res.data.list.length !== 0) {
           res.data.list.forEach(function (item) {
             if (item.pushtime) {
@@ -304,10 +305,13 @@ export default {
             } else {
               item.pushtime = ''
             }
+            if (dateFormatter(item.startdate * 1000, 'yyyyMM') === time) {
+              console.log(time)
+              that.start = item.startdate
+              that.end = item.enddate
+              that.getDetail(that.start, that.end)
+            }
           })
-          this.getDetail(res.data.list[0].startdate, res.data.list[0].enddate)
-          this.start = res.data.list[0].startdate
-          this.end = res.data.list[0].enddate
         }
       })
     },
@@ -719,6 +723,9 @@ export default {
     .page_week_main{
       width: 920px;
       height: auto;
+      ::v-deep .getlastmonth{
+        display: none;
+      }
       .week_time{
         // padding-bottom: 24px;
         width: 920px;

+ 28 - 8
src/views/reportData/pageWeek.vue

@@ -5,13 +5,13 @@
       <div class="week_time">
         <SelectMonth @selectYm="getSelectTime"></SelectMonth>
         <div class="select_report">
-          <div class="week_report" v-for="(item, index) in weekList" :key="index" @click="selectWeek(index, item.startdate, item.enddate)" :class="{weekActive:index==isWeekIndex}">
+          <div class="week_report" v-for="(item, index) in weekList" :key="index" @click="selectWeek(index, item)" :class="{weekActive:index==isWeekIndex}">
             <div class="week_report_main">
               <div class="report_top">
                 <div class="reoprt_time">
                   <span class="week_text">周</span>
                   <span class="week_days">{{dateFormatter(item.startdate * 1000, 'MM月dd日')}}-{{dateFormatter(item.enddate * 1000, 'MM月dd日')}}</span>
-                  <span class="red_point" v-show="item.unread == 0"></span>
+                  <span class="red_point" v-show="item.unread !== 0" ref="weekitempoint"></span>
                 </div>
                 <div class="repot_gettime">{{item.pushtime}}</div>
               </div>
@@ -177,6 +177,9 @@ export default {
   created () {
     const nowtime = dateFormatter(new Date(), 'yyyyMM')
     this.getReportList(nowtime)
+    if (this.$refs.weekitempoint && this.$refs.weekitempoint.length > 0) {
+      this.$refs.weekitempoint[0].style.display = 'none'
+    }
   },
   methods: {
     dateFormatter,
@@ -191,6 +194,7 @@ export default {
             } else {
               item.pushtime = ''
             }
+            item.unread = 1
           })
           this.weekList = res.data.list
           this.getDetail(res.data.list[0].startdate, res.data.list[0].enddate)
@@ -208,11 +212,15 @@ export default {
       this.getReportList(data)
     },
     // 选择周报
-    selectWeek (index, start, end) {
+    selectWeek (index, item) {
+      if (this.$refs.weekitempoint && this.$refs.weekitempoint.length > 0) {
+        this.$refs.weekitempoint[index].style.display = 'none'
+      }
       this.isWeekIndex = index
-      this.start = start
-      this.end = end
-      this.getDetail(start, end)
+      this.clickindex = index
+      this.start = item.startdate
+      this.end = item.enddate
+      this.getDetail(item.startdate, item.enddate)
     },
     // 周报详情
     getDetail (start, end) {
@@ -228,19 +236,29 @@ export default {
           if (res.data.zhao_matchitem && res.data.zhao_matchitem.length > 0) {
             this.newDrawCount.show = true
             this.newDrawCount.data = this.formatProgressData(res.data.zhao_matchitem)
+          } else {
+            this.newDrawCount.show = false
           }
           // 本周新增招标项目预算
           if (res.data.budget && res.data.budget.length > 0) {
+            this.newBudget.show = true
             this.formatNewBudget(res.data.budget)
+          } else {
+            this.newBudget.show = false
           }
           // 本周新增开标项目数量
           if (res.data.zhong_matchitem && res.data.zhong_matchitem.length > 0) {
             this.newOpenCount.show = true
             this.newOpenCount.data = this.formatProgressData(res.data.zhong_matchitem)
+          } else {
+            this.newOpenCount.show = false
           }
           // 本周新增招标项目规模
           if (res.data.bidamount && res.data.bidamount.length > 0) {
+            this.newScale.show = true
             this.formatNewScaleData(res.data.bidamount)
+          } else {
+            this.newScale.show = false
           }
           // 项目金额排行榜
           if (res.data.project_amount && res.data.project_amount.length > 0) {
@@ -251,6 +269,8 @@ export default {
             })
             this.projectAmount.list = res.data.project_amount
             this.projectAmount.show = true
+          } else {
+            this.projectAmount.show = false
           }
           this.nextweek_bidopen = res.data.nextweek_bidopen
           this.follow_ent = res.data.follow_ent
@@ -444,11 +464,11 @@ export default {
           padding: 0 40px;
           margin: 24px auto;
           display: flex;
-          // justify-content: space-between;
+          justify-content: space-between;
           align-content: space-between;
           flex-wrap: wrap;
           .week_report{
-            margin:0 16px 16px 0;
+            margin:0 0 16px 0;
             padding: 0 16px;
             width: 412px;
             opacity: 1;