Pārlūkot izejas kodu

Merge branch 'dev' into feature-yf

yangfeng 4 gadi atpakaļ
vecāks
revīzija
10e55ba538

+ 1 - 1
src/components/chart/ProgressChart.vue

@@ -62,7 +62,7 @@ export default {
   mounted () {},
   methods: {
     goEntInfo (name) {
-      this.$router.push('/unitportrayal/' + encodeURIComponent(name))
+      this.$router.push('/unit_portrayal/' + encodeURIComponent(name))
     }
   }
 }

+ 4 - 4
src/components/forecast/ForLayout.vue

@@ -81,7 +81,7 @@ export default {
             // 企业情报
             if (data.events === 'select') {
               // 联想跳转
-              this.$router.push(`/entportrayal/${data.data.entId}`)
+              this.$router.push(`/ent_portrait/${data.data.entId}`)
             } else {
               this.$store.commit('forcast/setType', this.type)
               this.$store.commit('forcast/setEntFollowSearch', res.data)
@@ -99,7 +99,7 @@ export default {
               // 联想跳转
               const result = [data.data]
               this.$store.commit('forcast/setHistoryList', result)
-              this.$router.push(`/bidforlimit/${data.data.s_id}/${data.data.sourceinfoid}`)
+              this.$router.push(`/ai_add/${data.data.s_id}/${data.data.sourceinfoid}`)
             } else {
               // 点击搜索按钮\键盘Enter事件
               this.$store.commit('forcast/setList', res.data)
@@ -120,13 +120,13 @@ export default {
               // 联想跳转
               const result = [data.data]
               this.$store.commit('forcast/setHistoryPolicyList', result)
-              this.$router.push(`/analysis/result/${data.data.s_id}/${data.data.sourceinfoid}`)
+              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}`)
+              // this.$router.push(`/ai_add/${result.data.s_id}/${data.data.sourceinfoid}`)
             }
           }
         })

+ 5 - 5
src/components/forecast/ForeCast.vue

@@ -400,19 +400,19 @@ export default {
     goBidForcast (data) {
       const result = [data]
       this.$store.commit('forcast/setHistoryList', result)
-      this.$router.push(`/bidforlimit/${data.s_id}/${data.sourceinfoid}`)
+      this.$router.push(`/ai_add/${data.s_id}/${data.sourceinfoid}`)
     },
     goForcast (data) {
       const result = [data]
       this.$store.commit('forcast/setHistoryPolicyList', result)
-      this.$router.push(`/analysis/result/${data.s_id}/${data.sourceinfoid}`)
+      this.$router.push(`/analysis_result/${data.s_id}/${data.sourceinfoid}`)
     },
     goViewEnt (id) {
-      this.$router.push(`/entportrayal/${id}`)
+      this.$router.push(`/ent_portrait/${id}`)
     },
     goEntPor (id) {
       const routeUrl = this.$router.resolve({
-        path: `/entportrayal/${id}`
+        path: `/ent_portrait/${id}`
       })
       return window.open(routeUrl.href, '_blank')
     },
@@ -430,7 +430,7 @@ export default {
       })
       console.log(arr.toString())
       this.$router.push({
-        path: '/potensimilar',
+        path: '/analysis_filter',
         query: {
           id: id,
           keys: arr.toString()

+ 5 - 5
src/components/push-list/PotentialList.vue

@@ -34,7 +34,7 @@
               <i :class="'el-icon-jy-heart_' + (item.follow ? 'solid' : 'stroke')"></i>
               <span>{{item.follow ? '已' : ''}}关注</span>
             </div>
-            <span  @click.stop="changeRemove(item)">不是我的潜在竞争对手/合作伙伴</span>
+            <span  @click.stop="changeDelete(item)">不是我的潜在竞争对手/合作伙伴</span>
           </div>
         </div>
       </div>
@@ -129,14 +129,14 @@ export default {
   created () {},
   methods: {
     changeFollow (item) {
-      item.follow = true
+      this.$emit(item.follow ? 'remove' : 'follow', item)
+      item.follow = !item.follow
       this.$forceUpdate()
-      this.$emit('follow', item)
     },
-    changeRemove (item) {
+    changeDelete (item) {
       item.remove = true
       this.$forceUpdate()
-      this.$emit('remove', item)
+      this.$emit('delete', item)
     },
     goManage () {
       alert('订阅管理')

+ 5 - 1
src/components/push-list/PushList.vue

@@ -2,7 +2,7 @@
   <el-card class="info-list-card">
     <div slot="header" class="clearfix">
       <span class="card-title">订阅推送</span>
-      <el-button @click="goManage" class="sub-manager" type="plain" icon="el-icon-jy-edit">订阅管理</el-button>
+      <el-button v-if="subManager" @click="goManage" class="sub-manager" type="plain" icon="el-icon-jy-edit">订阅管理</el-button>
     </div>
     <div class="info-list" v-loading="listState.loading">
       <article-item
@@ -63,6 +63,10 @@ export default {
       type: Boolean,
       default: true
     },
+    subManager: {
+      type: Boolean,
+      default: false
+    },
     filters: {
       type: Object,
       default () {

+ 7 - 0
src/components/selector/BusinessScopeSelector.vue

@@ -41,6 +41,13 @@ export default {
   data () {
     return {}
   },
+  watch: {
+    initList () {
+      this.$nextTick(() => {
+        this.$refs.content.init()
+      })
+    }
+  },
   created () {},
   methods: {
     setState (data) {

+ 18 - 6
src/router/router-interceptors.js

@@ -1,15 +1,27 @@
 import router from '@/router/router'
 import store from '@/store/'
+import { powerCheck } from '@/utils/bigmember/'
+
+// 权限控制白名单-组件名
+const powerCheckWhiteList = ['404']
 
-// 从vue实例中获取store对象
-// const store = router.app.$store
 router.beforeEach(async (to, from, next) => {
-  const { power } = store.state.user
-  // 如果power为空,则请求power
-  if (Array.isArray(power) && power.length === 0) {
+  const { power, info } = store.state.user
+  if (!Object.keys(info).length) {
     await store.dispatch('user/getUserPower')
+  }
+  if (powerCheckWhiteList.includes(to.name)) {
     next()
   } else {
-    next()
+    let href = '/big/page/index'
+    const { pass, anchor } = powerCheck(info, power, to, from)
+    if (pass) {
+      next()
+    } else {
+      if (anchor) {
+        href = `${href}#${anchor}`
+      }
+      location.href = href
+    }
   }
 })

