diff --git a/.gitignore b/.gitignore
index 403adbc..162a43e 100755
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ pnpm-debug.log*
 *.njsproj
 *.sln
 *.sw?
+/php_backend
\ No newline at end of file
diff --git a/src/api/videos.js b/src/api/videos.js
index d1214f2..38518b0 100644
--- a/src/api/videos.js
+++ b/src/api/videos.js
@@ -2,18 +2,19 @@ import request from "../utils/request";
 
 export default {
   me(params, data) {
-    return request({url: '/me', method: 'post', params, data})
+    return request({url: '/me', method: 'get', params, data})
   },
   my(params, data) {
-    return request({url: '/my', method: 'post', params, data})
+    // console.log('api - params',params)
+    return request({url: '/me/my', method: 'get', params, data})
   },
   private(params, data) {
-    return request({url: '/private', method: 'post', params, data})
+    return request({url: '/me/private1', method: 'get', params, data})
   },
   like(params, data) {
-    return request({url: '/like', method: 'post', params, data})
+    return request({url: '/me/like', method: 'get', params, data})
   },
   collect(params, data) {
-    return request({url: '/collect', method: 'post', params, data})
+    return request({url: '/me/collect', method: 'get', params, data})
   },
 }
\ No newline at end of file
diff --git a/src/components/Posters.vue b/src/components/Posters.vue
index 1c701d7..d730147 100644
--- a/src/components/Posters.vue
+++ b/src/components/Posters.vue
@@ -1,10 +1,14 @@
 <template>
   <div class="posters">
     <div class="poster-item" v-for="i in list">
-      <img class="poster" :src="i.src" alt="">
-      <div class="num">
+      <img class="poster" :src="$imgPreview(i.poster)" alt="">
+      <div class="num" v-if="mode === 'normal'">
         <img class="love" src="../assets/img/icon/love.svg" alt="">
-        <span>{{ likeNum(i.like) }}</span>
+        <span>{{ $likeNum(i.likeNum) }}</span>
+      </div>
+      <div v-else class="date">
+        <div class="day">{{ getDay(i.createTime) }}</div>
+        <div class="month">{{ getMonth(i.createTime) }}</div>
       </div>
     </div>
   </div>
