2024-12-18 15:46:27 +08:00
|
|
|
|
<script setup>
|
2025-02-15 16:09:39 +08:00
|
|
|
|
/**
|
|
|
|
|
* 消息列表
|
|
|
|
|
*/
|
|
|
|
|
import api from '@/api/index.js'
|
|
|
|
|
import {
|
|
|
|
|
ref,
|
|
|
|
|
computed,
|
|
|
|
|
reactive,
|
|
|
|
|
onMounted,
|
|
|
|
|
onUnmounted,
|
|
|
|
|
getCurrentInstance,
|
|
|
|
|
} from 'vue'
|
|
|
|
|
// 腾讯云聊天
|
|
|
|
|
import TencentCloudChat from '@tencentcloud/chat';
|
|
|
|
|
// 工具库
|
|
|
|
|
import util from '@/common/js/util.js'
|
|
|
|
|
import {
|
|
|
|
|
useStore,
|
|
|
|
|
} from 'vuex'
|
|
|
|
|
const {
|
|
|
|
|
proxy
|
|
|
|
|
} = getCurrentInstance()
|
|
|
|
|
const store = useStore()
|
|
|
|
|
const userinfo = computed(() => {
|
|
|
|
|
let result = store.state.userinfo
|
|
|
|
|
return result
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 右滑菜单
|
|
|
|
|
const rightOption = [{
|
|
|
|
|
text: '删除',
|
|
|
|
|
style: {
|
|
|
|
|
backgroundColor: '#F85050'
|
|
|
|
|
},
|
|
|
|
|
fn: (item) => delMsg(item)
|
|
|
|
|
}, {
|
|
|
|
|
text: '设为已读',
|
|
|
|
|
style: {
|
|
|
|
|
backgroundColor: '#00ADEE'
|
|
|
|
|
},
|
|
|
|
|
fn: (item) => setRead(item)
|
|
|
|
|
},]
|
|
|
|
|
|
|
|
|
|
// 系统
|
|
|
|
|
const systemRightOption = [{
|
|
|
|
|
text: '删除',
|
|
|
|
|
style: {
|
|
|
|
|
backgroundColor: '#F85050'
|
|
|
|
|
},
|
|
|
|
|
}, {
|
|
|
|
|
text: '设为已读',
|
|
|
|
|
style: {
|
|
|
|
|
backgroundColor: '#00ADEE'
|
|
|
|
|
},
|
|
|
|
|
},]
|
2025-02-19 16:36:12 +08:00
|
|
|
|
// 传入参数
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
// 类型
|
|
|
|
|
type: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: 0,
|
|
|
|
|
},
|
|
|
|
|
})
|
2025-02-15 16:09:39 +08:00
|
|
|
|
|
|
|
|
|
// 用户列表
|
|
|
|
|
const list = reactive([])
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
onMounted(() => {
|
2025-02-19 16:36:12 +08:00
|
|
|
|
if (props.type == 0) {
|
|
|
|
|
getList()
|
2025-02-20 15:12:53 +08:00
|
|
|
|
} else if (props.type == 1) {
|
2025-02-19 16:36:12 +08:00
|
|
|
|
// 视频消息
|
|
|
|
|
} else if (props.type == 2) {
|
|
|
|
|
// 商城消息
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
addListener()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
onUnmounted(() => {
|
2025-02-20 15:12:53 +08:00
|
|
|
|
removeListener()
|
2025-02-15 16:09:39 +08:00
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 开启监听消息
|
|
|
|
|
function addListener() {
|
|
|
|
|
let onMessageReceived = function (event) {
|
2024-12-18 15:46:27 +08:00
|
|
|
|
getList()
|
2025-02-15 16:09:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uni.$chat.on(TencentCloudChat.EVENT.CONVERSATION_LIST_UPDATED, onMessageReceived);
|
|
|
|
|
}
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
// 移除监听
|
|
|
|
|
function removeListener() {
|
2025-02-20 15:12:53 +08:00
|
|
|
|
// #ifdef APP
|
|
|
|
|
uni.$chat.off(TencentCloudChat.EVENT.CONVERSATION_LIST_UPDATED);
|
|
|
|
|
// #endif
|
2025-02-15 16:09:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-19 16:36:12 +08:00
|
|
|
|
// 获取消息列表
|
2025-02-15 16:09:39 +08:00
|
|
|
|
function getList() {
|
|
|
|
|
api.news.getMessageList({
|
|
|
|
|
query: {
|
|
|
|
|
userId: userinfo.value.id,
|
|
|
|
|
}
|
|
|
|
|
}).then(rs => {
|
|
|
|
|
if (rs.code == 200) {
|
2025-02-20 15:12:53 +08:00
|
|
|
|
// list.data = handleList(rs.data);
|
|
|
|
|
list.data = handleList(JSON.parse(rs.msg).SessionItem);
|
2025-02-15 16:09:39 +08:00
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
util.alert({
|
|
|
|
|
content: rs.msg,
|
|
|
|
|
showCancel: false,
|
|
|
|
|
})
|
2024-12-18 15:46:27 +08:00
|
|
|
|
})
|
2025-02-15 16:09:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 消息列表
|
|
|
|
|
* @param {Object} item
|
|
|
|
|
*/
|
|
|
|
|
function handleList(list) {
|
|
|
|
|
// 验证sdk是否准备完毕
|
|
|
|
|
let isReady = uni.$chat.isReady();
|
|
|
|
|
if (!isReady) {
|
|
|
|
|
setTimeout(function () {
|
2025-02-20 15:12:53 +08:00
|
|
|
|
handleList(list);
|
2025-02-19 16:36:12 +08:00
|
|
|
|
}, 800);
|
2025-02-15 16:09:39 +08:00
|
|
|
|
return
|
2024-12-18 15:46:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-20 15:12:53 +08:00
|
|
|
|
list.forEach(item => {
|
|
|
|
|
item.MsgTime = handleDate(item.MsgTime)
|
|
|
|
|
|
|
|
|
|
let type = item.Type == 1 ? `C2C${item.To_Account}` : `GROUP${item.GroupId}`;
|
|
|
|
|
uni.$chat.getConversationProfile(type).then(rs => {
|
|
|
|
|
let res = rs.data.conversation;
|
|
|
|
|
|
|
|
|
|
item.chatText = res.lastMessage.messageForShow;
|
|
|
|
|
item.unreadCount = res.unreadCount;
|
|
|
|
|
if (item.Type == 1) {
|
|
|
|
|
item.avatar = res.userProfile.avatar;
|
|
|
|
|
item.name = res.userProfile.nick;
|
|
|
|
|
} else if (item.Type == 2) {
|
|
|
|
|
item.avatar = res.groupProfile.avatar;
|
|
|
|
|
item.name = res.groupProfile.name;
|
|
|
|
|
item.num = res.groupProfile.memberCount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
})
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-20 15:12:53 +08:00
|
|
|
|
return list
|
2025-02-15 16:09:39 +08:00
|
|
|
|
}
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
// // 点击用户
|
|
|
|
|
// function handleUser(item) {
|
|
|
|
|
// uni.navigateTo({
|
|
|
|
|
// url: util.setUrl('/pages/index/videoHome', {
|
|
|
|
|
// userId: item.userId,
|
|
|
|
|
// })
|
|
|
|
|
// })
|
|
|
|
|
// }
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
// // 跳转
|
|
|
|
|
// function navigateToPage(path) {
|
|
|
|
|
// uni.navigateTo({
|
|
|
|
|
// url: path
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 去聊天
|
|
|
|
|
* @param {Object} item
|
|
|
|
|
*/
|
|
|
|
|
function handleChat(item) {
|
|
|
|
|
let param = {};
|
|
|
|
|
// 单聊
|
|
|
|
|
if (item.groupId == null) {
|
|
|
|
|
param.type = 'C2C'
|
2025-02-20 15:12:53 +08:00
|
|
|
|
param.name = `${item.name}`
|
|
|
|
|
param.msgId = `${item.To_Account}`
|
2025-02-15 16:09:39 +08:00
|
|
|
|
} else {
|
2024-12-18 15:46:27 +08:00
|
|
|
|
// 群聊
|
2025-02-15 16:09:39 +08:00
|
|
|
|
param.type = 'GROUP'
|
2025-02-20 15:12:53 +08:00
|
|
|
|
param.name = `${item.name}`
|
|
|
|
|
param.msgId = `${item.GroupId}`
|
|
|
|
|
param.num = `${item.num}`
|
2024-12-18 15:46:27 +08:00
|
|
|
|
}
|
2025-02-19 16:36:12 +08:00
|
|
|
|
|
|
|
|
|
setRead(item)
|
2025-02-15 16:09:39 +08:00
|
|
|
|
util.toChat(param)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 菜单
|
|
|
|
|
* @param {Object} ev 默认事件
|
|
|
|
|
* @param {Object} item 单项
|
|
|
|
|
*/
|
|
|
|
|
function handleMenu(ev, item) {
|
|
|
|
|
console.log('ev', ev, item)
|
|
|
|
|
ev.content.fn(item)
|
|
|
|
|
proxy.$refs.swipeAction.closeAll()
|
|
|
|
|
}
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
// 删除会话
|
|
|
|
|
function delMsg(item) {
|
|
|
|
|
// 验证sdk是否准备完毕
|
|
|
|
|
let isReady = uni.$chat.isReady();
|
|
|
|
|
if (!isReady) {
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
delMsg(item);
|
2025-02-19 16:36:12 +08:00
|
|
|
|
}, 800);
|
2025-02-15 16:09:39 +08:00
|
|
|
|
return
|
2024-12-18 15:46:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-20 15:12:53 +08:00
|
|
|
|
let conversationId = item.Type == 1 ? `C2C${item.To_Account}` : `GROUP${item.GroupId}`;
|
2025-02-15 16:09:39 +08:00
|
|
|
|
|
2025-02-18 11:38:36 +08:00
|
|
|
|
uni.$chat.deleteConversation(conversationId).then(rs => {
|
2025-02-15 16:09:39 +08:00
|
|
|
|
getList()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 标为已读
|
|
|
|
|
function setRead(item) {
|
|
|
|
|
// 验证sdk是否准备完毕
|
|
|
|
|
let isReady = uni.$chat.isReady();
|
|
|
|
|
if (!isReady) {
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
setRead(item);
|
2025-02-19 16:36:12 +08:00
|
|
|
|
}, 800);
|
2025-02-15 16:09:39 +08:00
|
|
|
|
return
|
2024-12-18 15:46:27 +08:00
|
|
|
|
}
|
2025-02-15 16:09:39 +08:00
|
|
|
|
|
2025-02-20 15:12:53 +08:00
|
|
|
|
let conversationId = item.Type == 1 ? `C2C${item.To_Account}` : `GROUP${item.GroupId}`;
|
2025-02-15 16:09:39 +08:00
|
|
|
|
uni.$chat.setMessageRead({
|
|
|
|
|
conversationID: conversationId,
|
|
|
|
|
}).then(rs => {
|
|
|
|
|
getList()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-20 15:12:53 +08:00
|
|
|
|
// 时间转换
|
|
|
|
|
function handleDate(timestamp) {
|
|
|
|
|
var timestamp = +timestamp * 1000;
|
|
|
|
|
var date = new Date(timestamp);
|
|
|
|
|
|
|
|
|
|
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
|
|
|
|
|
var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
|
|
|
|
|
var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
|
|
|
|
|
var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
|
|
|
|
|
var s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
|
|
|
|
|
|
|
|
|
|
var formattedDate = M + D + h + m + s;
|
|
|
|
|
return formattedDate
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
|
2024-12-18 15:46:27 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<view class="firendBox pr">
|
|
|
|
|
<scroll-view scroll-y="true" class="scroll">
|
|
|
|
|
<uni-swipe-action ref="swipeAction">
|
|
|
|
|
<view class="list pb30">
|
|
|
|
|
<!-- <uni-swipe-action-item :right-options="systemRightOption">
|
|
|
|
|
<view class="item rows ptb20 plr30">
|
|
|
|
|
<view class="image wh90 pr">
|
2025-02-15 16:09:39 +08:00
|
|
|
|
<image class="cir wh90" src="/static/msg1.png" mode="aspectFill" />
|
2024-12-18 15:46:27 +08:00
|
|
|
|
<view class="dot pa t0 r0 cir" v-if="1"></view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="col f1 ml20">
|
|
|
|
|
<view class="rows">
|
|
|
|
|
<view class="name f1 thd c333 f32">新的关注</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="desc thd mt10 c666 f24">新增一位关注,快看看是谁吧~</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-02-15 16:09:39 +08:00
|
|
|
|
</uni-swipe-action-item>
|
|
|
|
|
<uni-swipe-action-item :right-options="systemRightOption">
|
2024-12-18 15:46:27 +08:00
|
|
|
|
<view class="item rows ptb20 plr30">
|
|
|
|
|
<view class="image wh90 pr">
|
|
|
|
|
<image class="cir wh90" src="/static/msg1.png" mode="aspectFill" />
|
|
|
|
|
<view class="dot pa t0 r0 cir" v-if="1"></view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="col f1 ml20">
|
|
|
|
|
<view class="rows">
|
|
|
|
|
<view class="name f1 thd c333 f32">互动消息</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="desc thd mt10 c666 f24">快去看看吧~</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-02-15 16:09:39 +08:00
|
|
|
|
</uni-swipe-action-item>
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
<uni-swipe-action-item :right-options="systemRightOption">
|
2024-12-18 15:46:27 +08:00
|
|
|
|
<view class="item rows ptb20 plr30">
|
|
|
|
|
<view class="image wh90 pr">
|
2025-02-15 16:09:39 +08:00
|
|
|
|
<image class="cir wh90" src="/static/msg2.png" mode="aspectFill" />
|
2024-12-18 15:46:27 +08:00
|
|
|
|
<view class="dot pa t0 r0 cir" v-if="0"></view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="col f1 ml20">
|
|
|
|
|
<view class="rows">
|
|
|
|
|
<view class="name f1 thd c333 f32">系统消息</view>
|
|
|
|
|
<view class="datetime c999 f22">16:06</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="desc thd mt10 c666 f24">平台福利上新,快来玩转平台</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</uni-swipe-action-item> -->
|
2025-02-15 16:09:39 +08:00
|
|
|
|
|
|
|
|
|
<uni-swipe-action-item :right-options="rightOption" v-for="(item, index) in list.data" :key="index"
|
|
|
|
|
@click="handleMenu($event, item)">
|
2025-02-19 16:36:12 +08:00
|
|
|
|
<view class="item rows ptb20 plr30" @click.stop="handleChat(item)">
|
2024-12-18 15:46:27 +08:00
|
|
|
|
<view class="image wh90 pr">
|
2025-02-20 15:12:53 +08:00
|
|
|
|
<image class="cir wh90" :src="item.avatar" mode="aspectFill" />
|
2025-02-15 16:09:39 +08:00
|
|
|
|
<view class="mark pa t0 r0 cfff f22 cir" v-if="item.unreadCount">{{ item.unreadCount }}
|
|
|
|
|
</view>
|
2024-12-18 15:46:27 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="col f1 ml20">
|
|
|
|
|
<view class="rows">
|
2025-02-20 15:12:53 +08:00
|
|
|
|
<view class="name f1 thd c333 f32">{{ item.name }}</view>
|
2025-02-12 09:05:14 +08:00
|
|
|
|
<view class="datetime c999 f22">
|
2025-02-20 15:12:53 +08:00
|
|
|
|
{{ util.formatTime('MM-dd HH:mm', item.MsgTime) }}</view>
|
2024-12-18 15:46:27 +08:00
|
|
|
|
</view>
|
2025-02-18 11:38:36 +08:00
|
|
|
|
<view class="desc thd mt10 c666 f24">{{ item.chatText }}</view>
|
2024-12-18 15:46:27 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</uni-swipe-action-item>
|
|
|
|
|
<view class="mtb20 tac c999 f20">到底啦~</view>
|
|
|
|
|
</view>
|
|
|
|
|
</uni-swipe-action>
|
|
|
|
|
</scroll-view>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<style lang="scss">
|
2025-02-15 16:09:39 +08:00
|
|
|
|
// 朋友列表
|
|
|
|
|
.firendBox {
|
|
|
|
|
height: 100%;
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
.scroll {
|
|
|
|
|
height: 100%;
|
|
|
|
|
}
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
// 列表
|
|
|
|
|
.list {
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
// 消息提示点
|
|
|
|
|
.mark,
|
|
|
|
|
.dot {
|
|
|
|
|
background-color: #FF6B17;
|
|
|
|
|
text-align: center;
|
|
|
|
|
line-height: 30rpx;
|
|
|
|
|
}
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
.mark {
|
|
|
|
|
width: 30rpx;
|
|
|
|
|
height: 30rpx;
|
|
|
|
|
}
|
2024-12-18 15:46:27 +08:00
|
|
|
|
|
2025-02-15 16:09:39 +08:00
|
|
|
|
.dot {
|
|
|
|
|
width: 20rpx;
|
|
|
|
|
height: 20rpx;
|
2024-12-18 15:46:27 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-15 16:09:39 +08:00
|
|
|
|
}
|
2024-12-18 15:46:27 +08:00
|
|
|
|
</style>
|