Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp
# Conflicts: # pages/chat/components/messageList.vue # uni_modules/z-paging/changelog.md # uni_modules/z-paging/components/z-paging-cell/z-paging-cell.vue # uni_modules/z-paging/components/z-paging-empty-view/z-paging-empty-view.vue # uni_modules/z-paging/components/z-paging-swiper-item/z-paging-swiper-item.vue # uni_modules/z-paging/components/z-paging-swiper/z-paging-swiper.vue # uni_modules/z-paging/components/z-paging/components/z-paging-load-more.vue # uni_modules/z-paging/components/z-paging/components/z-paging-refresh.vue # uni_modules/z-paging/components/z-paging/css/z-paging-main.css # uni_modules/z-paging/components/z-paging/js/modules/back-to-top.js # uni_modules/z-paging/components/z-paging/js/modules/common-layout.js # uni_modules/z-paging/components/z-paging/js/modules/data-handle.js # uni_modules/z-paging/components/z-paging/js/modules/i18n.js # uni_modules/z-paging/components/z-paging/js/modules/load-more.js # uni_modules/z-paging/components/z-paging/js/modules/nvue.js # uni_modules/z-paging/components/z-paging/js/modules/refresher.js # uni_modules/z-paging/components/z-paging/js/modules/scroller.js # uni_modules/z-paging/components/z-paging/js/modules/virtual-list.js # uni_modules/z-paging/components/z-paging/js/z-paging-constant.js # uni_modules/z-paging/components/z-paging/js/z-paging-enum.js # uni_modules/z-paging/components/z-paging/js/z-paging-main.js # uni_modules/z-paging/components/z-paging/js/z-paging-utils.js # uni_modules/z-paging/components/z-paging/z-paging.vue # uni_modules/z-paging/package.json # uni_modules/z-paging/readme.md
This commit is contained in:
@@ -3,7 +3,14 @@
|
||||
<!-- 消息渲染 -->
|
||||
<view class="message-item ss-flex-col scroll-item">
|
||||
<view class="ss-flex ss-row-center ss-col-center">
|
||||
<!-- 日期 -->
|
||||
<!-- 系统消息 -->
|
||||
<view
|
||||
v-if="message.contentType === KeFuMessageContentTypeEnum.SYSTEM"
|
||||
class="system-message"
|
||||
>
|
||||
{{ message.content }}
|
||||
</view>
|
||||
<!-- 日期 - 移到消息内容上方显示 -->
|
||||
<view
|
||||
v-if="
|
||||
message.contentType !== KeFuMessageContentTypeEnum.SYSTEM &&
|
||||
@@ -13,14 +20,8 @@
|
||||
>
|
||||
{{ formatDate(message.createTime) }}
|
||||
</view>
|
||||
<!-- 系统消息 -->
|
||||
<view
|
||||
v-if="message.contentType === KeFuMessageContentTypeEnum.SYSTEM"
|
||||
class="system-message"
|
||||
>
|
||||
{{ message.content }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 消息体渲染管理员消息和用户消息并左右展示 -->
|
||||
<view
|
||||
v-if="message.contentType !== KeFuMessageContentTypeEnum.SYSTEM"
|
||||
@@ -42,11 +43,12 @@
|
||||
sheep.$url.static('/static/img/shop/chat/default.png')
|
||||
"
|
||||
mode="aspectFill"
|
||||
lazy-load
|
||||
></image>
|
||||
<!-- 内容 -->
|
||||
<template v-if="message.contentType === KeFuMessageContentTypeEnum.TEXT">
|
||||
<view class="message-box" :class="{ admin: message.senderType === UserTypeEnum.ADMIN }">
|
||||
<mp-html :content="replaceEmoji(getMessageContent(message).text || message.content)" />
|
||||
<mp-html :content="processedContent" :domain="sheep.$url.cdn('')" lazy-load />
|
||||
</view>
|
||||
</template>
|
||||
<template v-if="message.contentType === KeFuMessageContentTypeEnum.IMAGE">
|
||||
@@ -140,7 +142,16 @@
|
||||
return false;
|
||||
});
|
||||
|
||||
// 处理表情
|
||||
// 缓存表情映射
|
||||
const emojiMap = computed(() => {
|
||||
const map = new Map();
|
||||
emojiList.forEach(emoji => {
|
||||
map.set(emoji.name, emoji.file);
|
||||
});
|
||||
return map;
|
||||
});
|
||||
|
||||
// 处理表情 - 进行缓存优化
|
||||
function replaceEmoji(data) {
|
||||
let newData = data;
|
||||
if (typeof newData !== 'object') {
|
||||
@@ -148,27 +159,28 @@
|
||||
let zhEmojiName = newData.match(reg);
|
||||
if (zhEmojiName) {
|
||||
zhEmojiName.forEach((item) => {
|
||||
let emojiFile = selEmojiFile(item);
|
||||
newData = newData.replace(
|
||||
item,
|
||||
`<img class="chat-img" style="width: 24px;height: 24px;margin: 0 3px;vertical-align: middle;" src="${sheep.$url.cdn(
|
||||
'/static/img/chat/emoji/' + emojiFile,
|
||||
)}"/>`,
|
||||
);
|
||||
const emojiFile = emojiMap.value.get(item) || '';
|
||||
if (emojiFile) {
|
||||
newData = newData.replace(
|
||||
item,
|
||||
`<img class="chat-img" style="width: 24px;height: 24px;margin: 0 3px;vertical-align: middle;" src="${sheep.$url.cdn(
|
||||
'/static/img/chat/emoji/' + emojiFile,
|
||||
)}"/>`,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return newData;
|
||||
}
|
||||
|
||||
function selEmojiFile(name) {
|
||||
for (let index in emojiList) {
|
||||
if (emojiList[index].name === name) {
|
||||
return emojiList[index].file;
|
||||
}
|
||||
// 预处理内容,避免重复计算
|
||||
const processedContent = computed(() => {
|
||||
if (props.message.contentType === KeFuMessageContentTypeEnum.TEXT) {
|
||||
return replaceEmoji(getMessageContent.value(props.message).text || props.message.content);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return props.message.content;
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
Reference in New Issue
Block a user