Ver Fonte

Merge remote-tracking branch 'origin/master'

wangkaiyue há 4 anos atrás
pai
commit
60cca30517

+ 1 - 1
jydocs-mobile/.env.development

@@ -3,4 +3,4 @@ VUE_APP_MOCK=false
 VUE_APP_BASE_API = '/jydocs'
 BASE_URL = '/dev/docs/'
 VUE_APP_BASE_URL = '/dev/docs/'
-VUE_APP_LOG_URL='https://web2-jytest.jianyu360.cn/jyintegral/actionInfo?logAction='
+VUE_APP_LOG_URL='https://web2-jytest.jydev.jianyu360.com/jyLogs/actionInfo?logAction='

+ 1 - 4
jydocs-mobile/src/components/Recharge.vue

@@ -45,9 +45,6 @@ import { Icon, Popup, Sticky } from 'vant'
       [Popup.name]: Popup,
       [Sticky.name]: Sticky,
       [Icon.name]: Icon
-    },
-    created () {
-      console.log('111')
     }
   })
 export default class extends Vue {
@@ -59,7 +56,7 @@ export default class extends Vue {
     }
 
     buyMoney () {
-      window.location.href = `/page_points_app/pay?id=${this.detailData.id}`
+      window.location.href = `/page_points_app/pay?id=${this.detailData.docId}`
     }
 }
 </script>

+ 1 - 1
jydocs-mobile/src/components/SharePopup.vue

@@ -52,7 +52,7 @@ export default class extends Vue {
         type: num, // options.type--1微信分享,2qq分享,3朋友圈分享
         title: this.detailData.docName,
         content: this.detailData.docSummary,
-        link: this.links.url
+        link: this.links
       })
     }
 

+ 17 - 7
jydocs-mobile/src/store/modules/main.ts

