下图是我测试截图

app/controller/group.js

'use strict';const Controller = require('egg').Controller;class GroupController extends Controller {// 获取群聊列表async list() {const { ctx, app } = this;let current_user_id = ctx.authUser.id;let page = ctx.params.page ? parseInt(ctx.params.page) : 1;let limit = ctx.query.limit ? parseInt(ctx.query.limit) : 10;let offset = (page - 1) * limit;let rows = await app.model.Group.findAll({where: {status: 1},include: [{model: app.model.GroupUser,where: {user_id: current_user_id}}]});return ctx.apiSuccess(rows);}// 创建群聊async create() {const { ctx,app } = this;// 拿到当前用户idlet current_user_id = ctx.authUser.id;// 验证参数ctx.validate({ids:{require:true,type:'array'}});let { ids } = ctx.request.body;// 验证是否是我的好友let friends = await app.model.Friend.findAll({where:{user_id:current_user_id,friend_id:ids},include:[{model:app.model.User,as:'friendInfo',attributes:['nickname','username']}]});if (!friends.length) {return ctx.apiFail('请选择需要加入群聊的好友');}// 创建群聊let name = friends.map(item=>item.friendInfo.nickname || item.friendInfo.username);name.push(ctx.authUser.nickname || ctx.authUser.username); // 将自己的数据加入let group = await app.model.Group.create({name:name.join(','),avatar:'',user_id:current_user_id});// 加入群聊用户let data = friends.map(item=>{return {user_id:item.friend_id,group_id:group.id}});data.unshift({user_id:current_user_id,group_id:group.id});await app.model.GroupUser.bulkCreate(data);// 消息推送let message = {id:(new Date()).getTime(), // 唯一id,后端生成唯一idfrom_avatar:ctx.authUser.avatar,// 发送者头像from_name:ctx.authUser.nickname || ctx.authUser.username,// 发送者昵称from_id:current_user_id, // 发送者idto_id:group.id,// 接收人idto_name:group.name,// 接收人/群 名称to_avatar:group.avatar,// 接收人/群 头像 chat_type:'group', // 接收类型type:'system', // 消息类型data:'创建群聊成功,可以聊天了', // 消息内容options:{}, // 其他参数create_time:(new Date()).getTime(),// 创建时间isremove:0, // 是否撤回group:group}data.forEach(item =>{ctx.sendAndSaveMessage(item.user_id,message);});ctx.apiSuccess('ok');}// 查看群资料async info() {const { ctx, app } = this;let current_user_id = ctx.authUser.id;// 验证参数ctx.validate({id: {required: true,type: 'int',desc: "群组id"}});let { id } = ctx.params;// 群组是否存在let group = await app.model.Group.findOne({where: {status: 1,id},include: [{model: app.model.GroupUser,attributes: ['user_id', 'nickname'],include: [{model: app.model.User,attributes: ['id', 'nickname', 'avatar', 'username']}]}]});if (!group) {return ctx.apiFail('该群聊不存在或者已被封禁');}// 当前用户是否是该群成员let index = group.group_users.findIndex(item => item.user_id === current_user_id);if (index === -1) {return ctx.apiFail('你不是该群成员,没有权限');}ctx.apiSuccess(group);}// 修改群名称async rename(){const { ctx,app } = this;let current_user_id = ctx.authUser.id;// 参数验证ctx.validate({id:{required:true,type:'int',desc:'群组id'},name:{required:true,type:'string',desc:'群名称'}});let { id,name } = ctx.request.body;// 是否存在 let group = await app.model.Group.findOne({where:{id,status:1 },include:[{model:app.model.GroupUser,attributes:['user_id','nickname']}]});if(!group){return ctx.apiFail('该群聊不存在或者已被封禁');}// 当前用户是否是该群成员let index = group.group_users.findIndex(item=>item.user_id === current_user_id);if(index === -1){return ctx.apiFail('你不是该群成员');}// 验证是否是群主if(group.user_id !== current_user_id){return ctx.apiFail('你不是管理员,没有权限');}// 修改群名称group.name = name;await group.save();let from_name = group.group_users[index].nickname || ctx.authUser.nickname || ctx.authUser.username;// 消息推送let message = {id:(new Date()).getTime(), // 唯一id,后端生成唯一idfrom_avatar:ctx.authUser.avatar,// 发送者头像from_name,// 发送者昵称from_id:current_user_id, // 发送者idto_id:group.id,// 接收人idto_name:group.name,// 接收人/群 名称to_avatar:group.name,// 接收人/群 头像 chat_type:'group', // 接收类型type:'system', // 消息类型data:`${from_name} 修改群名称为 ${name}`, // 消息内容options:{}, // 其他参数create_time:(new Date()).getTime(),// 创建时间isremove:0, // 是否撤回group:group}// 推送消息group.group_users.forEach(item=>{ctx.sendAndSaveMessage(item.user_id,message);});ctx.apiSuccess('ok');}// 推送群公告async remark(){const { ctx,app } = this;let current_user_id = ctx.authUser.id;// 参数验证ctx.validate({id:{required:true,type:'int',desc:'群组id'},remark:{required:true,type:'string',desc:'群公告'}});let { id,remark } = ctx.request.body;// 是否存在 let group = await app.model.Group.findOne({where:{id,status:1 },include:[{model:app.model.GroupUser,attributes:['user_id','nickname']}]});if(!group){return ctx.apiFail('该群聊不存在或者已被封禁');}// 当前用户是否是该群成员let index = group.group_users.findIndex(item=>item.user_id === current_user_id);if(index === -1){return ctx.apiFail('你不是该群成员');}// 验证是否是群主if(group.user_id !== current_user_id){return ctx.apiFail('你不是管理员,没有权限');}// 修改群公告group.remark = remark;await group.save();let from_name = group.group_users[index].nickname || ctx.authUser.nickname || ctx.authUser.username;// 消息推送let message = {id:(new Date()).getTime(), // 唯一id,后端生成唯一idfrom_avatar:ctx.authUser.avatar,// 发送者头像from_name,// 发送者昵称from_id:current_user_id, // 发送者idto_id:group.id,// 接收人idto_name:group.name,// 接收人/群 名称to_avatar:group.name,// 接收人/群 头像 chat_type:'group', // 接收类型type:'system', // 消息类型data:`[新公告] ${remark}`, // 消息内容options:{}, // 其他参数create_time:(new Date()).getTime(),// 创建时间isremove:0, // 是否撤回group:group}// 推送消息group.group_users.forEach(item=>{ctx.sendAndSaveMessage(item.user_id,message);});ctx.apiSuccess('ok');}// 修改我在本群中的昵称async nickname(){const { ctx, app, service } = this;let current_user_id = ctx.authUser.id;// 参数验证ctx.validate({id:{required:true,type:'int',desc:'群组id'},nickname:{required:true,type:'string',desc:'昵称'}});let { id,nickname } = ctx.request.body;// 是否存在 let group = await app.model.Group.findOne({where:{id,status:1 },include:[{model:app.model.GroupUser,attributes:['user_id','nickname']}]});if(!group){return ctx.apiFail('该群聊不存在或者已被封禁');}// 当前用户是否是该群成员let index = group.group_users.findIndex(item=>item.user_id === current_user_id);if(index === -1){return ctx.apiFail('你不是该群成员');}// 修改昵称let group_user = await app.model.GroupUser.findOne({where:{user_id:current_user_id,group_id:group.id}});if(group_user){await group_user.update({nickname})}return ctx.apiSuccess('ok');}// 删除并退出群聊async quit(){const { ctx, app, service } = this;let current_user_id = ctx.authUser.id;// 参数验证ctx.validate({id:{required:true,type:'int',desc:'群组id'}});let { id } = ctx.request.body;// 是否存在 let group = await app.model.Group.findOne({where:{id,},include:[{model:app.model.GroupUser,attributes:['user_id','nickname']}]});if(!group){return ctx.apiFail('该群聊不存在');}// 当前用户是否是该群成员let index = group.group_users.findIndex(item=>item.user_id === current_user_id);if(index === -1){return ctx.apiFail('你不是该群成员');}let from_name = group.group_users[index].nickname || ctx.authUser.nickname || ctx.authUser.username;// 组织消息格式let message = {id:(new Date()).getTime(), // 唯一id,后端生成唯一idfrom_avatar:ctx.authUser.avatar,// 发送者头像from_name,// 发送者昵称from_id:current_user_id, // 发送者idto_id:group.id,// 接收人idto_name:group.name,// 接收人/群 名称to_avatar:group.avatar,// 接收人/群 头像 chat_type:'group', // 接收类型type:'system', // 消息类型data:``, // 消息内容options:{}, // 其他参数create_time:(new Date()).getTime(),// 创建时间isremove:0, // 是否撤回group:group}if(group.user_id===current_user_id){// 解散群await app.model.Group.destroy({where:{id:group.id}});message.data = '该群已被解散';}else{// 退出群 await app.model.GroupUser.destroy({where:{user_id:current_user_id,group_id:id}});message.data = `${from_name} 退出该群聊`;}// 推送消息group.group_users.forEach(item=>{ctx.sendAndSaveMessage(item.user_id,message);});return ctx.apiSuccess('ok');}// 踢出某个群成员async kickoff(){const {ctx,app} = this;let current_user_id = ctx.authUser.id;// 参数验证ctx.validate({id:{required:true,type:'int',desc:'群组id'},user_id:{required:true,type:'int',desc:'群公告'}});let { id,user_id } = ctx.request.body;// 是否存在 let group = await app.model.Group.findOne({where:{id,status:1 },include:[{model:app.model.GroupUser,attributes:['user_id','nickname'],include:[{model:app.model.User,attributes:['username','nickname']}]}]});if(!group){return ctx.apiFail('该群聊不存在或者已被封禁');}// 当前用户是否是该群成员let index = group.group_users.findIndex(item=>item.user_id === current_user_id);if(index === -1){return ctx.apiFail('你不是该群成员');}// 验证是否是群主if(group.user_id !== current_user_id){return ctx.apiFail('你不是管理员,没有权限');}// 不能踢自己if(user_id === current_user_id){return ctx.apiFail('不能踢自己');}// 对方不是该成员let index2 = group.group_users.findIndex(item=>item.user_id === user_id);if(index2 === -1){return ctx.apiFail('对方不是该群成员');}let kickname = group.group_users[index2].nickname || group.group_users[index2].user.nickname || group.group_users[index2].user.username;// 踢出该群await app.model.GroupUser.destroy({where:{user_id:user_id,group_id:group.id}});// 返回成功ctx.apiSuccess('ok');// 构建消息格式let from_name = group.group_users[index].nickname || ctx.authUser.nickname || ctx.authUser.username;let message = {id:(new Date()).getTime(), // 唯一id,后端生成唯一idfrom_avatar:ctx.authUser.avatar,// 发送者头像from_name,// 发送者昵称from_id:current_user_id, // 发送者idto_id:group.id,// 接收人idto_name:group.name,// 接收人/群 名称to_avatar:group.avatar,// 接收人/群 头像 chat_type:'group', // 接收类型type:'system', // 消息类型data:`${from_name} 将 ${kickname} 移除群聊`, // 消息内容options:{}, // 其他参数create_time:(new Date()).getTime(),// 创建时间isremove:0, // 是否撤回group:group}// 消息推送group.group_users.forEach(item=>{ctx.sendAndSaveMessage(item.user_id,message);})}// 邀请加入群聊async invite(){const {ctx,app} = this;let current_user_id = ctx.authUser.id;// 参数验证ctx.validate({id:{required:true,type:'int',desc:'群组id'},user_id:{required:true,type:'int',desc:'群公告'}});let { id,user_id } = ctx.request.body;// 是否存在 let group = await app.model.Group.findOne({where:{id,status:1 },include:[{model:app.model.GroupUser,attributes:['user_id','nickname'],include:[{model:app.model.User,attributes:['username','nickname']}]}]});if(!group){return ctx.apiFail('该群聊不存在或者已被封禁');}// 当前用户是否是该群成员let index = group.group_users.findIndex(item=>item.user_id === current_user_id);if(index === -1){return ctx.apiFail('你不是该群成员');}// 对方不是该成员let index2 = group.group_users.findIndex(item=>item.user_id === user_id);if(index2 !== -1){return ctx.apiFail('对方已是该群成员');}// 对方是否存在let user = await app.model.User.findOne({where:{id:user_id,status:1}});if(!user){return ctx.apiFail('对方不存在或者已被封禁');}let invitename = user.nickname || user.username;// 加入该群await app.model.GroupUser.create({user_id:user_id,group_id:group.id});// 返回成功ctx.apiSuccess('ok');// 构建消息格式let from_name = group.group_users[index].nickname || ctx.authUser.nickname || ctx.authUser.username;let message = {id:(new Date()).getTime(), // 唯一id,后端生成唯一idfrom_avatar:ctx.authUser.avatar,// 发送者头像from_name,// 发送者昵称from_id:current_user_id, // 发送者idto_id:group.id,// 接收人idto_name:group.name,// 接收人/群 名称to_avatar:group.avatar,// 接收人/群 头像 chat_type:'group', // 接收类型type:'system', // 消息类型data:`${from_name} 邀请 ${invitename} 加入群聊`, // 消息内容options:{}, // 其他参数create_time:(new Date()).getTime(),// 创建时间isremove:0, // 是否撤回group:group}// 消息推送group.group_users.forEach(item=>{ctx.sendAndSaveMessage(item.user_id,message);})}// 生成群二维码async qrcode(){const {ctx,app} = this;ctx.qrcode(JSON.stringify({id: ctx.params.id,type: "group",event: "navigateTo"}));}
}
module.exports = GroupController;

