256 lines
7.4 KiB
JavaScript
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',
|
|
});
|
|
},
|
|
},
|
|
});
|