group-member.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <view class="page group-member">
  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" cancelButton="none"
  7. placeholder="输入昵称搜索"></uni-search-bar>
  8. </view>
  9. </view>
  10. <view class="member-items">
  11. <virtual-scroller height="100%" class="scroll-bar" :items="showMembers">
  12. <template v-slot="{ item }">
  13. <view class="member-item" @click="onShowUserInfo(item.userId)">
  14. <head-image :name="item.showNickName" :online="item.online" :url="item.headImage"></head-image>
  15. <view class="member-name">{{ item.showNickName }}
  16. <uni-tag v-if="item.userId == group.ownerId" text="群主" size="small" circle type="error"></uni-tag>
  17. <uni-tag v-if="item.userId == userStore.userInfo.id" text="我" size="small" circle></uni-tag>
  18. </view>
  19. </view>
  20. </template>
  21. </virtual-scroller>
  22. </view>
  23. </view>
  24. </template>
  25. <script>
  26. export default {
  27. data() {
  28. return {
  29. isModify: false,
  30. searchText: "",
  31. group: {},
  32. members: []
  33. }
  34. },
  35. methods: {
  36. onShowUserInfo(userId) {
  37. uni.navigateTo({
  38. url: "/pages/common/user-info?id=" + userId
  39. })
  40. },
  41. loadGroupInfo(id) {
  42. this.$http({
  43. url: `/group/find/${id}`,
  44. method: 'GET'
  45. }).then((group) => {
  46. this.group = group;
  47. });
  48. },
  49. loadGroupMembers(id) {
  50. this.$http({
  51. url: `/group/members/${id}`,
  52. method: "GET"
  53. }).then((members) => {
  54. this.members = members;
  55. })
  56. },
  57. isSelf(userId) {
  58. return this.userStore.userInfo.id == userId
  59. }
  60. },
  61. computed: {
  62. isOwner() {
  63. return this.userStore.userInfo.id == this.group.ownerId;
  64. },
  65. showMembers() {
  66. return this.members.filter(m => !m.quit && m.showNickName.includes(this.searchText))
  67. }
  68. },
  69. onLoad(options) {
  70. this.loadGroupInfo(options.id);
  71. this.loadGroupMembers(options.id);
  72. },
  73. onUnload() {
  74. if (this.isModify) {
  75. // 刷新页面
  76. let pages = getCurrentPages();
  77. let prevPage = pages[pages.length - 2];
  78. prevPage.$vm.loadGroupMembers();
  79. }
  80. }
  81. }
  82. </script>
  83. <style scoped lang="scss">
  84. .group-member {
  85. position: relative;
  86. display: flex;
  87. flex-direction: column;
  88. .member-items {
  89. position: relative;
  90. flex: 1;
  91. overflow: hidden;
  92. .member-item {
  93. height: 120rpx;
  94. display: flex;
  95. margin-bottom: 1rpx;
  96. position: relative;
  97. padding: 0 30rpx;
  98. align-items: center;
  99. background-color: white;
  100. white-space: nowrap;
  101. .member-name {
  102. display: flex;
  103. align-items: center;
  104. flex: 1;
  105. padding-left: 20rpx;
  106. font-size: $im-font-size;
  107. line-height: $im-font-size * 2;
  108. white-space: nowrap;
  109. overflow: hidden;
  110. .uni-tag {
  111. margin-left: 5rpx;
  112. }
  113. }
  114. }
  115. .scroll-bar {
  116. height: 100%;
  117. }
  118. }
  119. }
  120. </style>