Browse Source

优化消息不能换行的问题

master
xsx 9 months ago
parent
commit
b373be7b0d
  1. 14
      im-uniapp/common/url.js
  2. 14
      im-uniapp/components/chat-message-item/chat-message-item.vue
  3. 4
      im-uniapp/pages/chat/chat-box.vue

14
im-uniapp/common/url.js

@ -1,7 +1,14 @@
let replaceURLWithHTMLLinks = (content, color) => {
// 使用正则表达式匹配更广泛的URL格式(此正则由deepseek生成)
const urlRegex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]|\bwww\.[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return content.replace(urlRegex, (url) => {
const regex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]|\bwww\.[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
let containUrl = (content) => {
return regex.test(content)
}
let replaceURLWithHTMLLinks = (content, color) => {
return content.replace(regex, (url) => {
// 如果URL不以http(s)://开头,则添加http://前缀
if (!url.startsWith("http")) {
url = "http://" + url;
@ -11,5 +18,6 @@ let replaceURLWithHTMLLinks = (content, color) => {
}
export default {
containUrl,
replaceURLWithHTMLLinks
}

14
im-uniapp/components/chat-message-item/chat-message-item.vue

@ -16,11 +16,11 @@
<view class="bottom">
<view v-if="msgInfo.type == $enums.MESSAGE_TYPE.TEXT">
<long-press-menu :items="menuItems" @select="onSelectMenu">
<!-- rich-text支持显示表情但是不支持点击a标签 -->
<rich-text v-if="$emo.containEmoji(msgInfo.content)" class="message-text"
:nodes="nodesText"></rich-text>
<!-- up-parse支持点击a标签,但安卓打包后表情无法显示,原因未知 -->
<up-parse v-else class="message-text" :showImgMenu="false" :content="nodesText"></up-parse>
<!-- up-parse支持点击a标签,但是不支持显示emo表情也不支持换行 -->
<up-parse v-if="$url.containUrl(msgInfo.content)&&!$emo.containEmoji(msgInfo.content)"
class="message-text" :showImgMenu="false" :content="nodesText"></up-parse>
<!-- rich-text支持显示emo表情以及消息换行但是不支持点击a标签 -->
<rich-text v-else class="message-text" :nodes="nodesText"></rich-text>
</long-press-menu>
</view>
<view class="message-image" v-if="msgInfo.type == $enums.MESSAGE_TYPE.IMAGE">
@ -39,8 +39,8 @@
<long-press-menu :items="menuItems" @select="onSelectMenu">
<view class="file-box">
<view class="file-info">
<uni-link class="file-name" :text="data.name" showUnderLine="true"
color="#007BFF" :href="data.url"></uni-link>
<uni-link class="file-name" :text="data.name" showUnderLine="true" color="#007BFF"
:href="data.url"></uni-link>
<view class="file-size">{{ fileSize }}</view>
</view>
<view class="file-icon iconfont icon-file"></view>

4
im-uniapp/pages/chat/chat-box.vue

@ -288,7 +288,9 @@ export default {
sendText += op.insert
)
})
if (!sendText.trim() && this.atUserIds.length == 0) {
//
sendText = sendText.trim();
if (!sendText && this.atUserIds.length == 0) {
return uni.showToast({
title: "不能发送空白信息",
icon: "none"

Loading…
Cancel
Save