Эх сурвалжийг харах

feat:我的文库增加精选推荐&文库收藏无数据引导

yangfeng 2 жил өмнө
parent
commit
6a6b9ccb5c

BIN
jydocs-mobile/src/assets/image/jy-back.png


+ 1 - 1
jydocs-mobile/src/components/common/Empty.vue

@@ -78,7 +78,7 @@ export default class Empty extends Vue {
     }
 
     .empty-image {
-      background: url(~@/assets/image/empty.png) no-repeat;
+      background: url(~@/assets/image/jy-back.png) no-repeat;
       background-size: contain;
     }
   }

+ 9 - 0
jydocs-mobile/src/store/modules/main.ts

@@ -148,6 +148,15 @@ const modulesOption: modulesOption = {
         }
       })
     },
+    async getRecommendList (state) {
+      getHomeActivity({ code: 3, size: 3, num: 1 }).then((res: APIStructure) => {
+        if (!res.data.error_msg.length) {
+          state.commit('saveHomeData', {
+            keep: res.data.data.map((v: APIStructure) => formatData(v))
+          })
+        }
+      })
+    },
     // 文库查询
     async doSearchDocs (state, data) {
       try {

+ 223 - 4
jydocs-mobile/src/views/user/Library.vue

@@ -30,6 +30,42 @@
           </div>
         </van-list>
         <Empty v-if="myLibListState.list.length === 0 && myLibListState.loaded">暂无我的文库</Empty>
+        <div class="keep-group base-group">
+          <div class="title-group flex-r-c center left">
+            <span></span>
+            <h5 class="module-title">精选推荐</h5>
+          </div>
+          <div class="list-group card-group flex-c-c">
+            <van-skeleton avatar avatar-shape="square" class="van-loading-skeleton card-style"
+                :row="4"
+                :row-width="rowWidth"
+                :loading="showLoading.keep">
+              <div class="card-item flex-r-c"  v-for="item in pageData.keep" :key="item.id" @click="goContent(item)">
+              <div class="mini-img-group">
+                <img :src="item.img" alt="">
+                <van-icon :name="'diy-' + item.type" />
+              </div>
+              <div class="flex-c-c">
+                <div class="flex">
+                  <div class="title-text van-multi-ellipsis--l2">{{item.title}}</div>
+                </div>
+                <div class="flex-c-c info-text">
+                  <span v-if="item.contribution">贡献者: {{item.contribution}}</span>
+                  <div class="info-text-group flex-r-c center left">
+                    <span v-if="item.down">{{item.down}}次下载</span>
+                    <span v-if="item.page">共{{item.page}}页</span>
+                    <span v-if="item.size">{{item.size | sizeFormatter}}</span>
+                  </div>
+                </div>
+                <div class="money-group flex-r-c center left">
+                  <van-icon class="s20" name="diy-iconJianYu" />
+                  <span class="red-text">{{item.money}}</span>
+                </div>
+              </div>
+            </div>
+            </van-skeleton>
+          </div>
+        </div>
         <van-notice-bar
           class="doc-tip--bottom"
           v-if="showTip"
@@ -62,14 +98,17 @@
             />
           </div>
         </van-list>
-        <Empty v-if="myCollectionListState.list.length === 0 && myCollectionListState.loaded">暂无文库收藏</Empty>
+        <Empty v-if="myCollectionListState.list.length === 0 && myCollectionListState.loaded">
+          <p>暂无文库收藏</p>
+          <button class="j-button-collect" @click="goCollect">前往收藏</button>
+        </Empty>
       </van-tab>
     </van-tabs>
   </div>
 </template>
 <script lang="ts">
 import { Component, Vue, Watch } from 'vue-property-decorator'
-import { Tabs, Tab, List, NoticeBar } from 'vant'
+import { Tabs, Tab, List, NoticeBar, Icon, Skeleton } from 'vant'
 import { mapState, mapMutations, mapActions } from 'vuex'
 import Card from '@/components/docs-card/Card.vue'
 import Empty from '@/components/common/Empty.vue'
@@ -82,12 +121,15 @@ import { dateFormatter, formatSize } from '@/utils/globalFunctions'
     [Tab.name]: Tab,
     [List.name]: List,
     [NoticeBar.name]: NoticeBar,
+    [Icon.name]: Icon,
+    [Skeleton.name]: Skeleton,
     Card,
     Empty
   },
   computed: {
     ...mapState('main', {
-      userLibInfo: (state: any) => state.userLib
+      userLibInfo: (state: any) => state.userLib,
+      pageData: (state: any) => state.homePageData
     }),
     showTip () {
       return this.$route.query.tip
@@ -99,7 +141,8 @@ import { dateFormatter, formatSize } from '@/utils/globalFunctions'
       clearLibState: 'main/clearMyLibState'
     }),
     ...mapActions({
-      getMyLibList: 'main/getMyLibList'
+      getMyLibList: 'main/getMyLibList',
+      getRecommendList: 'main/getRecommendList'
     })
   }
 })
