diff --git a/package.json b/package.json
index 8c5366b..0b8bf58 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"@kangc/v-md-editor": "^2.3.18",
"@onlyoffice/document-editor-vue": "^1.5.0",
"@vicons/fluent": "^0.13.0",
+ "@vicons/ionicons4": "^0.13.0",
"@vicons/ionicons5": "^0.13.0",
"@vueup/vue-quill": "^1.2.0",
"@vueuse/core": "^10.7.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 168cebb..e186607 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,9 @@ importers:
'@vicons/fluent':
specifier: ^0.13.0
version: 0.13.0
+ '@vicons/ionicons4':
+ specifier: ^0.13.0
+ version: 0.13.0
'@vicons/ionicons5':
specifier: ^0.13.0
version: 0.13.0
@@ -1002,6 +1005,9 @@ packages:
'@vicons/fluent@0.13.0':
resolution: {integrity: sha512-bYGZsOE3qzvm3Cm43e7tybgGlr5ZUpYqtRZq0g0Tfupe8jIzLolpvQLNUt1zS8Mgt6goTbUk5YH7Fkv16jkykg==}
+ '@vicons/ionicons4@0.13.0':
+ resolution: {integrity: sha512-5WHIl/4R5a4i9GONa+hIQWxg/WczrbsCdqxawHZvdd3drsEr+Q3yzlfS+NNRO4WS3uDW2uWLCwoW+yp5TgcKeQ==}
+
'@vicons/ionicons5@0.13.0':
resolution: {integrity: sha512-zvZKBPjEXKN7AXNo2Na2uy+nvuv6SP4KAMQxpKL2vfHMj0fSvuw7JZcOPCjQC3e7ayssKnaoFVAhbYcW6v41qQ==}
@@ -4411,6 +4417,8 @@ snapshots:
'@vicons/fluent@0.13.0': {}
+ '@vicons/ionicons4@0.13.0': {}
+
'@vicons/ionicons5@0.13.0': {}
'@vitejs/plugin-vue-jsx@3.1.0(vite@6.3.5(@types/node@18.19.99)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.2))(vue@3.5.13(typescript@5.2.2))':
diff --git a/src/components/editor/CustomEditor.vue b/src/components/editor/CustomEditor.vue
new file mode 100644
index 0000000..b22e712
--- /dev/null
+++ b/src/components/editor/CustomEditor.vue
@@ -0,0 +1,1860 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/editor/MeEditorEmoticon.vue b/src/components/editor/MeEditorEmoticon.vue
index a88e65c..4cd9c3e 100644
--- a/src/components/editor/MeEditorEmoticon.vue
+++ b/src/components/editor/MeEditorEmoticon.vue
@@ -186,16 +186,20 @@ const onSendEmoticon = (type: any, value: any, img = '') => {
flex-wrap: wrap;
.option{
- margin: 7px;
+ padding: 7px;
+ border-radius: 4px;
+ &:hover {
+ background-color: #F2F2F2;
+ }
:deep(.emoji){
height: 22px;
width: 22px;
user-select: none;
transition: all 0.5s;
- &:hover {
- transform: scale(1.5);
- }
+ // &:hover {
+ // transform: scale(1.5);
+ // }
}
}
}
diff --git a/src/components/talk/message/FileMessage.vue b/src/components/talk/message/FileMessage.vue
index 8129e4e..de5004e 100644
--- a/src/components/talk/message/FileMessage.vue
+++ b/src/components/talk/message/FileMessage.vue
@@ -64,8 +64,8 @@ const fileInfo = computed(() => {
// 获取文件扩展名
function getFileExtension(filepath) {
- const parts = filepath.split('.')
- return parts.length > 1 ? parts.pop().toUpperCase() : ''
+ const parts = filepath?.split('.')
+ return parts?.length > 1 ? parts?.pop()?.toUpperCase() : ''
}
// 切换播放状态
diff --git a/src/constant/event-bus.ts b/src/constant/event-bus.ts
index a437264..3abbb99 100644
--- a/src/constant/event-bus.ts
+++ b/src/constant/event-bus.ts
@@ -5,5 +5,6 @@ export const enum ContactConst {
export const enum EditorConst {
Mention = 'editor:mention',
Quote = 'editor:quote',
- Edit = 'editor:edit'
+ Edit = 'editor:edit',
+ Clear = 'editor:clear'
}
diff --git a/src/hooks/useTalkRecord.ts b/src/hooks/useTalkRecord.ts
index 4accf93..027c93f 100644
--- a/src/hooks/useTalkRecord.ts
+++ b/src/hooks/useTalkRecord.ts
@@ -190,8 +190,6 @@ export const useTalkRecord = (uid: number) => {
loadConfig.receiver_id = params.receiver_id
loadConfig.talk_type = params.talk_type
- console.error('onLoad', params, options)
-
// 新增:支持指定消息定位模式,参数以传入为准合并
if (options?.specifiedMsg?.cursor !== undefined) {
loadConfig.specialParams = { ...options.specifiedMsg } // 记录特殊参数,供分页加载用
diff --git a/src/utils/auth.js b/src/utils/auth.js
index f4f176c..2ec121f 100644
--- a/src/utils/auth.js
+++ b/src/utils/auth.js
@@ -18,7 +18,7 @@ export function isLoggedIn() {
*/
export function getAccessToken() {
// return storage.get(AccessToken) || ''
- return JSON.parse(localStorage.getItem('token'))||'46d71a72d8d845ad7ed23eba9bdde260e635407190c2ce1bf7fd22088e41682ea07773ec65cae8946d2003f264d55961f96e0fc5da10eb96d3a348c1664e9644ce2108c311309f398ae8ea1b8200bfd490e5cb6e8c52c9e5d493cbabb163368f8351420451a631dbfa749829ee4cda49b77b5ed2d3dced5d0f2b7dd9ee76ba5465c84a17c23af040cd92b6b2a4ea48befbb5c729dcdad0a9c9668befe84074cc24f78899c1d947f8e7f94c7eda5325b8ed698df729e76febb98549ef3482ae942fb4f4a1c92d21836fa784728f0c5483aab2760a991b6b36e6b10c84f840a6433a6ecc31dee36e8f1c6158818bc89d22726726265e9af0db370a54ea5ee002b43662d571b84c8468ac15330f79503a5cd5e72282d8bee92749b1a3c1b7fd87ae70b64b90e437e84c1b558c64a35e181b2ecf5db3007680c3607eac1edee7f59d'
+ return JSON.parse(localStorage.getItem('token'))||'46d71a72d8d845ad7ed23eba9bdde260e635407190c2ce1bf7fd22088e41682ea07773ec65cae8946d2003f264d55961f96e0fc5da10eb96d3a348c1664e9644ce2108c311309f398ae8ea1b8200bfd490e5cb6e8c52c9e5d493cbabb163368f8351420451a631dbfa749829ee4cda49b77b5ed2d3dced5d0f2b7dd9ee76ba5465c84a17c23af040cd92b6b2a4ea48befbb5c729dcdad0a9c9668befe84074cc24f78899c1d947f8e7f94c7eda5325b8ed698df729e76febb98549ef3482ae942fb4f4a1c92d21836fa784728f0c5483aab2760a991b6b36e6b10c84f840a6433a6ecc31dee36e8f1c6158818bc89d22c9c2f9b60a57573e8b08cdf47105e1ba85550c21fa55526e8a00bf316c623eb67abf749622c48beab908d61d3db7b22ed3eb6aa8a08c77680ad4d8a3458c1e72f97ba2b8480674df77f0501a34e82b58'
}
/**
diff --git a/src/views/message/inner/panel/PanelContent.vue b/src/views/message/inner/panel/PanelContent.vue
index 5cb1cc9..b4d2df7 100644
--- a/src/views/message/inner/panel/PanelContent.vue
+++ b/src/views/message/inner/panel/PanelContent.vue
@@ -289,7 +289,6 @@ watch(
async (newProps) => {
await nextTick()
let specialParams = undefined
- console.error(newProps, 'newProps')
if (newProps.specifiedMsg) {
try {
const parsed = JSON.parse(decodeURIComponent(newProps.specifiedMsg))
diff --git a/src/views/message/inner/panel/PanelFooter.vue b/src/views/message/inner/panel/PanelFooter.vue
index dc5f8ad..e1a8abb 100644
--- a/src/views/message/inner/panel/PanelFooter.vue
+++ b/src/views/message/inner/panel/PanelFooter.vue
@@ -16,6 +16,7 @@ import Editor from '@/components/editor/Editor.vue'
import MultiSelectFooter from './MultiSelectFooter.vue'
import HistoryRecord from '@/components/talk/HistoryRecord.vue'
import {scrollToBottom} from '@/utils/dom.ts'
+import CustomEditor from '@/components/editor/CustomEditor.vue'
const userStore = useUserStore()
const talkStore = useTalkStore()
const editorStore = useEditorStore()
@@ -60,11 +61,11 @@ const onSendMessage = (data = {}, callBack: any) => {
}
ServePublishMessage(message)
- .then(({ code, message }) => {
+ .then(({ code, message, msg }) => {
if (code == 200) {
callBack(true)
} else {
- window['$message'].warning(message)
+ window['$message'].warning(message || msg)
}
})
.catch(() => {
@@ -94,65 +95,13 @@ const onSendTextEvent = throttle((value: any) => {
}, 1000)
// 发送图片消息
-const onSendImageEvent = ({ data }) => {
- console.log('onSendImageEvent')
-
- // 先创建一个带有上传ID的临时消息对象,用于显示进度
- const uploadId = `image-${Date.now()}-${Math.floor(Math.random() * 1000)}`
-
- // 创建本地预览URL
- const previewUrl = URL.createObjectURL(data)
-
- // 创建临时消息记录
- const tempMessage = {
- msg_id: uploadId,
- sequence: Date.now(),
- talk_type: props.talk_type,
- msg_type: 3, // 图片消息类型
- user_id: props.uid,
- receiver_id: props.receiver_id,
- is_revoke: 0,
- is_mark: 0,
- is_read: 1,
- content: '',
- created_at: parseTime(new Date(), '{y}-{m}-{d} {h}:{i}'),
- extra: {
- url: previewUrl, // 使用本地预览URL
- size: data.size,
- is_uploading: true,
- upload_id: uploadId,
- percentage: 0
- },
- isCheck: false,
- send_status: 1,
- float: 'right' // 我发送的消息显示在右侧
- }
-
- // 直接添加到对话记录中
- dialogueStore.addDialogueRecord(tempMessage)
- nextTick(()=>{
- scrollToBottom()
- })
- uploadsStore.initUploadFile(
- data,
- props.talk_type,
- props.receiver_id,
- uploadId,
- async (percentage) => {
- dialogueStore.updateUploadProgress(uploadId, percentage)
- },
- async () => {
- // 清理本地预览URL
- URL.revokeObjectURL(previewUrl)
- dialogueStore.batchDelDialogueRecord([uploadId])
-
- }
- )
+const onSendImageEvent = ({ data, callBack }) => {
+ onSendMessage({ type: 'image', ...data }, callBack)
}
// 发送视频消息
const onSendVideoEvent = async ({ data }) => {
- console.log('onSendVideoEvent')
+
// 获取视频首帧作为封面图
// let resp = await getVideoImage(data)
@@ -217,7 +166,6 @@ const onSendFileEvent = ({ data }) => {
return window['$message'].warning('上传文件不能超过100M!')
}
const clientUploadId = `file-${Date.now()}-${Math.floor(Math.random() * 1000)}`
-
const tempMessage = {
msg_id: clientUploadId,
sequence: Date.now(),
@@ -233,6 +181,7 @@ const onSendFileEvent = ({ data }) => {
extra: {
name: data.name,
url: '',
+ path:data.name,
size: data.size,
is_uploading: true,
upload_id: clientUploadId,
@@ -342,7 +291,8 @@ onMounted(() => {