Pārlūkot izejas kodu

优化消息不能换行的问题

xsx 8 mēneši atpakaļ
vecāks
revīzija
b373be7b0d

+ 11 - 3
im-uniapp/common/url.js

@@ -1,7 +1,14 @@
+
+// 使用正则表达式匹配更广泛的URL格式(此正则由deepseek生成)
+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) => {
-	// 使用正则表达式匹配更广泛的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) => {
+	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
 }

+ 7 - 7
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 - 2
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"
@@ -610,7 +612,7 @@ export default {
 				query.select('.chat-wrap').boundingClientRect();
 				query.exec(data => {
 					this.scrollTop = data[0].height - scrollViewHeight;
-					if(this.scrollTop < 10){
+					if (this.scrollTop < 10) {
 						// 未渲染完成,重试一次
 						this.holdingScrollBar();
 					}