@@ -110,6 +153,9 @@ export default class UserLibrary extends Vue {
   protected clearLibState: any
 
   protected getMyLibList: any
+  protected getRecommendList: any
+  pageData: any
+  rowWidth = ['100%', '20%', '40%', '15%']
 
   tabActive = '0'
 
@@ -159,6 +205,7 @@ export default class UserLibrary extends Vue {
   created () {
     this.tabActive = this.$route.query.tab as string
     this.reStoreState()
+    this.getRecommendList()
   }
 
   beforeTabChange () {
@@ -265,6 +312,28 @@ export default class UserLibrary extends Vue {
     }
     this.saveLibState(d)
   }
+
+  get showLoading () {
+    const s = this.pageData
+    return {
+      new: !s?.new,
+      hot: !s?.hot,
+      keep: !s?.keep
+    }
+  }
+
+  goContent (item: any) {
+    this.$router.push({
+      name: 'details',
+      params: {
+        id: item.id
+      }
+    })
+  }
+
+  goCollect () {
+    this.$router.push('/home')
+  }
 }
 </script>
 
@@ -308,5 +377,155 @@ export default class UserLibrary extends Vue {
       line-height: 20px;
     }
   }
+  @include diy-icon('iconJianYu', 16, 16);
+
+  .van-icon-diy-iconJianYu.s20 {
+    width: 20px;
+    height: 20px;
+  }
+
+  @include diy-icon('pdf', 24);
+  @include diy-icon('word', 24);
+  @include diy-icon('excel', 24);
+  @include diy-icon('ppt', 24);
+
+  .base-group {
+    padding: 4px 19px 4px 16px;
+    box-sizing: border-box;
+    .list-group {
+      border-radius: 8px;
+      background: #FFFFFF;
+      box-sizing: border-box;
+      padding: 8px 0;
+      &.card-group {
+        padding-left: 12px;
+      }
+      .list-item {
+        padding: 6px 12px;
+        box-sizing: border-box;
+        i {
+          flex-shrink: 0;
+          margin-right: 4px;
+        }
+        .flex {
+          min-width: 0;
+        }
+        .right-info {
+          margin-left: 4px;
+          flex-shrink: 0;
+        }
+      }
+      .card-item {
+        justify-content: flex-start;
+        padding: 8px 16px 12px 0;
+        box-sizing: border-box;
+        border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+        &:nth-last-child(1) {
+          border-bottom-color: transparent;
+          padding-bottom: 8px;
+        }
+        .money-group {
+          margin-top: 8px;
+        }
+        .mini-img-group {
+          flex-shrink: 0;
+          position: relative;
+          border-radius: 4px;
+          border: 1px solid rgba(0, 0, 0, 0.1);
+          width: 100px;
+          height: 124px;
+          margin-right: 12px;
+          overflow: hidden;
+          img {
+            width: 100%;
+            height: 100%;
+          }
+          i {
+            position: absolute;
+            right: 0;
+            bottom: 0;
+          }
+        }
+        .info-text-group {
+          span {
+            display: inline-block;
+            &:last-child {
+              &::after {
+                content: unset;
+              }
+            }
+            &::after {
+              content: "|";
+              padding: 0 8px;
+            }
+          }
+        }
+        .info-text {
+          color: #9B9CA3;
+          font-family: PingFang SC;
+          font-size: 12px;
+          line-height: 18px;
+          letter-spacing: 0px;
+          text-align: left;
+        }
+        .red-text {
+          color: #FB483D;
+          font-family: PingFang SC;
+          font-size: 14px;
+          line-height: 20px;
+          letter-spacing: 0px;
+          text-align: left;
+        }
+        .title-text {
+          color: #171826;
+          font-family: PingFang SC;
+          font-weight: bold;
+          font-size: 14px;
+          line-height: 20px;
+          letter-spacing: 0px;
+          text-align: left;
+        }
+      }
+    }
+
+    .title-group {
+      padding: 16px 0 6px 0;
+      margin-bottom: 4px;
+      box-sizing: border-box;
+      color: #171826;
+      font-size: 18px;
+      line-height: 26px;
+      letter-spacing: 0px;
+      text-align: left;
+
+      h5 {
+        color: #171826;
+        font-size: 18px;
+        line-height: 26px;
+        letter-spacing: 0px;
+      }
+
+      span {
+        display: inline-block;
+        width: 3px;
+        height: 16px;
+        border-radius: 11px;
+        background: #2ABED1;
+        margin-right: 8px;
+      }
+    }
+  }
+  .empty-container{
+    height: 60%;
+  }
+  .j-button-collect{
+    width: 165px;
+    height: 40px;
+    margin-top: 24px;
+    background: #2ABED1;
+    color: #fff;
+    font-size: 16px;
+    border-radius: 4px;
+  }
 }
 </style>

