Files
miniprogram-wxAppPatient/TUIService/TUIKit/components/TUIConversation/index.js
T
2023-11-17 09:51:35 +08:00

256 lines
7.4 KiB
JavaScript

import constant from "../../utils/constant";
// TUIKitWChat/Conversation/index.js
const app = getApp();
Component({
/**
* 组件的属性列表
*/
properties: {
config: {
type: Object,
value: {},
observer(config) {
},
},
},
/**
* 组件的初始数据
*/
data: {
conversationList: [],
currentConversationID: '',
showSelectTag: false,
array: [
{ id: 1, name: '发起会话' },
{ id: 2, name: '发起群聊' },
{ id: 3, name: '加入群聊' },
],
index: Number,
unreadCount: 0,
conversationInfomation: {},
transChenckID: '',
userIDList: [],
statusList: [],
currentUserIDList: [],
showConversationList: true,
showCreateConversation: false,
showCreateGroup: false,
showJoinGroup: false,
handleChangeStatus: false,
storageList: [],
},
lifetimes: {
attached() {
},
detached() {
wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated, this);
wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.USER_STATUS_UPDATED, this.onUserStatusUpdate, this);
},
},
/**
* 组件的方法列表
*/
methods: {
init() {
wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated, this);
wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.USER_STATUS_UPDATED, this.onUserStatusUpdate, this);
this.getConversationList();
wx.getStorageInfo({
success(res) {
wx.setStorage({
key: 'storageList',
data: res.keys,
});
},
});
this.setData({
handleChangeStatus: wx.getStorageSync(app?.globalData?.userInfo?.userID) ? wx.getStorageSync(app?.globalData?.userInfo?.userID) : true,
}, () => {
if (!wx.getStorageSync('storageList').includes('showOnlineStatus')) {
this.handleChangeStatus();
}
});
},
goBack() {
if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) {
wx.navigateBack({
delta: 1,
});
} else {
wx.switchTab({
url: '/pages/TUI-Index/index',
});
}
},
// 更新会话列表
onConversationListUpdated(event) {
this.setData({
conversationList: event.data,
});
this.filterUserIDList(event.data);
},
transCheckID(event) {
this.setData({
transChenckID: event.detail.checkID,
});
},
// 更新状态
onUserStatusUpdate(event) {
event.data.forEach((element) => {
const index = this.data.statusList.findIndex(item => item.userID === element.userID);
if (index === -1) {
return;
}
this.data.statusList[index] = element;
this.setData({
statusList: this.data.statusList,
});
});
},
getConversationList() {
wx.$TUIKit.getConversationList().then((imResponse) => {
this.setData({
conversationList: imResponse.data.conversationList,
});
this.filterUserIDList(imResponse.data.conversationList);
});
},
// 跳转到子组件需要的参数
handleRoute(event) {
const flagIndex = this.data.conversationList.findIndex(item => item.conversationID === event.currentTarget.id);
this.setData({
index: flagIndex,
});
this.getConversationList();
this.setData({
currentConversationID: event.currentTarget.id,
unreadCount: this.data.conversationList[this.data.index].unreadCount,
});
this.triggerEvent('currentConversationID', { currentConversationID: event.currentTarget.id,
unreadCount: this.data.conversationList[this.data.index].unreadCount });
},
// 展示发起会话/发起群聊/加入群聊
showSelectedTag() {
wx.aegis.reportEvent({
name: 'conversationType',
ext1: 'conversationType-all',
});
this.setData({
showSelectTag: !this.data.showSelectTag,
});
},
handleOnTap(event) {
this.setData({
showSelectTag: false,
}, () => {
switch (event.currentTarget.dataset.id) {
case 1:
this.setData({
showCreateConversation: true,
showConversationList: false,
});
break;
case 2:
this.setData({
showCreateGroup: true,
showConversationList: false,
});
break;
case 3:
this.setData({
showJoinGroup: true,
showConversationList: false,
});
break;
default:
break;
}
});
},
// 点击空白区域关闭showMore弹窗
handleEditToggle() {
this.setData({
showSelectTag: false,
});
},
showConversation(event) {
this.setData({
showConversationList: true,
showCreateConversation: false,
showCreateGroup: false,
showJoinGroup: false,
});
},
searchUserID(event) {
this.triggerEvent('currentConversationID', { currentConversationID: event.detail.searchUserID });
},
searchGroupID(event) {
this.triggerEvent('currentConversationID', { currentConversationID: event.detail.searchGroupID });
},
createGroupID(event) {
this.triggerEvent('currentConversationID', { currentConversationID: event.detail.createGroupID });
},
// 处理当前登录账号是否开启在线状态
handleChangeStatus() {
const currentID = wx.$chat_userID;
const cacheList = wx.getStorageSync('currentUserID');
const nowList = [];
nowList.push(wx.$chat_userID);
if (cacheList.length === 0 || !cacheList.includes(wx.$chat_userID)) {
wx.setStorage({
key: 'currentUserID',
data: wx.getStorageSync('currentUserID').concat(nowList),
});
}
wx.setStorage({
key: currentID,
data: this.data.handleChangeStatus,
});
},
// 订阅在线状态
subscribeOnlineStatus(userIDList) {
wx.$TUIKit.getUserStatus({ userIDList }).then((imResponse) => {
const { successUserList } = imResponse.data;
this.setData({
statusList: successUserList,
});
})
.catch((imError) => {
console.warn('getUserStatus error:', imError); // 获取用户状态失败的相关信息
});
wx.$TUIKit.subscribeUserStatus({ userIDList });
},
// 过滤会话列表,找出C2C会话,以及需要订阅状态的userIDList
filterUserIDList(conversationList) {
if (conversationList.length === 0) return;
const userIDList = [];
conversationList.forEach((element) => {
if (element.type === wx.$TUIKitTIM.TYPES.CONV_C2C) {
userIDList.push(element.userProfile.userID);
}
});
const currentUserID = wx.getStorageSync('currentUserID');
if (currentUserID.includes(wx.$chat_userID)) {
const currentStatus = wx.getStorageSync(wx.$chat_userID);
if (currentStatus) {
this.subscribeOnlineStatus(userIDList);
}
} else {
this.subscribeOnlineStatus(userIDList);
}
},
learnMore() {
if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) return;
app.method.navigateTo({
url: '/pages/TUI-User-Center/webview/webview?url=https://cloud.tencent.com/product/im',
});
},
},
});