Explorar o código

我的关注列表

xinfeng %!s(int64=6) %!d(string=hai) anos
pai
achega
605cf7e6e1
Modificáronse 2 ficheiros con 610 adicións e 0 borrados
  1. 319 0
      assets/css/user/follow.scss
  2. 291 0
      pages/user/follow/index.vue

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 319 - 0
assets/css/user/follow.scss


+ 291 - 0
pages/user/follow/index.vue

@@ -0,0 +1,291 @@
+<template>
+  <div :class="{isMobile: mobile}">
+    <div v-if="!mobile">
+      <div class="followAreaShow">
+        <div class="contentArea">
+          <div class="selectArea">
+            <div class="myFollow"
+              :class="{selected: selected === SelectedType.myFollow}"
+              @click="changeSelected(SelectedType.myFollow)"
+            ><p>我的关注</p></div>
+            <div class="myFans"
+              :class="{selected: selected === SelectedType.myFans}"
+              @click="changeSelected(SelectedType.myFans)"
+            ><p>我的粉丝</p></div>
+          </div>
+          <div class="listArea">
+            <div class="list" v-loading="loading">
+              <div class="cell"
+                v-for="item in dataList"
+                :key="item.id"
+                :title="item.name"
+              >
+                <div class="topContent">
+                  <div class="left">
+                    {{item.user_info && item.user_info.nickname || ""}}
+                  </div>
+                  <div class="right">
+                    {{item.updated_at}}
+                  </div>
+                </div>
+                <div class="descContent">
+                  这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍
+                  {{item.user_info && item.user_info.desc || ""}}
+                </div>
+                <div class="bottomContent">
+                  <div class="left" @click.once="deleteItems(item)"></div>
+                  <div class="right" @click="jumpToJishuinHomePageHandler(item)">
+                    <img :src="item.user_info && item.user_info.icon_url" alt=""/>
+                  </div>
+                </div>
+              </div>
+              <!--id: "131"-->
+              <!--user_id: "10468"-->
+              <!--follow_id: "10000"-->
+              <!--created_at: "2019-07-11 22:06:05"-->
+              <!--updated_at: "2019-07-11 22:06:05"-->
+              <!--user_info: {nickname: "程序员客栈", icon_url: "icon100001462323732", uid: "10000", seo_type: "1", certTags: [],…}-->
+              <!--nickname: "程序员客栈"-->
+              <!--icon_url: "icon100001462323732"-->
+              <!--uid: "10000"-->
+              <!--seo_type: "1"-->
+              <!--certTags: []-->
+              <!--seo_uri: "/wo/10000"-->
+              <div v-if="dataList.length === 0" class="noneData">
+                <p>没有数据</p>
+              </div>
+            </div>
+          </div>
+          <div class="pagination">
+            <el-pagination background layout="prev, pager, next" :total="page.total"
+              :page-size="page.pageSize" @current-change="pageChange" :current-page="Number(page.current
+            )"></el-pagination>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div v-else class="followAreaShowMobile">
+      <div class="selectArea">
+        <div class="myFollow"
+          :class="{selected: selected === SelectedType.myFollow}"
+          @click="changeSelected(SelectedType.myFollow)"
+        ><p>我的关注</p></div>
+        <div class="myFans"
+          :class="{selected: selected === SelectedType.myFans}"
+          @click="changeSelected(SelectedType.myFans)"
+        ><p>我的粉丝</p></div>
+      </div>
+      <van-pull-refresh v-model="refreshing" @refresh="onRefresh" class="listArea">
+        <div style="text-align: center" v-if="firstLoading">
+          <van-loading size="24px">加载中...</van-loading>
+        </div>
+        <van-list
+          v-else
+          v-model="loading"
+          :finished="finished"
+          finished-text="没有更多了"
+          @load="onLoad"
+          :immediate-check="false"
+          class="list"
+        >
+          <van-swipe-cell
+            class="cell"
+            v-for="(item, index) in dataList" :key="'dataList' + index"
+          >
+            <div class="cellContent">
+              <div class="left">
+                <img :src="item.user_info && item.user_info.icon_url" alt="">
+              </div>
+              <div class="right">
+                <div class="topContent">
+                  <div class="leftC">
+                    {{item.user_info && item.user_info.nickname || ""}}
+                  </div>
+                  <div class="rightC">
+                    {{item.updated_at}}
+                  </div>
+                </div>
+                <div class="descContent">
+                  这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍这里是个人介绍
+                  {{item.user_info && item.user_info.desc || ""}}
+                </div>
+              </div>
+            </div>
+            <template #right>
+              <van-button square text="删除" type="danger" class="delete-button" @click="deleteItem(item)"/>
+            </template>
+          </van-swipe-cell>
+        </van-list>
+      </van-pull-refresh>
+    </div>
+  </div>
+</template>
+
+<script>
+  const SelectedType = {
+    myFollow: 1,
+    myFans: 2
+  }
+  export default {
+    name: "FollowListSeoIndex",
+    // layout: "opacity_header",
+    showCommonFooter: false,
+    components: {},
+    head() {
+      let obj = {
+        title: "我的关注-程序员客栈",
+        meta: [
+          {
+            'name': 'keywords',
+            'content': ""
+          }, {
+            'name': 'descrption',
+            'content': ""
+          }, {
+            'name': 'h1',
+            'content': ""
+          }
+        ]
+      }
+      return obj
+    },
+    async asyncData({ app }) {
+      return {
+        mobile: app.$deviceType.isMobile()
+      }
+    },
+    data() {
+      return {
+        selected: SelectedType.myFollow,
+        SelectedType,
+        page: {
+          current: 1,
+          total: 0
+        },
+        dataList: [],
+        loading: false,
+        refreshing: false,
+        firstLoading: false, //移动端加载loading
+        isLoading: false
+      }
+    },
+    watch: {},
+    computed: {
+      canSelectCity() {
+        //远程无法选中地区
+        return this.selected.workType !== 1
+      },
+      calcName() {
+        const { direction, directionSmall, directionName = "", directionSmallName = "", } = this.selected
+        let job = directionSmall || direction
+        let jobName = directionSmallName === "全部" ? directionName : (directionSmallName || directionName)
+
+        return {
+          text: jobName || '全部职业',
+          value: job
+        }
+      }
+    },
+    created() {
+      this.checkLogin()
+      this.getList()
+    },
+    mounted() {
+      // this.getList()
+      if (this.mobile) {
+        document.body.style = "overflow:hidden;"
+      }
+    },
+    methods: {
+      changeSelected(type) {
+        if (this.selected !== type) {
+          this.selected = type
+          this.page.page = 1
+          this.page.total = 0
+          this.getList()
+        }
+      },
+      changeExpansion(key) {
+        this.expansion[ key ] = !this.expansion[ key ]
+      },
+      getList() {
+        const { page } = this
+
+        let url = ""
+        if (this.selected === SelectedType.myFollow) {
+          url = "/api/community/follow/followers"
+        } else {
+          url = "/api/community/follow/fans"
+        }
+
+        if (this.isLoading) {
+          return
+        }
+        this.loading = true
+        this.isLoading = true
+        this.$axios.post(url, page).then(res => {
+          if (Number(res.data.status) === 1) {
+            let data = res.data.data
+            this.dataList = [ ...data ]
+            // this.page.total = data.total
+            // if (this.page.page === 1 || !this.mobile) {
+            //   this.dataList = [ ...data ]
+            // } else {
+            //   this.dataList = [ ...this.dataList, ...data.list ]
+            // }
+            // this.page.page += 1
+            // this.page.current = Number(data.page)
+            // if (this.page.total <= this.dataList.length) {
+            //   this.finished = true
+            // }
+          }
+        }).finally(() => {
+          this.firstLoading = false
+          this.refreshing = false
+          this.isLoading = false
+          this.$nextTick(() => {
+            this.loading = false
+          })
+          console.log("this.finished", this.finished)
+        })
+      },
+      pageChange(i) {
+        this.page.page = i
+        this.getList()
+      },
+      jumpToCompanyInfo(item) {
+        const { companyInfo: { uid } } = item
+        window.open(`/wo/${uid}`, `targetCompany${uid}`)
+      },
+      /** 移动端下拉刷新 **/
+      onRefresh() {
+        // 清空列表数据
+        this.finished = false;
+        console.log('onRefresh')
+        this.onLoad();
+      },
+      onLoad() {
+        console.log('onLoad')
+        this.getList()
+      },
+
+      /** 删除项目 **/
+      deleteItem(item) {
+        const { follow_id } = item || {}
+        //todo delete
+        console.log("item:", item)
+      },
+      /** 跳转到技术圈主页 **/
+      jumpToJishuinHomePageHandler() {
+
+      }
+    }
+  }
+</script>
+
+<style scope lang="scss">
+  .delete-button {
+    height: 100%;
+  }
+  @import "../../../assets/css/user/follow.scss";
+</style>