+ 0 - 62
jydocs-mobile/yarn.lock

@@ -1587,21 +1587,11 @@ ajv@^6.12.5:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
-alloyfinger@^0.1.16:
-  version "0.1.16"
-  resolved "https://registry.npm.taobao.org/alloyfinger/download/alloyfinger-0.1.16.tgz#8d5d46073cf1fedba5f446e666bc4b3925b8b8b5"
-  integrity sha1-jV1GBzzx/tul9EbmZrxLOSW4uLU=
-
 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"
   integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
 
-amdefine@>=0.0.4:
-  version "1.0.1"
-  resolved "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-  integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-
 ansi-colors@^3.0.0:
   version "3.2.4"
   resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
@@ -1833,11 +1823,6 @@ async@^2.6.2:
   dependencies:
     lodash "^4.17.14"
 
-async@~0.2.6:
-  version "0.2.10"
-  resolved "https://registry.npm.taobao.org/async/download/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
-  integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
-
 asynckit@^0.4.0:
   version "0.4.0"
   resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -3283,11 +3268,6 @@ cyclist@^1.0.1:
   resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
   integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
 
-dandy@:
-  version "0.0.5"
-  resolved "https://registry.npm.taobao.org/dandy/download/dandy-0.0.5.tgz#4a229f73330723ab0598a9bd569d8110c19241b7"
-  integrity sha1-SiKfczMHI6sFmKm9Vp2BEMGSQbc=
-
 dargs@^4.0.1:
   version "4.1.0"
   resolved "https://registry.npm.taobao.org/dargs/download/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
@@ -6699,13 +6679,6 @@ opn@^5.5.0:
   dependencies:
     is-wsl "^1.1.0"
 
-optimist@~0.3.5:
-  version "0.3.7"
-  resolved "https://registry.npm.taobao.org/optimist/download/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9"
-  integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=
-  dependencies:
-    wordwrap "~0.0.2"
-
 optionator@^0.8.3:
   version "0.8.3"
   resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@@ -8416,13 +8389,6 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
   resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
   integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM=
 
-source-map@~0.1.7:
-  version "0.1.43"
-  resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
-  integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=
-  dependencies:
-    amdefine ">=0.0.4"
-
 spdx-correct@^3.0.0:
   version "3.1.1"
   resolved "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
@@ -9000,14 +8966,6 @@ tough-cookie@~2.5.0:
     psl "^1.1.28"
     punycode "^2.1.1"
 
-transformjs@^0.0.4:
-  version "0.0.4"
-  resolved "https://registry.npm.taobao.org/transformjs/download/transformjs-0.0.4.tgz#417be04a47a9add032e3e433d8a40f9266e524d2"
-  integrity sha1-QXvgSkeprdAy4+Qz2KQPkmblJNI=
-  dependencies:
-    dandy ""
-    uglify-js "2.4.12"
-
 trim-newlines@^1.0.0:
   version "1.0.0"
   resolved "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
