Pārlūkot izejas kodu

fix: 城市选择逻辑问题

cuiyalong 4 gadi atpakaļ
vecāks
revīzija
599d5f9497

+ 1 - 0
src/api/modules/index.js

@@ -6,3 +6,4 @@ export * from './forecast'
 export * from './analysis'
 export * from './subscribe'
 export * from './potential'
+export * from './project'

+ 11 - 0
src/api/modules/project.js

@@ -0,0 +1,11 @@
+import request from '@/api'
+import qs from 'qs'
+
+export function getFollowProjectDetail (data) {
+  data = qs.stringify(data)
+  return request({
+    url: '/follow/project/detail',
+    method: 'POST',
+    data
+  })
+}

+ 12 - 0
src/api/modules/user.js

@@ -1,4 +1,5 @@
 import request from '@/api'
+import qs from 'qs'
 
 export function getUserPower () {
   return request({
@@ -6,3 +7,14 @@ export function getUserPower () {
     method: 'get'
   })
 }
+
+// 获取广告位图片和链接
+export function getAdList (data) {
+  data = qs.stringify(data)
+  return request({
+    baseURL: '',
+    url: '/jydocs/getAdvertisement',
+    method: 'post',
+    data
+  })
+}

+ 113 - 0
src/components/common/ContentLayout.vue

@@ -0,0 +1,113 @@
+<template>
+  <div class="content-container">
+    <div class="content-main">
+      <slot name="default"></slot>
+    </div>
+    <div class="content-right ad-container">
+      <slot name="right">
+        <slot name="right-top"></slot>
+        <div class="ad-list">
+          <div
+            class="ad-item-container"
+            v-for="(item, index) in adList"
+            :key="index">
+            <a :href="item.s_link">
+              <img :src="item.s_pic" />
+            </a>
+          </div>
+        </div>
+        <slot name="right-bottom"></slot>
+      </slot>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getAdList } from '@/api/modules/'
+export default {
+  name: 'content-layout',
+  props: {
+    adCode: {
+      type: String,
+      default: ''
+    },
+    adNum: {
+      type: Number,
+      default: 2
+    }
+  },
+  data () {
+    return {
+      adCodeMap: {
+        projectInfo: 'jy-pc-bigmember-project-content-right', // 项目详情页右侧广告位code
+        entportrait: 'jy-pc-bigmember-entportrait-content-right', // 企业情报详情页右侧广告位code
+        unitportrayal: 'jy-pc-bigmember-unitportrayal-content-right' // 采购单位全景分析详情页右侧广告位code
+      },
+      adList: [
+        // {
+        //   s_link: 'https://web2-jytest.jydev.jianyu360.com/swordfish/docs/',
+        //   s_pic: 'https://web2-qmxtest.jydev.jianyu360.com/upload/2021/03/24/20210324164127003068k656W.png'
+        // }
+        {},
+        {}
+      ]
+    }
+  },
+  created () {
+    // this.getAdvertisementList()
+  },
+  methods: {
+    async getAdvertisementList () {
+      const params = {
+        code: this.adCode,
+        num: this.adNum
+      }
+
+      if (!params.adCode) {
+        const routeName = this.$route.name
+        params.code = this.adCodeMap[routeName]
+      }
+
+      if (!params.adCode) return
+
+      const { data } = await getAdList(params)
+
+      if (Array.isArray(data)) {
+        this.adList = data
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss">
+.content-container {
+  display: flex;
+  margin: 32px auto;
+  padding-bottom: 60px;
+  .content-main {
+    flex: 1;
+  }
+  .content-right {
+    width: 264px;
+    margin-left: 16px;
+    .ad-item-container {
+      width: 100%;
+      min-height: 120px;
+      overflow: hidden;
+      border-radius: 4px;
+      background-color: #C4C4C4;
+      &:not(:last-of-type) {
+        margin-bottom: 16px;
+      }
+      a,
+      img {
+        display: block;
+        width: 100%;
+        cursor: pointer;
+      }
+    }
+  }
+}
+
+</style>

+ 0 - 1
src/components/selector/AreaSelector.vue

@@ -59,7 +59,6 @@ export default {
       this.$emit('onConfirm', selectedCity)
     },
     onChange (selected) {
-      console.log(selected)
       this.$emit('onChange', selected)
     }
   }

+ 6 - 8
src/components/selector/AreaSelectorContent.vue

@@ -352,13 +352,7 @@ export default {
     moveTheCityContainer (e) {
       const selectList = this.$refs.selectList
       const cityList = this.$refs.cityList
-      const { lineFirstDom, insetedLine, tolerance, clickLine } = this.getDomInfo(e.target)
-      // 如果页面上cityList插入中间(除了插入到末尾),则都会产生误差,所以需要根据情况减去其高度
-      let correct = cityList.getBoundingClientRect().height
-      // (最后一行/和上次点击的是同一行)则不减去correct
-      if (insetedLine === 0 || insetedLine === tolerance.length || insetedLine === clickLine) {
-        correct = 0
-      }
+      const { lineFirstDom, clickLine } = this.getDomInfo(e.target)
 
       if (clickLine >= lineFirstDom.length) {
         selectList.appendChild(cityList) // 往列表末尾插入元素
@@ -369,6 +363,10 @@ export default {
       }
     },
     // 1. 获取每行的第一个dom
+    // 2. 获取每个元素距离顶部高度数组
+    // 3. 获取行间距差值
+    // 4. 当前点击的哪一行
+    // 5. 点击按钮前cityList在哪一行
     getDomInfo (dom) {
       if (this.selectorType !== 'line') return
       const indexDOMList = [] // 所有索引项dom数组(索引项下有每个省份的按钮)
@@ -670,7 +668,6 @@ export default {
         })
         count = selectedCityArr.length
       }
-
       if (this.expandedProvince.selectedState !== 'checked' && cityLength !== 0 && count === 0) {
         return
       }
@@ -680,6 +677,7 @@ export default {
         const res = this.provinceListMap[key].find(item => {
           if (item.name === this.expandedProvince.name) {
             Object.assign(item, this.expandedProvince)
+            this.provinceListMap['#'][0].selectedState = ''
           }
           return item.name === this.expandedProvince.name
         })

+ 1 - 1
src/components/selector/TimeSelectorContent.vue

@@ -222,7 +222,7 @@ export default {
           break
         }
         default: {
-          t.start = 0,
+          t.start = 0
           t.end = 0
           console.warn(`未提供${exact}值的计算`)
           break

+ 1 - 1
src/main.js

@@ -9,7 +9,7 @@ import VCharts from 'v-charts'
 import '@/utils/'
 import axios from 'axios'
 
-Vue.use(Loading.directive).use(Message).use(VCharts)
+Vue.use(Loading.directive).use(VCharts)
 Vue.prototype.$message = Message
 Vue.prototype.$echarts = echarts
 Vue.config.productionTip = false