friend-add.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <view class="page friend-add">
  3. <nav-bar back>添加好友</nav-bar>
  4. <view class="nav-bar">
  5. <view class="nav-search">
  6. <uni-search-bar v-model="searchText" radius="100" :focus="true" @confirm="onSearch()"
  7. @cancel="onCancel()" placeholder="用户名/昵称"></uni-search-bar>
  8. </view>
  9. </view>
  10. <view class="user-items">
  11. <scroll-view class="scroll-bar" scroll-with-animation="true" scroll-y="true">
  12. <view v-for="(user) in users" :key="user.id" v-show="user.id != userStore.userInfo.id">
  13. <view class="user-item">
  14. <head-image :id="user.id" :name="user.nickName" :online="user.online"
  15. :url="user.headImage"></head-image>
  16. <view class="user-info">
  17. <view class="user-name">
  18. <view>{{ user.userName }}</view>
  19. <uni-tag v-if="user.status == 1" circle type="error" text="已注销" size="small"></uni-tag>
  20. </view>
  21. <view class="nick-name">{{ `昵称:${user.nickName}`}}</view>
  22. </view>
  23. <view class="user-btns">
  24. <button type="primary" v-show="!isFriend(user.id)" size="mini"
  25. @click.stop="onAddFriend(user)">加为好友</button>
  26. <button type="default" v-show="isFriend(user.id)" size="mini" disabled>已添加</button>
  27. </view>
  28. </view>
  29. </view>
  30. </scroll-view>
  31. </view>
  32. </view>
  33. </template>
  34. <script>
  35. export default {
  36. data() {
  37. return {
  38. searchText: "",
  39. users: []
  40. }
  41. },
  42. methods: {
  43. onCancel() {
  44. uni.navigateBack();
  45. },
  46. onSearch() {
  47. this.$http({
  48. url: "/user/findByName?name=" + this.searchText,
  49. method: "GET"
  50. }).then((data) => {
  51. this.users = data;
  52. })
  53. },
  54. onAddFriend(user) {
  55. this.$http({
  56. url: "/friend/add?friendId=" + user.id,
  57. method: "POST"
  58. }).then((data) => {
  59. let friend = {
  60. id: user.id,
  61. nickName: user.nickName,
  62. headImage: user.headImage,
  63. online: user.online
  64. }
  65. this.friendStore.addFriend(friend);
  66. uni.showToast({
  67. title: "添加成功,对方已成为您的好友",
  68. icon: "none"
  69. })
  70. })
  71. },
  72. onShowUserInfo(user) {
  73. uni.navigateTo({
  74. url: "/pages/common/user-info?id=" + user.id
  75. })
  76. },
  77. isFriend(userId) {
  78. let friends = this.friendStore.friends;
  79. let friend = friends.find((f) => f.id == userId);
  80. return !!friend;
  81. }
  82. }
  83. }
  84. </script>
  85. <style scoped lang="scss">
  86. .friend-add {
  87. position: relative;
  88. display: flex;
  89. flex-direction: column;
  90. .user-items {
  91. position: relative;
  92. flex: 1;
  93. overflow: hidden;
  94. .user-item {
  95. height: 100rpx;
  96. display: flex;
  97. margin-bottom: 1rpx;
  98. position: relative;
  99. padding: 18rpx 20rpx;
  100. align-items: center;
  101. background-color: white;
  102. white-space: nowrap;
  103. .user-info {
  104. flex: 1;
  105. display: flex;
  106. flex-direction: column;
  107. padding-left: 20rpx;
  108. font-size: $im-font-size;
  109. white-space: nowrap;
  110. overflow: hidden;
  111. .user-name {
  112. display: flex;
  113. flex: 1;
  114. font-size: $im-font-size-large;
  115. white-space: nowrap;
  116. overflow: hidden;
  117. align-items: center;
  118. .uni-tag {
  119. text-align: center;
  120. margin-left: 5rpx;
  121. padding: 1px 5px;
  122. }
  123. }
  124. .nick-name {
  125. display: flex;
  126. font-size: $im-font-size-smaller;
  127. color: $im-text-color-lighter;
  128. padding-top: 8rpx;
  129. }
  130. }
  131. }
  132. .scroll-bar {
  133. height: 100%;
  134. }
  135. }
  136. }
  137. </style>