2024-06-09 15:37:59 +08:00
|
|
|
|
<template>
|
2024-06-29 13:29:19 +08:00
|
|
|
|
<view class="work-container">
|
|
|
|
|
<view>
|
|
|
|
|
<!-- 顶部导航栏 -->
|
|
|
|
|
<u-navbar leftText=" " title=" " :placeholder="true" :safeAreaInsetTop="true" :bgColor="bgColor">
|
|
|
|
|
<template #left>
|
|
|
|
|
<view class="text1">消息</view>
|
|
|
|
|
</template>
|
|
|
|
|
<template #right>
|
|
|
|
|
<image :src="adUser" style="width: 52rpx;height: 44rpx" @click="toadUser"></image>
|
|
|
|
|
</template>
|
|
|
|
|
</u-navbar>
|
2024-06-08 17:17:35 +08:00
|
|
|
|
</view>
|
2024-06-29 18:35:54 +08:00
|
|
|
|
<!-- 内容 -->
|
|
|
|
|
<view>
|
|
|
|
|
<up-swipe-action v-for="item in sendercont" :key="item.userId"
|
|
|
|
|
style="margin-left: 32rpx; margin-right: 32rpx; margin-top: 48rpx;">
|
|
|
|
|
<up-swipe-action-item :options="options1" v-if="item.userId != myuserid" :auto-close="true"
|
|
|
|
|
@click="hanver(item.userId)">
|
|
|
|
|
<view class="contentbox, swipe-action__content__text" style="display: flex;"
|
|
|
|
|
@click="gotoAddr(item.userId, item.nickName, item.avatar)">
|
|
|
|
|
<view>
|
|
|
|
|
<!-- <view class="contentboxtop" v-if="myuserid.value == item.senderId.value && item.statusone == 0">
|
|
|
|
|
</view> -->
|
|
|
|
|
<view class="red-dot" v-if="item.showRedDot"></view>
|
|
|
|
|
<image class="contentboximage" :src="bindIcon(item.avatar)"></image>
|
|
|
|
|
</view>
|
|
|
|
|
<view style="margin-left: 26rpx;width: 612rpx;">
|
|
|
|
|
<text class="contentboxtexttop">{{ item.nickName }}</text>
|
|
|
|
|
<text v-if="myuserid.value == item.senderId.value && item.sendTime != null" class="contentboxtextmiddle"
|
|
|
|
|
id="contentboxtmiddle">{{ ReturnTime(item.sendTime) }} </text>
|
|
|
|
|
<text v-if="myuserid.value == item.senderId.value && item.messageType == 51"
|
|
|
|
|
class="contentboxtextbottom">{{ item.messageText }}</text>
|
|
|
|
|
<text v-else-if="myuserid.value == item.senderId.value && item.messageType == 52"
|
|
|
|
|
class="contentboxtextbottom">[图片]</text>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</up-swipe-action-item>
|
|
|
|
|
</up-swipe-action>
|
|
|
|
|
</view>
|
2024-06-29 13:29:19 +08:00
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
2024-06-29 18:35:54 +08:00
|
|
|
|
import {
|
|
|
|
|
onReachBottom,
|
|
|
|
|
onLoad,
|
|
|
|
|
onShow,
|
|
|
|
|
onPageScroll
|
|
|
|
|
} from "@dcloudio/uni-app";
|
|
|
|
|
import { onMounted, ref, reactive, getCurrentInstance, onUnmounted, watch } from 'vue';
|
|
|
|
|
import { listFriendShip, getFriendShip, delFriendShip, addFriendShip, updateFriendShip, listFriendShipId } from "@/api/signln/FriendShip/FriendShip";
|
|
|
|
|
import { GetListid } from "@/api/signln/SignTa/SignTa";
|
|
|
|
|
import { listLatestarticle, listmysend,listNotificationHistoricalUser } from "@/api/signln/NotificationHistorical/NotificationHistorical";
|
2024-06-29 13:29:19 +08:00
|
|
|
|
import { useStore } from 'vuex';
|
2024-06-18 20:32:36 +08:00
|
|
|
|
import { getLocalFileInfo } from 'qiniu-js/esm/utils';
|
2024-06-29 13:29:19 +08:00
|
|
|
|
const { proxy } = getCurrentInstance();
|
2024-06-15 13:16:45 +08:00
|
|
|
|
const store = useStore();
|
2024-06-18 20:32:36 +08:00
|
|
|
|
const imagesrc = ref();
|
2024-06-29 18:35:54 +08:00
|
|
|
|
const options1 = reactive([
|
|
|
|
|
{ text: '已读', style: { backgroundColor: '#3c9cff' } },
|
|
|
|
|
]);
|
2024-06-18 20:32:36 +08:00
|
|
|
|
const show1 = ref(false)
|
2024-06-15 13:16:45 +08:00
|
|
|
|
const iconConfig = proxy.iconConfig;
|
2024-06-29 13:29:19 +08:00
|
|
|
|
const adUser = iconConfig.adUser;
|
|
|
|
|
const fileTypeInfo1 = ref("image")
|
|
|
|
|
const fileTypeInfo2 = ref("video")
|
|
|
|
|
const QNDomain = store.state.user.QNDomain
|
|
|
|
|
const bgColor = ref('#6AA2FF');
|
2024-06-29 18:35:54 +08:00
|
|
|
|
const sendercont = ref([]);
|
|
|
|
|
watch(
|
|
|
|
|
() => proxy.$store.state.chat.userMessageinfo,
|
|
|
|
|
(newVal, oldVal) => {
|
|
|
|
|
console.log("新消息22,", newVal);
|
|
|
|
|
console.log("旧数据:", sendercont.value);
|
|
|
|
|
newMessageInfo(newVal);
|
|
|
|
|
},
|
|
|
|
|
{ deep: true }
|
|
|
|
|
);
|
|
|
|
|
const newMessageInfo = (e) => {
|
|
|
|
|
const userIndex = sendercont.value.findIndex(user => user.receiverId == e.senderId);
|
|
|
|
|
if(userIndex !== -1) {
|
|
|
|
|
sendercont.value[userIndex].messageText = e.messageText;
|
|
|
|
|
sendercont.value[userIndex].sendTime = e.sendTime;
|
|
|
|
|
sendercont.value[userIndex].showRedDot = true; // 显示小红点
|
|
|
|
|
}
|
|
|
|
|
console.log("原始数据:",sendercont.value);
|
|
|
|
|
}
|
2024-06-29 13:29:19 +08:00
|
|
|
|
const toadUser = () => {
|
|
|
|
|
proxy.$tab.navigateTo('/pages/message/adUser');
|
|
|
|
|
}
|
2024-06-29 18:35:54 +08:00
|
|
|
|
function bindIcon(icon) {
|
|
|
|
|
return QNDomain + icon;
|
|
|
|
|
}
|
|
|
|
|
const myuserid = ref(0);
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
GetListid().then(res => {
|
|
|
|
|
myuserid.value = res;
|
|
|
|
|
console.log("当前登录用户" + myuserid.value)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
onUnmounted(() => {
|
|
|
|
|
clearInterval(timer);
|
|
|
|
|
});
|
|
|
|
|
onShow(() => {
|
|
|
|
|
onWebSocket();
|
|
|
|
|
GetListSend();
|
|
|
|
|
timer = setInterval(GetListSend, 60000);
|
|
|
|
|
})
|
|
|
|
|
function GetListSend() {
|
|
|
|
|
listmysend().then(res => {
|
|
|
|
|
sendercont.value = res.rows;
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const onWebSocket = () => {
|
|
|
|
|
proxy.$store.dispatch('webSockerInfo')
|
|
|
|
|
}
|
|
|
|
|
function hanver(res) {
|
|
|
|
|
MyList(res);
|
|
|
|
|
}
|
|
|
|
|
function MyList(youid) {
|
|
|
|
|
var data = {
|
|
|
|
|
senderId: myuserid.value,
|
|
|
|
|
receiverId: youid,
|
|
|
|
|
messageType: null,
|
|
|
|
|
sendTime: null,
|
|
|
|
|
readTime: null,
|
|
|
|
|
status: null,
|
|
|
|
|
messageText: null,
|
|
|
|
|
send: null
|
|
|
|
|
}
|
|
|
|
|
listNotificationHistoricalUser(data).then(response => {
|
|
|
|
|
GetListSend();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
function gotoAddr(id, name, youavatar) {
|
|
|
|
|
console.log("点击了");
|
|
|
|
|
const userInfo = {
|
|
|
|
|
friendid: id,
|
|
|
|
|
title: name,
|
|
|
|
|
myavatar: null,
|
|
|
|
|
youavatar: youavatar,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
uni.setStorage({
|
|
|
|
|
key: 'userInfo',
|
|
|
|
|
data: userInfo,
|
|
|
|
|
success: function () {
|
|
|
|
|
proxy.$tab.navigateTo("/pages/Friend/messagechat")
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
function handleItemClick(userId) {
|
|
|
|
|
const user = sendercont.value.find(item => item.userId === userId);
|
|
|
|
|
if(user) {
|
|
|
|
|
user.showRedDot = false; // 点击后隐藏小红点
|
|
|
|
|
}
|
|
|
|
|
// 这里也可以添加点击事件要做的其他逻辑,如导航到聊天页
|
|
|
|
|
}
|
|
|
|
|
function ReturnTime(res) {
|
|
|
|
|
var time = new Date(res);
|
|
|
|
|
var now = new Date();
|
|
|
|
|
var year = time.getFullYear();
|
|
|
|
|
var month = time.getMonth() + 1;
|
|
|
|
|
var date = time.getDate();
|
|
|
|
|
var hours = time.getHours();
|
|
|
|
|
var minutes = time.getMinutes();
|
|
|
|
|
var months = month.toString().padStart(2, '0');
|
|
|
|
|
var hours = hours.toString().padStart(2, '0');
|
|
|
|
|
var min = minutes.toString().padStart(2, '0');
|
|
|
|
|
if (time.getDate() == now.getDate()) {
|
|
|
|
|
return `${hours}:${min}`;
|
|
|
|
|
} else {
|
|
|
|
|
return `${year}.${months}.${date} ${hours}:${min}`;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-29 13:29:19 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
/* #ifndef APP-NVUE */
|
|
|
|
|
page {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
min-height: 100%;
|
|
|
|
|
height: auto;
|
|
|
|
|
}
|
2024-06-18 20:32:36 +08:00
|
|
|
|
|
2024-06-29 13:29:19 +08:00
|
|
|
|
.text1 {
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
font-size: 48rpx;
|
|
|
|
|
text-align: left;
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
}
|
2024-06-29 18:35:54 +08:00
|
|
|
|
.contentbox {
|
|
|
|
|
height: 82rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.contentboximage {
|
|
|
|
|
width: 82rpx;
|
|
|
|
|
height: 82rpx;
|
|
|
|
|
border-radius: 82rpx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.contentboxtop {
|
|
|
|
|
width: 24rpx;
|
|
|
|
|
height: 24rpx;
|
|
|
|
|
background: #fa3939;
|
|
|
|
|
border-radius: 24rpx;
|
|
|
|
|
position: fixed;
|
|
|
|
|
left: 56rpx;
|
|
|
|
|
z-index: 3;
|
|
|
|
|
}
|
|
|
|
|
.contentboxtexttop {
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
height: 30rpx;
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
text-align: left;
|
|
|
|
|
color: #000000;
|
|
|
|
|
vertical-align: middle;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.contentboxtextmiddle {
|
|
|
|
|
font-weight: Regular;
|
|
|
|
|
height: 17rpx;
|
|
|
|
|
font-size: 20rpx;
|
|
|
|
|
text-align: right;
|
|
|
|
|
color: #999999;
|
|
|
|
|
vertical-align: middle;
|
|
|
|
|
float: right;
|
|
|
|
|
display: block;
|
|
|
|
|
margin-right: 24rpx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.contentboxtextbottom {
|
|
|
|
|
font-weight: Regular;
|
|
|
|
|
height: 26rpx;
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
text-align: left;
|
|
|
|
|
color: #999999;
|
|
|
|
|
vertical-align: middle;
|
|
|
|
|
display: block;
|
|
|
|
|
line-height: 26rpx;
|
|
|
|
|
margin-top: 12rpx;
|
|
|
|
|
}
|
|
|
|
|
.red-dot {
|
|
|
|
|
width: 10px;
|
|
|
|
|
height: 10px;
|
|
|
|
|
background-color: red;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: 0;
|
|
|
|
|
top: 0;
|
|
|
|
|
}
|
2024-06-29 13:29:19 +08:00
|
|
|
|
</style>
|