11<template >
22 <v-card class =" user-card d-flex no-select" >
33 <div class =" avatar" >
4- <v-avatar size =" 50" class =" pointer" color =" primary" >
5- <img :src =" qiNiuImgLink+avatar" v-if =" avatar" alt =" John " >
4+ <v-avatar size =" 50" class =" pointer" color =" primary" @click = " viewUserProfile " >
5+ <img :src =" qiNiuImgLink+avatar" v-if =" avatar" : alt =" nickname " >
66 <span class =" white--text text-h6" v-else >{{nickname|preNickname}}</span >
77 </v-avatar >
88 <v-spacer ></v-spacer >
99 </div >
1010 <div class =" user-info flex-1 d-flex" >
1111 <div class =" d-flex flex-clo info-text" >
12- <span class =" nickname text-md" >{{nickname}}</span >
13- <span class =" about text-xs" >{{about}}</span >
12+ <span class =" nickname text-md pointer " @click = " viewUserProfile " >{{nickname}}</span >
13+ <span class =" about text-xs" >{{about||'ta还没想好怎么描述自己...' }}</span >
1414 </div >
1515 <div v-if =" !isSelf" class =" btn-opt" >
16- <v-btn color =" #3c3c3c" v-if =" myFollow" >
17- <v-icon left >mdi-plus</v-icon >取消关注
18- </v-btn >
19- <v-btn color =" primary" v-else >
20- <v-icon left >mdi-plus</v-icon >关注
21- </v-btn >
16+ <v-btn color =" #3C3C3C" v-if =" myFollow" @click =" unFollow" width =" 90" :loading =" loading" >取消关注</v-btn >
17+ <v-btn color =" primary" v-else @click =" follow" width =" 90" :loading =" loading" >关注</v-btn >
2218 </div >
2319 </div >
2420 </v-card >
2521</template >
2622
2723<script >
28- import { qiNiuImgLink } from ' @utils/publicData'
2924import { mapState } from ' vuex'
25+ import { qiNiuImgLink } from ' @utils/publicData'
3026export default {
3127 props: {
3228 avatar: String ,
@@ -38,6 +34,7 @@ export default {
3834 data () {
3935 return {
4036 qiNiuImgLink,
37+ loading: false ,
4138 }
4239 },
4340 computed: {
@@ -46,8 +43,55 @@ export default {
4643 return this .loginInfo .username === this .username
4744 },
4845 },
49- methods: {},
50- components: {},
46+ methods: {
47+ async follow () {
48+ if (! this .loginState ) {
49+ this .$message .info (' 请登录后再进行相关操作!' )
50+ return void 0
51+ }
52+ this .loading = true
53+ try {
54+ const res = await this .$http .addFollow ({
55+ username: this .loginInfo .username ,
56+ followUsername: this .username ,
57+ })
58+ if (res .state ) {
59+ this .$message .success (' 关注成功!' )
60+ this .$emit (' setFollow' , true )
61+ } else {
62+ this .$message .error (' 关注失败!' )
63+ }
64+ } catch (err) {
65+ console .log (err)
66+ }
67+ this .loading = false
68+ },
69+ async unFollow () {
70+ if (! this .loginState ) {
71+ this .$message .info (' 请登录后再进行相关操作!' )
72+ return void 0
73+ }
74+ this .loading = true
75+ try {
76+ const res = await this .$http .delFollow ({
77+ username: this .loginInfo .username ,
78+ followUsername: this .username ,
79+ })
80+ if (res .state ) {
81+ this .$message .success (' 取消关注成功!' )
82+ this .$emit (' setFollow' , false )
83+ } else {
84+ this .$message .error (' 取消关注失败!' )
85+ }
86+ } catch (err) {
87+ console .log (err)
88+ }
89+ this .loading = false
90+ },
91+ viewUserProfile () {
92+ this .$router .push (` /user/${ this .username } ` )
93+ },
94+ },
5195}
5296 </script >
5397
@@ -70,11 +114,11 @@ export default {
70114 .about {
71115 margin-top : 5px ;
72116 display : block ;
73- color : #f8f8f8 ;
117+ color : #eeeeee ;
74118 @include text-ellipsis ;
75119 }
76120 }
77- .btn-opt {
121+ .btn-opt {
78122 margin-top : 5px ;
79123 }
80124 }
0 commit comments