@@ -9166,16 +9124,6 @@ typescript@~3.9.3:
   resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
   integrity sha1-mNYApevcOPQMsndSLxLcgA6eJfo=
 
-uglify-js@2.4.12:
-  version "2.4.12"
-  resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-2.4.12.tgz?cache=0&sync_timestamp=1616976072884&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-2.4.12.tgz#2354d9659f85330c1e3e2910f8acd77fe14bb4a8"
-  integrity sha1-I1TZZZ+FMwwePikQ+KzXf+FLtKg=
-  dependencies:
-    async "~0.2.6"
-    optimist "~0.3.5"
-    source-map "~0.1.7"
-    uglify-to-browserify "~1.0.0"
-
 uglify-js@3.4.x:
   version "3.4.10"
   resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1598213312680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
@@ -9189,11 +9137,6 @@ uglify-js@^3.1.4:
   resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.10.2.tgz?cache=0&sync_timestamp=1598213312680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.10.2.tgz#8cfa1209fd04199cc8a7f9930ddedb30b0f1912d"
   integrity sha1-jPoSCf0EGZzIp/mTDd7bMLDxkS0=
 
-uglify-to-browserify@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-  integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
-
 unicode-canonical-property-names-ecmascript@^1.0.4:
   version "1.0.4"
   resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -9734,11 +9677,6 @@ wordwrap@^1.0.0:
   resolved "https://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
   integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
 
-wordwrap@~0.0.2:
-  version "0.0.3"
-  resolved "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
-
 worker-farm@^1.7.0:
   version "1.7.0"
   resolved "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"

BIN
jydocs-pc/src/assets/images/jy-back.png


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

@@ -1,6 +1,6 @@
 <template>
   <div class="no-data">
-    <el-image :src="require('@/assets/images/no-data.png')"></el-image>
+    <el-image :src="require('@/assets/images/jy-back.png')"></el-image>
     <div class="tip-text">
       <slot><p>暂无数据</p></slot>
     </div>
