移动app

This commit is contained in:
2023-09-24 17:55:19 +08:00
parent 736c5376e0
commit 59f7e39791
735 changed files with 80523 additions and 57 deletions

View File

@@ -0,0 +1,294 @@
<template>
<view class="create-group-box">
<view class="header-box">
<uni-search-bar v-model="keyword"
placeholder="搜索" bgColor="#fff"
:radius="100"
@confirm="getFriendsData"
@cancel="doClear"
@clear="doClear"
></uni-search-bar>
<!--
checkFriendsSearchWidth
<view v-if="checkFriendIds.length" class="image-box"
:style="{'width':checkFriendsWidth + 'rpx','transform':'translateX' + ( translateXWidth + 'rpx')}">
<image v-for="(img,index) in checkFriendImg" :key="index"
class="avatar" :src="img && img.url ? img.url : '/uni_modules/uni-im/static/avatarUrl.png'"
></image>
</view> -->
</view>
<view class="content-box">
<checkbox-group @change="checkboxChange">
<label v-for="(item,index) in friendList" :key="index" class="label-box" >
<checkbox :value="item._id" class="checkbox" />
<view>
<uni-list :border="false">
<uni-list-chat :avatar-circle="true"
:title="item.nickname"
:avatar="item.avatar_file && item.avatar_file.url ? item.avatar_file.url : '/uni_modules/uni-im/static/avatarUrl.png'"
>
</uni-list-chat>
</uni-list>
</view>
</label>
</checkbox-group>
</view>
<view class="foot-box">
<!-- 创建新群可以不选择好友直接创建,要求好友进群必须选择好友 -->
<button :disabled="group_id? !checkFriendIds.length : false " class="btn" type="primary" @click="createGroup">{{btnText}}{{checkFriendNum}}</button>
</view>
<uni-load-more :status="loading?'loading':(hasMore?'hasMore':'noMore')"
:contentText='{"contentnomore": friendList.length?"没有更多好友":"没有可以选择的好友"}'
></uni-load-more>
</view>
</template>
<script>
import uniIm from '@/uni_modules/uni-im/lib/main.js';
const db = uniCloud.database();
export default {
data() {
return {
loading:true,
hasMore: false,
keyword:'',
checkFriendIds: [],
friendData: [],
groupMemberUid:[] ,//选人进群时已经在群里的人的id
group_id:false
}
},
computed: {
friendList(){
return this.friendData.filter(item=>!this.groupMemberUid.includes(item._id))
},
checkFriendNum() {
return this.checkFriendIds.length > 0 ? ''+ this.checkFriendIds.length +'': ''
},
btnText(){
return this.group_id ? '立即邀请' : '立即创建'
},
checkFriendsWidth() {
return this.checkFriendIds.length > 6 ? '360' : this.checkFriendIds.length * 65
},
// checkFriendsSearchWidth() {
// return this.checkFriendIds.length > 6 ? '360' : 720 - (this.checkFriendIds.length * 60)
// },
translateXWidth() {
return this.checkFriendIds.length > 6 ? this.checkFriendIds.length * 65 : '60'
},
checkFriendImg(){
return this.friendList.reduce((sum,current)=>{
if(this.checkFriendIds.includes(current._id)){
sum.push(current)
}
return sum
},[]).map(item=>item.avatar_file)
}
},
async onLoad(options) {
this.setParam(options)
},
methods: {
async setParam(options = {}){
console.log("group_id",options);
if(options.group_id){
this.group_id = options.group_id
uni.setNavigationBarTitle({
title:'邀请新成员'
})
//查本群,成员,
let res = await db.collection('uni-im-group-member').where({
group_id: options.group_id
})
.get()
console.log("res:查本群,成员 ",res);
this.groupMemberUid = res.result.data.map(item=>item.user_id)
console.log('this.groupMemberUid',this.groupMemberUid);
}
this.getFriendsData()
},
async getFriendsData(){
let whereString = {}
if(this.keyword){
whereString = `
"_id" == "${this.keyword}" ||
"username" == "${this.keyword}" ||
"nickname" == "${this.keyword}" ||
"email" == "${this.keyword}" ||
"mobile" == "${this.keyword}"
`
}
let res = await db.collection(
db.collection('uni-im-friend').where('"user_id" == $cloudEnv_uid').field('friend_uid,mark,class_name').getTemp(),
db.collection('uni-id-users').where(whereString).field('_id,nickname,avatar_file').getTemp()
).get()
// console.log(res);
let data = res.result.data
data.forEach((item,index)=>{
if(item.friend_uid[0]){
data[index] = item.friend_uid[0]
}else{
delete data[index]
}
})
this.friendData = data
this.loading = false
this.hasMore = this.friendList.length != 0
},
doClear() {
this.keyword = ''
this.getFriendsData()
},
checkboxChange(e) {
// console.log("checkboxChange-value",e.detail.value);
this.checkFriendIds = e.detail.value
},
async createGroup() {
// console.log('创建', this.checkFriendIds.length)
const uniImCo = uniCloud.importObject("uni-im-co")
let res = await uniImCo.chooseUserIntoGroup({
user_ids:this.checkFriendIds,
group_id:this.group_id
})
this.checkFriendIds = []
// console.log('createGroup',res);
if(this.group_id){
uni.navigateBack({
delta:1
})
}else{
// #ifdef H5
if(uniIm.isWidescreen){
uni.$emit('uni-im-toChat','group_' + res.data.group_id)
}else{
uni.redirectTo({
url: '/uni_modules/uni-im/pages/chat/chat?conversation_id=' + 'group_' + res.data.group_id,
animationDuration: 300,
fail: (e) => {
console.log(e);
}
})
}
// #endif
// #ifndef H5
uni.redirectTo({
url: '/uni_modules/uni-im/pages/chat/chat?conversation_id=' + 'group_' + res.data.group_id,
animationDuration: 300,
complete: (e) => {
console.log(e);
}
})
// #endif
}
}
}
}
</script>
<style lang="scss" scoped>
.create-group-box {
flex: 1;
flex-direction: column;
position: relative;
background-color: #f5f5f5;
/* #ifdef H5 */
align-items: center;
height: 100vh;
padding-top: 60px;
/* #endif */
/* #ifdef MP-WEIXIN */
height: 100vh;
/* #endif */
}
/* #ifdef H5 */
.create-group-box * {
max-width: 950px;
}
/* #endif */
.header-box {
width: 750rpx;
/* #ifdef H5 */
position: fixed;
top: 44px;
z-index: 99;
display: flex;
width: 100%;
/* #endif */
flex-direction: column;
background-color: #f5f5f5;
}
.image-box {
flex-direction: row;
align-items: center;
/* #ifndef APP-NVUE */
transition: 0.3s;
display: flex;
white-space: nowrap;
overflow-x: scroll;
/* #endif */
}
.avatar {
width: 60rpx;
height: 60rpx;
border-radius: 50px;
/* #ifndef APP-NVUE */
flex-shrink: 0;
/* #endif */
}
.content-box .label-box .uni-list-chat__content-title{
line-height: 41px;
}
/* #ifdef H5 */
.content-box ::v-deep .uni-list-chat__content-title {
position: relative;
top: 8px;
}
/* #endif */
.content-box {
/* #ifdef H5 */
// margin-top: 58px;
width: 100%;
/* #endif */
background-color: #fff;
z-index: 10;
}
.label-box{
flex-direction: row;
align-items: center;
height: 80px;
margin-right: 20rpx;
}
.checkbox{
margin: 0 20rpx 0 30rpx;
transform: scale(1.2);
}
.foot-box {
width: 750rpx;
height: 80px;
justify-content: center;
align-items: center;
position: fixed;
bottom: 0;
z-index: 99;
background-color: #f5f5f5;
/* #ifdef H5 */
width: 100%;
@media screen and (min-width:960px){
bottom: 10vh;
// right: 25vw;
}
/* #endif */
}
.btn {
width: 300px;
}
</style>