xuanzequanyuan.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <template>
  2. <page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
  3. <view>
  4. <cu-custom bgImage='/static/bg.png' :isBack='true'>
  5. <template v-slot:content>
  6. <text class="text-black">选择成员</text>
  7. </template>
  8. </cu-custom>
  9. <view class='bg-white padding'>
  10. <view class="contentColumnC">
  11. <vim-avatar :img="usermsg.avatar" :name="usermsg.name" />
  12. <text class="text-zblue text-bold user_name">{{ usermsg.name }}</text>
  13. </view>
  14. <view class="margin-top" style="height: 10px;background-color:whitesmoke;"></view>
  15. <view class='contentColumn'>
  16. <checkbox-group @change="checkboxChange">
  17. <label v-for='(item,index) in userList' :key='index' >
  18. <view class='contentInRowL item_center padding-top-sm'>
  19. <checkbox :disabled="usermsg.id==item.id" class="margin-right-sm" :value="item.id" :checked="item.isSelect" />
  20. <vim-avatar :img="item.avatar" :name="item.name" />
  21. <text v-if="usermsg.id==item.id" class="text-zblue text-bold user_name padding-left-sm">{{ item.name }}</text>
  22. <text v-if="usermsg.id!=item.id" class="text-black text-bold user_name padding-left-sm">{{ item.name }}</text>
  23. </view>
  24. </label>
  25. </checkbox-group>
  26. </view>
  27. <view style="height: 160rpx;"></view>
  28. </view>
  29. <view class="bottomfloatV contentColumnC padding">
  30. <button class="cu-btn bg-zblue lg margin-top border" style="width: 100%;" @tap="querenchengyuan">确认</button>
  31. </view>
  32. </view>
  33. </template>
  34. <script setup lang='ts'>
  35. import {reactive,ref} from 'vue'
  36. import {onLoad} from '@dcloudio/uni-app'
  37. import {useUserStore} from '@/store/userStore'
  38. import CuCustom from '@/colorui/components/cu-custom.vue'
  39. import GroupApi from '@/api/GroupApi'
  40. import {useGroupStore} from '@/store/groupStore'
  41. import type Group from '@/mode/Group'
  42. import MessageUtils from '@/utils/MessageUtils'
  43. import { usePeerStore } from '@/store/peerStore'
  44. import DictUtils from "@/utils/DictUtils";
  45. import VimAvatar from "@/components/VimAvatar.vue";
  46. import Auth from "@/api/Auth";
  47. const fontValue = ref(Auth.getfontSize());
  48. //@ts-ignore
  49. const groupStore = useGroupStore()
  50. const store = useUserStore()
  51. let users=[];
  52. //是否是群主
  53. const isMaster = ref(false)
  54. const isCaller = ref(false);
  55. const showVideo = ref(false);
  56. const usermsg = ref({})
  57. //群用户
  58. const userList = ref([])
  59. const group = reactive < Group > ({
  60. id: '',
  61. master: '',
  62. name: '',
  63. avatar: '',
  64. openInvite: '0',
  65. inviteCheck: '0',
  66. prohibition: '0',
  67. prohibitFriend: '0',
  68. announcement: ''
  69. })
  70. onLoad((opt) => {
  71. group.id = opt?.id
  72. if(typeof opt?.isCaller === 'string'){
  73. isCaller.value = opt?.isCaller === 'true'
  74. }
  75. if(typeof opt?.showVideo === 'string'){
  76. showVideo.value = opt?.showVideo === 'true'
  77. }
  78. uni.showLoading()
  79. GroupApi.get(group.id)
  80. .then((res) => {
  81. //console.log('group',res)
  82. group.id = res.data.id
  83. group.name = res.data.name
  84. group.avatar = res.data.avatar
  85. group.master = res.data.master
  86. group.openInvite = res.data.openInvite
  87. group.inviteCheck = res.data.inviteCheck
  88. group.prohibition = res.data.prohibition
  89. group.prohibitFriend = res.data.prohibitFriend
  90. group.announcement = res.data.announcement
  91. isMaster.value = res.data.master === store.user?.id
  92. loadUser(group.id)
  93. })
  94. groupStore.loadWaitCheckList()
  95. })
  96. //加载群用户
  97. const loadUser = (gId: string) => {
  98. userList.value = []
  99. GroupApi.users(gId).then((res) => {
  100. //是否是群用户
  101. //console.log('GroupApi',res)
  102. if (!res.data.some((item: any) => {
  103. return item.id === useUserStore().getUser() !.id
  104. })) {
  105. MessageUtils.message('无权限')
  106. }
  107. res.data.forEach((item: any) => {
  108. if(store.user?.id === item.id){
  109. usermsg.value={
  110. name: item.name,
  111. avatar: item.avatar,
  112. id: item.id
  113. }
  114. userList.value.push({
  115. id: item.id,
  116. name: item.name,
  117. avatar: item.avatar,
  118. isSelect:true
  119. })
  120. }
  121. else{
  122. userList.value.push({
  123. id: item.id,
  124. name: item.name,
  125. avatar: item.avatar,
  126. isSelect:false
  127. })
  128. }
  129. })
  130. })
  131. .finally(() => {
  132. uni.hideLoading()
  133. })
  134. }
  135. const selectUser = (id: string | undefined,index:any) => {
  136. console.log('selectUser',id,index);
  137. if(usermsg.value.id!=id){
  138. userList.value[index].isSelect=!userList.value[index].isSelect;
  139. }
  140. }
  141. const checkboxChange = (e) =>{
  142. console.log(e);
  143. users=e.detail.value;
  144. console.log(users);
  145. }
  146. const querenchengyuan = () =>{
  147. if(users.length<2){
  148. MessageUtils.message('请选择成员!')
  149. return;
  150. }
  151. usePeerStore().setUsers(JSON.stringify(users));
  152. if(isCaller.value){
  153. uni.redirectTo({
  154. url: `/imcall/groupWebRTCCallCtr?friendId=${group.id}&showVideo=${showVideo.value}&isCaller=true`
  155. })
  156. }
  157. else{
  158. uni.navigateBack();
  159. }
  160. }
  161. </script>
  162. <style scoped>
  163. .grid>view {
  164. height: 140upx;
  165. margin-top: 10px;
  166. }
  167. .group-btn {
  168. font-size: 2rem;
  169. border: 1px solid #ccc;
  170. width: 100upx;
  171. height: 100upx;
  172. }
  173. .grid>.grid-btn {
  174. display: flex;
  175. align-items: center;
  176. justify-content: center;
  177. }
  178. .logoImg {
  179. width: 100upx;
  180. height: 100upx;
  181. border-radius: 8upx;
  182. }
  183. .group-user {
  184. padding: 5px;
  185. text-align: center;
  186. }
  187. .group-user .text {
  188. white-space: nowrap;
  189. text-overflow: ellipsis;
  190. overflow: hidden;
  191. text-align: center;
  192. margin-top: 10upx;
  193. }
  194. .announcement {
  195. text-indent: 2rem;
  196. word-break: break-all;
  197. line-height: 1.5;
  198. padding: 20px !important;
  199. background: #eee !important;
  200. ;
  201. }
  202. .item_center {
  203. align-items: center;
  204. }
  205. .user_name {
  206. max-width: 154upx;
  207. text-align: center;
  208. overflow: hidden;
  209. text-overflow: ellipsis;
  210. display: -webkit-box;
  211. -webkit-line-clamp: 1;
  212. -webkit-box-orient: vertical;
  213. }
  214. .bottomfloatV{
  215. position: fixed;
  216. flex-direction: row;
  217. align-items: center;
  218. left: 0;
  219. right: 0;
  220. bottom: 0;
  221. z-index: 999;
  222. height: 180rpx;
  223. }
  224. </style>