@@ -27,7 +27,6 @@ export default {
     overflow: visible;
   }
   .tip-text {
-    margin-top: 14px;
     color: #686868;
     font-size: 16px;
     line-height: 24px;

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

@@ -2,12 +2,12 @@
   <div class="c-details">
     <div class="d-left">
       <div class="tops">
-        <h3>
+        <h1>
           <div>
             <i :class="'el-icon-jy-' + fileType(datas.docFileType)"></i>
           </div>
           {{ datas.docName }}
-        </h3>
+        </h1>
         <div class="cd-tips">
           <ul>
             <li class="li-tags" v-for="item in getContentTags" :key="item">{{ item }}</li>
@@ -451,7 +451,7 @@ export default {
       padding: 32px 40px;
       border-radius: 4px;
 
-      h3 {
+      h1 {
         display: flex;
         flex-direction: initial;
         color: #1d1d1d;

+ 2 - 2
jydocs-pc/src/views/Home.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="pages--home">
       <div class="top-search-group flex-c-c center">
-        <h5>剑鱼文库,最实用的招投标资料库</h5>
+        <h1>剑鱼文库,最实用的招投标资料库</h1>
         <search-input @submit="goSubmit"></search-input>
       </div>
 
@@ -469,7 +469,7 @@ export default {
     .top-search-group {
       width: 100%;
       height: 323px;
-      h5 {
+      h1 {
         color: #1D1D1D;
         font-family: Microsoft YaHei;
         font-size: 20px;

+ 21 - 2
jydocs-pc/src/views/UserCollections.vue

@@ -19,7 +19,12 @@
             <Price v-else :price="item.Cost" />
           </template>
         </doc-card>
-        <no-data v-if="listState.list.length === 0 && listState.loaded">暂无文库收藏</no-data>
+        <no-data v-if="listState.list.length === 0 && listState.loaded">
+          暂无文库收藏
+          <div class="go-collect-box">
+            <el-button type="primary" @click="goCollect">前往收藏</el-button>
+          </div>
+        </no-data>
       </div>
       <div class="user-collections-pagination" v-if="listState.total > 0">
         <el-pagination
@@ -41,7 +46,7 @@
 </template>
 
 <script>
-import { Pagination } from 'element-ui'
+import { Pagination, Button } from 'element-ui'
 import DocCard from '@/components/doc-item-card/Card'
 import Price from '@/components/doc-item-card/Price'
 import NoData from '@/components/NoData'
@@ -54,6 +59,7 @@ export default {
   mixins: [mixinBackground],
   components: {
     [Pagination.name]: Pagination,
+    [Button.name]: Button,
     DocCard,
     Price,
     NoData
@@ -121,6 +127,9 @@ export default {
         subInfoArr.push(formatSize(DocFileSize))
       }
       return subInfoArr
+    },
+    goCollect () {
+      this.$router.push('/')
     }
   }
 }
@@ -183,5 +192,15 @@ export default {
     padding-bottom: 60px;
     text-align: right;
   }
+  .go-collect-box{
+    margin-top: 24px;
+    .el-button{
+      width: 108px;
+      height: 30px;
+      padding: 0;
+      border-radius: 4px;
+      font-size: 14px;
+    }
+  }
 }
 </style>

+ 218 - 3
jydocs-pc/src/views/UserDocs.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="user-docs">
-    <div class="user-docs-header">
+    <h1 class="user-docs-header">
       <span class="u-d-title">{{ title }}</span>
-    </div>
+    </h1>
     <div class="user-docs-content">
       <div class="u-d-header">
         <span class="u-d-h-l">文件名</span>
@@ -39,6 +39,38 @@
         </el-pagination>
       </div>
     </div>
+    <div class="keep-group">
+      <div class="flex-r-c">
+          <div class="title-group flex-r-c center left">
+              <h5>精选推荐</h5>
+          </div>
+      </div>
+      <div class="hot-keep-group flex-r-c wrap">
+        <div class="card-item flex-r-c"  v-for="item in recommendList" :key="item.id" @click="goContent(item)">
+          <div class="mini-img-group">
+            <img :src="item.img" alt="">
+            <i :class="'el-icon-jy-' + item.type" />
+          </div>
+          <div class="flex-c-c">
+            <div class="flex">
+              <div class="title-text van-multi-ellipsis--l2">{{item.title}}</div>
+            </div>
+            <div class="flex-c-c info-text">
+              <span v-if="item.contribution">贡献者: {{item.contribution}}</span>
+              <div class="info-text-group flex-r-c center left">
+                <span v-if="item.down">{{item.down}}次下载</span>
+                <span v-if="item.page">共{{item.page}}页</span>
+                <span v-if="item.size">{{item.size | sizeFormatter}}</span>
+              </div>
+            </div>
+            <div class="money-group flex-r-c center left">
+              <i class="el-icon-jy-iconJianYu s20" />
+              <span class="red-text">{{item.money}}</span>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 
@@ -47,9 +79,54 @@ import { Pagination } from 'element-ui'
 import DocCard from '@/components/doc-item-card/Card'
 import NoData from '@/components/NoData'
 import { getUserDocs } from '../api/modules/user'
+import { getHomeActivity } from '../api/modules/home'
 import { dateFormatter, formatSize } from '@/utils/index'
 import { mixinBackground } from '@/utils/mixins'
 
+function checkType (type) {
+  let typeStr = type
+  switch (type) {
+    case 1: {
+      typeStr = 'word'
+      break
+    }
+    case 2: {
+      typeStr = 'pdf'
+      break
+    }
+    case 3: {
+      typeStr = 'excel'
+      break
+    }
+    case 4: {
+      typeStr = 'ppt'
+      break
+    }
+    case 'doc': {
+      typeStr = 'word'
+      break
+    }
+    case 'xls': {
+      typeStr = 'excel'
+      break
+    }
+  }
+  return typeStr
+}
+
+function formatData (v) {
+  return {
+    img: v?.docImg,
+    type: checkType(v?.docFileType),
+    id: v.docId,
+    title: v?.docName || v?.docTitle,
+    money: v.price,
+    size: v?.docFileSize,
+    page: v?.docPageSize,
+    down: v?.downTimes,
+    contribution: v?.sourceUserId
+  }
+}
 export default {
   name: 'user-docs',
   mixins: [mixinBackground],
@@ -68,11 +145,13 @@ export default {
         pageSize: 10, // 每页多少条数据
         total: 0, // 一共多少条数据
         list: [] // 查询请求返回的数据
-      }
+      },
+      recommendList: []
     }
   },
   created () {
     this.getList()
+    this.getRecommendList()
   },
   methods: {
     async getList () {
@@ -121,12 +200,33 @@ export default {
         subInfoArr.push(formatSize(DocFileSize))
       }
       return subInfoArr
+    },
+    getRecommendList () {
+      getHomeActivity({ code: 3, size: 6, num: 1 }).then(res => {
+        if (!res.data.error_msg.length) {
+          this.recommendList = res.data.data.map((v) => formatData(v))
+        }
+      })
+    },
+    goContent (item) {
+      const routeData = this.$router.resolve({
+        name: 'content',
+        params: {
+          id: item.id
+        }
+      })
+      window.open(routeData.href, '_blank')
     }
   }
 }
 </script>
 
 <style lang="scss" scoped>
+@include diy-icon('iconJianYu', 24, 24);
+@include diy-icon('pdf', 24);
+@include diy-icon('word', 24);
+@include diy-icon('excel', 24);
+@include diy-icon('ppt', 24);
 .user-docs {
   background-color: #fff;
   margin: 0 auto;
@@ -200,5 +300,120 @@ export default {
     padding-bottom: 60px;
     text-align: right;
   }
+
+  .keep-group{
+    margin-top: 38px;
+    padding-bottom: 50px;
+    .hot-keep-group {
+      .card-item {
+        width: 33.33%;
+        overflow: hidden;
+      }
+    }
+    .card-item {
+      cursor: pointer;
+      justify-content: flex-start;
+      padding: 8px 16px 12px 0;
+      box-sizing: border-box;
+
+      &:hover {
+        .title-text {
+          color: #2ABED1;
+        }
+      }
+
+      .money-group {
+        margin-top: 8px;
+      }
+      .mini-img-group {
+        flex-shrink: 0;
+        position: relative;
+        border-radius: 4px;
+        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%;
+        }
+        i {
+          position: absolute;
+          right: 0;
+          bottom: 0;
+        }
+      }
+      .info-text-group {
+        span {
+          display: inline-block;
+          &:last-child {
+            &::after {
+              content: unset;
+            }
+          }
+          &::after {
+            content: "|";
+            padding: 0 8px;
+            color: #ececec;
+          }
+        }
+      }
+      .info-text {
+        font-family: Microsoft YaHei;
+        font-style: normal;
+        font-weight: normal;
+        font-size: 14px;
+        line-height: 24px;
+        color: #999999;
+      }
+      .red-text {
+        color: #FF3A20;
+        font-family: Microsoft YaHei;
+        font-style: normal;
+        font-weight: normal;
+        font-size: 18px;
+        line-height: 28px;
+      }
+      .title-text {
+        font-family: Microsoft YaHei;
+        font-style: normal;
+        font-weight: normal;
+        font-size: 16px;
+        line-height: 24px;
+        color: #1D1D1D;
+      }
+    }
+
+    .van-ellipsis {
+      overflow: hidden;
+      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;
+
+    }
+    .title-group {
+      margin-bottom: 16px;
+      h5 {
+          color: #1D1D1D;
+          font-family: Microsoft YaHei;
+          font-size: 18px;
+          line-height: 28px;
+          letter-spacing: 0px;
+          text-align: left;
+          margin-right: 9px;
+      }
+    }
+  }
 }
 </style>

+ 9 - 0
jydocs-pc/vue.config.js

@@ -25,6 +25,15 @@ module.exports = {
         pathRewrite: {
           '^/jyintegral': '/jyintegral'
         }
+      },
+      '^/jypay': {
+        target: 'https://jybx2-webtest.jydev.jianyu360.com',
+        // target: 'http://192.168.20.145:820',
+        changeOrigin: true,
+        logLevel: 'debug',
+        pathRewrite: {
+          '^/jypay': '/jypay'
+        }
       }
     }
   },