Browse Source

Merge remote-tracking branch 'origin/master'

wangkaiyue 4 years ago
parent
commit
521d024843

+ 1 - 0
.gitignore

@@ -29,5 +29,6 @@ yarn-error.log*
 *.7z
 .vscode
 jydocs-mobile/page_docs_app
+jydocs-pc/page_docs
 jydocs-pc/pc
 jydocs-pc/app

+ 9 - 36
README.md

@@ -40,11 +40,6 @@ PC端 /opt/nginx/nginx/html/page_docs/
 │       ├── _mixin.scss
 │       └── _variables.scss
 ├── components
-│   ├── CardItem.vue        # 卡片型文件缩略展示
-│   ├── HelloWorld.vue
-│   ├── List.vue            # 列表展示
-│   ├── ListItem.vue        # 列表型文件缩略展示
-│   └── Search.vue          # 顶部搜索框
 ├── main.js
 ├── router.js
 ├── set-public-path.js
@@ -52,8 +47,6 @@ PC端 /opt/nginx/nginx/html/page_docs/
     ├── 404.vue
     ├── Content.vue         # 内容页
     ├── Home.vue            # 首页
-    ├── Keep.vue            # 收藏
-    ├── Mine.vue            # 我的
     └── Search.vue          # 搜索结果列表页
 
 ```
@@ -75,46 +68,26 @@ PC端 /opt/nginx/nginx/html/page_docs/
 3. 访问`/swordfish/frontPage/docs/sess/index`
 
 ##### 部署
-```
-# 剑鱼文库 前端配置
-location ^~/page_docs_app {
-    if ($uri ~ \.html$) {
-		add_header         Pragma   no-cache;
-        add_header         Expires  0;
-        add_header         Cache-Control no-cache,no-store,must-revalidate;
-    }
-    root /opt/nginx/nginx/html/;
-    index index.html;
-    try_files $uri $uri/ /page_docs_app/index.html;
-}
 
