Browse Source

Merge branch 'master' of http://192.168.3.207:10080/jianyu/jy-docs

xgwangman 4 years ago
parent
commit
f6e34c6185

+ 0 - 0
.drone.yml


+ 2 - 1
.gitignore

@@ -27,4 +27,5 @@ yarn-error.log*
 *.rar
 *.rar
 *.zip
 *.zip
 *.7z
 *.7z
-.vscode
+.vscode
+jydocs-mobile/page_docs_app

+ 18 - 1
README.md

@@ -12,6 +12,11 @@
 
 
 ##### 1.web用xweb框架
 ##### 1.web用xweb框架
 
 
+```
+3.11 部署目录 
+移动端 /opt/nginx/nginx/html/page_docs_app/
+PC端 /opt/nginx/nginx/html/page_docs/
+```
 
 
 #### 移动端
 #### 移动端
 
 
@@ -70,5 +75,17 @@
 3. 访问`/swordfish/frontPage/docs/sess/index`
 3. 访问`/swordfish/frontPage/docs/sess/index`
 
 
 ##### 部署
 ##### 部署
-> 待确认
+```
+# 剑鱼文库 前端配置
+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;
+}
+```
 
 

+ 2 - 2
jydocs-mobile/.env.production

@@ -1,3 +1,3 @@
 NODE_ENV=production
 NODE_ENV=production
-VUE_APP_BASE_API = ''
-BASE_URL = '/page_partner/'
+VUE_APP_BASE_API='/jydocs/'
+BASE_URL = '/page_docs_app/'

+ 6 - 0
jydocs-mobile/src/api/ajax.ts

@@ -1,4 +1,5 @@
 import axios from 'axios'
 import axios from 'axios'
+import qs from 'qs'
 import { Toast } from 'vant'
 import { Toast } from 'vant'
 
 
 // 配置api地址
 // 配置api地址
