90 lines
2.8 KiB
JavaScript
90 lines
2.8 KiB
JavaScript
// schema扩展相关文档请参阅:https://uniapp.dcloud.net.cn/uniCloud/jql-schema-ext.html
|
||
const db = uniCloud.database();
|
||
|
||
module.exports = {
|
||
trigger: {
|
||
async afterCreate({
|
||
addDataList,
|
||
clientInfo,
|
||
result
|
||
}){
|
||
if(addDataList.length>1){
|
||
throw('禁止批量创建')
|
||
}
|
||
// console.log(result);
|
||
let res = await db.collection('uni-im-group').doc(result.id).get()
|
||
let data = res.data[0]
|
||
// console.log(data)
|
||
|
||
const dbJQL = uniCloud.databaseForJQL({
|
||
clientInfo,
|
||
})
|
||
|
||
// 添加操作权限
|
||
dbJQL.setUser({
|
||
uid: data.user_id, // 建议此处使用真实uid
|
||
role: ['admin'], // 指定当前执行用户的角色为admin。如果只希望指定为admin身份,可以删除uid和permission节点
|
||
permission: []
|
||
})
|
||
|
||
res = await dbJQL.collection('uni-im-group-member').add({
|
||
"group_id":data._id,
|
||
"user_id":data.user_id,
|
||
"role":['creator','admin']
|
||
})
|
||
// console.log({res});
|
||
},
|
||
async beforeCreate({addDataList}){
|
||
},
|
||
async beforeDelete({where,userInfo,triggerContext}){
|
||
if(!triggerContext){
|
||
throw new Error('执行删除群失败!你的HBuilderX版本过低,请使用3.6.16及以上版本')
|
||
}
|
||
|
||
let {data:[groupInfo]} = await db.collection('uni-im-group').doc(where._id).get()
|
||
triggerContext.groupInfo = groupInfo
|
||
console.log('beforeDelete',where);
|
||
let {data:[has]} = await db.collection('uni-im-conversation')
|
||
.where({
|
||
group_id:where._id,
|
||
user_id:userInfo._id
|
||
})
|
||
.get()
|
||
if(!has){
|
||
throw new Error('限群创建者操作')
|
||
}
|
||
},
|
||
async afterDelete({where,clientInfo,triggerContext}){
|
||
console.log('beforeDelete',where,triggerContext);
|
||
const group_id = where._id
|
||
// 删除相关会话
|
||
let res = await db.collection('uni-im-conversation').where({group_id}).remove()
|
||
// 删除相关加群申请数据
|
||
res = await db.collection('uni-im-group-join').where({group_id}).remove()
|
||
|
||
// 通知所有群成员,注意:需要群成员列表清空之前发 要不然就收不到了
|
||
let title = "群聊被解散通知",
|
||
content = `群聊"${triggerContext.groupInfo.name}"已被解散`,
|
||
pushParam = {
|
||
payload: {
|
||
"type": "uni-im-notification",
|
||
"subType": "uni-im-group-cancellation",
|
||
"data": {
|
||
group_id
|
||
},
|
||
unique:group_id
|
||
},
|
||
title, // "收到im消息,离线时显示的标题",
|
||
content //"离线时显示的内容"
|
||
}
|
||
const uniImCo = uniCloud.importObject("uni-im-co")
|
||
res = await uniImCo.sendMsgToGroup({pushParam,appId:clientInfo.appId})
|
||
// console.log(res);
|
||
|
||
// 删除相关群成员数据(注意:要先发群通知再解散,要不然消息发布出去“无法指定接收消息的人”)
|
||
res = await db.collection('uni-im-group-member').where({group_id}).remove()
|
||
console.log('beforeDelete',res);
|
||
}
|
||
}
|
||
}
|