+ 26 - 32
src/router/routers.js

@@ -6,67 +6,61 @@ export default [
   },
   // 订阅推送
   {
-    path: '/sub-push',
-    name: 'sub-push',
+    path: '/big_subscribe',
+    name: 'big_subscribe',
     component: () => import('@/views/SubPush.vue')
   },
   // 潜在客户/对手
   {
-    path: '/potentialList/:type',
-    name: 'potentialList',
+    path: '/potential_cor_list/:type',
+    name: 'potential_cor_list',
     component: () => import('@/views/PotentialList.vue')
   },
-  // 周报详情
   {
-    path: '/empty-demo',
-    name: 'empty-demo',
-    component: () => import('@/views/EmptyDemo.vue')
-  },
-  {
-    path: '/report/week',
-    name: 'week',
+    path: '/bigvip_subreport_week',
+    name: 'bigvip_subreport_week',
     component: () => import('@/views/reportData/pageWeek.vue')
   },
   // 月报详情
   {
-    path: '/report/month',
-    name: 'month',
+    path: '/bigvip_subreport_month',
+    name: 'bigvip_subreport_month',
     component: () => import('@/views/reportData/pageMonth.vue')
   },
   // 中标企业预测
   {
-    path: '/bidforecast',
-    name: 'bidforecast',
+    path: '/ai_search',
+    name: 'ai_search',
     component: () => import('@/views/bid-forecast/BidForecast.vue')
   },
   // 中标企业预测-预测
   {
-    path: '/bidforlimit/:ptid/:sourceinfoid',
-    name: 'bidforlimit',
+    path: '/ai_add/:ptid/:sourceinfoid',
+    name: 'ai_add',
     component: () => import('@/views/bid-forecast/BidForecastLimit.vue')
   },
   // 投标决策分析
   {
-    path: '/bidpolicy',
-    name: 'bidpolicy',
+    path: '/analysis_search',
+    name: 'analysis_search',
     component: () => import('@/views/bid-policy/BidPolicy.vue')
   },
   // 企业情报监控
   {
-    path: '/entintel',
-    name: 'entintel',
+    path: '/ent_follow',
+    name: 'ent_follow',
     component: () => import('@/views/ent-intel/EntIntel.vue')
   },
   // 潜在项目预测
   {
-    path: '/potential',
-    name: 'potential',
+    path: '/forecast_list',
+    name: 'forecast_list',
     component: () => import('@/views/potential-for/PotenTial.vue')
   },
   // 潜在项目预测--相似项目
   {
-    path: '/potensimilar',
-    name: 'potensimilar',
+    path: '/analysis_filter',
+    name: 'analysis_filter',
     component: () => import('@/views/potential-for/PotenSimilar.vue')
   },
   {
@@ -76,14 +70,14 @@ export default [
   },
   // 采购单位画像
   {
-    path: '/unitportrayal/:entName',
-    name: 'unitportrayal',
+    path: '/unit_portrayal/:entName',
+    name: 'unit_portrayal',
     component: () => import('@/views/portrayal/UnitPortrayal.vue')
   },
   // 企业画像
   {
-    path: '/entportrayal/:eId',
-    name: 'entportrayal',
+    path: '/ent_portrait/:eId',
+    name: 'ent_portrait',
     component: () => import('@/views/portrayal/EntPortrayal.vue')
   },
   // 项目信息
@@ -94,8 +88,8 @@ export default [
   },
   // 投标决策分析结果页
   {
-    path: '/analysis/result/:ptid/:sourceinfoid',
-    name: 'analysisResult',
+    path: '/analysis_result/:ptid/:sourceinfoid',
+    name: 'analysis_result',
     component: () => import('@/views/bid-policy/AnalysisResult.vue')
   },
   // 业务范围

+ 5 - 6
src/store/user.js

@@ -4,13 +4,12 @@ import {
   getBigMemberInfo
 } from '@/api/modules'
 import { formatKeywordsList } from '@/utils/format'
+
 export default {
   namespaced: true,
   state: () => ({
-    power: recoveryPageData('bigmember-power', []),
-    info: recoveryPageData('bigmember-info', {}),
-    power: [],
-    info: {},
+    power: recoveryPageData('bigmember-login-clear-power', []),
+    info: recoveryPageData('bigmember-login-clear-info', {}),
     // 业务范围
     scope: defaultLocalPageData('bigmember-login-clear-SCOPE', []),
     // 采购内容设置
@@ -21,11 +20,11 @@ export default {
   mutations: {
     setUserInfo (state, info) {
       state.info = info
-      // sessionStorage.setItem('bigmember-info', JSON.stringify(info))
+      sessionStorage.setItem('bigmember-login-clear-info', JSON.stringify(info))
     },
     setUserPower (state, power) {
       state.power = power
-      // sessionStorage.setItem('bigmember-power', JSON.stringify(power))
+      sessionStorage.setItem('bigmember-login-clear-power', JSON.stringify(power))
     },
     // 设置的业务范围
     setScope (state, data) {

+ 49 - 0
src/utils/bigmember/index.js

@@ -0,0 +1,49 @@
+import { powerMap } from './powerMap'
+
+// 生成路由对应权限的map
+const createURL2Power = () => {
+  const URL2Power = new Map()
+  Object.keys(powerMap).forEach(v => {
+    const nowV = powerMap[v]
+    const tempUrls = nowV.url.split('&')
+    tempUrls.forEach(u => {
+      const oldPower = URL2Power.get(u) || []
+      URL2Power.set(u, Array.from(new Set(oldPower.concat(Number(v)))))
+    })
+  })
+  return URL2Power
+}
+
+// 路由权限控制判断
+export const powerCheck = (info, power, to, from) => {
+  const URL2Power = createURL2Power()
+  const passInfo = {
+    pass: true,
+    anchor: ''
+  }
+  if (info?.memberStatus > 0) {
+    // 开通了大会员
+    // 当前url对应的power列表
+    const urlPowerList = URL2Power.get(to.path) || URL2Power.get(to.name)
+    if (urlPowerList) {
+      // 当前页面需要权限
+      const intersectionPower = urlPowerList.filter(v => power.includes(v))
+      // 判断当前url是否有权限
+      if (intersectionPower.length) {
+        // 当前路由有权限
+        passInfo.pass = true
+      } else {
+        // 当前路由无权限
+        passInfo.anchor = powerMap[urlPowerList[0]].anchor
+        passInfo.pass = false
+      }
+    } else {
+      // 当前页面不需要权限
+    }
+    return passInfo
+  } else {
+    // 未开通大会员
+    passInfo.pass = false
+    return passInfo
+  }
+}

+ 79 - 0
src/utils/bigmember/powerMap.js

@@ -0,0 +1,79 @@
+export const powerMap = {
+  1: {
+    tip: '搜索+订阅',
+    url: 'big_subscribe&bigVip_detail&bigvip_viewpage',
+    anchor: 'zb'
+  },
+  2: {
+    tip: '子账号',
+    url: ''
+  },
+  3: {
+    tip: '附件下载',
+    url: ''
+  },
+  4: {
+    tip: '企业全景分析',
+    url: 'ent_portrait&ent_follow_search&ent_follow',
+    anchor: 'jc'
+  },
+  5: {
+    tip: '采购单位全景分析',
+    url: 'unit_portrayal',
+    anchor: 'jc'
+  },
+  6: {
+    tip: '投标决策分析',
+    url: 'analysis_search&analysis_filter&analysis_result&ai_unit',
+    anchor: 'jc'
+  },
+  7: {
+    tip: '挖掘潜在客户',
+    url: 'potential_cor_list&potential_cor',
+    anchor: 'qz'
+  },
+  8: {
+    tip: '挖掘潜在伙伴/竞争对手',
+    url: 'potential_cor_list&potential_cor',
+    anchor: 'qz'
+  },
+  9: {
+    tip: '挖掘潜在项目',
+    url: 'forecast_list&forecast_detail',
+    anchor: 'fx'
+  },
+  10: {
+    tip: '周报/月报',
+    url: 'bigvip_subreport_week&bigvip_subreport_month&report_detail_week&report_detail_month',
+    anchor: 'fx'
+  },
+  11: {
+    tip: '招标文件解读',
+    url: ''
+  },
+  12: {
+    tip: '企业情报监控',
+    url: 'ent_portrait&ent_portrait_change&ent_follow_search&ent_follow',
+    anchor: 'fx'
+  },
+  13: {
+    tip: '企业中标动态',
+    url: 'ent_follow&ent_portrait&ent_follow_search',
+    anchor: 'fx'
+  },
+  14: {
+    tip: '项目进度监控',
+    url: 'pro_follow_list&pro_follow_detail',
+    anchor: 'zb'
+  },
+  15: {
+    tip: '中标企业预测',
+    url: 'ai_search&ai_add&ai_result&ai_balance&voucher_center&ai_unit',
+    anchor: 'zb'
+  },
+  16: {
+    tip: '企业情报监控+企业中标动态',
+    url: '',
+    anchor: 'fx'
+  }
+}

+ 0 - 31
src/views/EmptyDemo.vue

@@ -1,31 +0,0 @@
-<template>
-  <div class="empty-demo">
-    <empty tip="订阅关键词,接收最新招投标信息"></empty>
-    <empty class="empty-body">
-      <span>订阅关键词,接收最新招投标信息</span>
-      <el-button class="empty-button" type="main" icon="el-icon-plus">订阅关键词</el-button>
-    </empty>
-  </div>
-</template>
-
-<script>
-import { Button } from 'element-ui'
-import empty from '@/components/common/Empty.vue'
-import { getUserPower } from '@/api/modules/'
-export default {
-  name: 'Home',
-  components: {
-    empty,
-    [Button.name]: Button
-  },
-  data () {
-    return {}
-  },
-  created () {
-    getUserPower()
-  }
-}
-</script>
-
-<style lang="scss">
-</style>

+ 19 - 29
src/views/Home.vue

@@ -10,8 +10,8 @@
             <div class="nav-item--text">{{item.text}}</div>
           </div>
         </div>
-        <push-list @getMore="$router.push('/sub-push')"></push-list>
-        <project-list class="m-40" @getMore="$router.push('/sub-push')"></project-list>
+        <push-list :subManager="getSubStatus" @getMore="$router.push('/big_subscribe')"></push-list>
+        <project-list class="m-40" @getMore="$router.push('/big_subscribe')"></project-list>
       </div>
     </forLayOut>
     <div class="flex-c-c float-side-group-for-right">
@@ -47,33 +47,23 @@ export default {
       navItem: [
         {
           text: '中标企业预测',
-          to: '/bidforecast',
-          anchor: 'zb',
-          id: 15
+          to: '/ai_search'
         },
         {
           text: '投标决策分析',
-          to: '/bidpolicy',
-          anchor: 'jc',
-          id: 6
+          to: '/analysis_search'
         },
         {
           text: '潜在项目预测',
-          to: '/potential',
-          anchor: 'fx',
-          id: 9
+          to: '/forecast_list'
         },
         {
           text: '潜在客户挖掘',
-          to: '/potentialList/c',
-          anchor: 'qz',
-          id: 7
+          to: '/potential_cor_list/c'
         },
         {
           text: '潜在竞争对手 合作伙伴挖掘',
-          to: '/potentialList/r',
-          anchor: 'qz',
-          id: 8
+          to: '/potential_cor_list/r'
         }
       ],
       floatSideList: [
@@ -123,8 +113,12 @@ export default {
   },
   computed: {
     ...mapState({
-      power: state => state.user.power
+      power: state => state.user.power,
+      info: state => state.user.info
     }),
+    getSubStatus () {
+      return !this.info?.isSubCount
+    },
     getFloatList () {
       return this.floatSideList.filter(v => this.checkAuthPower(v.id))
     }
@@ -222,15 +216,15 @@ export default {
       let link = ''
       switch (floatSide.title) {
         case '周报': {
-          link = '/report/week'
+          link = '/bigvip_subreport_week'
           break
         }
         case '月报': {
-          link = '/report/month'
+          link = '/bigvip_subreport_month'
           break
         }
         case '企业情报监控': {
-          link = '/entintel'
+          link = '/ent_follow'
           break
         }
       }
@@ -240,16 +234,16 @@ export default {
       let link = ''
       switch (floatSide.title) {
         case '周报': {
-          link = `/report/week?start=${item.start}&end=${item.end}`
+          link = `/bigvip_subreport_week?start=${item.start}&end=${item.end}`
           break
         }
         case '月报': {
-          link = `/report/month?start=${item.start}&end=${item.end}`
+          link = `/bigvip_subreport_month?start=${item.start}&end=${item.end}`
           break
         }
         case '企业情报监控': {
           const routeUrl = this.$router.resolve({
-            path: `/entportrayal/${item.id}`
+            path: `/ent_portrait/${item.id}`
           })
           return window.open(routeUrl.href, '_blank')
         }
@@ -271,11 +265,7 @@ export default {
       return result
     },
     goLink (item) {
-      if (this.checkAuthPower(item.id)) {
-        this.$router.push(item.to)
-      } else {
-        window.location.href = '/big/page/index#' + item.anchor
-      }
+      this.$router.push(item.to)
     },
     getSimpleFollowList (size = 5) {
       getSimpleFollowList({ size: size }).then(res => {

+ 29 - 17
src/views/PotentialList.vue

@@ -36,6 +36,7 @@
           <potential-list :key="filters.listKey" @goDetail="goDetail"
                           @follow="changeFollow"
                           @remove="changeRemove"
+                          @delete="changeDelete"
                           :title="getTopInfo.desc || getTopInfo.text" :filters="filters" ref="pushList" :showMore="false"></potential-list>
         </div>
       </div>
@@ -50,7 +51,8 @@ import IndustrySelector from '@/components/selector/IndustrySelector.vue'
 import BuyerclassSelector from '@/components/selector/BuyerclassSelector.vue'
 import BusinessScopeSelector from '@/components/selector/BusinessScopeSelector.vue'
 import forLayOut from '@/components/forecast/ForLayout.vue'
-import { setFollowEnt, setRemoveEnt } from '@/api/modules'
+import { setFollowEnt, setRemoveEnt, setCancelEnt } from '@/api/modules'
+import { mapState } from 'vuex'
 export default {
   name: 'Potential',
   components: {
@@ -97,6 +99,13 @@ export default {
       })
     },
     changeRemove (item) {
+      setCancelEnt({ entId: item.entId }).then(res => {
+        if (!(res && res.error_code === 0 && res.data === 'success')) {
+          this.$refs.pushList.doQuery(this.filters)
+        }
+      })
+    },
+    changeDelete (item) {
       setRemoveEnt({ entId: item.entId }).then(res => {
         if (!(res && res.error_code === 0 && res.data && res.data.success)) {
           this.$refs.pushList.doQuery(this.filters)
@@ -119,11 +128,11 @@ export default {
       let routeUrl = {}
       if (this.filters.pcor === 'C') {
         routeUrl = this.$router.resolve({
-          path: `/unitportrayal/${item.Buyer}`
+          path: `/unit_portrayal/${item.Buyer}`
         })
       } else {
         routeUrl = this.$router.resolve({
-          path: `/entportrayal/${item.entId}`
+          path: `/ent_portrait/${item.entId}`
         })
       }
       window.open(routeUrl.href, '_blank')
@@ -136,13 +145,13 @@ export default {
     },
     changeBusiness (item) {
       let tempArr = []
-      this.getScopeList.forEach(v => {
-        if (item.includes(v.key.join(','))) {
+      this.scope.forEach(v => {
+        if (item.includes(v.key.join(' '))) {
           tempArr.push(v)
         }
       })
       if (item.length === 0) {
-        tempArr = this.getScopeList
+        tempArr = this.scope
       }
       this.filters.business_scope = tempArr
     },
@@ -164,24 +173,23 @@ export default {
     }
   },
   computed: {
+    ...mapState({
+      scope: state => state.user.scope
+    }),
     getTopInfo () {
       return this.topInfo[this.$route.params.type || 'c']
     },
-    getScopeList () {
-      const scopeData = this.$store.state.user.scope
-      if (scopeData[0] && scopeData[0].a_key) {
-        return scopeData[0].a_key
-      }
-      return []
-    },
     getScopeKeyList () {
-      return this.getScopeList.map(v => {
-        return v.key.join(',')
+      return this.scope.map(v => {
+        return v.key.join(' ')
       })
     }
   },
-  created () {
-    this.filters.business_scope = this.getScopeList
+  async created () {
+    if (!this.scope.length) {
+      await this.$store.dispatch('user/getKeywordsList')
+    }
+    this.filters.business_scope = this.scope
   }
 }
 </script>
@@ -223,6 +231,10 @@ export default {
     .border-box {
       border: 1px solid #ececec;
       border-radius: 5px;
+      ::v-deep .selector-card .selector-card-content .j-button-item.active {
+        color: #fff;
+        background-color: #2cb7ca;
+      }
     }
     .content-list-box {
       margin-top: 16px;

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

@@ -211,7 +211,7 @@ export default {
     },
     goViewPur (name) {
       const routeUrl = this.$router.resolve({
-        path: '/unitportrayal/' + name
+        path: '/unit_portrayal/' + name
       })
       return window.open(routeUrl.href, '_blank')
     },

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

@@ -106,7 +106,7 @@ export default {
     },
     // 查看采购单位画像
     goViewPur (name) {
-      this.$router.push('/unitportrayal/' + name)
+      this.$router.push('/unit_portrayal/' + name)
     },
     // 获取项目基本信息
     async getBaseInfo () {

+ 1 - 1
src/views/bid-policy/components/PolicyLimit.vue

@@ -185,7 +185,7 @@ export default {
     },
     // 中标企业预测跳转
     goBidForUrl (id) {
-      this.$router.push(`/bidforlimit/${this.baseInfo.id}/${this.baseInfo.infoid}`)
+      this.$router.push(`/ai_add/${this.baseInfo.id}/${this.baseInfo.infoid}`)
     },
     // 开始分析
     StartAnsisy () {

+ 1 - 1
src/views/portrayal/components/AnalysisList.vue

@@ -64,7 +64,7 @@ export default {
       return moneyUnit(data)
     },
     goEntImg (id) {
-      this.$router.push('/entportrayal?eId=' + encodeURIComponent(id))
+      this.$router.push('/ent_portrait?eId=' + encodeURIComponent(id))
     }
   }
 }

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

@@ -113,7 +113,7 @@ export default {
     },
     // 查看采购单位画像
     goViewPur () {
-      this.$router.push('/unitportrayal/' + this.dataInfo.buyer)
+      this.$router.push('/unit_portrayal/' + this.dataInfo.buyer)
     }
   }
 }

+ 3 - 3
src/views/project/ProjectInfo.vue

@@ -189,16 +189,16 @@ export default {
     },
     toForecast () {
       const { sid, fid } = this
-      this.$router.push(`/bidforlimit/${fid}/${sid}`)
+      this.$router.push(`/ai_add/${fid}/${sid}`)
     },
     toPolicy () {
       const { sid, fid } = this
-      this.$router.push(`/analysis/result/${fid}/${sid}`)
+      this.$router.push(`/analysis_result/${fid}/${sid}`)
     },
     toUnitportrayal () {
       const { buyer } = this.projectInfo
       const link = this.$router.resolve({
-        path: `/unitportrayal/${buyer}`
+        path: `/unit_portrayal/${buyer}`
       })
       window.open(link.href, '_blank')
     }