@@ -13,6 +14,11 @@ const $ajax = axios.create({
 $ajax.interceptors.request.use(config => {
 $ajax.interceptors.request.use(config => {
   // 在请求发送之前做一些事
   // 在请求发送之前做一些事
   console.log('--发送之前--', config)
   console.log('--发送之前--', config)
+  if (config.method === 'post' || config.method === 'POST') {
+    if (typeof config.data !== 'string') {
+      config.data = qs.stringify(config.data)
+    }
+  }
   // 获取插入token
   // 获取插入token
   return config
   return config
 }, function (error) {
 }, function (error) {

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

@@ -76,21 +76,21 @@ const modulesOption: modulesOption = {
   actions: {
   actions: {
     // 首页数据
     // 首页数据
     async getHome (state) {
     async getHome (state) {
-      getHomeHot({ sign: 'new', num: 5 }).then(res => {
+      getHomeHot({ sign: 'new', num: 5 }).then((res: APIStructure) => {
         if (!res.data.error_msg.length) {
         if (!res.data.error_msg.length) {
           state.commit('saveHomeData', {
           state.commit('saveHomeData', {
             new: res.data.data.map((v: APIStructure) => formatData(v))
             new: res.data.data.map((v: APIStructure) => formatData(v))
           })
           })
         }
         }
       })
       })
-      getHomeHot({ sign: 'hot', num: 5 }).then(res => {
+      getHomeHot({ sign: 'hot', num: 5 }).then((res: APIStructure) => {
         if (!res.data.error_msg.length) {
         if (!res.data.error_msg.length) {
           state.commit('saveHomeData', {
           state.commit('saveHomeData', {
             hot: res.data.data.map((v: APIStructure) => formatData(v))
             hot: res.data.data.map((v: APIStructure) => formatData(v))
           })
           })
         }
         }
       })
       })
-      getHomeActivity({ code: 3, size: 3, num: 1 }).then(res => {
+      getHomeActivity({ code: 3, size: 3, num: 1 }).then((res: APIStructure) => {
         if (!res.data.error_msg.length) {
         if (!res.data.error_msg.length) {
           state.commit('saveHomeData', {
           state.commit('saveHomeData', {
             keep: res.data.data.map((v: APIStructure) => formatData(v))
             keep: res.data.data.map((v: APIStructure) => formatData(v))

+ 2 - 2
jydocs-mobile/src/views/details/details.vue

@@ -85,9 +85,9 @@ export default class extends Vue {
 
 
   uploaded () {
   uploaded () {
     if (this.nums === 0) {
     if (this.nums === 0) {
-      this.$refs.charge.show = true
+      ;(this.$refs.charge as any).show = true
     } else {
     } else {
-      this.$refs.buys.show = true
+      ;(this.$refs.buys as any).show = true
     }
     }
   }
   }
 }
 }

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

@@ -39,7 +39,7 @@ module.exports = {
   publicPath: process.env.BASE_URL,
   publicPath: process.env.BASE_URL,
   parallel: false,
   parallel: false,
   productionSourceMap: false,
   productionSourceMap: false,
-  outputDir: 'page_partner',
+  outputDir: 'page_docs_app',
   devServer: {
   devServer: {
     port: '8080',
     port: '8080',
     open: false,
     open: false,

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

@@ -1,5 +1,5 @@
 NODE_ENV=development
 NODE_ENV=development
 VUE_APP_BASE_API='/jydocs/'
 VUE_APP_BASE_API='/jydocs/'
-VUE_APP_BASE_URL='/swordfish/docs/index'
+VUE_APP_BASE_URL='/swordfish/frontPage/docs/free/index/'
 VUE_APP_MOCK=true
 VUE_APP_MOCK=true
 VUE_APP_BASE_PUBLIC='http://localhost:8080/'
 VUE_APP_BASE_PUBLIC='http://localhost:8080/'

+ 16 - 0
jydocs-pc/src/api/index.js

@@ -1,8 +1,24 @@
 import axios from 'axios'
 import axios from 'axios'
+import qs from 'qs'
 
 
 console.log('[debug]当前环境:', process.env)
 console.log('[debug]当前环境:', process.env)
 const service = axios.create({
 const service = axios.create({
   baseURL: process.env.VUE_APP_BASE_API
   baseURL: process.env.VUE_APP_BASE_API
 })
 })
 
 
+service.interceptors.request.use(config => {
+  // 在请求发送之前做一些事
+  if (config.method === 'post' || config.method === 'POST') {
+    if (typeof config.data !== 'string') {
+      config.data = qs.stringify(config.data)
+    }
+  }
+  // 获取插入token
+  return config
+}, function (error) {
+  // 当出现请求错误是做一些事
+  console.log('--请求超时--', error)
+  return Promise.reject(error)
+})
+
 export default service
 export default service

+ 1 - 0
jydocs-pc/src/api/mock.js

@@ -13,6 +13,7 @@ function mock (config) {
       }
       }
       // Toast.clear()
       // Toast.clear()
       try {
       try {
+        console.log('[debug]当前mock', result.data)
         if (!result.data.error_msg) {
         if (!result.data.error_msg) {
           // Toast(result.data.msg)
           // Toast(result.data.msg)
         }
         }

+ 70 - 1
jydocs-pc/src/api/mock/activityList.json

@@ -3,7 +3,62 @@
   "error_msg": "",
   "error_msg": "",
   "data": [
   "data": [
     {
     {
-      "docId": "NyfuxSR0iUPobdFzNV2y",
+      "docId": "NyfuxSR0iUPobdFzNV2y3",
+      "activityId": 3,
+      "docTitle": "1111北京精密机电控制设备研究所软件单元、组装、确认测试系统北京精密机电控制设备研究所软件单元、组装、确认测试系统北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "docSummary": "1111",
+      "docImg": "1111",
+      "price": 11,
+      "costPrice": 11,
+      "docFileSize": 666666666,
+      "docPageSize": 777,
+      "downTimes":5,
+      "sourceUserId":"剑鱼测试",
+      "docFileType": "ppt"
+    },
+    {
+      "docId": "NyfuxSR0iUPobdFzNV2y2",
+      "activityId": 3,
+      "docTitle": "1111",
+      "docSummary": "1111",
+      "docImg": "1111",
+      "price": 11,
+      "costPrice": 11,
+      "docFileSize": 666,
+      "docPageSize": 777,
+      "downTimes":5,
+      "sourceUserId":""
+    },
+    {
+      "docId": "NyfuxSR0iUPobdFzNV2y1",
+      "activityId": 3,
+      "docTitle": "1111",
+      "docSummary": "1111",
+      "docImg": "1111",
+      "price": 11,
+      "costPrice": 11,
+      "docFileSize": 666,
+      "docPageSize": 777,
+      "downTimes":5,
+      "sourceUserId":"",
+      "docFileType": "pdf"
+    },
+    {
+      "docId": "NyfuxSR0iUPobdFzNV2y33",
+      "activityId": 3,
+      "docTitle": "1111",
+      "docSummary": "1111",
+      "docImg": "1111",
+      "price": 11,
+      "costPrice": 11,
+      "docFileSize": 666666666,
+      "docPageSize": 777,
+      "downTimes":5,
+      "sourceUserId":"剑鱼测试",
+      "docFileType": "ppt"
+    },
+    {
+      "docId": "NyfuxSR0iUPobdFzNV2y22",
       "activityId": 3,
       "activityId": 3,
       "docTitle": "1111",
       "docTitle": "1111",
       "docSummary": "1111",
       "docSummary": "1111",
@@ -14,6 +69,20 @@
       "docPageSize": 777,
       "docPageSize": 777,
       "downTimes":5,
       "downTimes":5,
       "sourceUserId":""
       "sourceUserId":""
+    },
+    {
+      "docId": "NyfuxSR0iUPobdFzNV2y11",
+      "activityId": 3,
+      "docTitle": "1111",
+      "docSummary": "1111",
+      "docImg": "1111",
+      "price": 11,
+      "costPrice": 11,
+      "docFileSize": 666,
+      "docPageSize": 777,
+      "downTimes":5,
+      "sourceUserId":"",
+      "docFileType": "pdf"
     }
     }
   ]
   ]
 }
 }

+ 82 - 2
jydocs-pc/src/api/mock/topList.json

@@ -3,7 +3,7 @@
   "error_msg": "",
   "error_msg": "",
   "data":  [
   "data":  [
     {
     {
-      "docId": "RJ82241sM3DyHwrupW7w",
+      "docId": "RJ82241sM3DyHwrupW7w5",
       "docName": "软件单元、组装、确认测试系统-中标候选人公示",
       "docName": "软件单元、组装、确认测试系统-中标候选人公示",
       "price": 359,
       "price": 359,
       "docFileSize": 387,
       "docFileSize": 387,
@@ -13,7 +13,57 @@
       "docFileType": "其他"
       "docFileType": "其他"
     },
     },
     {
     {
-      "docId": "PImyRKyNohbocfUbhIef",
+      "docId": "PImyRKyNohbocfUbhIef4",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统北京精密机电控制设备研究所软件单元、组装、确认测试系统北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "pdf"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef3",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "word"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef2",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "ppt"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef1",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "excel"
+    },
+    {
+      "docId": "RJ82241sM3DyHwrupW7w55",
+      "docName": "软件单元、组装、确认测试系统-中标候选人公示",
+      "price": 359,
+      "docFileSize": 387,
+      "docPageSize": 5,
+      "uploadDate": "2021-03-17 15:46:04",
+      "docSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目",
+      "docFileType": "其他"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef44",
       "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
       "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
       "price": 193,
       "price": 193,
       "docFileSize": 164,
       "docFileSize": 164,
@@ -21,6 +71,36 @@
       "uploadDate": "2021-03-17 15:46:05",
       "uploadDate": "2021-03-17 15:46:05",
       "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
       "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
       "docFileType": "pdf"
       "docFileType": "pdf"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef33",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "word"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef22",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统北京精密机电控制设备研究所软件单元、组装、确认测试系统北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "ppt"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef11",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "excel"
     }
     }
   ]
   ]
 }
 }

+ 26 - 0
jydocs-pc/src/api/modules/home.js

@@ -0,0 +1,26 @@
+import httpRequest from '@/api'
+import mockRequest from '@/api/mock'
+import qs from 'qs'
+
+let request = httpRequest
+if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK === 'true') {
+  // @ts-ignore
+  request = mockRequest
+}
+
+export function getHomeHot (data) {
+  data = qs.stringify(data)
+  return request({
+    url: '/topList',
+    method: 'post',
+    data: data
+  })
+}
+
+export function getHomeActivity (data) {
+  return request({
+    url: '/activityList',
+    method: 'post',
+    data: data
+  })
+}

+ 1 - 1
jydocs-pc/src/api/modules/search.js

@@ -2,7 +2,7 @@ import httpRequest from '@/api'
 import mockRequest from '@/api/mock'
 import mockRequest from '@/api/mock'
 
 
 let request = httpRequest
 let request = httpRequest
-if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK) {
+if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK === 'true') {
   // @ts-ignore
   // @ts-ignore
   request = mockRequest
   request = mockRequest
 }
 }

+ 1 - 1
jydocs-pc/src/api/modules/user.js

@@ -2,7 +2,7 @@ import httpRequest from '@/api'
 import mockRequest from '@/api/mock'
 import mockRequest from '@/api/mock'
 
 
 let request = httpRequest
 let request = httpRequest
-if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK) {
+if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK === 'true') {
   // @ts-ignore
   // @ts-ignore
   request = mockRequest
   request = mockRequest
 }
 }

+ 3 - 1
jydocs-pc/src/utils/globalFilters.js

@@ -7,10 +7,12 @@ import {
   formatPrice,
   formatPrice,
   fen2Yuan,
   fen2Yuan,
   addSpaceForBank,
   addSpaceForBank,
-  addConfusionForBank
+  addConfusionForBank,
+  formatSize
 } from './globalFunctions'
 } from './globalFunctions'
 
 
 // 注册全局过滤器
 // 注册全局过滤器
+Vue.filter('sizeFormatter', formatSize)
 // 时间格式化(同时间格式化函数)
 // 时间格式化(同时间格式化函数)
 Vue.filter('dateFormatter', dateFormatter)
 Vue.filter('dateFormatter', dateFormatter)
 // 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
 // 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日

+ 10 - 0
jydocs-pc/src/utils/globalFunctions.js

@@ -226,6 +226,16 @@ export function dateFromNow (timestamp) {
   return td
   return td
 }
 }
 
 
+// 文件大小格式化
+export function formatSize (size, pointLength, units) {
+  size = Number(size)
+  let unit = ''
+  units = units || ['B', 'K', 'M', 'G', 'TB']
+  while ((unit = units.shift()) && size > 1024) {
+    size = size / 1024
+  }
+  return (unit === 'B' ? size : size.toFixed(pointLength === undefined ? 2 : pointLength)) + (unit || '')
+}
 /**
 /**
  * 通用关键字高亮替换
  * 通用关键字高亮替换
  * @param {String} value 要高亮的字符串
  * @param {String} value 要高亮的字符串

+ 288 - 38
jydocs-pc/src/views/Home.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-  <div class="home">
+  <div class="pages--home">
       <div class="top-search-group flex-c-c center">
       <div class="top-search-group flex-c-c center">
         <h5>剑鱼文库,最实用的招投标资料库</h5>
         <h5>剑鱼文库,最实用的招投标资料库</h5>
         <search-input @submit="goSubmit"></search-input>
         <search-input @submit="goSubmit"></search-input>
@@ -14,19 +14,33 @@
           </div>
           </div>
 
 
           <div class="new-list-group flex-r-c">
           <div class="new-list-group flex-r-c">
-              <div class="flex-c-c">
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
+              <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">
+                    <i :class="'el-icon-jy-' + item.type" />
+                    <div class="flex">
+                      <div class="van-ellipsis">{{item.title}}</div>
+                    </div>
+                  </div>
+                  <div class="right-info flex-r-c center right">
+                    <i class="el-icon-jy-iconJianYu" />
+                    <span>{{item.money}}</span>
+                  </div>
+                </div>
               </div>
               </div>
-              <div class="flex-c-c">
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
+              <div class="flex flex-c-c">
+                <div class="list-item flex-r-c" v-for="item in newList2" :key="item.id" @click="goContent(item)">
+                  <div class="flex flex-r-c center left">
+                    <i :class="'el-icon-jy-' + item.type" />
+                    <div class="flex">
+                      <div class="van-ellipsis">{{item.title}}</div>
+                    </div>
+                  </div>
+                  <div class="right-info flex-r-c center right">
+                    <i class="el-icon-jy-iconJianYu" />
+                    <span>{{item.money}}</span>
+                  </div>
+                </div>
               </div>
               </div>
           </div>
           </div>
       </div>
       </div>
@@ -40,20 +54,34 @@
           </div>
           </div>
 
 
           <div class="new-list-group flex-r-c">
           <div class="new-list-group flex-r-c">
-              <div class="flex-c-c">
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
+            <div class="flex flex-c-c">
+              <div class="list-item flex-r-c" v-for="item in hotList1" :key="item.id" @click="goContent(item)">
+                <div class="flex flex-r-c center left">
+                  <i :class="'el-icon-jy-' + item.type" />
+                  <div class="flex">
+                    <div class="van-ellipsis">{{item.title}}</div>
+                  </div>
+                </div>
+                <div class="right-info flex-r-c center right">
+                  <i class="el-icon-jy-iconJianYu" />
+                  <span>{{item.money}}</span>
+                </div>
               </div>
               </div>
-              <div class="flex-c-c">
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
-                  <list-item></list-item>
+            </div>
+            <div class="flex flex-c-c">
+              <div class="list-item flex-r-c" v-for="item in hotList2" :key="item.id" @click="goContent(item)">
+                <div class="flex flex-r-c center left">
+                  <i :class="'el-icon-jy-' + item.type" />
+                  <div class="flex">
+                    <div class="van-ellipsis">{{item.title}}</div>
+                  </div>
+                </div>
+                <div class="right-info flex-r-c center right">
+                  <i class="el-icon-jy-iconJianYu" />
+                  <span>{{item.money}}</span>
+                </div>
               </div>
               </div>
+            </div>
           </div>
           </div>
       </div>
       </div>
 
 
@@ -64,12 +92,29 @@
               </div>
               </div>
           </div>
           </div>
           <div class="hot-keep-group flex-r-c wrap">
           <div class="hot-keep-group flex-r-c wrap">
-              <card-item></card-item>
-              <card-item></card-item>
-              <card-item></card-item>
-              <card-item></card-item>
-              <card-item></card-item>
-              <card-item></card-item>
+            <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="">
+                <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>
       </div>
   </div>
   </div>
@@ -79,27 +124,88 @@
 import { ajaxGetTest } from '../api/modules/user'
 import { ajaxGetTest } from '../api/modules/user'
 import { Button } from 'element-ui'
 import { Button } from 'element-ui'
 import SearchInput from '../components/Search'
 import SearchInput from '../components/Search'
-import ListItem from '../components/ListItem'
+import { getHomeActivity, getHomeHot } from '../api/modules/home'
+function recoveryPageData (key, defaultValues = {}) {
+  return sessionStorage.getItem(key) ? JSON.parse(sessionStorage.getItem(key) || '') : defaultValues
+}
+
+function formatData (v) {
+  return {
+    img: v?.docImg,
+    type: 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 {
 export default {
   name: 'home',
   name: 'home',
   components: {
   components: {
-    ListItem,
     SearchInput,
     SearchInput,
     [Button.name]: Button
     [Button.name]: Button
   },
   },
   data () {
   data () {
     return {
     return {
-      fullscreenLoading: false
+      fullscreenLoading: false,
+      pageData: {}
     }
     }
   },
   },
+  created () {
+    this.pageData = recoveryPageData('jy-docs-home-page-pc')
+    this.getHome()
+  },
   beforeCreate: function () {
   beforeCreate: function () {
     $('body').addClass('view_index')
     $('body').addClass('view_index')
   },
   },
   beforeDestroy: function () {
   beforeDestroy: function () {
     $('body').removeClass('view_index')
     $('body').removeClass('view_index')
+    sessionStorage.setItem('jy-docs-home-page-pc', JSON.stringify(this.pageData))
+  },
+  computed: {
+    newList1 () {
+      return this.pageData?.new && this.pageData?.new.slice(0, 5)
+    },
+    newList2 () {
+      return this.pageData?.new && this.pageData?.new.slice(0, 5)
+    },
+    hotList1 () {
+      return this.pageData?.hot && this.pageData?.hot.slice(0, 5)
+    },
+    hotList2 () {
+      return this.pageData?.hot && this.pageData?.hot.slice(0, 5)
+    }
   },
   },
   methods: {
   methods: {
+    goContent (item) {
+      this.$router.push({
+        name: 'content',
+        params: {
+          id: item.id
+        }
+      })
+    },
+    async getHome () {
+      getHomeHot({ sign: 'new', num: 10 }).then(res => {
+        if (!res.data.error_msg.length) {
+          this.$set(this.pageData, 'new', res.data.data.map((v) => formatData(v)))
+        }
+      })
+      getHomeHot({ sign: 'hot', num: 10 }).then(res => {
+        if (!res.data.error_msg.length) {
+          this.$set(this.pageData, 'hot', res.data.data.map((v) => formatData(v)))
+        }
+      })
+      getHomeActivity({ code: 3, size: 6, num: 1 }).then(res => {
+        if (!res.data.error_msg.length) {
+          this.$set(this.pageData, 'keep', res.data.data.map((v) => formatData(v)))
+        }
+      })
+    },
     goSubmit (search) {
     goSubmit (search) {
       this.$router.push({
       this.$router.push({
         name: 'search',
         name: 'search',
@@ -124,11 +230,144 @@ export default {
     .page-container {
     .page-container {
       background-image: url("~@/assets/images/wenkuBanner.png");
       background-image: url("~@/assets/images/wenkuBanner.png");
       background-repeat: no-repeat;
       background-repeat: no-repeat;
+      background-color: #fff;
     }
     }
   }
   }
-
 </style>
 </style>
 <style scoped lang="scss">
 <style scoped lang="scss">
+  .pages--home {
+    padding-bottom: 40px;
+    box-sizing: border-box;
+
+    @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);
+
+    .list-item {
+      cursor: pointer;
+      padding: 18px 0;
+      box-sizing: border-box;
+      border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+      &:hover {
+        background: #F5F6F7;
+      }
+      &:last-child {
+        border-bottom-color: transparent;
+      }
+
+      i {
+        flex-shrink: 0;
+        margin-right: 4px;
+      }
+      .flex {
+        min-width: 0;
+      }
+      .right-info {
+        margin-left: 4px;
+        flex-shrink: 0;
+        color: #1D1D1D;
+        font-family: Microsoft YaHei;
+        font-size: 16px;
+        letter-spacing: 0px;
+        text-align: right;
+      }
+    }
+    .card-item {
+      cursor: pointer;
+      justify-content: flex-start;
+      padding: 8px 16px 12px 0;
+      box-sizing: border-box;
+
+      &:hover {
+        background: #F5F6F7;
+      }
+
+      .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;
+      }
+    }
+
+    .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;
+    }
+
+    .hot-keep-group {
+      .card-item {
+        width: 33.33%;
+      }
+    }
+
+  }
     @include diy-icon('search', 24);
     @include diy-icon('search', 24);
     @include diy-icon('Frame', 24);
     @include diy-icon('Frame', 24);
     @include diy-icon('Frame-1', 24);
     @include diy-icon('Frame-1', 24);
@@ -140,6 +379,14 @@ export default {
 
 
     .new-group {
     .new-group {
         margin-top: 54px;
         margin-top: 54px;
+      .flex-c-c {
+        padding-right: 24px;
+        box-sizing: border-box;
+        & + .flex-c-c {
+          padding-right: 0;
+          padding-left: 24px;
+        }
+      }
     }
     }
 
 
     .hot-down-group {
     .hot-down-group {
@@ -156,6 +403,10 @@ export default {
         .new-list-group {
         .new-list-group {
             background-color: white;
             background-color: white;
             border-radius: 8px;
             border-radius: 8px;
+          .flex-c-c {
+            padding: 20px;
+            box-sizing: border-box;
+          }
         }
         }
     }
     }
 
 
@@ -187,9 +438,8 @@ export default {
     }
     }
 
 
     .new-list-group {
     .new-list-group {
-        .flex-c-c {
-            padding: 20px;
-            box-sizing: border-box;
+        > .flex {
+          max-width: 50%;
         }
         }
     }
     }
 </style>
 </style>