Merge branch 'feat-im-0607-ch' into msb_test

msb_test
ch 3 years ago
commit d85a175419

@ -2,7 +2,7 @@
* @Author: ch * @Author: ch
* @Date: 2022-06-07 15:41:05 * @Date: 2022-06-07 15:41:05
* @LastEditors: ch * @LastEditors: ch
* @LastEditTime: 2022-06-13 17:16:27 * @LastEditTime: 2022-06-14 14:59:41
* @Description: file content * @Description: file content
*/ */
import * as api from '@/api/chat'; import * as api from '@/api/chat';
@ -48,21 +48,29 @@ const getters = {
} else if (type === 5) { } else if (type === 5) {
payload = '[撤回消息]'; payload = '[撤回消息]';
} else if (type === 6 || type === 1) { } else if (type === 6 || type === 1) {
try { if (payload.customType === 'transferWaiterSession') {
// payload = JSON.parse(payload.value); let str = `${payload.fromNickname}将会话转移给了---${payload.toNickname}`;
if ('text' in payload) { if (payload.reason) {
payload = payload.text; str += `,并留言:${payload.reason}`;
} else if ('linkJump' in payload) { }
payload = '[超链接]'; payload = str;
} else if ('orderNo' in payload) { } else {
payload = '[订单信息]'; try {
} else if ('productImageUrl' in payload) { // payload = JSON.parse(payload.value);
payload = '[商品信息]'; if ('text' in payload) {
} else { payload = payload.text;
payload = '[未知数据]'; } else if ('linkJump' in payload) {
payload = '[超链接]';
} else if ('orderNo' in payload) {
payload = '[订单信息]';
} else if ('productImageUrl' in payload) {
payload = '[商品信息]';
} else {
payload = '[未知数据]';
}
} catch (e) {
payload = '[解析异常]';
} }
} catch (e) {
payload = '[解析异常]';
} }
} else if (type === 7) { } else if (type === 7) {
payload = payload.text; payload = payload.text;
@ -104,19 +112,23 @@ const getters = {
}, },
parseContent: () => { parseContent: () => {
return (payload) => { return (payload) => {
try { if (payload.customType === 'transferWaiterSession') {
// payload = JSON.parse(payload); payload.type = 'transferWaiterSession';
if ('linkJump' in payload) { } else {
payload.type = 'link'; try {
} else if ('orderNo' in payload) { // payload = JSON.parse(payload);
payload.type = 'order'; if ('linkJump' in payload) {
} else if ('productImageUrl' in payload) { payload.type = 'link';
payload.type = 'product'; } else if ('orderNo' in payload) {
} else { payload.type = 'order';
payload = '[未知消息]'; } else if ('productImageUrl' in payload) {
payload.type = 'product';
} else {
payload = '[未知消息]';
}
} catch (e) {
payload = '[解析异常]';
} }
} catch (e) {
payload = '[解析异常]';
} }
return payload; return payload;
}; };

@ -394,6 +394,7 @@
display: flex; display: flex;
border: 1px solid #ebeef5; border: 1px solid #ebeef5;
.aside { .aside {
width: 240px;
border-right: 1px solid #ebeef5; border-right: 1px solid #ebeef5;
.aside-header { .aside-header {
height: 60px; height: 60px;

@ -3,97 +3,113 @@
class="message-item" class="message-item"
:class="{ :class="{
[`--${messageType[props.message.type]}`]: true, [`--${messageType[props.message.type]}`]: true,
'--notify': messageType[props.message.type] === 'custom' && content.type === 'transferWaiterSession',
'--self': props.message.fromId !== props.session.fromId, '--self': props.message.fromId !== props.session.fromId,
}" }"
> >
<!-- --> <!-- -->
<div v-if="!['revoke', 'notify'].includes(messageType[props.message.type])" class="avatar"> <template v-if="['notify', 'revoke'].includes(messageType[props.message.type])">
<el-avatar :src="props.message.fromAvatar" /> <div class="content shadow">
</div> {{ store.getters['chat/parseText'](props.message) }}
<div class="message-body">
<div v-if="!['revoke', 'notify'].includes(messageType[props.message.type])" class="name">
{{ props.message.fromNickname }}
</div> </div>
<template v-if="messageType[props.message.type] === 'custom'"> </template>
<a v-if="content.type === 'link'" class="content shadow" :href="content.linkJump" target="_blank"> <template v-else-if="messageType[props.message.type] === 'custom' && content.type === 'transferWaiterSession'">
{{ content.content }} <div class="message-body">
</a> <div v-if="content.type === 'transferWaiterSession'" class="content shadow">
<el-card v-if="content.type === 'product'" class="shadow"> {{ store.getters['chat/parseText'](props.message) }}
<template #header> </div>
<div class="flex"> </div>
<div class="left">商品编号{{ content.id }}</div> </template>
<el-button type="text" @click="$copy(content.id)"></el-button>
</div> <template v-else>
</template> <div class="avatar">
<div class="flex product" @click="handleProductDetail(content.id)"> <el-avatar :src="props.message.fromAvatar" />
<el-image :alt="content.name" height="64px" :src="content.productImageUrl" width="64px" /> </div>
<div class="right"> <div class="message-body">
<div class="name">{{ content.name }}</div> <div class="name">
<div class="price">{{ content.startingPrice }}</div> {{ props.message.fromNickname }}
</div> </div>
</div> <template v-if="messageType[props.message.type] === 'custom'">
<div class="footer"> <a v-if="content.type === 'link'" class="content shadow" :href="content.linkJump" target="_blank">
<el-button @click="handleProduct(content.id)"></el-button> {{ content.content }}
</div> </a>
</el-card> <el-card v-if="content.type === 'product'" class="shadow">
<el-card v-if="content.type === 'order'" class="shadow"> <template #header>
<template #header> <div class="flex">
<div class="flex"> <div class="left">商品编号{{ content.id }}</div>
<div class="status">{{ content.orderStatusDesc }}</div> <el-button type="text" @click="$copy(content.id)"></el-button>
<div class="service"></div> </div>
</template>
<div class="flex product" @click="handleProductDetail(content.id)">
<el-image :alt="content.name" height="64px" :src="content.productImageUrl" width="64px" />
<div class="right">
<div class="name">{{ content.name }}</div>
<div class="price">{{ content.startingPrice }}</div>
</div>
</div> </div>
<div class="flex"> <div class="footer">
<div class="no">订单编号{{ content.orderNo }}</div> <el-button @click="handleProduct(content.id)"></el-button>
<el-button type="text" @click="$copy(content.orderNo)"></el-button>
</div> </div>
</template> </el-card>
<div class="flex"> <el-card v-if="content.type === 'order'" class="shadow">
<el-image <template #header>
:alt="content.productName"
height="64px"
:src="content.productImageUrl"
width="64px"
/>
<div class="right">
<div class="flex"> <div class="flex">
<div class="name">{{ content.productName }}</div> <div class="status">{{ content.orderStatusDesc }}</div>
<div class="price">{{ content.payAmount }}</div> <div class="service"></div>
</div> </div>
<div class="flex"> <div class="flex">
<div class="sku">{{ content.skuDescribe || '默认规格' }}</div> <div class="no">订单编号{{ content.orderNo }}</div>
<div class="count">x{{ content.quantity || 1 }}</div> <el-button type="text" @click="$copy(content.orderNo)"></el-button>
</div>
</template>
<div class="flex">
<el-image
:alt="content.productName"
height="64px"
:src="content.productImageUrl"
width="64px"
/>
<div class="right">
<div class="flex">
<div class="name">{{ content.productName }}</div>
<div class="price">{{ content.payAmount }}</div>
</div>
<div class="flex">
<div class="sku">{{ content.skuDescribe || '默认规格' }}</div>
<div class="count">x{{ content.quantity || 1 }}</div>
</div>
</div> </div>
</div> </div>
</div> <div class="footer">
<div class="footer"> <el-button @click="handleOrder(content.orderId)"></el-button>
<el-button @click="handleOrder(content.orderId)"></el-button> </div>
</div> </el-card>
</el-card> </template>
</template> <div v-else-if="messageType[props.message.type] === 'image'" class="content shadow">
<div v-else-if="messageType[props.message.type] === 'image'" class="content shadow"> <el-image
<el-image alt="[图片消息]"
alt="[图片消息]" :src="store.getters['chat/parseImage'](props.message.payload)"
:src="store.getters['chat/parseImage'](props.message.payload)" style="max-width: 240px"
style="max-width: 240px" />
/> </div>
</div> <div v-else-if="messageType[props.message.type] === 'video'" class="shadow">
<div v-else-if="messageType[props.message.type] === 'video'" class="shadow"> <video controls width="240">
<video controls width="240"> <source :src="store.getters['chat/parseVideo'](props.message.payload)" type="video/mp4" />
<source :src="store.getters['chat/parseVideo'](props.message.payload)" type="video/mp4" /> <object
<object :data="store.getters['chat/parseVideo'](props.message.payload)"
:data="store.getters['chat/parseVideo'](props.message.payload)" height="240"
height="240" width="320"
width="320" ></object>
></object> </video>
</video> </div>
<div v-else class="content shadow">
{{ store.getters['chat/parseText'](props.message) }}
</div>
</div> </div>
<div v-else class="content shadow"> <div class="time">
{{ store.getters['chat/parseText'](props.message) }} {{ store.getters['chat/parseTime'](props.message.createTimeStamp) }}
</div> </div>
</div> </template>
<div v-if="!['revoke', 'notify'].includes(messageType[props.message.type])" class="time">
{{ store.getters['chat/parseTime'](props.message.createTimeStamp) }}
</div>
</div> </div>
</template> </template>

Loading…
Cancel
Save