217 lines
5.3 KiB
Vue
217 lines
5.3 KiB
Vue
<!-- 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> |