/pages/mail/mail/mail.vue

<template><view><!-- 导航栏 --><free-nav-bar title="选择" showBack :showRight="true"><free-main-button :name="buttonText" slot="right" @click="submit"></free-main-button></free-nav-bar><!-- 通讯录列表 --><scroll-view scroll-y="true" :style="'height:'+scrollHeight+'px;'":scroll-into-view="scrollInto"><template v-if="type === 'see'"><free-list-item v-for="(item,index) in typeList":key="item.key" :title="item.name" :showRightIcon="false" showRight@click="typeIndex = index"><view slot="right"style="width: 40rpx;height: 40rpx;"class="border rounded-circle flex align-center justify-center mr-4"><view v-if="typeIndex === index" style="width: 30rpx;height: 30rpx;"class="main-bg-color rounded-circle"></view></view></free-list-item></template><template v-if="type !== 'see' || (type === 'see' && (typeIndex === 1 || typeIndex === 2)) "><view v-for="(item,index) in list" :key="index":id="'item-'+item.title"><view v-if="item.list.length" class="py-2 px-3 border-bottom bg-light"><text class="font-md text-dark">{{item.title}}</text></view><free-list-item v-for="(item2,index2) in item.list" :key="index2" :title="item2.name" :cover="item2.avatar || '/static/images/userpic.png'":showRightIcon="false" showRight@click="selectItem(item2)"><view slot="right"style="width: 40rpx;height: 40rpx;"class="border rounded-circle flex align-center justify-center mr-4"><view v-if="item2.checked" style="width: 30rpx;height: 30rpx;"class="main-bg-color rounded-circle"></view></view></free-list-item></view></template></scroll-view><!-- 侧边导航条 --><view class="position-fixed right-0 bottom-0 bg-light flex flex-column" :style="'top:'+top+'px;'" style="width: 50rpx;" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend"><view class="flex-1 flex align-center justify-center"v-for="(item,index) in list" :key="index"><text class="font-sm text-muted">{{item.title}}</text></view></view><view class="position-fixed rounded-circle bg-light border flex align-center justify-center" v-if="current"style="width: 150rpx;height: 150rpx;left: 300rpx;":style="'top:'+modalTop+'px;'"><text class="font-lg">{{current}}</text></view></view>
</template><script>import freeNavBar from "@/components/free-ui/free-nav-bar.vue"import freeListItem from "@/components/free-ui/free-list-item.vue"import freeMainButton from '@/components/free-ui/free-main-button.vue';import { mapState } from 'vuex'import $H from '@/common/free-lib/request.js';export default {components: {freeNavBar,freeListItem,freeMainButton},data() {return {typeIndex:0,typeList:[{name:"公开",key:"all"},{name:"谁可以看",key:"only"},{name:"不给谁看",key:"except"},{name:"私密",key:"none"}],top:0,scrollHeight:0,scrollInto:'',current:'',selectList:[],type:"",limit:9,id:0}},onLoad(e) {let res = uni.getSystemInfoSync()this.top = res.statusBarHeight + uni.upx2px(90)this.scrollHeight = res.windowHeight - this.topif(e.type){this.type = e.type}if(e.limit){this.limit = parseInt(e.limit)}if(e.id){this.id = e.idif(e.type === 'inviteGroup'){this.limit = 1}}this.$store.dispatch('getMailList')},computed: {...mapState({list:state=>state.user.mailList}),buttonText(){let text = '发送'if(this.type === 'createGroup'){text = '创建群组'}return text + ' ('+this.selectCount+')'},modalTop(){return (this.scrollHeight - uni.upx2px(150)) / 2},// 每个索引的高度itemHeight() {let count = this.list.lengthif(count < 1){return 0}return this.scrollHeight /  count},// 选中数量selectCount(){return this.selectList.length}},methods: {touchstart(e){this.changeScrollInto(e)},touchmove(e){this.changeScrollInto(e)},touchend(e){this.current = ''},// 联动changeScrollInto(e){let Y = e.touches[0].pageY// #ifdef MPY = Y - this.top// #endiflet index = Math.floor(Y / this.itemHeight)let item = this.list[index]if(item){this.scrollInto = 'item-'+item.titlethis.current = item.title}},// 选中/取消选中selectItem(item){if(!item.checked && this.selectCount === this.limit){// 选中|限制选中数量return uni.showToast({title: '最多选中 '+this.limit+' 个',icon: 'none'});}item.checked = !item.checkedif(item.checked){ // 选中this.selectList.push(item)} else { // 取消选中let index = this.selectList.findIndex(v=> v === item)if(index > -1){this.selectList.splice(index,1)}}},submit(){if(this.type !== 'see' && this.selectCount === 0){return uni.showToast({title: '请先选择',icon: 'none'});}switch (this.type){case 'createGroup': // 创建群组$H.post('/group/create',{ids:this.selectList.map(item=>item.user_id)}).then(res=>{// 见鬼这里跳转不行啊uni.navigateTo({url:'../../tabbar/index/index'});uni.showToast({title: '创建群聊成功',duration: 200});})break;case 'sendCard':let item = this.selectList[0]uni.$emit('sendItem',{sendType:"card",data:item.name,type:"card",options:{avatar:item.avatar,id:item.user_id}})uni.navigateBack({delta: 1});break;case 'remind':uni.$emit('sendResult',{type:"remind",data:this.selectList})uni.navigateBack({delta: 1});break;case 'see':let k = this.typeList[this.typeIndex].keyif(k !== 'all' && k!== 'none' && !this.selectCount){return uni.showToast({title: '请先选择',icon: 'none'});}uni.$emit('sendResult',{type:"see",data:{k,v:this.selectList}})uni.navigateBack({delta: 1});break;case 'inviteGroup':console.log(this.selectList);$H.post('/group/invite',{id:this.id,user_id:this.selectList[0].user_id}).then(res=>{uni.showToast({title: '邀请成功',icon: 'none'});uni.navigateBack({delta: 1});})break;}}}}
</script><style></style>

/pages/chat/chat-set/chat-set.vue

<template><view style="background-color: #EDEDED;"><!-- 导航栏 --><free-nav-bar title="聊天信息" showBack :showRight="false"></free-nav-bar><view class="flex flex-wrap py-3 bg-white"><!-- 私聊 --><view v-if="detail.chat_type === 'user'" class="flex flex-column align-center justify-center mb-2" style="width: 150rpx;"><free-avatar :src="detail.avatar || '/static/images/userpic.png'" size="110"></free-avatar><text class="font text-muted mt-1" >{{detail.name}}</text></view><!-- 群聊 --><view v-else class="flex flex-column align-center justify-center mb-2" style="width: 150rpx;" v-for="(item,index) in list" :key='index'><free-avatar :src="item.avatar || '/static/images/userpic.png'" size="110"></free-avatar><text class="font text-muted mt-1" >{{item.name}}</text></view><view class="flex flex-column align-center justify-center mb-2" style="width: 150rpx;"  @click="openMail"><view class="flex align-center justify-center border"  hover-class="bg-light" style="width: 120rpx;height: 120rpx;"><text class="text-light-muted" style="font-size: 100rpx;" >+</text></view></view><view class="flex flex-column align-center justify-center mb-2" style="width: 150rpx;"  @click="deleteUser"><view class="flex align-center justify-center border"  hover-class="bg-light" style="width: 120rpx;height: 120rpx;"><text class="text-light-muted" style="font-size: 100rpx;" >-</text></view></view></view><free-divider></free-divider><view v-if="detail.chat_type==='group'"><free-list-item title="群聊名称" showRight :showLeftIcon="false" @click="updateName()"><text slot="right" class="font text-muted">{{detail.name}}</text></free-list-item><free-list-item title="群二维码" showRight :showLeftIcon="false" @click="openCode"><text slot="right" class="iconfont font-md text-light-muted">&#xe647;</text></free-list-item><free-list-item title="群公告" showRight :showLeftIcon="false" @click="openGroupRemark"></free-list-item></view><free-divider></free-divider><free-list-item title="查找聊天记录" showRight :showLeftIcon="false" @click="openHistory"></free-list-item><free-divider></free-divider><free-list-item title="消息免打扰" showRight :showLeftIcon="false" :showRightIcon="false"><switch slot="right" :checked="detail.nowarn" @change="updateChatItem($event,'nowarn')" color="#08C060" /></free-list-item><free-list-item title="置顶聊天" showRight :showLeftIcon="false" :showRightIcon="false"><switch slot="right" :checked="detail.istop" @change="updateChatItem($event,'istop')" color="#08C060"/></free-list-item><free-list-item title="强提醒" showRight :showLeftIcon="false" :showRightIcon="false"><switch slot="right" :checked="detail.strongwarn" @change="updateChatItem($event,'strongwarn')" color="#08C060"/></free-list-item><free-divider></free-divider><free-list-item title="清空聊天记录" showRight :showLeftIcon="false" @click="clear"></free-list-item><free-divider></free-divider><view v-if="detail.chat_type==='group'"><free-divider></free-divider><free-list-item title="我在本群的昵称" showRight :showLeftIcon="false" @click="updatenickName"><text slot="right" class="font text-muted">{{nickname}}</text></free-list-item><free-list-item title="显示群成员昵称" showRight :showLeftIcon="false" :showRightIcon="false"><switch slot="right" :checked="detail.shownickname" @change="updateChatItem($event,'shownickname')" color="#08C060"/></free-list-item></view><free-divider></free-divider><free-list-item title="投诉" showRight :showLeftIcon="false"></free-list-item><free-divider></free-divider><view v-if="detail.chat_type === 'group'" class="py-3 flex align-center justify-center bg-white" hover-class="bg-light" @click="quit"><text class="font-md text-danger">删除并退出</text></view><free-confirm :title="'修改'+confirmTitle" ref="confirm"><input type="text" class="border-bottom font-md" :placeholder="confirmTitle" v-model="confirmText"/></free-confirm><view style="height: 200rpx;"></view></view>
</template><script>import freeNavBar from '@/components/free-ui/free-nav-bar.vue';import freeAvatar from '@/components/free-ui/free-avatar.vue';import freeDivider from '@/components/free-ui/free-divider.vue';import freeListItem from '@/components/free-ui/free-list-item.vue';import freeConfirm from '@/components/free-ui/free-confirm.vue';import auth from '@/common/mixin/auth.js';import { mapState } from 'vuex';import $H from '@/common/free-lib/request.js';export default {mixins:[auth],components:{freeNavBar,freeAvatar,freeDivider,freeListItem,freeConfirm},computed:{...mapState({chat:state=>state.user.chat,user:state=>state.user.user}),confirmTitle(){return this.confirmType === 'name' ? '群名称' : '昵称';}},data() {return {list:[],confirmText:'',nickname:'',detail:{id:0,  // 接收人/群 idchat_type:'user', // 接收类型 user 单聊 group群聊name:'', // 接收人/群 昵称avatar:"", // 接收人/群 头像type:'',// 最后一条消息类型istop:false, // 是否置顶shownickname:false, // 是否显示昵称nowarn:false, // 是否免打扰strongwarn:false, //  是否强提醒user_id:0,//管理员id,remark:'', // 群公告invite_confirm:0, // 邀请确认}}},methods: {clear(){uni.showModal({content:'是否要清空聊天记录?',success:(res)=>{if(res.confirm){this.chat.clearChatDetail(this.detail.id,this.detail.chat_type);uni.showToast({title:'清除成功',icon:'none'})uni.$emit('updateHistory');} }})},openCode(){uni.navigateTo({url:'../../my/code/code?params='+encodeURIComponent(JSON.stringify({id:this.detail.id,name:this.detail.name,avatar:this.detail.avatar}))+'&type=group',})},updateChatItem(e,k){console.log(e.detail.value,k);this.detail[k] = e.detail.value;this.chat.updateChatItem({id:this.detail.id,chat_type:this.detail.chat_type},this.detail);},quit(){uni.showModal({content:'是否要删除或退出群聊?',success: (res) => {if(res.cancel) return;$H.post('/group/quit',{id:this.detail.id}).then(res=>{uni.showToast({title: '操作成功',icon:'none'});uni.navigateBack({delta:1})})}})},updatenickName(){this.confirmType = 'nickname';this.confirmText = this.nicknamethis.$refs.confirm.show((close)=>{if(this.confirmText == ''){return uni.showToast({title:'昵称不能为空',icon:'none'})}$H.post('/group/nickname',{id:this.detail.id,nickname:this.confirmText}).then(res=>{uni.showToast({title:'修改成功',icon:'none'});this.nickname = this.confirmText;close();})});},openGroupRemark(){uni.navigateTo({url: '../group-remark/group-remark?params='+encodeURIComponent(JSON.stringify({id:this.detail.id,remark:this.detail.remark}))});},openMail(){let params = this.detail.chat_type === 'user' ? '?type=createGroup' : '?type=inviteGroup&id='+this.detail.id;uni.navigateTo({url:'/pages/mail/mail/mail'+params});},openHistory(){uni.navigateTo({url:`../chat-history/chat-history?chat_tpe=${this.detail.chat_type}&id=${this.detail.id}`,})},deleteUser(){uni.navigateTo({url:'../group-user/group-user?id='+this.detail.id})},updateName(){this.confirmText = this.detail.namethis.$refs.confirm.show((close)=>{if(this.confirmText == ''){return uni.showToast({title:'群名称不能为空',icon:'none'})}$H.post('/group/rename',{id:this.detail.id,name:this.confirmText}).then(res=>{uni.showToast({title:'修改成功',icon:'none'});this.detail.name = this.confirmText;close();})});}},onShow() {if(this.detail.chat_type === 'group'){$H.get('/group_info/'+this.detail.id).then(res=>{this.detail.remark = res.remark;this.list = res.group_users.map(item=>{if(item.user_id === this.user.id){this.nickname = item.nickname;}return {id:item.user_id,name:item.nickname || item.user.nickname || item.user.username,avatar:item.user.avatar}})})}},onLoad(e) {if(!e.params){return this.backToast();}let detail = JSON.parse(e.params);// 获取当前会话的详细资料detail = this.chat.getChatListItem(detail.id,detail.chat_type);if(!detail){return this.backToast()}this.detail = detail;}}
</script><style></style>

感谢大家观看,我们下次见

uni-app 170邀请加入群聊(二)相关推荐

  1. pc端和app端加入微信群聊的测试用例设计点

    pc端微信加入群聊和app端加入微信群聊的测试用例设计点 1.pc端不能创建群聊 2.app端可以通过扫描二维码进入群聊 3.可以通过好友拉取进入群聊 4.好友可以一次拉取多个人进入群聊 5.拉取的人 ...

  2. pc端和移动端微信加入群聊的测试用例设计点

    pc端和移动端微信加入群聊的测试用例设计点         pc端 1.是不可以加群的 2.只能通过搜索群聊的方式进入群聊 3.点击通讯录管理,不能添加群         app端 1.首先点击加号, ...

  3. java 头像 微信群_Android仿微信群聊头像

    工作中需要实现仿钉钉群头像的一个功能,就是个人的头像拼到一起显示,看了一下市场上的APP好像微信的群聊头像是组合的,QQ的头像不是,别的好像也没有了. 给大家分享一下怎么实现的吧.首先我们先看一下效果 ...

  4. Android 高仿微信群聊头像

    最近小编搞了一个仿微信群聊头像的一个功能,分享给大家... 工作中需要实现仿钉钉群头像的一个功能,就是个人的头像拼到一起显示,看了一下市场上的APP好像微信的群聊头像是组合的,QQ的头像不是,别的好像 ...

  5. uni app实现WIFI功能(只支持安卓APP)

    uni app实现WIFI功能 一.前言 二.使用 uni-WIFI 三.使用h5+ api 一.前言 最近需要在uniapp上实现WiFi功能,将个人的研究结果记录如下(都只支持安卓APP) 使用 ...

  6. nodejs 结合 wechaty 实现你的微信群聊机器人二(iPad 协议)

    程序员导航站 :艾特网-iiter.cn 开源地址: https://github.com/isnl/wechat-robot-ipad 前言 前段时间写了篇关于使用 nodejs 结合 wechat ...

  7. 360搜索、UC浏览器等被3·15点名应用已下架;马斯克宣布通过NFT卖歌;美团App再发力社交,内测 “群聊”功能...

    凌云时刻 一分钟速览新闻点! 猎聘.前程无忧为大量简历流向黑市而致歉 医疗广告竞价排名,360 搜索.UC 纷纷上榜 315 晚会 315 晚会曝光人脸识别乱象:海量人脸信息已被搜集 安兔兔曝光 re ...

  8. uni-app 104退出和解散群聊(二)

    /pages/chat/chat-set/chat-set.vue <template><view style="background-color: #EDEDED;&qu ...

  9. 互联网早报 | 3月16日 星期二 | 微信AI直播助理开放内测;汽车之家港交所挂牌上市;美团App内测“群聊”功能...

    今日看点 ✦ 汽车之家港交所成功挂牌,成年内首家回港二次上市中概股 ✦ 恒大汽车与腾讯旗下梧桐车联成立合资公司 ,共同开发车载智能操作系统 ✦ 微信AI直播助理开放内测,助力电商带货 ✦ 美团App内 ...

最新文章

  1. 机器视觉中彩色成像必须考虑的十个问题
  2. EC2 WordPress 移动目录
  3. PHP 和 AJAX MySQL
  4. Python dict() 函数
  5. mysql获取时间戳_服了!阿里Mysql三位封神专家总结1200多页性能优化的千金良方...
  6. 软件测试工程师-缺陷报告
  7. CopyOnWriteArrayList原理
  8. navicat for mysql 数据传输_如何利用Navicat for MySQL数据库进行数据传输
  9. 第88课:Spark Streaming从Flume Pull数据案例实战及内幕源码解密
  10. boost::bind 与 boost::function 的使用方法例子
  11. mcgs组态软件中字体如果从左到右变化_MCGS全中文组态软件常见问题
  12. mxf转换工具(Aiseesoft MXF Converter) v9.2.36
  13. 百度网盘下载一直请求中问题解决
  14. django里template中的书名号
  15. html如何让字体变形,jquery实现字体变形特效-css字体变成圆形
  16. 如何使用python编程抢京东优惠券 知乎_小猿圈Python之实现京东秒杀功能代码
  17. vc++6.0和visual studio 2005
  18. 微信IPAD协议(最新) 支持小程序授权、公众号授权、APP授权、抢红包
  19. 【相识】亚马逊云科技 Community Builders 新成员
  20. Web安全:文件包含漏洞测试(防止 黑客利用此漏洞.)

热门文章

  1. native react 折线图_【详解】纯 React Native 代码自定义折线图组件(译)
  2. 2020年国家扶贫日“三产联动扶贫论坛”在京召开,杭州复杂美科技有限公
  3. javaScript实现通过鼠标滑轮改变元素大小
  4. 帮老婆系列-关于计算Excel表去除指定时间段后的时间差
  5. python 如何实现依据依存关系构造邻接矩阵(有向图)
  6. 112A.Petya and Strings
  7. 微信小程序定制开发的几大类型
  8. MyBatis-Plus | 充分不必要
  9. Java— AWT 绘图(一)
  10. python制作壁纸获取器exe,壁纸采集