@@ -20,14 +24,45 @@ export default {
       default: () => {
         return []
       }
+    },
+    mode: {
+      type: String,
+      default: 'normal'
     }
   },
   methods: {
-    likeNum(num) {
-      if (num < 1000) {
-        return num
-      } else {
-        return parseInt(num / 10000) + 'w'
+    getDay(time) {
+      let date = new Date(time * 1000)
+      return date.getDate()
+    },
+    getMonth(time) {
+      let date = new Date(time * 1000)
+      let month = date.getMonth() + 1
+      switch (month) {
+        case 1:
+          return '一月'
+        case 2:
+          return '二月'
+        case 3:
+          return '三月'
+        case 4:
+          return '四月'
+        case 5:
+          return '五月'
+        case 6:
+          return '六月'
+        case 7:
+          return '七月'
+        case 8:
+          return '八月'
+        case 9:
+          return '九月'
+        case 10:
+          return '十月'
+        case 11:
+          return '十一月'
+        case 12:
+          return '十二月'
       }
     }
   }
@@ -55,16 +90,37 @@ export default {
   .num {
     color: white;
     position: absolute;
-    bottom: 5px;
-    left: 5px;
+    bottom: .5rem;
+    left: .5rem;
     display: flex;
     align-items: center;
     font-size: 1.4rem;
 
     .love {
-      width: 14px;
-      height: 14px;
-      margin-right: 5px;
+      width: 1.4rem;
+      height: 1.4rem;
+      margin-right: .5rem;
+    }
+  }
+
+  .date {
+    position: absolute;
+    top: .5rem;
+    left: .5rem;
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+    font-size: 1.4rem;
+    color: black;
+    background: white;
+    padding: .6rem;
+    border-radius: .6rem;
+
+    .day{
+      font-weight: bold;
+    }
+    .month{
+      font-size: 1rem;
     }
   }
 }
diff --git a/src/config/index.js b/src/config/index.js
index 37a75f0..63bac23 100644
--- a/src/config/index.js
+++ b/src/config/index.js
@@ -1,3 +1,4 @@
 export default {
-  baseUrl: 'http://test.test.com'
+  baseUrl: 'http://192.168.0.105//index.php/v1',
+  filePreview:'http://192.168.0.105//static/uploads/'
 }
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
index dc1908a..83dfb1d 100644
--- a/src/main.js
+++ b/src/main.js
@@ -2,7 +2,7 @@ import * as Vue from 'vue'
 import App from './App.vue'
 import mitt from 'mitt'
 import './assets/scss/index.scss'
-import './mock'// 导入 mock 数据处理
+// import './mock'// 导入 mock 数据处理
 import api from './api'
 import router from "./router";
 import store from "./store";
diff --git a/src/mock/index.js b/src/mock/index.js
index 9977ae6..05cb1a8 100644
--- a/src/mock/index.js
+++ b/src/mock/index.js
@@ -1,4 +1,6 @@
 import Mock from 'mockjs'
+import globalMethods from '../utils/global-methods'
+import {da} from "pinyin/data/dict-zi-web";
 
 Mock.setup({
   timeout: '500-1000'
@@ -48,13 +50,33 @@ Mock.Random.extend({
 }())
 
 let pageSize = 15
-!(function my() {
+Mock.mock(/my/, options => {
+  let params = globalMethods.$parseURL(options.url).params
+  params.pageNo = ~~params.pageNo
+  params.pageSize = ~~params.pageSize
+  params.total = ~~params.total
+  // console.log(params)
   // let data = {total: Mock.Random.natural(1, 20)}
   // data[`list|${data.total > pageSize ? pageSize : data.total}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
-  let data = {total: 14}
-  data[`list|${data.total}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
+  // data[`list|${data.total}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
+  let data = {
+    total: params.total === -1 ? 20 : params.total,
+    pageNo: params.pageNo,
+    pageSize: params.pageSize
+  }
+  let listLength = 0
+  if (params.pageNo !== 0) {
+    let remainder = data.total - (params.pageNo * params.pageSize)
+    listLength = remainder > params.pageSize ? params.pageSize : remainder
+  } else {
+    listLength = data.total > params.pageSize ? params.pageSize : data.total
+  }
+  data[`list|${listLength}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
+  // console.log(data)
   Mock.mock(/my/, Mock.mock({data, code: 200, msg: '',}))
-}())
+  return Mock.mock({data, code: 200, msg: '',})
+})
+
 
 !(function private1() {
   // let data = {total: Mock.Random.natural(1, 20)}
diff --git a/src/pages/me/Me2.vue b/src/pages/me/Me2.vue
index ad6675a..75555fb 100644
--- a/src/pages/me/Me2.vue
+++ b/src/pages/me/Me2.vue
@@ -78,31 +78,89 @@
               v-model:active-index="contentIndex">
             <SlideItem class="SlideItem"
                        @touchmove="move"
+                       @scroll="scroll"
                        :style="isScroll?'overflow: auto;':''">
               <Posters v-if="videos.my.total !== -1" :list="videos.my.list"></Posters>
-              <Loading v-else :is-full-screen="false"></Loading>
-              <no-more/>
+              <Loading v-if="loadings.loading0" :is-full-screen="false"></Loading>
+              <no-more v-else/>
             </SlideItem>
             <SlideItem class="SlideItem"
-                       @touchmove="move"
+                       @touchmove="'move'"
                        :style="isScroll?'overflow: auto;':''">
-              <Posters v-if="videos.private.total !== -1" :list="videos.private.list"></Posters>
-              <Loading v-else :is-full-screen="false"></Loading>
-              <no-more/>
+              <div class="notice">
+                <img src="../../assets/img/icon/me/lock-gray.png" alt="">
+                <span>只有你能看到设为私密的作品和日常</span>
+              </div>
+              <Posters v-if="videos.private.total !== -1" mode="private" :list="videos.private.list"></Posters>
+              <Loading v-if="loadings.loading1" :is-full-screen="false"></Loading>
+              <no-more v-else/>
             </SlideItem>
             <SlideItem class="SlideItem"
                        @touchmove="move"
                        :style="isScroll?'overflow: auto;':''">
+              <div class="notice">
+                <img src="../../assets/img/icon/me/lock-gray.png" alt="">
+                <span>只有你能看到自己的喜欢列表</span>
+              </div>
               <Posters v-if="videos.like.total !== -1" :list="videos.like.list"></Posters>
-              <Loading v-else :is-full-screen="false"></Loading>
-              <no-more/>
+              <Loading v-if="loadings.loading2" :is-full-screen="false"></Loading>
+              <no-more v-else/>
             </SlideItem>
             <SlideItem class="SlideItem"
                        @touchmove="move"
                        :style="isScroll?'overflow: auto;':''">
-              <Posters v-if="videos.collect.total !== -1" :list="videos.collect.list"></Posters>
-              <Loading v-else :is-full-screen="false"></Loading>
-              <no-more/>
+              <div class="notice">
+                <img src="../../assets/img/icon/me/lock-gray.png" alt="">
+                <span>只有你能看到自己的收藏列表</span>
+              </div>
+              <div class="collect" ref="collect">
+                <div class="video" v-if=" videos.collect.video.list.length">
+                  <div class="top">
+                    <div class="left">
+                      <img src="../../assets/img/icon/me/video-whitegray.png" alt="">
+                      <span>视频</span>
+                    </div>
+                    <div class="right">
+                      <span>全部</span>
+                      <back direction="right"></back>
+                    </div>
+                  </div>
+                  <div class="list">
+                    <div class="item"
+                         v-for="i in videos.collect.video.list.length>3?videos.collect.video.list.slice(0,3):videos.collect.video.list">
+                      <img class="poster" :src="$imgPreview(i.poster)" alt="">
+                      <div class="num">
+                        <img class="love" src="../../assets/img/icon/love.svg" alt="">
+                        <span>{{ $likeNum(i.likeNum) }}</span>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+
+                <div class="audio" v-if=" videos.collect.video.list.length">
+                  <div class="top">
+                    <div class="left">
+                      <img src="../../assets/img/icon/me/music-whitegray.png" alt="">
+                      <span>音乐</span>
+                    </div>
+                    <div class="right">
+                      <span>全部</span>
+                      <back direction="right"></back>
+                    </div>
+                  </div>
+                  <div class="list">
+                    <div class="item"
+                         v-for="i in videos.collect.video.list.length>3?videos.collect.video.list.slice(0,3):videos.collect.video.list">
+                      <img class="poster" :src="$imgPreview(i.poster)" alt="">
+                      <div class="title">用户创作的原声用户创作的原声用户创作的原声
+                      </div>
+                    </div>
+                  </div>
+
+                </div>
+              </div>
+              <Loading v-if="loadings.loading3" :is-full-screen="false"></Loading>
+              <no-more v-else/>
             </SlideItem>
           </SlideRowList>
         </div>
@@ -215,6 +273,7 @@
 import Posters from '../../components/Posters'
 import Footer from "../../components/Footer";
 import Indicator from '../../components/Indicator'
+import {nextTick} from 'vue'
 
 export default {
   name: "Me",
@@ -246,7 +305,8 @@ export default {
       videos: {
         my: {
           list: [],
-          total: -1
+          total: -1,
+          pageNo: 0
         },
         private: {
           list: [],
@@ -257,11 +317,24 @@ export default {
           total: -1
         },
         collect: {
-          list: [],
-          total: -1
+          video: {
+            list: [],
+            total: -1,
+          },
+          audio: {
+            list: [],
+            total: -1,
+          }
         },
       },
-      slideRowListHeight: 0
+      pageSize: 15,
+      slideRowListHeight: 0,
+      loadings: {
+        loading0: false,
+        loading1: false,
+        loading2: false,
+        loading3: false,
+      },
     }
   },
   computed: {
@@ -287,42 +360,66 @@ export default {
       this.refs.headerHeight = this.$refs.header.offsetHeight
       this.refs.descHeight = this.$refs.desc.offsetHeight
       this.refs.defaultVideoSlideRowListHeight = this.$refs.videoSlideRowList.wrapperHeight
-      // this.refs.videoSlideRowListHeight = this.$refs.videoSlideRowList.wrapperHeight
       this.changeIndex(0, null)
     })
     this.videoItemHeight = this.bodyWidth / 3 * 1.2 + 2
     // console.log('videoItemHeight',this.videoItemHeight)
   },
   methods: {
-    async changeIndex(newVal, oldVal) {
-      // console.log('oldVal',oldVal)
-      if (this.videos[Object.keys(this.videos)[newVal]].total === -1) {
-        let res
-        switch (newVal) {
+    async getScrollAreaHeight(index = this.contentIndex) {
+      let scrollAreaHeight = 0
+      if (index === 3) {
+        await nextTick(async () => {
+          scrollAreaHeight = this.$refs.collect.clientHeight + 60 + 40
+        })
+      } else {
+        scrollAreaHeight = Math.ceil(this.videos[Object.keys(this.videos)[index]].list.length / 3) * this.videoItemHeight
+        switch (index) {
           case 0:
-            res = await this.$api.videos.my()
-            if (res.code === this.SUCCESS_CODE) this.videos.my = res.data
-            this.$console(this.videos)
+            scrollAreaHeight += 60
             break
           case 1:
-            res = await this.$api.videos.private()
-            if (res.code === this.SUCCESS_CODE) this.videos.private = res.data
-            this.$console(this.videos)
+            scrollAreaHeight += 60 + 40
             break
           case 2:
-            res = await this.$api.videos.like()
-            if (res.code === this.SUCCESS_CODE) this.videos.like = res.data
-            this.$console(this.videos)
-            break
-          case 3:
-            res = await this.$api.videos.collect()
-            if (res.code === this.SUCCESS_CODE) this.videos.collect = res.data
-            this.$console(this.videos)
+            scrollAreaHeight += 60 + 40
             break
         }
       }
-      let posterHeight = Math.ceil(this.videos[Object.keys(this.videos)[newVal]].total / 3) * this.videoItemHeight
-      // console.log('posterHeight', posterHeight)
+      return scrollAreaHeight
+    },
+    async changeIndex(newVal, oldVal) {
+      if (this.loadings['loading' + newVal]) return
+      let videoOb = this.videos[Object.keys(this.videos)[newVal]]
+      if (newVal === 3) {
+        if (videoOb.video.total === -1) {
+          this.loadings['loading' + newVal] = true
+          let res = await this.$api.videos.collect({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,})
+          this.loadings['loading' + newVal] = false
+          if (res.code === this.SUCCESS_CODE) this.videos.collect = res.data
+        }
+      } else {
+        if (videoOb.total === -1) {
+          this.loadings['loading' + newVal] = true
+          let res
+          switch (newVal) {
+            case 0:
+              res = await this.$api.videos.my({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,})
+              if (res.code === this.SUCCESS_CODE) this.videos.my = res.data
+              break
+            case 1:
+              res = await this.$api.videos.private({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,})
+              if (res.code === this.SUCCESS_CODE) this.videos.private = res.data
+              break
+            case 2:
+              res = await this.$api.videos.like({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,})
+              if (res.code === this.SUCCESS_CODE) this.videos.like = res.data
+              break
+          }
+          this.loadings['loading' + newVal] = false
+        }
+      }
+      let scrollAreaHeight = await this.getScrollAreaHeight(newVal)
 
       // debugger
 
@@ -332,24 +429,50 @@ export default {
         let screenSlideRowListHeight = this.slideRowListHeight + Math.abs(transformY)
         // console.log('slideRowListHeight', slideRowListHeight)
 // debugger
-        if (posterHeight + 60 < screenSlideRowListHeight) {
+        if (scrollAreaHeight < screenSlideRowListHeight) {
           this.refs.videoSlideRowListHeight = screenSlideRowListHeight
         }
-        if (posterHeight + 60 > screenSlideRowListHeight) {
-          this.refs.videoSlideRowListHeight = posterHeight + 60
+        if (scrollAreaHeight > screenSlideRowListHeight) {
+          this.refs.videoSlideRowListHeight = scrollAreaHeight
         }
-        if (posterHeight + 60 > this.refs.defaultVideoSlideRowListHeight) {
+        if (scrollAreaHeight > this.refs.defaultVideoSlideRowListHeight) {
           this.refs.videoSlideRowListHeight = this.refs.defaultVideoSlideRowListHeight
         }
       } else {
-        if (posterHeight + 60 < this.refs.defaultVideoSlideRowListHeight) {
-          // this.$setCss(this.$refs.videoSlideRowList, 'height', posterHeight + 'px')
-          this.refs.videoSlideRowListHeight = posterHeight + 60
+        if (scrollAreaHeight < this.refs.defaultVideoSlideRowListHeight) {
+          this.refs.videoSlideRowListHeight = scrollAreaHeight
         } else {
           this.refs.videoSlideRowListHeight = this.refs.defaultVideoSlideRowListHeight
         }
       }
     },
+    async loadMoreData() {
+      if (this.loadings['loading' + this.contentIndex]) return
+      let videoOb = this.videos[Object.keys(this.videos)[this.contentIndex]]
+      if (videoOb.total > videoOb.list.length) {
+        videoOb.pageNo++
+        this.loadings['loading' + this.contentIndex] = true
+        let res
+        switch (this.contentIndex) {
+          case 0:
+            res = await this.$api.videos.my({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
+            break
+          case 1:
+            res = await this.$api.videos.private({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
+            break
+          case 2:
+            res = await this.$api.videos.like({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
+            break
+          case 3:
+            res = await this.$api.videos.collect({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
+            break
+        }
+        this.loadings['loading' + this.contentIndex] = false
+        if (res.code === this.SUCCESS_CODE) {
+          videoOb.list = videoOb.list.concat(res.data.list)
+        }
+      }
+    },
     touchStart(e) {
       this.$refs.scroll.style.transition = 'none'
       this.fixedLocationY = this.startLocationY = e.touches[0].pageY
@@ -358,14 +481,24 @@ export default {
     move(e) {
       (!this.isScroll) && e.preventDefault();
     },
-    touchMove(e) {
+    async scroll() {
+      if (this.indicatorFixed) {
+        let scrollAreaHeight = await this.getScrollAreaHeight()
+        let SlideItems = document.querySelectorAll('.SlideItem')
+        let SlideItem = SlideItems[this.contentIndex]
+        if (scrollAreaHeight - this.refs.videoSlideRowListHeight < SlideItem.scrollTop + 60) {
+          this.loadMoreData()
+        }
+      }
+    },
+    async touchMove(e) {
       let canTransformY = this.refs.descHeight - this.floatHeight
       let touchMoveDistance = e.touches[0].pageY - this.startLocationY
       let pageMoveDistance = this.moveYDistance + touchMoveDistance * 1.2
-
       // console.log('move-pageMoveDistance', pageMoveDistance)
+      // console.log('move-touchMoveDistance', touchMoveDistance)
 
-
+      //页面已经滚动到头了,往下划动,要把header图放大
       if (pageMoveDistance > 0) {
         this.$refs.scroll.style.transform = `translate3d(0,0,0)`
         if (pageMoveDistance < 400) {
@@ -376,23 +509,40 @@ export default {
           this.moveYDistance = 400
         }
       } else {
-        let posterHeight = Math.ceil(this.videos[Object.keys(this.videos)[this.contentIndex]].total / 3) * this.videoItemHeight
-        if (this.refs.videoSlideRowListHeight > posterHeight + 60 && Math.abs(touchMoveDistance) > 30) {
-          this.$refs.scroll.style.transition = 'all .2s'
-          this.$refs.scroll.style.transform = `translate3d(0,0,0)`
-          this.indicatorFixed = this.floatShowName = this.floatFixed = this.isScroll = false
-          return;
+        let scrollAreaHeight = await this.getScrollAreaHeight()
+        //往下划动
+        if (touchMoveDistance > 0) {
+          //如果可滚动区的高度大于posterHeight,并且移动超过30,就直接滚到顶
+          if (this.refs.videoSlideRowListHeight > scrollAreaHeight && Math.abs(touchMoveDistance) > 20) {
+            this.$refs.scroll.style.transition = 'all .2s'
+            this.$refs.scroll.style.transform = `translate3d(0,0,0)`
+            this.indicatorFixed = this.floatShowName = this.floatFixed = this.isScroll = false
+            this.moveYDistance = 0
+            this.startLocationY = e.touches[0].pageY
+            this.changeIndex(this.contentIndex, this.contentIndex)
+            let SlideItems = document.querySelectorAll('.SlideItem')
+            SlideItems.forEach(SlideItem => {
+              SlideItem.style.overflow = 'auto'
+              SlideItem.scrollTop = 0
+            })
+            SlideItems.forEach(SlideItem => {
+              SlideItem.style.overflow = 'hidden'
+            })
+            return;
+          }
         }
-
-
         if (this.indicatorFixed) {
           let SlideItems = document.querySelectorAll('.SlideItem')
           let SlideItem = SlideItems[this.contentIndex]
-
           if (!this.isScroll) {
             SlideItem.style.overflow = 'auto'
             SlideItem.scrollTop = Math.abs(pageMoveDistance) - this.refs.descHeight + this.floatHeight
           }
+
+          if (scrollAreaHeight - this.refs.videoSlideRowListHeight < SlideItem.scrollTop + 60) {
+            this.loadMoreData()
+          }
+
           if (SlideItem.scrollTop === 0 && (e.touches[0].pageY - this.fixedLocationY) > 0) {
             this.isScroll = this.indicatorFixed = false
             SlideItem.style.overflow = 'hidden'
@@ -403,6 +553,7 @@ export default {
           if (this.slideRowListHeight > this.refs.videoSlideRowListHeight) return
           if (this.refs.defaultVideoSlideRowListHeight > this.refs.videoSlideRowListHeight) {
             let endTransformY = Math.abs(canTransformY) - (this.refs.defaultVideoSlideRowListHeight - this.refs.videoSlideRowListHeight)
+            console.log('endTransformY',endTransformY)
             let moveTransformY = Math.abs(pageMoveDistance) < Math.abs(endTransformY) ? pageMoveDistance : -endTransformY
             this.$refs.scroll.style.transform = `translate3d(0,${moveTransformY}px,0)`
             this.floatFixed = Math.abs(moveTransformY) > 100
@@ -424,7 +575,7 @@ export default {
       let canTransformY = this.refs.descHeight - this.floatHeight
       let touchMoveDistance = e.changedTouches[0].pageY - this.startLocationY
       let pageMoveDistance = this.moveYDistance + touchMoveDistance * 1.2
-      console.log('end-pageMoveDistance', pageMoveDistance)
+      // console.log('end-pageMoveDistance', pageMoveDistance)
 
       let endTransformY = Math.abs(canTransformY) - (this.refs.defaultVideoSlideRowListHeight - this.refs.videoSlideRowListHeight)
       if (this.indicatorFixed) {
@@ -438,6 +589,7 @@ export default {
           this.moveYDistance = 0
           this.floatShowName = this.floatFixed = this.isScroll = false
         } else {
+
           if (this.slideRowListHeight > this.refs.videoSlideRowListHeight) {
             return this.moveYDistance = 0
           }
@@ -497,7 +649,6 @@ export default {
               this.moveYDistance = 0
               this.indicatorFixed = this.floatShowName = this.floatFixed = this.isScroll = false
               let SlideItems = document.querySelectorAll('.SlideItem')
-              // let SlideItem = SlideItems[this.contentIndex]
               SlideItems.forEach(SlideItem => {
                 SlideItem.style.overflow = 'auto'
                 SlideItem.scrollTop = 0
@@ -566,13 +717,147 @@ export default {
   height: 100%;
   width: 100%;
 
-  .no-more {
-    font-size: 1.4rem;
-    padding: 10px;
-    color: gray;
-    text-align: center;
+  .scroll {
+
+    .notice {
+      font-size: 1.2rem;
+      height: 4rem;
+      color: $second-text-color;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+
+      img {
+        height: 1.2rem;
+        margin-right: .5rem;
+      }
+    }
+
+    .collect {
+      .video {
+        background: $active-main-bg;
+        border-radius: .5rem;
+        margin: .7rem;
+        padding: 1rem;
+
+        .top {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          margin-bottom: 1rem;
+
+          .left {
+            display: flex;
+            align-items: center;
+            color: gainsboro;
+
+            img {
+              height: 2rem;
+              margin-right: .5rem;
+            }
+          }
+
+          .right {
+            display: flex;
+            align-items: center;
+            color: $second-text-color;
+          }
+        }
+
+        .list {
+          display: grid;
+          grid-template-columns: 33.33% 33.33% 33.33%;
+
+          .item {
+            height: calc(33.33vw * 1.3);
+            padding: .2rem;
+            overflow: hidden;
+            position: relative;
+
+            .poster {
+              border-radius: .4rem;
+              width: 100%;
+              height: 100%;
+              display: block;
+            }
+
+            .num {
+              color: white;
+              position: absolute;
+              bottom: .5rem;
+              left: .5rem;
+              display: flex;
+              align-items: center;
+              font-size: 1.4rem;
+
+              .love {
+                width: 1.4rem;
+                height: 1.4rem;
+                margin-right: .5rem;
+              }
+            }
+          }
+        }
+      }
+
+      .audio {
+        background: $active-main-bg;
+        border-radius: .5rem;
+        margin: .7rem;
+        padding: 1rem;
+
+        .top {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          margin-bottom: 1rem;
+
+          .left {
+            display: flex;
+            align-items: center;
+            color: gainsboro;
+
+            img {
+              height: 1.5rem;
+              margin-right: .5rem;
+            }
+          }
+
+          .right {
+            display: flex;
+            align-items: center;
+            color: $second-text-color;
+          }
+        }
+
+        .list {
+          display: grid;
+          grid-template-columns: 33.33% 33.33% 33.33%;
+
+          .item {
+            padding: .2rem;
+            overflow: hidden;
+            position: relative;
+
+            .poster {
+              border-radius: .4rem;
+              width: 100%;
+              height: calc((100vw - 3.4rem) / 3);
+              display: block;
+            }
+
+            .title {
+              margin-top: .5rem;
+              color: $second-text-color;
+            }
+          }
+        }
+      }
+    }
+
   }
 
+
   .float {
     position: fixed;
     top: 0;
diff --git a/src/utils/global-methods.js b/src/utils/global-methods.js
index 703dd09..d4cd837 100644
--- a/src/utils/global-methods.js
+++ b/src/utils/global-methods.js
@@ -3,6 +3,7 @@ import SelectDialog from "../components/dialog/SelectDialog";
 import SimpleConfirmDialog from "../components/dialog/SimpleConfirmDialog";
 import ConfirmDialog from "../components/dialog/ConfirmDialog";
 import Loading from "../components/Loading";
+import Config from '../config'
 
 export default {
   $showLoading() {
@@ -152,13 +153,13 @@ export default {
     return
     return console.log(JSON.stringify(v, null, 4))
   },
-  $randomNum(minNum,maxNum){
-    switch(arguments.length){
+  $randomNum(minNum, maxNum) {
+    switch (arguments.length) {
       case 1:
-        return parseInt(Math.random()*minNum+1,10);
+        return parseInt(Math.random() * minNum + 1, 10);
         break;
       case 2:
-        return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
+        return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
         break;
       default:
         return 0;
@@ -191,5 +192,41 @@ export default {
     return new Promise((resolve, reject) => {
       setTimeout(resolve, duration)
     })
-  }
+  },
+  $parseURL(url) {
+    const a = document.createElement('a')
+    a.href = url
+    return {
+      host: a.hostname,
+      port: a.port,
+      query: a.search,
+      params: (function () {
+        const ret = {}
+        const seg = a.search.replace(/^\?/, '')
+          .split('&')
+        const len = seg.length
+        let i = 0
+        let s
+        for (; i < len; i++) {
+          if (!seg[i]) {
+            continue
+          }
+          s = seg[i].split('=')
+          ret[s[0]] = s[1]
+        }
+        return ret
+      }()),
+      hash: a.hash.replace('#', ''),
+    }
+  },
+  $imgPreview(url) {
+    return Config.filePreview + url
+  },
+  $likeNum(num) {
+    if (num < 1000) {
+      return num
+    } else {
+      return parseInt(num / 10000) + 'w'
+    }
+  },
 }
\ No newline at end of file
diff --git a/src/utils/request.js b/src/utils/request.js
index 63d31b1..236b33c 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -8,7 +8,6 @@ import globalMethods from './global-methods'
 const instance = axios.create({
   baseURL: config.baseUrl,
   timeout: 60000,
-  withCredentials: true
 })
 // request拦截器
 instance.interceptors.request.use((config) => {