@@ -28,7 +28,7 @@ function recoveryPageData (key: string, defaultValues = {}) {
   return sessionStorage.getItem(key) ? JSON.parse(sessionStorage.getItem(key) || '') : defaultValues
 }
 function checkType (type: string | number) {
-  let typeStr = ''
+  let typeStr = type
   switch (type) {
     case 1: {
       typeStr = 'word'
@@ -87,7 +87,7 @@ const modulesOption: modulesOption = {
       }
       sessionStorage.setItem('jy-docs-home-page', JSON.stringify(state.homePageData))
     },
-    // 我的文库页面数据
+    // 搜索页面数据
     saveSearchPageState (state, data) {
       console.log(data)
       for (const key in data) {
@@ -95,7 +95,7 @@ const modulesOption: modulesOption = {
       }
       sessionStorage.setItem('jy-docs-search-page', JSON.stringify(data))
     },
-    // 清除提现成功数据
+    // 清除搜索页面数据
     clearSearchPageState (state) {
       state.searchPageData = {}
       sessionStorage.setItem('jy-docs-search-page', JSON.stringify({}))
@@ -107,10 +107,20 @@ const modulesOption: modulesOption = {
       }
       sessionStorage.setItem('jy-docs-user-lib', JSON.stringify(data))
     },
-    // 清除提现成功数据
-    clearMyLibState (state) {
-      state.userLib = {}
-      sessionStorage.setItem('jy-docs-user-lib', JSON.stringify({}))
+    // 清除我的文库页面数据
+    clearMyLibState (state, data = '') { // clearLib,clearCollections
+      if (data === 'clearLib') {
+        if (state.userLib && Object.keys(state.userLib).length !== 0) {
+          delete state.userLib.myLibListState
+        }
+      } else if (data === 'clearCollections') {
+        if (state.userLib && Object.keys(state.userLib).length !== 0) {
+          delete state.userLib.myCollectionListState
+        }
+      } else {
+        state.userLib = {}
+      }
+      sessionStorage.setItem('jy-docs-user-lib', JSON.stringify(state.userLib))
     }
   },
   actions: {

+ 9 - 3
jydocs-mobile/src/views/Search.vue

@@ -139,6 +139,8 @@ export default class extends Vue {
     list: []
   }
 
+  restored = false // 当前数据是否走过缓存
+
   get activeSortType () {
     return this.sortTypeList.find(item => {
       return item.active
@@ -150,17 +152,20 @@ export default class extends Vue {
   }
 
   created () {
-    const y = this.reStoreState()
-    if (!y) {
+    this.restored = this.reStoreState()
+    if (!this.restored) {
       this.getTags()
     }
   }
 
   mounted () {
-    this.onFocus()
+    if (!this.restored) {
+      this.onFocus()
+    }
   }
 
   onFocus () {
+    console.log('fffff')
     const dom = document.querySelector('#mySearch input') as HTMLInputElement
     if (dom) {
       this.$nextTick(() => {
@@ -262,6 +267,7 @@ export default class extends Vue {
     const { data } = await this.doSearchRquesst(query)
     this.listState.loading = false
     this.listState.loaded = true
+    this.$toast.clear()
     if (data && Array.isArray(data.list)) {
       this.listState.pageNum += 1
       this.listState.total = data.total

+ 41 - 50
jydocs-mobile/src/views/details/details.vue

@@ -4,20 +4,22 @@
           <div class="word">
             <van-icon class="word01" :name="'diy-' + fileType(detailData.docFileType)" />
           </div>
-          <div class="title">{{detailData.docName}}</div>
+          {{detailData.docName}}
         </div>
         <div class="middles">
             <h3>摘要</h3>
             <p>{{detailData.docSummary}}</p>
             <div class="continue" v-show="buyed == 0">全文共{{detailData.docPageSize}}页,<span @click="continued">继续阅读<van-icon name="arrow-down" size="18" /></span></div>
         </div>
-        <div class="head-tip" id="fixedTop" :class="{'is-fixed':fixed}" v-show="buyed == 1">
-            <h3 v-show="fixed">
-              <van-icon class="word01" :name="'diy-' + fileType(detailData.docFileType)" />
-              <span>{{detailData.docName}}</span>
-            </h3>
-            <span class="pages"><i id="page_num"></i> / <i id="page_count"></i></span>
-        </div>
+        <van-sticky offset-top="120vh" @scroll="stickyScroll" v-show="buyed == 1">
+          <div class="head-tip" :class="{'is-fixed':fixed}">
+              <h3 v-show="fixed">
+                <van-icon class="word01" :name="'diy-' + fileType(detailData.docFileType)" />
+                <span>{{detailData.docName}}</span>
+              </h3>
+              <span class="pages"><i id="page_num"></i> / <i id="page_count"></i></span>
+          </div>
+        </van-sticky>
         <div class="botts" v-show="buyed == 1">
             <div class="cont-page" id="pdfPage"></div>
         </div>
@@ -41,8 +43,8 @@
 
 <script lang="ts">
 import { Component, Vue } from 'vue-property-decorator'
-import { mapActions } from 'vuex'
-import { Icon, Toast, GoodsAction, GoodsActionIcon, GoodsActionButton } from 'vant'
+import { mapActions, mapMutations } from 'vuex'
+import { Icon, Toast, GoodsAction, GoodsActionIcon, GoodsActionButton, Sticky } from 'vant'
 import Recharge from '@/components/Recharge.vue'
 import sharePop from '@/components/SharePopup.vue'
 import { MixinTop } from '@/utils/mixin-top'
@@ -55,6 +57,7 @@ const pdfjsViewer = require('pdfjs-dist/web/pdf_viewer.js')
   mixins: [MixinTop],
   components: {
     [Icon.name]: Icon,
+    [Sticky.name]: Sticky,
     [GoodsAction.name]: GoodsAction,
     [GoodsActionIcon.name]: GoodsActionIcon,
     [GoodsActionButton.name]: GoodsActionButton,
@@ -70,21 +73,24 @@ const pdfjsViewer = require('pdfjs-dist/web/pdf_viewer.js')
       getShare: 'main/getShare',
       getAdd: 'main/getAdd',
       getRemove: 'main/getRemove'
+    }),
+    ...mapMutations({
+      clearLibState: 'main/clearMyLibState'
     })
   }
 })
 export default class extends Vue {
+  clearLibState: any
   getDetails: any
   getCoin: any
   getDown: any
   getShow: any
   getShare: any
-  links: any = []
+  links = ''
   docIds = ''
   fixed = false
   coins: any = []
   conts: any = []
-  offsets: any = 0
   getAdd: any
   getRemove: any
   detailData: any = []
@@ -117,8 +123,6 @@ export default class extends Vue {
   created () {
     this.docIds = this.$route.params.id
     this.onList()
-    this.setTop()
-    console.log(window.screen.width)
   }
 
   mounted () {
@@ -130,21 +134,9 @@ export default class extends Vue {
     window.removeEventListener('scroll', this.initHeight)
   }
 
-  setTop () {
-    this.$nextTick(() => {
-      // 获取到达页面顶端的值
-      const heights = document.getElementById('fixedTop')
-      this.offsets = heights?.offsetTop
-      // this.offsets = heights.getBoundingClientRect().top
-      console.log(this.offsets)
-    })
-  }
-
   initHeight () {
-    // 获取页面滚动距离
-    const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
-    this.fixed = !!(scrollTop > this.offsets && this.buyed)
     const top = window.scrollY
+    console.log(top)
     let base = 0
     for (let i = 0; i < this.pData.heightList.length; i++) {
       base += this.pData.heightList[i]
@@ -172,7 +164,7 @@ export default class extends Vue {
     ;(this.$refs.shares as any).show = true
   }
 
-  updateText (data: any) {
+  updateText (data) {
     console.log(data)
     switch (data.type) {
       case 'count': {
@@ -188,8 +180,6 @@ export default class extends Vue {
 
   renders () {
     const container = document.getElementById('pdfPage')
-    // let notes = document.getElementById('pdfPage')
-    // document.getElementById('pdfPage').style.width = '100vw'
     return this.pdfDocument.getPage(this.config.PAGE_TO_VIEW).then((pdfPage: any) => {
       const pdfPageView = new pdfjsViewer.PDFPageView({
         container: container,
@@ -225,16 +215,22 @@ export default class extends Vue {
     })
   }
 
-  watchPage () {
-    const top = window.scrollY
+  stickyScroll (data: any) {
+    const tops = data.scrollTop
+    console.log(this.$parent.$el.scrollTop)
     let base = 0
     for (let i = 0; i < this.pData.heightList.length; i++) {
       base += this.pData.heightList[i]
-      if (top <= base) {
+      if (tops <= base) {
         this.updateText({ type: 'num', value: i + 1 })
         break
       }
     }
+    if (data.isFixed) {
+      this.fixed = true
+    } else {
+      this.fixed = false
+    }
   }
 
   buyShow () {
@@ -273,16 +269,16 @@ export default class extends Vue {
   canged () {
     if (this.collectd === 0) {
       this.getAdd({ docId: this.docIds }).then((res: any) => {
-        console.log(res)
         if (res.error_code === 0) {
+          this.clearLibState('clearCollections') // 清除我的收藏列表缓存数据
           this.collectd = 1
           Toast('收藏成功')
         }
       })
     } else {
       this.getRemove({ docId: this.docIds }).then((res: any) => {
-        console.log(res)
         if (res.error_code === 0) {
+          this.clearLibState('clearCollections') // 清除我的收藏列表缓存数据
           this.collectd = 0
           Toast('取消收藏')
         }
@@ -338,28 +334,25 @@ export default class extends Vue {
 @include diy-icon('guanzhu', 20, 20);
 @include diy-icon('iconJianYu', 24, 24);
 .details-p {
-    display: flex;
-    flex-direction: column;
     padding-bottom: 80px;
+    box-sizing: border-box;
     .tops {
         display: flex;
         flex-direction: initial;
         background: #fff;
         padding: 24px 16px;
+        color: #171826;
+        font-weight: 500;
+        font-size: 20px;
+        line-height: 30px;
         .word {
           display: flex;
         }
         .word01 {
-            display: flex;
-            width: 24px;
-            height: 24px;
-            margin-right: 8px;
-        }
-        .title {
-          color: #171826;
-          font-weight: 500;
-          font-size: 20px;
-          line-height: 30px;
+          display: flex;
+          width: 24px;
+          height: 24px;
+          margin-right: 8px;
         }
     }
     .middles {
@@ -397,7 +390,7 @@ export default class extends Vue {
     }
     .head-tip {
         width: auto;
-        height: 60px;
+        height: 40px;
         background: #fcfcfc;
         display: flex;
         justify-content: flex-end;
@@ -438,8 +431,6 @@ export default class extends Vue {
         }
     }
     .is-fixed {
-        position: fixed;
-        top: 0;
         justify-content: space-between;
     }
     .botts {

+ 3 - 0
jydocs-mobile/src/views/purchase/purchase.vue

@@ -405,6 +405,9 @@ export default class extends Vue {
         .van-checkbox__label{
           margin-left: 12px;
         }
+        .van-checkbox__icon--round .van-icon{
+          border-radius: 50%;
+        }
       }
     }
   }

+ 7 - 4
jydocs-mobile/src/views/purchase/purchasesuccess.vue

@@ -38,14 +38,16 @@
 <script lang="ts">
 import { Component, Vue } from 'vue-property-decorator'
 import { dateFormatter } from '../../utils/globalFunctions'
-// import { mapState } from 'vuex'
+import { mapMutations } from 'vuex'
 
 @Component({
   name: 'test',
-  components: {
-  }
+  ...mapMutations({
+    clearLibState: 'main/clearMyLibState'
+  })
 })
 export default class extends Vue {
+  clearLibState: any
   count = 3
   timer: any
   $router: any
@@ -62,6 +64,7 @@ export default class extends Vue {
     this.query = location.href.split('/')[location.href.split('/').length - 1] // 获取num
     this.setCountDown()
     this.setSession()
+    this.clearLibState('clearLib') // 清除我的文库列表缓存数据
   }
 
   setSession () {
@@ -69,7 +72,7 @@ export default class extends Vue {
     console.log(paydata)
     if (paydata) {
       paydata = JSON.parse(paydata)
-      this.payinfor.payTime = dateFormatter(paydata.payTime * 1000, 'yyyy-MM-dd')
+      this.payinfor.payTime = dateFormatter(paydata.payTime * 1000, 'yyyy/MM/dd')
       this.payinfor.payWay = paydata.payWay
       this.payinfor.code = paydata.code
       this.payinfor.docId = paydata.query

+ 3 - 1
jydocs-pc/.eslintrc.js

@@ -9,7 +9,9 @@ module.exports = {
   ],
   globals: {
     loginflag: true,
-    $: true
+    $: true,
+    pdfjsLib: true,
+    pdfjsViewer: true
   },
   parserOptions: {
     parser: 'babel-eslint'

+ 0 - 1
jydocs-pc/package.json

@@ -13,7 +13,6 @@
     "axios": "^0.21.1",
     "core-js": "^3.4.3",
     "element-ui": "^2.15.1",
-    "pdfjs-dist": "^2.1.266",
     "single-spa-vue": "^1.5.4",
     "systemjs-webpack-interop": "^1.1.2",
     "vue": "^2.6.10",

+ 37 - 24
jydocs-pc/src/components/recommend.vue

@@ -3,21 +3,21 @@
     <div class="r-bott">
         <h3>相关推荐</h3>
         <div class="docs" v-for="item in recomes" :key="item.docId">
-            <div class="imgs">
+            <div class="imgs" @click="detailClick(item.docId)">
                 <img :src="item.previewImgId" alt="">
                 <i class="el-icon-jy-word"></i>
             </div>
             <div class="conts">
-                <h5>{{item.docName}}</h5>
-                <!-- <p>贡献者:{{item.price}}</p> -->
+                <h5 @click="detailClick(item.docId)">{{item.docName}}</h5>
                 <div class="d-tip">
                     <p>{{item.downTimes}}次下载</p>
-                    <el-divider direction="vertical"></el-divider>
-                    <p>共{{item.docPageSize}}页</p>
-                    <el-divider direction="vertical"></el-divider>
-                    <p>{{item.docFileSize}}</p>
+                    <div class="d-page">
+                      <p>共{{item.docPageSize}}页</p>
+                      <el-divider direction="vertical"></el-divider>
+                      <p>{{item.docFileSize}}</p>
+                    </div>
                 </div>
-                <div class="r-coin">500剑鱼币</div>
+                <div class="r-coin"><i class="el-icon-jy-iconJianYu"></i><span>{{item.price}}</span></div>
             </div>
         </div>
     </div>
@@ -33,21 +33,21 @@ export default {
   components: {
     [Divider.name]: Divider
   },
-  data () {
-    return {
-
-    }
-  },
   methods: {
-
+    detailClick (ids) {
+      const routeUrl = this.$router.resolve({
+        name: 'c-recommend',
+        params: { id: ids }
+      })
+      window.open(routeUrl.href, '_blank')
+    }
   }
 }
 </script>
 
 <style lang="scss" scoped>
+@include diy-icon('iconJianYu', 18, 18);
 .c-recommend {
-  // display: flex;
-  // flex-direction: initial;
   .r-bott {
       min-height: 448px;
       border-radius: 4px;
@@ -64,15 +64,16 @@ export default {
       }
       .docs {
           display: flex;
-          height: 112px;
           .imgs {
+              height: 110px;
               display: table;
               position: relative;
               border-radius: 4px;
               border: 1px solid #ECECEC;
+              cursor: pointer;
               img {
                   width: 78px;
-                  height: 112px;
+                  // height: 112px;
                   border: 0;
               }
               i {
@@ -93,6 +94,7 @@ export default {
                   overflow: hidden;
                   text-overflow: ellipsis;
                   -webkit-box-orient: vertical;
+                  cursor: pointer;
               }
               p {
                   margin: 0;
@@ -102,21 +104,32 @@ export default {
               }
               .d-tip {
                   display: flex;
-                  flex-direction: initial;
-                  align-items: center;
+                  flex-direction: column;
                   .el-divider--vertical {
                       height: 0.8em;
                       margin: 0 2px;
                   }
+                  .d-page {
+                    display: flex;
+                    flex-direction: initial;
+                    align-items: center;
+                  }
                   p {
-                      padding: 0 1px;
+                      padding: 0 2px;
                   }
               }
               .r-coin {
-                  color: #2CB7CA;
-                  font-size: 14px;
-                  line-height: 24px;
+                  display: flex;
+                  align-items: center;
                   margin-top: 2px;
+                  i {
+                    width:18px;
+                    height:18px;
+                  }
+                  span {
+                      font-size: 14px;
+                      color: #FF3A20;
+                  }
               }
           }
       }

+ 11 - 11
jydocs-pc/src/views/Content.vue

@@ -3,7 +3,9 @@
       <div class="d-left">
           <div class="tops">
               <h3>
+                <div>
                   <i :class="'el-icon-jy-' + fileType(datas.docFileType)"></i>
+                </div>
                   {{datas.docName}}
               </h3>
               <div class="tips">
@@ -89,8 +91,6 @@ import { Button, Tooltip, Divider, Message } from 'element-ui'
 import { getDetails, getShow, getRecommend, getDown, getAdverse, getCoin, getAdd, getRemove } from '../api/modules/detail'
 import { formatSize, dateFormatter } from '@/utils/'
 import vRecommend from '@/components/recommend'
-const pdfjsLib = require('pdfjs-dist/build/pdf.js')
-const pdfjsViewer = require('pdfjs-dist/web/pdf_viewer.js')
 export default {
   components: {
     [Button.name]: Button,
@@ -153,6 +153,7 @@ export default {
       this.watchPage()
     },
     updateText ({ type, value = '' }) {
+      console.log(type, value)
       switch (type) {
         case 'count': {
           document.querySelector('#page_count').textContent = value
@@ -223,6 +224,7 @@ export default {
       getCoin({ B: true }).then(res => {
         if (res.data.error_code === 0) {
           this.coinNum = res.data.data.points.balance
+          // this.coinNum = 11
           if (this.buyed === 1) {
             this.btnName = '下载文档'
             this.lineShow = false
@@ -254,7 +256,7 @@ export default {
           this.datas.docFileSize = formatSize(this.datas.docFileSize)
           this.datas.uploadDate = dateFormatter(this.datas.uploadDate, 'yyyy-MM-dd')
           this.datas.docSummary = this.datas.docSummary.split('').length >= 500 ? this.datas.docSummary + '...' : this.datas.docSummary
-          this.datas.tags = this.datas.tags.split(',')
+          this.datas.tags = this.datas.tags.split(',').slice(0, 3)
           this.buyed = res.data.data.status
           this.coined()
           this.recommend(res.data.data.detail.tags)
@@ -364,18 +366,17 @@ export default {
   .d-left {
       width: 920px;
       .tops {
-          // min-height: 224px;
           background: #fff;
           padding: 32px 40px;
           border-radius: 4px;
           h3 {
               display: flex;
               flex-direction: initial;
-            //   align-items: center;
               color: #1d1d1d;
               font-weight: 500;
               font-size: 24px;
               line-height: 36px;
+              margin: 0;
               i {
                   display: inline-flex;
                   margin-right: 8px;
@@ -391,6 +392,8 @@ export default {
                   display: flex;
                   flex-direction: initial;
                   align-items: center;
+                  margin: 0;
+                  padding: 0;
                   li {
                       display: flex;
                       list-style-type: none;
@@ -481,7 +484,6 @@ export default {
           }
       }
       .middles {
-          height: 316px;
           padding: 24px 40px;
           background: #fff;
           border-radius: 4px;
@@ -513,17 +515,14 @@ export default {
           }
       }
       .actives {
-        height: 530px;
+        height: 656px;
       }
       .actives1 {
-        height: 552px;
+        height: 680px;
       }
       .head-tip {
-            width: 920px;
             height: 42px;
             background: #fcfcfc;
-            // filter:alpha(opacity=80); //IE
-            // opacity: 0.8;   //Chrome
             display: flex;
             justify-content: flex-end;
             align-items: center;
@@ -565,6 +564,7 @@ export default {
         .is-fixed {
             position: fixed;
             top: 0;
+            width: 840px;
             justify-content: space-between;
         }
       .bottoms {

+ 4 - 1
jydocs-pc/src/views/Home.vue

@@ -127,7 +127,7 @@ import { getHomeActivity, getHomeHot } from '../api/modules/home'
 import { recoveryPageData } from '../utils'
 
 function checkType (type) {
-  let typeStr = ''
+  let typeStr = type
   switch (type) {
     case 1: {
       typeStr = 'word'
@@ -375,17 +375,20 @@ export default {
       white-space: nowrap;
       text-overflow: ellipsis;
     }
+
     .van-multi-ellipsis--l2 {
       display: -webkit-box;
       overflow: hidden;
       text-overflow: ellipsis;
       -webkit-line-clamp: 2;
       -webkit-box-orient: vertical;
+
     }
 
     .hot-keep-group {
       .card-item {
         width: 33.33%;
+        overflow: hidden;
       }
     }
 

+ 2 - 1
jydocs-pc/src/views/Search.vue

@@ -184,7 +184,8 @@ export default {
       const { docFileSize: size, downTimes, uploadDate, docPageSize } = item
       const subInfoArr = []
       if (uploadDate !== undefined) {
-        subInfoArr.push(dateFormatter(uploadDate, 'yyyy/MM/dd'))
+        const data = uploadDate.replace(/-/g, '/')
+        subInfoArr.push(dateFormatter(data, 'yyyy/MM/dd'))
       }
       if (downTimes !== undefined) {
         subInfoArr.push(`${downTimes}次下载`)

+ 1 - 1
jydocs-pc/src/views/purchase/purchasesuccess.vue

@@ -75,7 +75,7 @@ export default {
         paydata = JSON.parse(paydata)
         console.log(paydata)
         this.payinfor.docId = paydata.query
-        this.payinfor.payTime = dateFormatter(paydata.payTime * 1000, 'yyyy-MM-dd')
+        this.payinfor.payTime = dateFormatter(paydata.payTime * 1000, 'yyyy年MM月dd日')
         this.payinfor.payWay = paydata.payWay
         this.payinfor.code = paydata.code
         this.payinfor.balance = paydata.balance

+ 0 - 5
jydocs-pc/yarn.lock

@@ -6420,11 +6420,6 @@ pbkdf2@^3.0.3:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-pdfjs-dist@^2.1.266:
-  version "2.6.347"
-  resolved "https://registry.npm.taobao.org/pdfjs-dist/download/pdfjs-dist-2.6.347.tgz#f257ed66e83be900cd0fd28524a2187fb9e25cd5"
-  integrity sha1-8lftZug76QDND9KFJKIYf7niXNU=
-
 performance-now@^2.1.0:
   version "2.1.0"
   resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"