group-member.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <view class="page group-member">
  3. <view class="search-bar">
  4. <uni-search-bar v-model="searchText" cancelButton="none" placeholder="输入成员昵称搜索"></uni-search-bar>
  5. </view>
  6. <view class="member-items">
  7. <scroll-view class="scroll-bar" scroll-with-animation="true" scroll-y="true">
  8. <view v-for="(member,idx) in groupMembers"
  9. v-show="!searchText || member.aliasName.startsWith(searchText)" :key="idx">
  10. <uni-list-chat :avatar="member.headImage" :title="member.aliasName" :clickable="true"
  11. @click="onShowUserInfo(member.userId)">
  12. <view class="chat-custom-right">
  13. <button type="warn" v-show="isOwner && !isSelf(member.userId)" size="mini"
  14. @click.stop="onKickOut(member,idx)">移出群聊</button>
  15. </view>
  16. </uni-list-chat>
  17. </view>
  18. </scroll-view>
  19. </view>
  20. </view>
  21. </template>
  22. <script>
  23. export default {
  24. data() {
  25. return {
  26. searchText: "",
  27. group: {},
  28. groupMembers: []
  29. }
  30. },
  31. methods: {
  32. onShowUserInfo(userId) {
  33. uni.navigateTo({
  34. url: "/pages/common/user-info?id=" + userId
  35. })
  36. },
  37. onKickOut(member, idx) {
  38. uni.showModal({
  39. title: '确认移出?',
  40. content: `确定将成员'${member.aliasName}'移出群聊吗?`,
  41. success: () => {
  42. this.$http({
  43. url: `/group/kick/${this.group.id}?userId=${member.userId}`,
  44. method: 'DELETE'
  45. }).then(() => {
  46. uni.showToast({
  47. title: `已将${member.aliasName}移出群聊`,
  48. icon: 'none'
  49. })
  50. this.groupMembers.splice(idx, 1);
  51. });
  52. }
  53. })
  54. },
  55. loadGroupInfo(id) {
  56. this.$http({
  57. url: `/group/find/${id}`,
  58. method: 'GET'
  59. }).then((group) => {
  60. this.group = group;
  61. });
  62. },
  63. loadGroupMembers(id) {
  64. this.$http({
  65. url: `/group/members/${id}`,
  66. method: "GET"
  67. }).then((members) => {
  68. this.groupMembers = members.filter(m => !m.quit);
  69. })
  70. },
  71. isSelf(userId) {
  72. return this.$store.state.userStore.userInfo.id == userId
  73. }
  74. },
  75. computed: {
  76. isOwner() {
  77. return this.$store.state.userStore.userInfo.id == this.group.ownerId;
  78. }
  79. },
  80. onLoad(options) {
  81. this.loadGroupInfo(options.id);
  82. this.loadGroupMembers(options.id);
  83. }
  84. }
  85. </script>
  86. <style scoped lang="scss">
  87. .group-invite{
  88. position: relative;
  89. border: #dddddd solid 1px;
  90. display: flex;
  91. flex-direction: column;
  92. .member-items{
  93. position: relative;
  94. flex: 1;
  95. overflow: hidden;
  96. .scroll-bar {
  97. height: 100%;
  98. }
  99. }
  100. }
  101. </style>