friends.vue 3.68 KB
<template>
  <v-layout column justify-center align-center id="Friends">
    <v-flex>
      <div id="SearchBlock">
        <input v-model="search" type="search" id="searchInput" @input='getData' placeholder="搜索"/>
      </div>
      <h3 id="FriendTitle">全部好友({{count}})</h3> 
      <v-card id="FriendList" flat >
        <v-list class="list">
          <v-list-tile class="ListItem" v-for="(item, index) in friendList" :key="index" @click.native="$router.push(`/userRecord?id=${item.id}`)">
            <v-list-tile-content class="ListItemAvatar">
              <img v-if="item.headimgurl" :src="item.headimgurl" alt="" />
              <i v-if="!item.headimgurl" class="material-icons icon iconfont icon-face"></i>
              <span>{{item.name}}</span>
            </v-list-tile-content>
          </v-list-tile>
        </v-list>
      </v-card>
    </v-flex>
  </v-layout>
</template>

<script>
import {wechatShareSetting} from '@/helper'
export default {
  async asyncData({store, query, app, redirect}) {
    let {data} = await app.$axios.get(`/friend/list?userId=${store.state.user.id}`)
    if (data.success) {
      return {friendList: data.list, count: data.count}
    } else {
      store.dispatch('displayMessage', data.msg)
      return {friendList: [], count: 0}
    }
  },
  data:() => ({
    search: '',
  }),
  mounted() {
    wechatShareSetting(this.$axios, this.$store)
  },
  methods: {
    async getData() {
      let {data} = await this.$axios.get(`/friend/list?userId=${this.$store.state.user.id}&search=${this.search}`)
      if (data.success) {
        this.friendList = data.list
        this.count = data.count
      } else {
        this.$store.dispatch('displayMessage', data.msg)
      }
    }
  }
}
</script>

<style lang="scss" scoped>
  #Friends {
    #SearchBlock {
      width: 100vw;
      padding: 0.9rem 0.7rem;

      #searchInput {
        background-color: $menu-grey;
        border: 1px solid #979797;
        border-radius: 0.5rem;
        width: 100%;
        height: 2rem;
        text-align: center;
        outline: none;
        color: $light-gold;
      }
      ::-moz-placeholder { color: $light-gold; opacity: 0.5; line-height: 2rem;}
      ::-webkit-input-placeholder { color:$light-gold; opacity: 0.5; line-height: 2rem; }
      :-ms-input-placeholder { color:$light-gold; opacity: 0.5; line-height: 2rem; }
    }
    #FriendTitle {
      display: block;
      font-size: 1.1rem;
      width: calc(100vw - 1rem);
      color: $light-gold;
      border-left: 0.15rem solid $light-gold;
      padding-left: 0.75rem;
      margin-left: 1rem;
      margin-bottom: 1.7rem;
    }
    #FriendList {
      width: 100vw;

      .list {
        background-color: $toolbar-grey;
        padding: 0 0.8rem;

        .ListItem {
          height: 3rem;

          &:nth-child(1) {
            /deep/ .list__tile {
              border-top: none;
            }
          }

          /deep/ .list__tile {
            height: 3rem;
            color: $light-gold;
            padding: 0;
            border-top: 0.1rem solid #586C80;
          }
          .ListItemAvatar {
            flex-direction: row;
            height: 3rem;
            align-items: center;
            justify-content: flex-start;

            span {
              height: 3rem;
              font-size: 1.1rem;
              font-weight: bold;
              line-height: 3rem;
              margin-left: 1.2rem;
            }

            img {
              height: 80%;
              display: block
            }

            i {
              color: $light-gold;   
              display: block;
              width: 2.4rem;
              text-align: center;         
            }
          }
        }
      }
    }
  }
</style>