GroupMemberRow.vue 4.4 KB

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