Files
aishangjia-uniapp/components/chat-item/chat-item.vue
2023-08-04 13:14:48 +08:00

217 lines
5.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- z-paging聊天item -->
<template>
<view class="chat-item">
<text class="chat-time" v-if="showTime">
<!-- {{ item.createTime }} -->
{{ time }}
</text>
<view :class="{'chat-container':true,'chat-location-me':isMe}">
<view class="chat-icon-container" @click="$push('sub_pages/member/detail/detail',{userId:item.formUserId})">
<u-avatar class="chat-icon" size="40" shape="square" :src="isMe?userInfo.avatar:friendInfo.avatar" mode="aspectFill"></u-avatar>
<!-- <image class="chat-icon" :src="isMe?userInfo.avatar:friendInfo.avatar" mode="aspectFill" /> -->
</view>
<view class="chat-content-container">
<text :class="{'chat-user-name':true,'chat-location-me':isMe}">
{{isMe?userInfo.nickname:friendInfo.nickname}}
</text>
<view :class="{'chat-text-container':item.type!='image','isme':isMe, 'chat-image-container': item.type=='image'}">
<text v-if="item.type=='text'" :class="{'char-text':true,'char-text-me':isMe}">{{item.content}}</text>
<chat-item-image @click="onImageClick" v-if="item.type=='image'" :src="item.content"></chat-item-image>
<!-- <image :class="{'char-image':true,'char-image-me':isMe}" mode="widthFix"></image> -->
<view v-if="item.type == 'card'" class="hello-card">
<view class="hello-card-desc">
{{`${ mateData.age ? mateData.age + '岁': '' } ${mateData.position ? mateData.position : ''} ${mateData.city ? mateData.city : ''}`}}
</view>
<view class="hello-card-desc u-line-2" style="color: #999999; font-size: 26rpx;">
<view>很高兴认识你~</view>
<view>海底月是天上月眼前人是心上人</view>
</view>
<view class="album" style="padding: 10rpx 0;">
<u-album :urls="mateData.files" keyName="thumb" :singleSize="100" singleMode="aspectFill" multipleMode="aspectFill"></u-album>
</view>
<!-- <image class="hello-card-image" :src="isMe?userInfo.avatar:friendInfo.avatar" mode="widthFix"></image> -->
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
ACCESS_TOKEN, USER_ID,USER_INFO
} from '@/store/mutation-types'
import storage from '@/utils/storage'
import dayjs from "dayjs"
import ChatItemImage from "@/components/chat-item-image/chat-item-image.vue"
export default {
name:"chat-item",
components: {ChatItemImage},
props: {
item: {
type: Object,
default: function() {
return {
time: '',
icon: '',
name: '',
content: '',
}
}
},
friendInfo: {
type: Object,
default: function() {
return {
avatar: '',
nickname: ''
}
}
},
prevMsgTime: null
},
data() {
return {
userInfo: {},
mateData: {},
showTime: true,
time: ''
};
},
computed: {
isMe(){
console.log(this.item.formUserId == this.userInfo.userId);
return this.item.formUserId == this.userInfo.userId
}
},
created() {
this.userInfo = storage.get(USER_INFO)
if(this.item.type == 'card'){
this.mateData = JSON.parse(this.item.content)
console.log("this.mateData: ",this.mateData);
}
// 如果是第一条消息或上一条消息间隔三分钟,显示时间
this.showTime = !this.prevMsgTime || (dayjs(this.prevMsgTime).diff(dayjs(this.item.createTime), 'minutes') <= -3)
if(this.showTime){
let isToday = new Date(this.item.createTime).setHours(0,0,0,0) == new Date().setHours(0,0,0,0)
this.time = this.$u.timeFormat(this.item.createTime, isToday? 'hh:MM': 'mm-dd hh:MM')
}
},
methods: {
onImageClick(){
this.$emit("onImageClick")
}
}
}
</script>
<style scoped lang="scss">
.chat-item{
display: flex;
flex-direction: column;
padding: 20rpx;
}
.chat-time{
padding: 4rpx 0rpx;
text-align: center;
font-size: 22rpx;
color: #aaaaaa;
}
.chat-container{
display: flex;
flex-direction: row;
}
.chat-location-me{
flex-direction: row-reverse;
text-align: right;
}
.chat-icon-container{
margin-top: 12rpx;
}
.chat-icon{
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background-color: #eeeeee;
}
.chat-content-container{
margin: 0rpx 15rpx;
}
.chat-user-name{
font-size: 26rpx;
color: #888888;
}
.chat-text-container{
display: table;
background-color: #ffffff;
border-radius: 12rpx;
padding: 20rpx;
margin-top: 10rpx;
/* #ifndef APP-NVUE */
max-width: 500rpx;
/* #endif */
&.isme{
display: table;
background-color: #ffe3ff;
border-radius: 12rpx;
padding: 20rpx;
margin-top: 10rpx;
/* #ifndef APP-NVUE */
max-width: 500rpx;
/* #endif */
}
}
.hello-card{
max-width: 500rpx;
border-radius: 12rpx;
margin-top: 10rpx;
text-align: left;
}
.hello-card-image{
width: 200rpx;
}
.hello-card-title{
font-size: 28rpx;
font-weight: bold;
}
.hello-card-desc{
color: #333333;
padding: 4rpx 0;
}
.chat-text-container-me{
}
.chat-image-container{
display: table;
background-color: unset !important;
border-radius: 12rpx;
padding: 20rpx;
margin-top: 10rpx;
/* #ifndef APP-NVUE */
max-width: 500rpx;
/* #endif */
}
.char-text{
padding: 20rpx;
border-radius: 12rpx;
/* #ifndef APP-NVUE */
word-break: break-all;
/* #endif */
/* #ifdef APP-NVUE */
max-width: 500rpx;
/* #endif */
}
.char-image{
width: 400rpx;
height: 400rpx;
}
.char-text-me{
/* color: white; */
}
</style>