|
@@ -19,23 +19,23 @@
|
|
|
<div style="height: calc(100vh - 170px)">
|
|
|
<van-checkbox-group v-model="checked">
|
|
|
<!-- <van-index-bar highlight-color="#FD9A00" index-list :sticky="false"> -->
|
|
|
- <template v-for="(item, index) in addDataList" :key="item?.attentionIdDictMap?.userId">
|
|
|
+ <template v-for="(item, index) in addDataList" :key="item?.userId">
|
|
|
<!-- <van-index-anchor index="A" /> -->
|
|
|
- <van-cell center clickable @click="toggle(item?.attentionIdDictMap?.userId)" disabled>
|
|
|
+ <van-cell center clickable @click.stop="toggle(item?.userId)">
|
|
|
<template #icon>
|
|
|
<div class="flex justify-start">
|
|
|
<van-checkbox
|
|
|
checked-color="#FD9A00"
|
|
|
- :name="item?.attentionIdDictMap?.userId"
|
|
|
- :ref="(el) => (checkboxRefs[item?.attentionIdDictMap?.userId] = el)"
|
|
|
- @click.stop
|
|
|
+ :name="item?.userId"
|
|
|
+ :ref="(el) => (checkboxRefs[item?.userId] = el)"
|
|
|
+ @click.stop="toggle(item?.userId)"
|
|
|
/>
|
|
|
|
|
|
<div class="w-40 h-40 ml-13 mr-12 rounded-full overflow-hidden">
|
|
|
<img
|
|
|
- v-if="item?.attentionIdDictMap?.headImageUrl"
|
|
|
+ v-if="item?.headImageUrl"
|
|
|
class="w-full h-full shrink-0 object-cover"
|
|
|
- :src="item?.attentionIdDictMap?.headImageUrl"
|
|
|
+ :src="item?.headImageUrl"
|
|
|
alt=""
|
|
|
/>
|
|
|
|
|
@@ -50,7 +50,7 @@
|
|
|
<template #title>
|
|
|
<div class="flex items-center">
|
|
|
<h1 class="text-xl text-black-3">
|
|
|
- {{ item?.attentionIdDictMap?.showName }}
|
|
|
+ {{ item?.showName }}
|
|
|
</h1>
|
|
|
<van-tag
|
|
|
v-if="item.fansStatus == 2"
|
|
@@ -69,6 +69,50 @@
|
|
|
</div>
|
|
|
</van-list>
|
|
|
</van-pull-refresh>
|
|
|
+
|
|
|
+ <div
|
|
|
+ class="w-full box-border p-16 pb-40 bg-white fixed bottom-0 left-0 flex justify-between items-center shadow-[0px_-4px_4px_0px_rgba(0,0,0,0.1)]"
|
|
|
+ >
|
|
|
+ <div class="shrink-0 flex justify-start items-center">
|
|
|
+ <div class="w-118 shrink-0 flex justify-start items-center overflow-hidden">
|
|
|
+ <div
|
|
|
+ v-for="(item, index) in checkedList.slice(0, 5)"
|
|
|
+ :key="index + 'avatar'"
|
|
|
+ :class="`w-36 h-36 ${index == 0 ? '' : '-ml-16'} shrink-0 rounded-full overflow-hidden`"
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ v-if="item?.headImageUrl"
|
|
|
+ class="w-full h-full object-cover"
|
|
|
+ :src="item?.headImageUrl"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ <img
|
|
|
+ v-else
|
|
|
+ class="w-full h-full shrink-0 object-cover"
|
|
|
+ src="~/assets/img/default_avatar.png"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="checkedList.length > 5" class="shrink-0 w-24 h-24 ml-8">
|
|
|
+ <img class="w-full h-full object-cover" src="~/assets/img/chat/ellipsis.svg" alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <van-button
|
|
|
+ :disabled="checkedList.length > 0 ? false : true"
|
|
|
+ @click="handleCreateGroup"
|
|
|
+ style="width: 160px"
|
|
|
+ class="shrink-0"
|
|
|
+ block
|
|
|
+ size="large"
|
|
|
+ color="#FD9A00"
|
|
|
+ round
|
|
|
+ >
|
|
|
+ 完成
|
|
|
+ <span v-if="checkedList.length">({{ checkedList.length }})</span>
|
|
|
+ </van-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup>
|
|
@@ -91,14 +135,11 @@ const finished = ref(false)
|
|
|
const checked = ref([])
|
|
|
const showName = ref('')
|
|
|
const checkboxRefs = ref([])
|
|
|
+const checkedList = ref([])
|
|
|
|
|
|
// 字母的数组
|
|
|
const letterList = ref([])
|
|
|
|
|
|
-const toggle = (index) => {
|
|
|
- checkboxRefs.value[index].toggle()
|
|
|
-}
|
|
|
-
|
|
|
const queryParams = reactive({
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
@@ -112,6 +153,17 @@ useSeoMeta({
|
|
|
title: '添加成员'
|
|
|
})
|
|
|
|
|
|
+// 选中要邀请的人
|
|
|
+const toggle = (item) => {
|
|
|
+ if (checkedList.value.length == 0) {
|
|
|
+ checkedList.value.push(item)
|
|
|
+ } else {
|
|
|
+ let index = checkedList.value.findIndex((el) => el?.userId == item?.userId)
|
|
|
+ checkedList.value.splice(index, 1)
|
|
|
+ }
|
|
|
+
|
|
|
+ checkboxRefs.value[item?.userId].toggle()
|
|
|
+}
|
|
|
const search = () => {
|
|
|
finished.value = true
|
|
|
if (showName.value) {
|
|
@@ -123,49 +175,6 @@ const search = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// 获取全局搜索的用户
|
|
|
-// const getAllList = async () => {
|
|
|
-// try {
|
|
|
-// loading.value = true
|
|
|
-
|
|
|
-// const {
|
|
|
-// data: { dataList, totalCount }
|
|
|
-// } = await request('/website/tourism/fans/getUserListByNickname', {
|
|
|
-// query: {
|
|
|
-// ...queryParams,
|
|
|
-// showName: showName.value
|
|
|
-// }
|
|
|
-// })
|
|
|
-
|
|
|
-// if (Array.isArray(dataList) && dataList?.length) {
|
|
|
-// addDataList.value = dataList
|
|
|
-// // arr = addDataList.value
|
|
|
-// // arr = arr.map((item, index) => {
|
|
|
-// // let letter = pinyin(item?.visaTitle, { pattern: 'first', toneType: 'none' })
|
|
|
-// // console.log(letter, '123')
|
|
|
-
|
|
|
-// // item.letter = letter
|
|
|
-// // return item
|
|
|
-// // })
|
|
|
-// // console.log(arr, 'addDataList.value .value')
|
|
|
-// } else {
|
|
|
-// addDataList.value = []
|
|
|
-// }
|
|
|
-
|
|
|
-// loading.value = false
|
|
|
-// refreshing.value = false
|
|
|
-// if (addDataList.value.length >= totalCount) {
|
|
|
-// finished.value = true
|
|
|
-// } else {
|
|
|
-// finished.value = false
|
|
|
-// }
|
|
|
-// } catch (err) {
|
|
|
-// } finally {
|
|
|
-// refreshing.value = false
|
|
|
-// loading.value = false
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
// 刷新
|
|
|
const onRefresh = () => {
|
|
|
queryParams.pageNum = 1
|
|
@@ -174,38 +183,29 @@ const onRefresh = () => {
|
|
|
getList()
|
|
|
}
|
|
|
|
|
|
-// 触底加载
|
|
|
-// const getLoadList = () => {
|
|
|
-// queryParams.pageNum++
|
|
|
-// finished.value = true
|
|
|
-// showName.value ? search() : getList()
|
|
|
-// }
|
|
|
-
|
|
|
// 获取数据
|
|
|
const getList = async () => {
|
|
|
try {
|
|
|
- let url = `/website/tourism/fans/getFriends`
|
|
|
+ let url = `/website/tourMember/memberLit`
|
|
|
|
|
|
loading.value = true
|
|
|
- let {
|
|
|
- data: { dataList, totalCount }
|
|
|
- } = await request(url, {
|
|
|
+ let { data } = await request(url, {
|
|
|
query: {
|
|
|
- ...queryParams
|
|
|
+ groupId: route.query.groupId
|
|
|
}
|
|
|
})
|
|
|
let arr = []
|
|
|
- if (Array.isArray(dataList) && dataList?.length) {
|
|
|
- addDataList.value = dataList
|
|
|
- arr = addDataList.value
|
|
|
- arr = arr.map((item, index) => {
|
|
|
- let letter = pinyin(item?.visaTitle, { pattern: 'first', toneType: 'none' })
|
|
|
- console.log(letter, '123')
|
|
|
-
|
|
|
- item.letter = letter
|
|
|
- return item
|
|
|
- })
|
|
|
- console.log(arr, 'addDataList.value .value')
|
|
|
+ if (Array.isArray(data) && data?.length) {
|
|
|
+ addDataList.value = data
|
|
|
+ // arr = addDataList.value
|
|
|
+ // arr = arr.map((item, index) => {
|
|
|
+ // let letter = pinyin(item?.visaTitle, { pattern: 'first', toneType: 'none' })
|
|
|
+ // console.log(letter, '123')
|
|
|
+
|
|
|
+ // item.letter = letter
|
|
|
+ // return item
|
|
|
+ // })
|
|
|
+ // console.log(arr, 'addDataList.value .value')
|
|
|
} else {
|
|
|
addDataList.value = []
|
|
|
}
|
|
@@ -224,27 +224,31 @@ const getList = async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// // 数据转化
|
|
|
-// const changeInitials = (list) => {
|
|
|
-// console.log(list)
|
|
|
-
|
|
|
-// let letter = []
|
|
|
-// let listArr = []
|
|
|
-// listArr = list.map((item, index) => {
|
|
|
-// item.letter = pinyin(item?.visaTitle, { pattern: 'first', toneType: 'none' })
|
|
|
-// .map((pinyin) => pinyin[0].toUpperCase()) // 获取拼音的首字母并转换为大写
|
|
|
-// .join('')
|
|
|
-
|
|
|
-// letter.push(item.letter)
|
|
|
-// return item
|
|
|
-// })
|
|
|
-// console.log(list, '21')
|
|
|
-// console.log(listArr, '444')
|
|
|
-
|
|
|
-// return {
|
|
|
-// letter,
|
|
|
-// listArr
|
|
|
-// }
|
|
|
-// }
|
|
|
+// 创建多人聊天
|
|
|
+async function handleCreateGroup() {
|
|
|
+ try {
|
|
|
+ showLoadingToast({
|
|
|
+ message: '准备开始群聊...',
|
|
|
+ duration: 100000
|
|
|
+ })
|
|
|
+ let { data } = request('/website/tourMember/invite', {
|
|
|
+ method: 'post',
|
|
|
+ body: {
|
|
|
+ groupId: route.query.groupId,
|
|
|
+ ids: checked.value
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (data) {
|
|
|
+ navigateTo({
|
|
|
+ path: '/chat/group',
|
|
|
+ query: data,
|
|
|
+ replace: true
|
|
|
+ })
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ } finally {
|
|
|
+ closeToast()
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
<style lang="scss" scoped></style>
|