-location ^~/page_docs {
-    if ($uri ~ \.html$) {
-		add_header         Pragma   no-cache;
-        add_header         Expires  0;
-        add_header         Cache-Control no-cache,no-store,must-revalidate;
-    }
-    root /opt/nginx/nginx/html/;
-    index index.html;
-    try_files $uri $uri/ /page_docs/index.html;
-}
-```
+###### 剑鱼文库 前端配置
 
-```
+```nginx
+# 如果nginx配置文件中有这段代码,则 不需要 再次配置
 # 静态资源配置
 # 1. 禁止html缓存
-location ~ ^\/(.*).html {
+location ~ ^\/page_(.*)\.html {
     add_header         Pragma   no-cache;
     add_header         Expires  0;
     add_header         Cache-Control no-cache,no-store,must-revalidate;
-    
+
     root html;
+    # root /opt/nginx/nginx/html/;
 }
-# 2. 静态资源配置(vue程序刷新404问题)
+
+# 2.静态资源配置(vue程序刷新404问题)
 location ~ ^\/page_(.*?)\/ {
     root html;
     index index.html;
     try_files $uri $uri/ /page_$1/index.html;
 }
-```
-
+```

+ 1 - 1
jydocs-mobile/package.json

@@ -14,10 +14,10 @@
     "html2canvas": "^1.0.0-rc.6",
     "js-cookie": "^2.2.1",
     "moment": "^2.24.0",
-    "pdfjs-dist": "^2.1.266",
     "vant": "^2.8.2",
     "vue": "^2.6.11",
     "vue-class-component": "^7.2.3",
+    "vue-pdf": "^4.2.0",
     "vue-property-decorator": "^8.4.2",
     "vue-router": "^3.2.0",
     "vuex": "^3.4.0"

+ 1 - 1
jydocs-mobile/public/index.html

@@ -32,7 +32,7 @@
 <div id="app"></div>
 <!-- built files will be auto injected -->
 <% if (process.env.NODE_ENV === 'production') { %>
-  <script src="/page_partner/js/commonForVue.js?v=<%= htmlWebpackPlugin.options.version %>"></script>
+  <script src="/page_entniche/js/commonForVue.js?v=<%= htmlWebpackPlugin.options.version %>"></script>
 <% } else if (process.env.NODE_ENV === 'development') { %>
   <script src="//res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
 <% } %>

+ 1 - 3
jydocs-mobile/src/api/main.ts

@@ -122,9 +122,7 @@ export function getListDetail (data: any) {
 }
 
 // 获取绑定的手机号
-
-export function getAccountInfo (data: any) {
-  data = qs.stringify(data)
+export function getAccountInfo () {
   return $request({
     baseURL: '',
     url: '/jypay/user/getAccountInfo',

+ 2 - 3
jydocs-mobile/src/components/docs-card/Price.vue

@@ -28,15 +28,14 @@ export default class Price extends Vue {
 .price-container {
   display: flex;
   align-items: center;
-  @include diy-icon('iconLogoLight', 22, 22);
+  @include diy-icon('iconLogoLight', 20, 20);
 
   .p-r {
     margin-left: 4px;
-    font-size: 18px;
+    font-size: 14px;
     color: #ff3a20;
     &.bought {
       color: $color_main;
-      font-size: 14px;
     }
   }
 }

+ 2 - 2
jydocs-mobile/src/store/modules/main.ts

@@ -239,9 +239,9 @@ const modulesOption: modulesOption = {
       } catch (error) {}
     },
     // 获取绑定手机号
-    async getAccountInfo (state, data) {
+    async getAccountInfo () {
       try {
-        const res = await getAccountInfo(data)
+        const res = await getAccountInfo()
         return res.data
       } catch (error) {}
     }

+ 1 - 0
jydocs-mobile/src/utils/index.ts

@@ -12,6 +12,7 @@ Vue.prototype.$env = {
   isAndroid: isAndroidOrIos === 'android',
   isIOS: isAndroidOrIos === 'ios'
 }
+Vue.prototype.$firstUrl = location.href.split('#')[0]
 
 // 正式环境下屏蔽console.log
 if (process.env.NODE_ENV === 'production') {

+ 2 - 8
jydocs-mobile/src/utils/wxShare.ts

@@ -13,7 +13,6 @@ declare module 'vue/types/vue' {
 
 const inWeiXinBrowser = isWeiXinBrowser()
 const isAndroidOrIos = androidOrIOS()
-const firstUrl = location.href.split('#')[0]
 
 export async function getSdkSign (url: string) {
   const sdkInfo = await getWxSdkSign({ url })
@@ -31,19 +30,14 @@ export async function getSdkSign (url: string) {
 }
 
 /* 微信自定义分享封装函数 */
-/**
- * url:获取微信分享签名的url地址
- * isShare:当前所在路径是否需要分享
- *  */
 export async function weChatShare (options: any) {
   if (!inWeiXinBrowser) return
 
   const device = isAndroidOrIos
   // 获取并注册sdkSign
-  const url = location.href.split('#')[0]
+  let url = location.href.split('#')[0]
   if (device === 'ios') {
-    // url = firstUrl
-    console.log(firstUrl)
+    url = (Vue as any).prototype.$firstUrl
   }
   const wxSdk: any = await getSdkSign(url)
   Vue.prototype.$wxSdk = wxSdk

+ 13 - 4
jydocs-mobile/src/views/Home.vue

@@ -12,12 +12,12 @@
           <div class="flex flex-r-c center left">
             <van-icon :name="'diy-' + item.type" />
             <div class="flex">
-              <div class="van-ellipsis">{{item.title}}</div>
+              <div class="van-ellipsis d-title">{{item.title}}</div>
             </div>
           </div>
           <div class="right-info flex-r-c center right">
             <van-icon name="diy-iconJianYu" />
-            <span>{{item.money}}</span>
+            <span class="price-text">{{item.money}}</span>
           </div>
         </div>
         </van-skeleton>
@@ -34,12 +34,12 @@
           <div class="flex flex-r-c center left">
             <van-icon :name="'diy-' + item.type" />
             <div class="flex">
-              <div class="van-ellipsis">{{item.title}}</div>
+              <div class="van-ellipsis d-title">{{item.title}}</div>
             </div>
           </div>
           <div class="right-info flex-r-c center right">
             <van-icon name="diy-iconJianYu" />
-            <span>{{item.money}}</span>
+            <span class="price-text">{{item.money}}</span>
           </div>
         </div>
         </van-skeleton>
@@ -148,6 +148,15 @@ export default class extends Vue {
   padding-bottom: 40px;
   box-sizing: border-box;
 
+  .d-title {
+    font-size: 14px;
+    line-height: 20px;
+  }
+  .price-text {
+    font-size: 13px;
+    line-height: 28px;
+  }
+
   ::v-deep .van-loading-skeleton {
     &.line-style {
       .van-skeleton__row {

+ 6 - 1
jydocs-mobile/src/views/Search.vue

@@ -165,7 +165,6 @@ export default class extends Vue {
   }
 
   onFocus () {
-    console.log('fffff')
     const dom = document.querySelector('#mySearch input') as HTMLInputElement
     if (dom) {
       this.$nextTick(() => {
@@ -255,6 +254,12 @@ export default class extends Vue {
 
   async getList () {
     if (!this.listState.value) return
+    if (this.listState.pageNum === 1) {
+      this.$toast.loading({
+        forbidClick: true,
+        duration: 0
+      })
+    }
     const query = {
       keyWord: this.listState.value,
       tag: this.docsTypeConf.active === '全部' ? '' : this.docsTypeConf.active,

+ 52 - 60
jydocs-mobile/src/views/details/details.vue

@@ -2,7 +2,7 @@
     <div class="details-p">
         <div class="tops">
           <div class="word">
-            <van-icon class="word01" :name="'diy-' + fileType(detailData.docFileType)" />
+            <i class="word01" :class="'van-icon van-icon-diy-' + fileType(detailData.docFileType)"></i>
           </div>
           {{detailData.docName}}
         </div>
@@ -11,17 +11,17 @@
             <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>
-        <van-sticky offset-top="120vh" @scroll="stickyScroll" v-show="buyed == 1">
+        <van-sticky :offset-top="Offset" @scroll="stickyScroll" v-show="buyed == 1">
           <div class="head-tip" :class="{'is-fixed':fixed}">
-              <h3 v-show="fixed">
+              <h3 class="flex" v-show="fixed">
                 <van-icon class="word01" :name="'diy-' + fileType(detailData.docFileType)" />
-                <span>{{detailData.docName}}</span>
+                <span class="flex">{{detailData.docName}}</span>
               </h3>
-              <span class="pages"><i id="page_num"></i> / <i id="page_count"></i></span>
+<!--              <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>
+            <pdf  v-for="i in pdfPage.pageNum" :key="i"  :src="pdfPage.url" :page="i"></pdf>
         </div>
         <van-goods-action>
             <van-goods-action-icon class="no-icon">
@@ -31,7 +31,8 @@
                 </template>
             </van-goods-action-icon>
             <van-goods-action-icon icon="diy-jubao" text="投诉举报" @click="jubaod" />
-            <van-goods-action-icon :icon="collectd==1?'diy-guanzhu':'diy-weiguanzhu'" :text="collectd==1?'已收藏':'收藏'" @click="canged" />
+            <van-goods-action-icon :icon="collectd==1?'diy-guanzhu':'diy-weiguanzhu'" :text="collectd==1?'已收藏':'收藏'" @click="canged" v-if="!flag" />
+            <van-goods-action-icon :icon="collectd==1?'diy-guanzhu':'diy-weiguanzhu'" :text="collectd==1?'已收藏':'收藏'" v-else />
             <van-goods-action-button text="下载文档" @click="uploaded" />
         </van-goods-action>
         <!-- 充值 -->
@@ -49,8 +50,7 @@ import Recharge from '@/components/Recharge.vue'
 import sharePop from '@/components/SharePopup.vue'
 import { MixinTop } from '@/utils/mixin-top'
 import { weChatShare } from '@/utils/wxShare'
-const pdfjsLib = require('pdfjs-dist/build/pdf.js')
-const pdfjsViewer = require('pdfjs-dist/web/pdf_viewer.js')
+import pdf from 'vue-pdf'
 
 @Component({
   name: 'details-p',
@@ -62,7 +62,8 @@ const pdfjsViewer = require('pdfjs-dist/web/pdf_viewer.js')
     [GoodsActionIcon.name]: GoodsActionIcon,
     [GoodsActionButton.name]: GoodsActionButton,
     Recharge,
-    sharePop
+    sharePop,
+    pdf
   },
   methods: {
     ...mapActions({
@@ -90,20 +91,25 @@ export default class extends Vue {
   docIds = ''
   fixed = false
   coins: any = []
-  conts: any = []
+  pdfPage = {
+    pageNum: 0,
+    url: ''
+  }
+
   getAdd: any
   getRemove: any
   detailData: any = []
   collectd = 0
   buyed = 0
+  flag = false
   pdfh5 = null
   pdfDocument: any
   config: any = {
     PAGE_TO_VIEW: 0,
     SCALE: 0,
-    CMAP_URL: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.1.266/cmaps/',
+    CMAP_URL: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.6.347/cmaps/',
     CMAP_PACKED: true,
-    workerSrc: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.1.266/build/pdf.worker.min.js'
+    workerSrc: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.6.347/build/pdf.worker.min.js'
   }
 
   pData: any = {
@@ -136,7 +142,7 @@ export default class extends Vue {
 
   initHeight () {
     const top = window.scrollY
-    console.log(top)
+    // console.log(top)
     let base = 0
     for (let i = 0; i < this.pData.heightList.length; i++) {
       base += this.pData.heightList[i]
@@ -147,6 +153,25 @@ export default class extends Vue {
     }
   }
 
+  get Offset () {
+    const tempN = document.querySelector('.j-header.jy-app-header') as HTMLDivElement
+    if (tempN) {
+      return tempN.offsetHeight - 1
+    } else {
+      return 0
+    }
+  }
+
+  getNumPages (url: string) {
+    const loadingTask = pdf.createLoadingTask(url)
+    loadingTask.promise.then((pdf: any) => {
+      this.pdfPage.url = loadingTask
+      this.pdfPage.pageNum = pdf.numPages
+    }).catch((err: any) => {
+      console.error('pdf加载失败', err)
+    })
+  }
+
   async getShareUrl () {
     const { data } = await this.getShare({ docId: this.docIds })
     this.links = data.url || location.href
@@ -164,8 +189,7 @@ export default class extends Vue {
     ;(this.$refs.shares as any).show = true
   }
 
-  updateText (data) {
-    console.log(data)
+  updateText (data: any) {
     switch (data.type) {
       case 'count': {
         ;(document.getElementById('page_count') as HTMLDivElement).textContent = data.value
@@ -178,46 +202,9 @@ export default class extends Vue {
     }
   }
 
-  renders () {
-    const container = document.getElementById('pdfPage')
-    return this.pdfDocument.getPage(this.config.PAGE_TO_VIEW).then((pdfPage: any) => {
-      const pdfPageView = new pdfjsViewer.PDFPageView({
-        container: container,
-        id: this.config.PAGE_TO_VIEW,
-        scale: this.config.SCALE,
-        defaultViewport: pdfPage.getViewport({ scale: this.config.SCALE }),
-        eventBus: new pdfjsViewer.EventBus(),
-        annotationLayerFactory: new pdfjsViewer.DefaultAnnotationLayerFactory()
-      })
-      pdfPageView.setPdfPage(pdfPage)
-      this.pData.heightList.push(pdfPageView.viewport.height)
-      return pdfPageView.draw()
-    })
-  }
-
-  init () {
-    console.log(this.conts)
-    pdfjsLib.GlobalWorkerOptions.workerSrc = this.config.workerSrc
-    const loadingTask = pdfjsLib.getDocument({
-      url: this.conts,
-      cMapUrl: this.config.CMAP_URL,
-      cMapPacked: this.config.CMAP_PACKED
-    })
-    loadingTask.promise.then((pdfDocument: any) => {
-      this.pdfDocument = pdfDocument
-      console.log(this.pdfDocument.numPages)
-      this.updateText({ type: 'count', value: this.pdfDocument.numPages })
-      this.updateText({ type: 'num', value: 1 })
-      for (let i = 0; i < this.pdfDocument.numPages; i++) {
-        this.config.PAGE_TO_VIEW++
-        this.renders()
-      }
-    })
-  }
-
   stickyScroll (data: any) {
     const tops = data.scrollTop
-    console.log(this.$parent.$el.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]
@@ -235,15 +222,13 @@ export default class extends Vue {
 
   buyShow () {
     this.getShow({ docId: this.docIds }).then((res: any) => {
-      console.log(res.data)
-      this.conts = res.data
-      this.init()
+      this.getNumPages(res.data)
     })
   }
 
   onList () {
     this.getDetails({ docId: this.docIds, from: this.$route.query.from }).then((res: any) => {
-      console.log(res.data)
+      // console.log(res.data)
       this.detailData = res.data.detail
       this.detailData.docSummary = res.data.detail.docSummary.split('').length >= 500 ? res.data.detail.docSummary + '...' : res.data.detail.docSummary
       this.buyed = res.data.status
@@ -254,7 +239,7 @@ export default class extends Vue {
       this.getShareUrl()
     })
     this.getCoin({ B: true }).then((res: any) => {
-      console.log(res.data.data)
+      // console.log(res.data.data)
       this.coins = res.data.points
     })
   }
@@ -275,6 +260,7 @@ export default class extends Vue {
           Toast('收藏成功')
         }
       })
+      this.flag = true
     } else {
       this.getRemove({ docId: this.docIds }).then((res: any) => {
         if (res.error_code === 0) {
@@ -283,7 +269,11 @@ export default class extends Vue {
           Toast('取消收藏')
         }
       })
+      this.flag = true
     }
+    setTimeout(() => {
+      this.flag = false
+    }, 1000)
   }
 
   continued () {
@@ -301,7 +291,7 @@ export default class extends Vue {
       if (this.coins.balance < this.detailData.price) {
         ;(this.$refs.charge as any).show = true
       } else {
-        this.$router.replace('/purchase/' + this.detailData.docId)
+        this.$router.push('/purchase/' + this.detailData.docId)
       }
     }
   }
@@ -339,6 +329,8 @@ export default class extends Vue {
     .tops {
         display: flex;
         flex-direction: initial;
+        height: auto;
+        min-height: auto;
         background: #fff;
         padding: 24px 16px;
         color: #171826;

+ 52 - 95
jydocs-mobile/src/views/purchase/purchase.vue

@@ -1,24 +1,21 @@
 <template>
   <div class="purchase-page">
     <div class="j-main exchange_main">
-      <div class="docs_infor">
-        <div class="docs_left">
-          <img :src="response.previewImgId" class="docs_img" alt="">
-          <span class="icon_word"></span>
-        </div>
-        <div class="docs_right">
-          <div class="docs_title ellipsis-2">
-            {{response.docName}}
-          </div>
-          <div class="docs_other">
-            <!-- <div class="docs_auther">贡献者:张三</div> -->
-            <div class="docs_download">
-              <span>{{response.downTimes}}次下载</span> | 共{{response.docPageSize}}页 | {{response.docFileSize}}
-            </div>
-            <div class="docs_money"><span class="docs_num">{{response.price}}</span> 剑鱼币</div>
-          </div>
-        </div>
-      </div>
+      <Card
+        cardType="image"
+        :title="response.docName"
+        :desc="response.docSummary"
+        :imageSrc="response.previewImgId"
+        :docType="response.docFileType"
+        :subInfo="calcSubInfo(response)"
+      >
+        <template slot="price">
+          <span class="docs_money">
+            <span class="docs_num">{{ response.price }}</span>
+            <span> 剑鱼币</span>
+          </span>
+        </template>
+      </Card>
       <div class="rechargehave_pay_content">
         <div class="pay_title">
           支付方式
@@ -59,7 +56,7 @@
         </div>
       </div>
       <div class="readly">
-        <van-checkbox v-model="checked" checked-color="#2ABED1" @click="checkBtn()">我已阅读并同意<a href="javascript:;" class="clause" @click.stop="clause()">《剑鱼文库线上购买及服务条款》</a><a href="javascript:;" class="clause" @click.stop="clause2()">《剑鱼标讯产品与服务线上购买服务条款》</a></van-checkbox>
+        <van-checkbox v-model="checked" checked-color="#2ABED1" icon-size="20px" @click="checkBtn()">我已阅读并同意<a href="javascript:;" class="clause" @click.stop="clause()">《剑鱼文库线上购买及服务条款》</a><a href="javascript:;" class="clause" @click.stop="clause2()">《剑鱼标讯产品与服务线上购买服务条款》</a></van-checkbox>
       </div>
       <div class="apply_footer">
         <button class="apply_button" :disabled="!this.btnChecked" @click="exchange()">确定兑换</button>
@@ -70,8 +67,9 @@
 
 <script lang="ts">
 import { Component, Vue } from 'vue-property-decorator'
-import { Checkbox, CheckboxGroup, Field, CellGroup, Form } from 'vant'
+import { Checkbox, CheckboxGroup, Field, CellGroup, Form, Icon } from 'vant'
 import { mapActions } from 'vuex'
+import Card from '@/components/docs-card/Card.vue'
 import { formatSize } from '../../utils/globalFunctions'
 @Component({
   name: 'purchase-page',
@@ -80,7 +78,9 @@ import { formatSize } from '../../utils/globalFunctions'
     [CheckboxGroup.name]: CheckboxGroup,
     [Field.name]: Field,
     [Form.name]: Form,
-    [CellGroup.name]: CellGroup
+    [CellGroup.name]: CellGroup,
+    [Icon.name]: Icon,
+    Card
   },
   methods: {
     ...mapActions({
@@ -102,6 +102,7 @@ export default class extends Vue {
   regPhoneExg = /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57]|19[0-9])[0-9]{8}$/
   $router: any
   $env: any
+
   response = {
     docName: '',
     price: '',
@@ -109,6 +110,7 @@ export default class extends Vue {
     docFileSize: '',
     docPageSize: '',
     previewImgId: '',
+    docFileType: '',
     balance: ''
   }
 
@@ -138,12 +140,6 @@ export default class extends Vue {
 
   // 判断按钮是否可以点击
   iptValue () {
-    let bool = this.validator(this.tel)
-    if (this.tel === '') {
-      bool = true
-    } else {
-      bool = false
-    }
     this.getBool(this.validator(this.tel))
   }
 
@@ -155,25 +151,34 @@ export default class extends Vue {
     }
   }
 
+  calcSubInfo (item: any) {
+    const { downTimes, docPageSize, docFileSize } = item
+    const subInfoArr = []
+    if (downTimes !== undefined) {
+      subInfoArr.push(`${downTimes}次下载`)
+    }
+    if (docPageSize !== undefined) {
+      subInfoArr.push(`共${docPageSize}页`)
+    }
+    if (docFileSize !== undefined) {
+      subInfoArr.push(formatSize(docFileSize))
+    }
+    return subInfoArr
+  }
+
   // 文档信息
   async getWordInfor () {
     this.getDetails({ docId: this.sessioninfor.query }).then((res: any) => {
       console.log(res)
       const item = res.data.detail
       if (res.error_code === 0) {
-        this.response.docName = item.docName
-        this.response.price = item.price
-        this.response.downTimes = item.downTimes
-        this.response.docFileSize = formatSize(item.docFileSize)
-        this.response.docPageSize = item.docPageSize
-        this.response.previewImgId = item.previewImgId
+        this.response = item
       }
     })
 
     this.getListDetail({ B: true }).then((res: any) => {
       console.log(res)
       if (res.error_code === 0) {
-        console.log(111)
         this.response.balance = res.data.points.balance
       }
     })
@@ -219,64 +224,19 @@ export default class extends Vue {
   .purchase-page{
     box-sizing: border-box;
     background: #F5F6F7;
+    .d-title {
+      font-weight: bold;
+      font-size: 14px;
+      line-height: 20px;
+    }
     .exchange_main{
-      .docs_infor{
-        display: flex;
-        justify-content: space-between;
-        align-items: flex-start;
-        padding: 20px 16px;
-        background: #ffffff;
-        .docs_left{
-          position: relative;
-          width: 100px;
-          height: 124px;
-          border-radius: 4px;
-          border: 1px solid #000000;
-          .docs_img{
-            width: 100%;
-            height: 100%;
-          }
-          .icon_word{
-            position: absolute;
-            right: 0;
-            bottom: 0;
-            display: flex;
-            width: 24px;
-            height: 24px;
-            background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJASURBVHgB7Zm/TuQwEMY/J5x016B7gC2oqbju2muuuOoKClooqEGiodliGxokqLdYXoACWireACpqin0ARAMCEvONcXaXf+sQjTdI+CclTuKJM+NMnBkbSCQSiTYxdYS+79gFCh7wcInbT8TG4MhabN5um8uwaACv/BlmofhzrizwK2TEHAIYgz1YKm9wmN2hV2S4RkRMhg6LDT5v2b/1P9PkM4Sw+O/KEvuxlXePKzEsHtDzp0sh+bABEw1jRmTjjgq6bW0DPivJgLZJBrRN8D/wHibHZXVsCyygARptJBdqm2RA20QzwAVlOfosd/MS84hE41EoBKPYPotFCdjtN5YF/iECUd6A9LoV5T1yLNcQAXUDqKiL5V9XML6XOmVUDfDKj5Sk9wzY+4OxAOsyrEERtW+AMfxfO6E8FT/h3/UpMcmdO/2WQ34bXZ5fs+4QCqi8ASq+WJpnPj7M77FVnRT3WKdBFyN5oCv3QAEVA9j7fbpLNVQOqeHKZPopGZaxWHd1cK41L/dAAa1voONLp/xb6ae7JnUYGdaBAqofcVnSVabkzlLHbQWKqBnAiage3eQiJOdltqCEjgEG+5x2GdQVdyOQ3KNAcwMqBVjah48r4+6ZaAMNCU4t/tihc6B5xtSUKlu72TZTdUzhdNt8CQOuZBczKXmJn6GuRR0DzmVXzqH7kYab4juqCgqPQ/LBaJRD0Kpb4HiK8Zc5OkSlHLcvCxzB/CH4BmSFRFZKGG0eYTaI4qd1VmcSiUSifR4BOQuhbc3lgT4AAAAASUVORK5CYII=) no-repeat;
-            background-size: contain;
-          }
-        }
-        .docs_right{
-          flex: 1;
-          margin-left: 16px;
-          .docs_title{
-            color: #171826;
-            font-weight: bold;
-            font-size: 14px;
-            line-height: 20px;
-            letter-spacing: 0px;
-            text-align: left;
-          }
-          .docs_other{
-            margin-top: 22px;
-            color: #9B9CA3;
-            font-weight: medium;
-            font-size: 12px;
-            line-height: 18px;
-            letter-spacing: 0px;
-            text-align: left;
-            .docs_download{
-              line-height: 18px;
-            }
-            .docs_money{
-              margin-top: 2px;
-              line-height: 24px;
-              .docs_num{
-                font-size: 16px;
-              }
-            }
-          }
+      .docs_money{
+        margin-top: 2px;
+        line-height: 24px;
+        font-size: 14px;
+        color: #9B9CA3;
+        .docs_num{
+          font-size: 16px;
         }
       }
       .rechargehave_pay_content{
@@ -400,14 +360,11 @@ export default class extends Vue {
           display: flex;
           align-items: center;
           height: 32px;
-          font-size:18px;
+          // font-size:18px;
         }
         .van-checkbox__label{
           margin-left: 12px;
         }
-        .van-checkbox__icon--round .van-icon{
-          border-radius: 50%;
-        }
       }
     }
   }

+ 14 - 10
jydocs-mobile/src/views/purchase/purchasesuccess.vue

@@ -42,9 +42,11 @@ import { mapMutations } from 'vuex'
 
 @Component({
   name: 'test',
-  ...mapMutations({
-    clearLibState: 'main/clearMyLibState'
-  })
+  methods: {
+    ...mapMutations({
+      clearLibState: 'main/clearMyLibState'
+    })
+  }
 })
 export default class extends Vue {
   clearLibState: any
@@ -60,11 +62,18 @@ export default class extends Vue {
     currency: 0
   }
 
+  beforeRouteLeave (to: any, from: any, next: any) {
+    if (this.timer) {
+      clearInterval(this.timer)
+    }
+    next()
+  }
+
   created () {
     this.query = location.href.split('/')[location.href.split('/').length - 1] // 获取num
     this.setCountDown()
     this.setSession()
-    this.clearLibState('clearLib') // 清除我的文库列表缓存数据
+    this.clearLibState() // 清除我的文库列表缓存数据
   }
 
   setSession () {
@@ -88,12 +97,7 @@ export default class extends Vue {
         } else {
           clearInterval(this.timer)
           this.timer = null
-          this.$router.replace({
-            name: 'details',
-            params: {
-              id: this.payinfor.docId
-            }
-          })
+          this.$router.back()
         }
       }, 1000)
     }

+ 82 - 3
jydocs-mobile/yarn.lock

@@ -976,6 +976,11 @@
   resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
   integrity sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=
 
+"@types/json-schema@^7.0.6":
+  version "7.0.7"
+  resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.7.tgz?cache=0&sync_timestamp=1613378919536&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+  integrity sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=
+
 "@types/json5@^0.0.29":
   version "0.0.29"
   resolved "https://registry.npm.taobao.org/@types/json5/download/@types/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -1557,7 +1562,7 @@ ajv-errors@^1.0.0:
   resolved "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
   integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0=
 
-ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
   version "3.5.2"
   resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1595906977498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
   integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0=
@@ -1572,6 +1577,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
+ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1616485066833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
 alphanum-sort@^1.0.0:
   version "1.0.2"
   resolved "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@@ -1875,6 +1890,11 @@ babel-plugin-dynamic-import-node@^2.3.3:
   dependencies:
     object.assign "^4.1.0"
 
+babel-plugin-syntax-dynamic-import@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.npm.taobao.org/babel-plugin-syntax-dynamic-import/download/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+  integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=
+
 balanced-match@^1.0.0:
   version "1.0.0"
   resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -5779,7 +5799,7 @@ loader-utils@^0.2.16:
     json5 "^0.5.0"
     object-assign "^4.0.1"
 
-loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
   version "1.4.0"
   resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
   integrity sha1-xXm140yzSxp07cbB+za/o3HVphM=
@@ -5788,6 +5808,15 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4
     emojis-list "^3.0.0"
     json5 "^1.0.1"
 
+loader-utils@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+  integrity sha1-5MrOW4FtQloWa18JfhDNErNgZLA=
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
 locate-path@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -6947,7 +6976,7 @@ pbkdf2@^3.0.3:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-pdfjs-dist@^2.1.266:
+pdfjs-dist@^2.5.207:
   version "2.6.347"
   resolved "https://registry.npm.taobao.org/pdfjs-dist/download/pdfjs-dist-2.6.347.tgz#f257ed66e83be900cd0fd28524a2187fb9e25cd5"
   integrity sha1-8lftZug76QDND9KFJKIYf7niXNU=
@@ -7577,6 +7606,14 @@ raw-body@2.4.0:
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
+raw-loader@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.npm.taobao.org/raw-loader/download/raw-loader-4.0.2.tgz?cache=0&sync_timestamp=1604056003687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-loader%2Fdownload%2Fraw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
+  integrity sha1-GqxrfRrRUB5m79rBUixz5ZpYTrY=
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
 read-pkg-up@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -8020,6 +8057,14 @@ sax@~1.2.4:
   resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
   integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk=
 
+schema-utils@^0.4.0:
+  version "0.4.7"
+  resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+  integrity sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=
+  dependencies:
+    ajv "^6.1.0"
+    ajv-keywords "^3.1.0"
+
 schema-utils@^1.0.0:
   version "1.0.0"
   resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
@@ -8038,6 +8083,15 @@ schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6
     ajv "^6.12.2"
     ajv-keywords "^3.4.1"
 
+schema-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+  integrity sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=
+  dependencies:
+    "@types/json-schema" "^7.0.6"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
 select-hose@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@@ -9352,6 +9406,18 @@ vue-loader@^15.9.2:
     vue-hot-reload-api "^2.3.0"
     vue-style-loader "^4.1.0"
 
+vue-pdf@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npm.taobao.org/vue-pdf/download/vue-pdf-4.2.0.tgz#d553e2a46704f9acd15479d8cf32c73e90989b77"
+  integrity sha1-1VPipGcE+azRVHnYzzLHPpCYm3c=
+  dependencies:
+    babel-plugin-syntax-dynamic-import "^6.18.0"
+    loader-utils "^1.4.0"
+    pdfjs-dist "^2.5.207"
+    raw-loader "^4.0.1"
+    vue-resize-sensor "^2.0.0"
+    worker-loader "^2.0.0"
+
 vue-property-decorator@^8.4.2:
   version "8.5.1"
   resolved "https://registry.npm.taobao.org/vue-property-decorator/download/vue-property-decorator-8.5.1.tgz#571a91cf8d2b507f537d79bf8275af3184572fff"
@@ -9359,6 +9425,11 @@ vue-property-decorator@^8.4.2:
   dependencies:
     vue-class-component "^7.1.0"
 
+vue-resize-sensor@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npm.taobao.org/vue-resize-sensor/download/vue-resize-sensor-2.0.0.tgz#3a587fd6802e1688709cf2c5aadae7a0075952bf"
+  integrity sha1-Olh/1oAuFohwnPLFqtrnoAdZUr8=
+
 vue-router@^3.2.0:
   version "3.4.3"
   resolved "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.3.tgz#fa93768616ee338aa174f160ac965167fa572ffa"
@@ -9613,6 +9684,14 @@ worker-farm@^1.7.0:
   dependencies:
     errno "~0.1.7"
 
+worker-loader@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npm.taobao.org/worker-loader/download/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac"
+  integrity sha1-Rf2j73asqBV3GokQc5nuQRm0MKw=
+  dependencies:
+    loader-utils "^1.0.0"
+    schema-utils "^0.4.0"
+
 worker-rpc@^0.1.0:
   version "0.1.1"
   resolved "https://registry.npm.taobao.org/worker-rpc/download/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5"

+ 1 - 1
jydocs-pc/.env.production

@@ -1,5 +1,5 @@
 NODE_ENV=production
 VUE_APP_BASE_API='/jydocs/'
-VUE_APP_BASE_URL='/swordfish/docs/index'
+VUE_APP_BASE_URL='/swordfish/docs'
 VUE_APP_BASE_PUBLIC='/page_docs/'
 VUE_APP_LOG_URL='https://www.jianyu360.com/jyLogs/actionInfo?logAction='

+ 1 - 1
jydocs-pc/.env.test

@@ -1,5 +1,5 @@
 NODE_ENV=production
 VUE_APP_BASE_API='/jydocs/'
-VUE_APP_BASE_URL='/swordfish/docs/index'
+VUE_APP_BASE_URL='/swordfish/docs'
 VUE_APP_BASE_PUBLIC='/page_docs/'
 VUE_APP_LOG_URL='https://web2-jytest.jydev.jianyu360.com/jyLogs/actionInfo?logAction='

BIN
jydocs-pc/src/assets/images/dateGetBg.png


+ 1 - 0
jydocs-pc/src/components/NoData.vue

@@ -24,6 +24,7 @@ export default {
   text-align: center;
   .el-image {
     width: 220px;
+    overflow: visible;
   }
   .tip-text {
     margin-top: 14px;

+ 1 - 1
jydocs-pc/src/components/recommend.vue

@@ -36,7 +36,7 @@ export default {
   methods: {
     detailClick (ids) {
       const routeUrl = this.$router.resolve({
-        name: 'c-recommend',
+        name: 'content',
         params: { id: ids }
       })
       window.open(routeUrl.href, '_blank')

+ 105 - 91
jydocs-pc/src/views/Content.vue

@@ -1,88 +1,88 @@
 <template>
   <div class="c-details">
-      <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">
-                  <ul>
-                      <li class="tags" v-for="item in datas.tags" :key="item">{{item}}</li>
-                      <li>{{datas.viewTimes}}次浏览<el-divider direction="vertical"></el-divider></li>
-                      <li>{{datas.downTimes}}次下载<el-divider direction="vertical"></el-divider></li>
-                      <li>共{{datas.docPageSize}}页<el-divider direction="vertical"></el-divider></li>
-                      <li>{{datas.docFileSize}}<el-divider direction="vertical"></el-divider></li>
-                      <li class="no-line">{{datas.uploadDate}}上传</li>
-                  </ul>
-                  <div class="coin"><i class="el-icon-jy-iconJianYu"></i><span>{{datas.price}}</span></div>
-              </div>
-              <div class="buyed" v-if="buyed == 1">您已兑换过该文档,可直接下载</div>
-              <div class="buyed no-buyed" v-if="redShow">剑鱼币余额不足,现有 {{coinNum}} 剑鱼币,还需 {{datas.price - coinNum}} 剑鱼币,请先充值</div>
-              <el-divider class="heng-line" v-if="lineShow"></el-divider>
-              <div class="load-doc">
-                  <el-button type="primary" @click="loadFile">{{btnName}}</el-button>
-                  <div class="icons">
-                      <el-tooltip placement="bottom" effect="light" popper-class="f-share">
-                          <span class="spa1"><i class="el-icon-jy-share"></i>分享</span>
-                          <div slot="content">
-                              <img :src="locaHref + '/jydocs/share/img?docId=' + docIds" width="110" height="108">
-                              <p style="color: #686868;font-size: 14px;text-align:center;">微信扫码分享</p>
-                          </div>
-                      </el-tooltip>
-                      <span class="spa1 spa2" @click="shoucang"><i :class="collectd==1?'el-icon-jy-guanzhu':'el-icon-jy-weiguanzhu'"></i>{{collectd==1?'已收藏':'收藏'}}</span>
-                      <el-tooltip content="如果您发现此内容有侵权行为,请联系客服400-108-6670进行投诉" placement="top" effect="dark">
-                          <span class="spa1"><i class="el-icon-jy-jubao"></i>投诉举报</span>
-                      </el-tooltip>
-                  </div>
-              </div>
-          </div>
-          <div class="middles" :class="{'actives':buyed == 0, 'actives1':lineShow == 1}">
-              <h3>摘要</h3>
-              <p>{{datas.docSummary}}</p>
-              <div class="continue" v-show="buyed == 0">全文共{{datas.docPageSize}}页,<span @click="continued">继续阅读<i class="el-icon-arrow-down"></i></span></div>
-          </div>
-          <div class="head-tip" id="fixedTop" :class="{'is-fixed':fixed}" v-show="buyed == 1">
-                <h3 v-show="fixed">
+    <div class="d-left">
+        <div class="tops">
+            <h3>
+              <div>
                 <i :class="'el-icon-jy-' + fileType(datas.docFileType)"></i>
-                <span>{{datas.docName}}</span>
-                </h3>
-                <span class="pages"><i id="page_num"></i> / <i id="page_count"></i></span>
-          </div>
-          <div class="bottoms" id="colWidth" v-show="buyed == 1">
-              <div class="page">
-                  <div class="cont-p" id="pdfPage"></div>
               </div>
-              <div class="foot-tip tops">
-                  <div class="load-doc">
-                      <div class="icons">
-                          <el-tooltip placement="bottom" effect="light" popper-class="f-share">
-                              <span class="spa1"><i class="el-icon-jy-share"></i>分享</span>
-                              <div slot="content">
-                                  <img :src="locaHref + '/jydocs/share/img?docId=' + docIds" width="110" height="108">
-                                  <p style="color: #686868;font-size: 14px;text-align:center;">微信扫码分享</p>
-                              </div>
-                          </el-tooltip>
-                          <span class="spa1 spa2" @click="shoucang"><i :class="collectd==1?'el-icon-jy-guanzhu':'el-icon-jy-weiguanzhu'"></i>{{collectd==1?'已收藏':'收藏'}}</span>
-                          <el-tooltip content="如果您发现此内容有侵权行为,请联系客服400-108-6670进行投诉" placement="top" effect="dark">
-                              <span class="spa1"><i class="el-icon-jy-jubao"></i>投诉举报</span>
-                          </el-tooltip>
-                      </div>
-                      <el-button type="primary" @click="loadFile">{{btnName}}</el-button>
-                  </div>
-              </div>
-          </div>
-      </div>
-      <div class="d-right">
-          <div class="r-tops">
-              <a :href="item.s_link" v-for="item in adsUrl" :key="item.s_pic">
-                <img :src="item.s_pic">
-              </a>
-          </div>
-          <v-recommend :recomes="recomes"></v-recommend>
+                {{datas.docName}}
+            </h3>
+            <div class="tips">
+                <ul>
+                    <li class="tags" v-for="item in datas.tags" :key="item">{{item}}</li>
+                    <li>{{datas.viewTimes}}次浏览<el-divider direction="vertical"></el-divider></li>
+                    <li>{{datas.downTimes}}次下载<el-divider direction="vertical"></el-divider></li>
+                    <li>共{{datas.docPageSize}}页<el-divider direction="vertical"></el-divider></li>
+                    <li>{{datas.docFileSize}}<el-divider direction="vertical"></el-divider></li>
+                    <li class="no-line">{{datas.uploadDate}}上传</li>
+                </ul>
+                <div class="coin"><i class="el-icon-jy-iconJianYu"></i><span>{{datas.price}}</span></div>
+            </div>
+            <div class="buyed" v-if="buyed == 1">您已兑换过该文档,可直接下载</div>
+            <div class="buyed no-buyed" v-if="redShow">剑鱼币余额不足,现有 {{coinNum}} 剑鱼币,还需 {{datas.price - coinNum}} 剑鱼币,请先充值</div>
+            <el-divider class="heng-line" v-if="lineShow"></el-divider>
+            <div class="load-doc">
+                <el-button type="primary" @click="loadFile">{{btnName}}</el-button>
+                <div class="icons">
+                    <el-tooltip placement="bottom" effect="light" popper-class="f-share">
+                        <span class="spa1"><i class="el-icon-jy-share"></i>分享</span>
+                        <div slot="content">
+                            <img :src="locaHref + '/jydocs/share/img?docId=' + docIds" width="110" height="108">
+                            <p style="color: #686868;font-size: 14px;text-align:center;">微信扫码分享</p>
+                        </div>
+                    </el-tooltip>
+                    <span class="spa1 spa2" @click="shoucang"><i :class="collectd==1?'el-icon-jy-guanzhu':'el-icon-jy-weiguanzhu'"></i>{{collectd==1?'已收藏':'收藏'}}</span>
+                    <el-tooltip content="如果您发现此内容有侵权行为,请联系客服400-108-6670进行投诉" placement="top" effect="dark">
+                        <span class="spa1"><i class="el-icon-jy-jubao"></i>投诉举报</span>
+                    </el-tooltip>
+                </div>
+            </div>
+        </div>
+        <div class="middles" :class="{'actives':buyed == 0, 'actives1':lineShow == 1}">
+            <h3>摘要</h3>
+            <p>{{datas.docSummary}}</p>
+            <div class="continue" v-show="buyed == 0">全文共{{datas.docPageSize}}页,<span @click="continued">继续阅读<i class="el-icon-arrow-down"></i></span></div>
+        </div>
+        <div class="head-tip" id="fixedTop" :class="{'is-fixed':fixed}">
+              <h3 v-show="fixed">
+              <i :class="'el-icon-jy-' + fileType(datas.docFileType)"></i>
+              <span>{{datas.docName}}</span>
+              </h3>
+              <span class="pages"><i id="page_num"></i> / <i id="page_count"></i></span>
+        </div>
+        <div class="bottoms" id="colWidth" v-show="buyed == 1">
+            <div class="page">
+                <div class="cont-p" id="pdfPage"></div>
+            </div>
+            <div class="foot-tip tops" id="footp">
+                <div class="load-doc">
+                    <div class="icons">
+                        <el-tooltip placement="bottom" effect="light" popper-class="f-share">
+                            <span class="spa1"><i class="el-icon-jy-share"></i>分享</span>
+                            <div slot="content">
+                                <img :src="locaHref + '/jydocs/share/img?docId=' + docIds" width="110" height="108">
+                                <p style="color: #686868;font-size: 14px;text-align:center;">微信扫码分享</p>
+                            </div>
+                        </el-tooltip>
+                        <span class="spa1 spa2" @click="shoucang"><i :class="collectd==1?'el-icon-jy-guanzhu':'el-icon-jy-weiguanzhu'"></i>{{collectd==1?'已收藏':'收藏'}}</span>
+                        <el-tooltip content="如果您发现此内容有侵权行为,请联系客服400-108-6670进行投诉" placement="top" effect="dark">
+                            <span class="spa1"><i class="el-icon-jy-jubao"></i>投诉举报</span>
+                        </el-tooltip>
+                    </div>
+                    <el-button type="primary" @click="loadFile">{{btnName}}</el-button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="d-right">
+      <div class="r-tops">
+          <a :href="item.s_link" v-for="item in adsUrl" :key="item.s_pic">
+            <img :src="item.s_pic">
+          </a>
       </div>
+      <v-recommend :recomes="recomes"></v-recommend>
+    </div>
   </div>
 </template>
 
@@ -151,9 +151,15 @@ export default {
       const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
       this.fixed = !!(scrollTop > this.offsetTop && this.buyed)
       this.watchPage()
+      const t = document.getElementById('pdfPage')
+      const b = t.getBoundingClientRect().bottom
+      if (b < 877) {
+        document.getElementById('footp').style.position = 'unset'
+      } else {
+        document.getElementById('footp').style.position = 'fixed'
+      }
     },
     updateText ({ type, value = '' }) {
-      console.log(type, value)
       switch (type) {
         case 'count': {
           document.querySelector('#page_count').textContent = value
@@ -224,7 +230,6 @@ 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
@@ -258,6 +263,13 @@ export default {
           this.datas.docSummary = this.datas.docSummary.split('').length >= 500 ? this.datas.docSummary + '...' : this.datas.docSummary
           this.datas.tags = this.datas.tags.split(',').slice(0, 3)
           this.buyed = res.data.data.status
+          if (this.buyed === 1) {
+            document.getElementById('fixedTop').style.display = 'block'
+            document.getElementById('footp').style.position = 'fixed'
+            document.getElementById('footp').style.bottom = '0'
+          } else {
+            document.getElementById('fixedTop').style.display = 'none'
+          }
           this.coined()
           this.recommend(res.data.data.detail.tags)
           if (res.data.data.status === 1) {
@@ -521,31 +533,31 @@ export default {
         height: 680px;
       }
       .head-tip {
+            width: 920px;
             height: 42px;
+            line-height: 42px;
             background: #fcfcfc;
-            display: flex;
-            justify-content: flex-end;
-            align-items: center;
             padding: 0 40px;
             border-bottom: 1px solid #F2F2F4;
             h3 {
-                display: flex;
-                align-items: center;
+                float: left;
+                line-height: 42px;
                 span {
                     width: 700px;
                     color: #686868;
                     font-weight: 500;
                     font-size: 16px;
-                    line-height: 24px;
                     overflow: hidden;
                     text-overflow:ellipsis;
                     white-space: nowrap;
                 }
                 i {
                     margin-right: 8px;
+                    vertical-align: middle;
                 }
             }
             .pages {
+                float: right;
                 color: #686868;
                 font-size: 14px;
                 i:first-child {
@@ -564,8 +576,7 @@ export default {
         .is-fixed {
             position: fixed;
             top: 0;
-            width: 840px;
-            justify-content: space-between;
+            width: 920px;
         }
       .bottoms {
           display: flex;
@@ -577,10 +588,12 @@ export default {
               }
           }
           .foot-tip {
+              width: 920px;
               height: 56px;
               background: #FFFFFF;
               box-shadow: 0px 0px 28px 0px rgba(0,0,0,0.08);
               padding: 0 40px;
+              border-radius: 0;
               .load-doc {
                   height: 100%;
                   justify-content: flex-end;
@@ -596,12 +609,13 @@ export default {
   }
   .d-right {
       width: 264px;
+      height: 904px;
       margin-left: 16px;
+      // position: fixed;
       .r-tops {
           overflow: hidden;
           min-height: 456px;
           border-radius: 4px;
-        //   background: #c4c4c4;
           img {
               width: 100%;
               cursor: pointer;

+ 35 - 25
jydocs-pc/src/views/Home.vue

@@ -13,7 +13,7 @@
               </div>
           </div>
 
-          <div class="new-list-group flex-r-c">
+          <div class="new-list-group must-bottom flex-r-c">
               <div class="flex flex-c-c">
                 <div class="list-item flex-r-c" v-for="item in newList1" :key="item.id" @click="goContent(item)">
                   <div class="flex flex-r-c center left">
@@ -272,9 +272,9 @@ export default {
       cursor: pointer;
       padding: 18px 0;
       box-sizing: border-box;
-      border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+      border-bottom: 1px solid #ececec;
       &:hover {
-        background: #F5F6F7;
+        color: #2CB7CA;
       }
       &:last-child {
         border-bottom-color: transparent;
@@ -304,7 +304,9 @@ export default {
       box-sizing: border-box;
 
       &:hover {
-        background: #F5F6F7;
+        .title-text {
+          color: #2ABED1;
+        }
       }
 
       .money-group {
@@ -314,14 +316,17 @@ export default {
         flex-shrink: 0;
         position: relative;
         border-radius: 4px;
-        border: 1px solid rgba(0, 0, 0, 0.1);
+        border: 1px solid #ececec;
         width: 100px;
         height: 124px;
         margin-right: 12px;
         overflow: hidden;
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        justify-content: center;
         img {
           width: 100%;
-          height: 100%;
         }
         i {
           position: absolute;
@@ -340,33 +345,33 @@ export default {
           &::after {
             content: "|";
             padding: 0 8px;
+            color: #ececec;
           }
         }
       }
       .info-text {
-        color: #9B9CA3;
-        font-family: PingFang SC;
-        font-size: 12px;
-        line-height: 18px;
-        letter-spacing: 0px;
-        text-align: left;
+        font-family: Microsoft YaHei;
+        font-style: normal;
+        font-weight: normal;
+        font-size: 14px;
+        line-height: 24px;
+        color: #999999;
       }
       .red-text {
-        color: #FB483D;
-        font-family: PingFang SC;
-        font-size: 14px;
-        line-height: 20px;
-        letter-spacing: 0px;
-        text-align: left;
+        color: #FF3A20;
+        font-family: Microsoft YaHei;
+        font-style: normal;
+        font-weight: normal;
+        font-size: 18px;
+        line-height: 28px;
       }
       .title-text {
-        color: #171826;
-        font-family: PingFang SC;
-        font-weight: bold;
-        font-size: 14px;
-        line-height: 20px;
-        letter-spacing: 0px;
-        text-align: left;
+        font-family: Microsoft YaHei;
+        font-style: normal;
+        font-weight: normal;
+        font-size: 16px;
+        line-height: 24px;
+        color: #1D1D1D;
       }
     }
 
@@ -473,5 +478,10 @@ export default {
         > .flex {
           max-width: 50%;
         }
+      &.must-bottom {
+        .list-item:last-child {
+          border-bottom-color: #ececec;
+        }
+      }
     }
 </style>

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

@@ -19,7 +19,7 @@
           v-for="(item, index) in listState.list"
           :key="index"
           :title="item.docName"
-          :desc="item.docSummary"
+          :desc="item.docSummary + '...'"
           :docType="item.docFileType"
           :price="item.price"
           :highlightKey="highlightKey"

+ 19 - 13
jydocs-pc/src/views/purchase/purchase.vue

@@ -17,7 +17,7 @@
           <div class="doc_content_infor">
             <div class="doc_c_left">
               <img :src="response.previewImgId" class="doc_c_img" alt="" />
-              <span class="icon_word"></span>
+              <span class="icon_word" :class="docTypeIcon"></span>
             </div>
             <div class="doc_c_right">
               <div class="doc_c_infor">
@@ -73,7 +73,7 @@
 <script>
 import { checkbox, input } from 'element-ui'
 import { getDocPays, getJYchannel, getDetails, getBindPhone } from '../../api/modules/purchase'
-import { formatSize } from '../../utils/globalFunctions'
+import { docTypeConvert, formatSize } from '@/utils/'
 
 export default {
   name: 'purchasePage',
@@ -96,7 +96,8 @@ export default {
         docPageSize: '',
         previewImgId: '',
         docSummary: '',
-        channel: ''
+        channel: '',
+        docFileType: ''
       },
       sessioninfor: {
         query: '',
@@ -111,6 +112,12 @@ export default {
     this.sessioninfor.query = location.href.split('/')[location.href.split('/').length - 1] // 获取id
     this.getWordDetail()
   },
+  computed: {
+    docTypeIcon () {
+      const t = docTypeConvert(this.response.docFileType)
+      return `el-icon-jy-${t}`
+    }
+  },
   methods: {
     // 文档信息
     async getWordDetail () {
@@ -126,6 +133,7 @@ export default {
           this.response.docPageSize = item.docPageSize
           this.response.previewImgId = item.previewImgId
           this.response.docSummary = item.docSummary
+          this.response.docFileType = item.docFileType
         }
       })
       getJYchannel({ B: true }).then((res) => {
@@ -189,12 +197,12 @@ export default {
 }
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
   .purchasePage{
-    // width: 100%;
-    // height: auto;
-    // background: #F5F5FB;
-    // overflow: hidden;
+    @include diy-icon("word");
+    @include diy-icon("excel");
+    @include diy-icon("ppt");
+    @include diy-icon("pdf");
     .icon_jianyu{
       display: flex;
       width: 24px;
@@ -254,6 +262,9 @@ export default {
               margin-right: 21px;
               width: 110px;
               height: 150px;
+              border-radius: 4px;
+              background: #FFFFFF;
+              border: 1px solid #ECECEC;
               .doc_c_img{
                 width: 100%;
                 height: 100%;
@@ -262,11 +273,6 @@ export default {
                 position: absolute;
                 right: 0;
                 bottom: 0;
-                display: flex;
-                width: 24px;
-                height: 24px;
-                background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJASURBVHgB7Zm/TuQwEMY/J5x016B7gC2oqbju2muuuOoKClooqEGiodliGxokqLdYXoACWireACpqin0ARAMCEvONcXaXf+sQjTdI+CclTuKJM+NMnBkbSCQSiTYxdYS+79gFCh7wcInbT8TG4MhabN5um8uwaACv/BlmofhzrizwK2TEHAIYgz1YKm9wmN2hV2S4RkRMhg6LDT5v2b/1P9PkM4Sw+O/KEvuxlXePKzEsHtDzp0sh+bABEw1jRmTjjgq6bW0DPivJgLZJBrRN8D/wHibHZXVsCyygARptJBdqm2RA20QzwAVlOfosd/MS84hE41EoBKPYPotFCdjtN5YF/iECUd6A9LoV5T1yLNcQAXUDqKiL5V9XML6XOmVUDfDKj5Sk9wzY+4OxAOsyrEERtW+AMfxfO6E8FT/h3/UpMcmdO/2WQ34bXZ5fs+4QCqi8ASq+WJpnPj7M77FVnRT3WKdBFyN5oCv3QAEVA9j7fbpLNVQOqeHKZPopGZaxWHd1cK41L/dAAa1voONLp/xb6ae7JnUYGdaBAqofcVnSVabkzlLHbQWKqBnAiage3eQiJOdltqCEjgEG+5x2GdQVdyOQ3KNAcwMqBVjah48r4+6ZaAMNCU4t/tihc6B5xtSUKlu72TZTdUzhdNt8CQOuZBczKXmJn6GuRR0DzmVXzqH7kYab4juqCgqPQ/LBaJRD0Kpb4HiK8Zc5OkSlHLcvCxzB/CH4BmSFRFZKGG0eYTaI4qd1VmcSiUSifR4BOQuhbc3lgT4AAAAASUVORK5CYII=) no-repeat;
-                background-size: contain;
               }
             }
             .doc_c_right{

+ 1 - 1
jydocs-pc/vue.config.js

@@ -1,7 +1,7 @@
 module.exports = {
   parallel: false,
   productionSourceMap: false,
-  outputDir: './dist',
+  outputDir: 'page_docs',
   publicPath: process.env.VUE_APP_BASE_PUBLIC,
   lintOnSave: true,
   devServer: {