|
|
@ -1,5 +1,6 @@
|
|
|
|
<template>
|
|
|
|
<template>
|
|
|
|
<div class="chat-container" @click="emojiVisible = false">
|
|
|
|
<div class="chat-container" @click="emojiVisible = false">
|
|
|
|
|
|
|
|
{{ $store.state.chat }}
|
|
|
|
<div class="header">
|
|
|
|
<div class="header">
|
|
|
|
<p>当前客服:小爱</p>
|
|
|
|
<p>当前客服:小爱</p>
|
|
|
|
<el-button type="text" @click="summaryVisible = !summaryVisible">
|
|
|
|
<el-button type="text" @click="summaryVisible = !summaryVisible">
|
|
|
@ -25,16 +26,21 @@
|
|
|
|
:class="{ active: state.currentIndex === index }"
|
|
|
|
:class="{ active: state.currentIndex === index }"
|
|
|
|
@click="handleChangeSession(index)"
|
|
|
|
@click="handleChangeSession(index)"
|
|
|
|
>
|
|
|
|
>
|
|
|
|
<el-badge class="session-count" :hidden="item.count === 0" :max="99" :value="item.count">
|
|
|
|
<el-badge
|
|
|
|
<el-avatar circle :src="item.avatar" />
|
|
|
|
class="session-count"
|
|
|
|
|
|
|
|
:hidden="item.unreadCount === 0"
|
|
|
|
|
|
|
|
:max="99"
|
|
|
|
|
|
|
|
:value="item.unreadCount"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<el-avatar circle :src="item.fromAvatar" />
|
|
|
|
</el-badge>
|
|
|
|
</el-badge>
|
|
|
|
<div class="session-info">
|
|
|
|
<div class="session-info">
|
|
|
|
<div class="row">
|
|
|
|
<div class="row">
|
|
|
|
<div class="session-name">{{ item.name }}</div>
|
|
|
|
<div class="session-name">{{ item.fromNickname }}</div>
|
|
|
|
<div class="session-time">{{ item.time }}</div>
|
|
|
|
<div class="session-time">{{ parseTime(item.lastMessage.createTimeStamp) }}</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row">
|
|
|
|
<div class="row">
|
|
|
|
<div class="session-content">{{ item.content }}</div>
|
|
|
|
<div class="session-content">{{ parseContent(item.lastMessage.payload) }}</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
</li>
|
|
|
@ -44,7 +50,7 @@
|
|
|
|
<div class="content-header">
|
|
|
|
<div class="content-header">
|
|
|
|
<div class="content-header-left">
|
|
|
|
<div class="content-header-left">
|
|
|
|
<div class="name sex-1">
|
|
|
|
<div class="name sex-1">
|
|
|
|
{{ currentSession.name }}
|
|
|
|
{{ currentSession?.name }}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="content-header-right">
|
|
|
|
<div class="content-header-right">
|
|
|
@ -103,9 +109,11 @@
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
<script setup>
|
|
|
|
import { emojiData, entitiestoUtf16 } from '@/utils/emoji.js';
|
|
|
|
import { emojiData, entitiestoUtf16 } from '@/utils/chat.js';
|
|
|
|
import MessageItem from './message.vue';
|
|
|
|
import MessageItem from './message.vue';
|
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
|
|
|
|
|
const store = useStore();
|
|
|
|
|
|
|
|
store.dispatch('chat/querySession');
|
|
|
|
|
|
|
|
|
|
|
|
// 统计
|
|
|
|
// 统计
|
|
|
|
const summaryVisible = ref(true);
|
|
|
|
const summaryVisible = ref(true);
|
|
|
@ -121,32 +129,24 @@
|
|
|
|
currentIndex: 0,
|
|
|
|
currentIndex: 0,
|
|
|
|
message: '',
|
|
|
|
message: '',
|
|
|
|
});
|
|
|
|
});
|
|
|
|
const sessionList = reactive([
|
|
|
|
const sessionList = computed(() => {
|
|
|
|
{
|
|
|
|
return store.state.chat.sessionData?.sessionVOS || [];
|
|
|
|
name: '小可爱',
|
|
|
|
});
|
|
|
|
avatar: 'https://placem.at/people',
|
|
|
|
|
|
|
|
count: 1,
|
|
|
|
|
|
|
|
time: '2019-12-12',
|
|
|
|
|
|
|
|
content: '你好,请问这个能有优惠吗?',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: '小可爱',
|
|
|
|
|
|
|
|
avatar: 'https://placem.at/people',
|
|
|
|
|
|
|
|
count: 0,
|
|
|
|
|
|
|
|
time: '2019-12-12',
|
|
|
|
|
|
|
|
content: '你好,请问这个能有优惠吗?',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: '小可爱',
|
|
|
|
|
|
|
|
avatar: 'https://placem.at/people',
|
|
|
|
|
|
|
|
count: 0,
|
|
|
|
|
|
|
|
time: '2019-12-12',
|
|
|
|
|
|
|
|
content: '你好,请问这个能有优惠吗?',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
const currentSession = computed(() => {
|
|
|
|
const currentSession = computed(() => {
|
|
|
|
return sessionList[state.currentIndex];
|
|
|
|
return sessionList[state.currentIndex];
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
// 格式化时间戳
|
|
|
|
|
|
|
|
const parseTime = (timestamp) => dayjs(new Date(timestamp)).format('MM-DD HH:mm:ss');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const parseContent = (payload) => {
|
|
|
|
|
|
|
|
payload = JSON.parse(payload);
|
|
|
|
|
|
|
|
if ('text' in payload) {
|
|
|
|
|
|
|
|
payload = payload.text;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
payload = '[未知消息]';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return payload;
|
|
|
|
|
|
|
|
};
|
|
|
|
const sessionMessageList = reactive([
|
|
|
|
const sessionMessageList = reactive([
|
|
|
|
{
|
|
|
|
{
|
|
|
|
type: 'text',
|
|
|
|
type: 'text',
|
|
|
|