GroupMemberRow.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <template>
  2. <view @click="toMemberList" class="member_row">
  3. <view class="member_list">
  4. <view class="member_item" v-for="(member, index) in groupMemberList">
  5. <my-avatar
  6. :src="member.faceURL"
  7. :desc="member.nickname"
  8. :key="member.userID"
  9. size="48"
  10. />
  11. <view class="ower" v-if="member.roleLevel === 100">群主</view>
  12. <text class="member_item_name">{{ member.nickname }}</text>
  13. </view>
  14. <view class="member_item">
  15. <image
  16. style="width: 48px; height: 48px; min-width: 48px"
  17. @click.stop="inviteMember"
  18. src="../../../../static/images/group_setting_invite.png"
  19. alt=""
  20. />
  21. <text class="member_item_name">增加</text>
  22. </view>
  23. <view class="member_item" v-if="isAdmin || isOwner">
  24. <image
  25. style="width: 48px; height: 48px; min-width: 48px"
  26. @click.stop="kickMember"
  27. src="../../../../static/images/group_setting_remove.png"
  28. alt=""
  29. />
  30. <text class="member_item_name">移出</text>
  31. </view>
  32. </view>
  33. <view @click="toMemberList" class="more">
  34. <text>查看全部群成员({{ memberCount }})</text>
  35. <view class="more_right">
  36. <u-icon name="arrow-right" color="#999" size="18" />
  37. </view>
  38. </view>
  39. </view>
  40. </template>
  41. <script>
  42. import { mapGetters } from "vuex";
  43. import IMSDK, { GroupMemberRole } from "openim-uniapp-polyfill";
  44. import MyAvatar from "../../../../components/MyAvatar/index.vue";
  45. import SettingItem from "../../../../components/SettingItem/index.vue";
  46. import { ContactChooseTypes, GroupMemberListTypes } from "../../../../constant";
  47. export default {
  48. name: "",
  49. components: {
  50. MyAvatar,
  51. SettingItem,
  52. },
  53. props: {
  54. isNomal: Boolean,
  55. memberCount: Number,
  56. groupID: String,
  57. groupMemberList: Array,
  58. },
  59. data() {
  60. return {};
  61. },
  62. computed: {
  63. ...mapGetters([
  64. "storeCurrentConversation",
  65. "storeCurrentMemberInGroup",
  66. "storeCurrentGroup",
  67. ]),
  68. isOwner() {
  69. return this.storeCurrentMemberInGroup.roleLevel === GroupMemberRole.Owner;
  70. },
  71. isAdmin() {
  72. return this.storeCurrentMemberInGroup.roleLevel === GroupMemberRole.Admin;
  73. },
  74. },
  75. methods: {
  76. toMemberList() {
  77. uni.navigateTo({
  78. url: `/pages_im/pages/conversation/groupMemberList/index?type=${GroupMemberListTypes.Preview}&groupID=${this.groupID}`,
  79. });
  80. },
  81. inviteMember() {
  82. uni.navigateTo({
  83. url: `/pages_im/pages/common/contactChoose/index?type=${ContactChooseTypes.Invite}&groupID=${this.groupID}`,
  84. });
  85. },
  86. kickMember() {
  87. uni.navigateTo({
  88. url: `/pages_im/pages/conversation/groupMemberList/index?type=${GroupMemberListTypes.Kickout}&groupID=${this.groupID}`,
  89. });
  90. },
  91. },
  92. };
  93. </script>
  94. <style lang="scss" scoped>
  95. .member_row {
  96. @include colBox(false);
  97. padding: 36rpx 36rpx 0;
  98. margin: 24rpx;
  99. background-color: #fff;
  100. color: $uni-text-color;
  101. border-radius: 6px;
  102. overflow: hidden;
  103. .member_title {
  104. @include btwBox();
  105. .member_desc {
  106. @include vCenterBox();
  107. font-size: 26rpx;
  108. }
  109. }
  110. .member_list {
  111. @include vCenterBox();
  112. flex-wrap: wrap;
  113. .member_item {
  114. position: relative;
  115. display: flex;
  116. flex-direction: column;
  117. justify-content: center;
  118. align-items: center;
  119. margin: 8rpx 14rpx;
  120. &_name {
  121. margin-top: 8rpx;
  122. font-size: 24rpx;
  123. color: #8e9ab0;
  124. max-width: 48px;
  125. display: inline-block;
  126. overflow: hidden;
  127. text-overflow: ellipsis;
  128. white-space: nowrap;
  129. }
  130. }
  131. }
  132. .ower{
  133. width: 48px;
  134. display: flex;
  135. align-items: center;
  136. justify-content: center;
  137. bottom: 34rpx;
  138. font-size: 24rpx;
  139. position: absolute;
  140. color: #0089FF;
  141. background: #E8EAEF;
  142. border-radius: 12rpx 12rpx 12rpx 12rpx;
  143. }
  144. .more {
  145. @include btwBox();
  146. margin-top: 20rpx;
  147. padding: 20rpx 0rpx 20rpx;
  148. border-top: 1px solid rgba(153, 153, 153, 0.2);
  149. .more_right {
  150. @include vCenterBox();
  151. }
  152. }
  153. }
  154. </style>