refactor: 统一错误消息处理并优化编辑器功能
- 将错误消息处理移至请求拦截器统一处理 - 优化编辑器提及功能,过滤当前用户 - 清理编辑器相关冗余代码和注释 - 改进空消息检测逻辑
This commit is contained in:
parent
88bbf16699
commit
57e4ba69d9
@ -10,7 +10,7 @@ import { bus } from '@/utils/event-bus'
|
|||||||
import { EditorConst } from '@/constant/event-bus'
|
import { EditorConst } from '@/constant/event-bus'
|
||||||
import { emitCall } from '@/utils/common'
|
import { emitCall } from '@/utils/common'
|
||||||
import { deltaToMessage, deltaToString, isEmptyDelta } from './util'
|
import { deltaToMessage, deltaToString, isEmptyDelta } from './util'
|
||||||
import { useDialogueStore, useEditorDraftStore } from '@/store'
|
import { useDialogueStore, useEditorDraftStore ,useUserStore} from '@/store'
|
||||||
import { uploadImg } from '@/api/upload'
|
import { uploadImg } from '@/api/upload'
|
||||||
import { defAvatar } from '@/constant/default'
|
import { defAvatar } from '@/constant/default'
|
||||||
import { getImageInfo } from '@/utils/functions'
|
import { getImageInfo } from '@/utils/functions'
|
||||||
@ -32,7 +32,7 @@ const props = defineProps({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits(['editor-event'])
|
const emit = defineEmits(['editor-event'])
|
||||||
|
const userStore = useUserStore()
|
||||||
const editorRef = ref(null)
|
const editorRef = ref(null)
|
||||||
const content = ref('')
|
const content = ref('')
|
||||||
const isFocused = ref(false)
|
const isFocused = ref(false)
|
||||||
@ -174,8 +174,9 @@ const checkMention = (target) => {
|
|||||||
const showMentionList = () => {
|
const showMentionList = () => {
|
||||||
const query = currentMentionQuery.value.toLowerCase()
|
const query = currentMentionQuery.value.toLowerCase()
|
||||||
mentionList.value = props.members.filter(member => {
|
mentionList.value = props.members.filter(member => {
|
||||||
return member.value.toLowerCase().startsWith(query)
|
return member.value.toLowerCase().startsWith(query)&& member.id !== userStore.uid
|
||||||
})
|
})
|
||||||
|
console.log('userStore',userStore.uid)
|
||||||
if(dialogueStore.groupInfo.is_manager){
|
if(dialogueStore.groupInfo.is_manager){
|
||||||
mentionList.value.unshift({ id: 0, nickname: '全体成员', avatar: defAvatar, value: '全体成员' })
|
mentionList.value.unshift({ id: 0, nickname: '全体成员', avatar: defAvatar, value: '全体成员' })
|
||||||
}
|
}
|
||||||
@ -347,20 +348,15 @@ const handlePaste = (event) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Helper function to insert line break
|
|
||||||
const insertLineBreak = (range) => {
|
const insertLineBreak = (range) => {
|
||||||
const editor = editorRef.value;
|
const editor = editorRef.value;
|
||||||
if (!editor) return;
|
if (!editor) return;
|
||||||
|
|
||||||
const br = document.createElement('br');
|
const br = document.createElement('br');
|
||||||
range.deleteContents(); // Clear selected content or collapsed cursor position
|
range.deleteContents();
|
||||||
range.insertNode(br);
|
range.insertNode(br);
|
||||||
|
|
||||||
// Create a zero-width space or a text node to ensure the cursor can be placed after the <br>
|
const nbsp = document.createTextNode('\u200B');
|
||||||
// and that the <br> is not immediately removed by cleanup logic if it's the only content.
|
|
||||||
const nbsp = document.createTextNode('\u200B'); // Zero-width space
|
|
||||||
range.setStartAfter(br);
|
range.setStartAfter(br);
|
||||||
range.insertNode(nbsp);
|
range.insertNode(nbsp);
|
||||||
range.setStartAfter(nbsp);
|
range.setStartAfter(nbsp);
|
||||||
@ -372,7 +368,6 @@ const insertLineBreak = (range) => {
|
|||||||
selection.addRange(range);
|
selection.addRange(range);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure editor focus and trigger input handling
|
|
||||||
editor.focus();
|
editor.focus();
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
handleInput({ target: editor });
|
handleInput({ target: editor });
|
||||||
@ -606,15 +601,11 @@ const handleKeydown = (event) => {
|
|||||||
!messageData.items[0].content.trimEnd());
|
!messageData.items[0].content.trimEnd());
|
||||||
|
|
||||||
if (isEmptyMessage) {
|
if (isEmptyMessage) {
|
||||||
// If the message is considered empty, prevent sending.
|
|
||||||
// Ensure editor is truly empty if it wasn't already.
|
|
||||||
if (editor.innerHTML !== '') {
|
if (editor.innerHTML !== '') {
|
||||||
clearEditor();
|
clearEditor();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If message is not empty, proceed to send.
|
|
||||||
const quoteElement = editor.querySelector('.editor-quote');
|
const quoteElement = editor.querySelector('.editor-quote');
|
||||||
if (!quoteElement && quoteData.value) {
|
if (!quoteElement && quoteData.value) {
|
||||||
quoteData.value = null;
|
quoteData.value = null;
|
||||||
@ -643,15 +634,15 @@ const sendMessage = () => {
|
|||||||
}
|
}
|
||||||
messageData.items.forEach(item => {
|
messageData.items.forEach(item => {
|
||||||
|
|
||||||
if (item.type === 1 && cleanInvisibleChars(item.content).trimEnd()) { // Apply trimEnd after cleaning
|
if (item.type === 1 && cleanInvisibleChars(item.content).trimEnd()) {
|
||||||
const finalContent = cleanInvisibleChars(item.content).replace(/<br\s*\/?>/gi, '\n').trimEnd();
|
const finalContent = cleanInvisibleChars(item.content).replace(/<br\s*\/?>/gi, '\n').trimEnd();
|
||||||
if (!finalContent && !messageData.mentionUids.length && !messageData.quoteId) {
|
if (!finalContent && !messageData.mentionUids.length && !messageData.quoteId) {
|
||||||
// If after processing, the content is empty and no mentions/quote, skip
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const data = {
|
const data = {
|
||||||
items: [{
|
items: [{
|
||||||
content: finalContent, // Use the processed content
|
content: finalContent,
|
||||||
type: 1
|
type: 1
|
||||||
}],
|
}],
|
||||||
mentionUids: messageData.mentionUids,
|
mentionUids: messageData.mentionUids,
|
||||||
|
@ -245,8 +245,6 @@ export const useDialogueStore = defineStore('dialogue', {
|
|||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
this.batchDelDialogueRecord(msgIds)
|
this.batchDelDialogueRecord(msgIds)
|
||||||
} else {
|
|
||||||
window['$message'].warning(res.message)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -53,7 +53,12 @@ request.interceptors.request.use((config) => {
|
|||||||
}, errorHandler)
|
}, errorHandler)
|
||||||
|
|
||||||
// 响应拦截器
|
// 响应拦截器
|
||||||
request.interceptors.response.use((response) => response.data, errorHandler)
|
request.interceptors.response.use((response) => {
|
||||||
|
if(response.data.code !==200){
|
||||||
|
window['$message'].warning(response.data.msg)
|
||||||
|
}
|
||||||
|
return response.data
|
||||||
|
}, errorHandler)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET 请求
|
* GET 请求
|
||||||
|
Loading…
Reference in New Issue
Block a user