Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3ec981ea7f | ||
|
7067c42b2b | ||
|
1ff26564c7 | ||
|
b18a6e5432 | ||
|
17c1368346 | ||
|
f279248a51 | ||
|
c89056d7f1 |
@ -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",
|
||||
|
@ -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))':
|
||||
|
1884
src/components/editor/CustomEditor.vue
Normal file
1884
src/components/editor/CustomEditor.vue
Normal file
File diff suppressed because it is too large
Load Diff
@ -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() : ''
|
||||
}
|
||||
|
||||
// 切换播放状态
|
||||
|
@ -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'
|
||||
}
|
||||
|
@ -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 } // 记录特殊参数,供分页加载用
|
||||
|
@ -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'))||'46d71a72d8d845ad7ed23eba9bdde260e635407190c2ce1bf7fd22088e41682ea07773ec65cae8946d2003f264d55961f96e0fc5da10eb96d3a348c1664e9644ce2108c311309f398ae8ea1b8200bfd490e5cb6e8c52c9e5d493cbabb163368f8351420451a631dbfa749829ee4cda49b77b5ed2d3dced5d0f2b7dd9ee76ba5465c84a17c23af040cd92b6b2a4ea48befbb5c729dcdad0a9c9668befe84074cc24f78899c1d947f8e7f94c7eda5325b8ed698df729e76febb98549ef3482ae942fb4f4a1c92d21836fa784728f0c5483aab2760a991b6b36e6b10c84f840a6433a6ecc31dee36e8f1c6158818bc89d22403363066ad3c046839f7b2cf8a6186da017388f197c0c3b219b1c04e7d986e9774b72664a22a6075cee77da3584b7a2131365913796a5fcabc8f4594284e480a592a84a40a9aa7f5f27c951a53a369c'
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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))
|
||||
|
@ -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(() => {
|
||||
<footer class="el-footer">
|
||||
<MultiSelectFooter v-if="dialogueStore.isOpenMultiSelect" />
|
||||
|
||||
<Editor v-else @editor-event="onEditorEvent" :vote="talk_type == 2" :members="members" />
|
||||
<!-- <Editor v-else @editor-event="onEditorEvent" :vote="talk_type == 2" :members="members" /> -->
|
||||
<CustomEditor v-else @editor-event="onEditorEvent" :vote="talk_type == 2" :members="members" />
|
||||
</footer>
|
||||
|
||||
<HistoryRecord
|
||||
|
Loading…
Reference in New Issue
Block a user