group-member.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <view v-if="$store.state.userStore.userInfo.type == 1" 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. isModify: false,
  27. searchText: "",
  28. group: {},
  29. groupMembers: []
  30. }
  31. },
  32. methods: {
  33. onShowUserInfo(userId) {
  34. uni.navigateTo({
  35. url: "/pages/common/user-info?id=" + userId
  36. })
  37. },
  38. onKickOut(member, idx) {
  39. uni.showModal({
  40. title: '确认移出?',
  41. content: `确定将成员'${member.aliasName}'移出群聊吗?`,
  42. success: (res) => {
  43. if(res.cancel)
  44. return;
  45. this.$http({
  46. url: `/group/kick/${this.group.id}?userId=${member.userId}`,
  47. method: 'DELETE'
  48. }).then(() => {
  49. uni.showToast({
  50. title: `已将${member.aliasName}移出群聊`,
  51. icon: 'none'
  52. })
  53. this.groupMembers.splice(idx, 1);
  54. this.isModify = true;
  55. });
  56. }
  57. })
  58. },
  59. loadGroupInfo(id) {
  60. this.$http({
  61. url: `/group/find/${id}`,
  62. method: 'GET'
  63. }).then((group) => {
  64. this.group = group;
  65. });
  66. },
  67. loadGroupMembers(id) {
  68. this.$http({
  69. url: `/group/members/${id}`,
  70. method: "GET"
  71. }).then((members) => {
  72. this.groupMembers = members.filter(m => !m.quit);
  73. })
  74. },
  75. isSelf(userId) {
  76. return this.$store.state.userStore.userInfo.id == userId
  77. }
  78. },
  79. computed: {
  80. isOwner() {
  81. return this.$store.state.userStore.userInfo.id == this.group.ownerId;
  82. }
  83. },
  84. onLoad(options) {
  85. this.loadGroupInfo(options.id);
  86. this.loadGroupMembers(options.id);
  87. },
  88. onUnload() {
  89. if(this.isModify){
  90. // 刷新页面
  91. let pages = getCurrentPages();
  92. let prevPage = pages[pages.length - 2];
  93. prevPage.$vm.loadGroupMembers();
  94. }
  95. }
  96. }
  97. </script>
  98. <style scoped lang="scss">
  99. .group-invite{
  100. position: relative;
  101. border: #dddddd solid 1px;
  102. display: flex;
  103. flex-direction: column;
  104. .member-items{
  105. position: relative;
  106. flex: 1;
  107. overflow: hidden;
  108. .scroll-bar {
  109. height: 100%;
  110. }
  111. }
  112. }
  113. </style>