From 0fe11197897a8e2da5a0f37604ec8064bc10a8e5 Mon Sep 17 00:00:00 2001 From: Phoenix <64720302+Concur-max@users.noreply.github.com> Date: Wed, 21 May 2025 19:57:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EOnlyOffice=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E5=92=8CFluent=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E5=BA=93=E4=BE=9D=E8=B5=96=EF=BC=8C=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=B6=88=E6=81=AF=E7=BB=84=E4=BB=B6=E7=9A=84=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=B0=83=E6=95=B4=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E6=B6=88=E6=81=AF=E8=83=8C=E6=99=AF=E8=89=B2=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E4=BC=9A=E8=AF=9D=E8=8F=9C=E5=8D=95=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BC=9A=E8=AF=9D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=92=E5=BA=8F=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=A0=B7=E5=BC=8F=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + pnpm-lock.yaml | 21 +++ src/assets/css/define/global.less | 2 +- src/assets/image/dofd.png | Bin 0 -> 396 bytes src/assets/image/xxxx@2x.png | Bin 0 -> 684 bytes src/components/talk/message/FileMessage.vue | 26 +++- src/components/talk/message/TextMessage.vue | 2 +- src/hooks/useSessionMenu.ts | 26 +--- src/store/modules/talk.ts | 2 +- src/views/message/inner/IndexSider.vue | 19 ++- src/views/message/inner/TalkItem.vue | 13 +- .../message/inner/panel/PanelContent.vue | 2 +- src/views/office/index.vue | 128 ++++++++++-------- 13 files changed, 152 insertions(+), 91 deletions(-) create mode 100644 src/assets/image/dofd.png create mode 100644 src/assets/image/xxxx@2x.png diff --git a/package.json b/package.json index ebed267..b0c814e 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,8 @@ "@highlightjs/vue-plugin": "^2.1.0", "@iconify-json/ion": "^1.2.3", "@kangc/v-md-editor": "^2.3.18", + "@onlyoffice/document-editor-vue": "^1.5.0", + "@vicons/fluent": "^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 8f7ce39..eb00edc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,12 @@ importers: '@kangc/v-md-editor': specifier: ^2.3.18 version: 2.3.18(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.2.2)) + '@onlyoffice/document-editor-vue': + specifier: ^1.5.0 + version: 1.5.0(vue@3.5.13(typescript@5.2.2)) + '@vicons/fluent': + specifier: ^0.13.0 + version: 0.13.0 '@vicons/ionicons5': specifier: ^0.13.0 version: 0.13.0 @@ -594,6 +600,11 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@onlyoffice/document-editor-vue@1.5.0': + resolution: {integrity: sha512-HZEebUhBloP4LomspI5BddgoQdhtPq91h57yA9K/Lk70MMc1vgOTQ4Wq+N5TZYXNxdDTv+TSsEVFLnBCl1Y71A==} + peerDependencies: + vue: ^3.0.0 + '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} @@ -988,6 +999,9 @@ packages: peerDependencies: vue: ^3.0.0 + '@vicons/fluent@0.13.0': + resolution: {integrity: sha512-bYGZsOE3qzvm3Cm43e7tybgGlr5ZUpYqtRZq0g0Tfupe8jIzLolpvQLNUt1zS8Mgt6goTbUk5YH7Fkv16jkykg==} + '@vicons/ionicons5@0.13.0': resolution: {integrity: sha512-zvZKBPjEXKN7AXNo2Na2uy+nvuv6SP4KAMQxpKL2vfHMj0fSvuw7JZcOPCjQC3e7ayssKnaoFVAhbYcW6v41qQ==} @@ -4012,6 +4026,11 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@onlyoffice/document-editor-vue@1.5.0(vue@3.5.13(typescript@5.2.2))': + dependencies: + lodash: 4.17.21 + vue: 3.5.13(typescript@5.2.2) + '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -4390,6 +4409,8 @@ snapshots: dependencies: vue: 3.5.13(typescript@5.2.2) + '@vicons/fluent@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/assets/css/define/global.less b/src/assets/css/define/global.less index 72a727f..d8414a1 100644 --- a/src/assets/css/define/global.less +++ b/src/assets/css/define/global.less @@ -206,7 +206,7 @@ textarea { border-radius: 2px; cursor: default; user-select: none; - background-color: #dee0e3; + transform: scale(0.84); transform-origin: left; flex-shrink: 0; diff --git a/src/assets/image/dofd.png b/src/assets/image/dofd.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c359b3b286a0940f8850e32d27016ca0505d3b GIT binary patch literal 396 zcmV;70dxL|P)Px$MoC0LR7gwhl`&3)P!NXyc^IRWdjq#I!OGnmP>8Yh2#6Qh8|VqNcMW(0N(05} z38a%~;}N#A*~b`&5Fzh9Ud(P{v2>6(|2Ol`yn$f(c;jfayH~!VY!9Bg z_nsiJ0OKYt!fV^OEnv{8twsOHBL8@PM<7n$!kH>9n|t6NMH4vk)`1f|6~Skv(>D3c zeaJyLVMd%4VbF&R0c!D`azVg|S7Mrd1bGMWvkIPd5EGyy&Iqz1jGF{IV`_rv04DKH z1r1RLQ2~a;m4ND_3epGIh-(2V2%~&#wkb=Iv<>Zf-X9L*s_0Y#&IvRDIAM@iPs@O~ zu>w_3erIPRZUyMuRlVDaTLW6izKkIeZ{(LbxYaZV=-iFQ5`6eq0aIL7T)vR+&X+`V qun7PpUr>F4AiQ-0O2TsWCE{;>$p3)7Y*R%50000Px%W=TXrR7gvWR>5`KFboA~->XjGWP&CW#4_k}oei7`+D?#kf+iC*ouKa7;*&c; zGlDaLJ%B`1&=d7&nzW>gEQtC5KR-T<&|PI&-c(hUEtkuki~0AWC^i5v(^}ug-p69- zg2osDy;Dlv=6U|+;zd!c5b;y<{M5ys5bvYV``sw<_`ika7l_@PPuN<PC6FD>lv3Aup6~rN zC*Y!(x~?BPN`&v0|2)r+sT~+&)(!a2*iJ*vg@!KzXsum2{cDfJrD8UR4>Xoggp>e-fG=}kL5os%2j^`-pKGqYn{0Tq5fn1j{+}>;war0a_8$m z#=lqtB7Sx|PF2pagBjxACAZe*zBl!>hzzZ@{{Y~Hh`z=&ozlNCM%Mpe=6kKRba#9C z#^v<-Kt!)G>81Ej6&7>Fvrh99rTFj8>p(=;CzX2@oi##i2QmE{W7-Dvdjh*HmCTHj z$z<+(`K7K5`S*JQ09tC%RS}+a3iy)#J8#+{A`{U^0T=llnYo`nL%^*P5XAxCegElH zBgU7BKMD9+CQ4`gV{rR5oxus$cfvI@%LtSK(#rWn=Q5x}bfuJxxmgf@S4!=~zkRNg zO*F!<`z2wsr1XC_i4xPsjWc;2m1|7@gW$e8DbKK>q`wim{hv SxyVfb0000 { 'width=1200,height=900,left=200,top=200,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no' ); } + +// 处理下载事件 +const handleDownload = () => { + download(props.data.msg_id) + // const url = props.extra.path; + // if (!url) return; + // const a = document.createElement('a'); + // a.href = url; + // a.download = url.split('/').pop() || 'download'; + // document.body.appendChild(a); + // a.click(); + // document.body.removeChild(a); + console.log('data',props.data) +} diff --git a/src/components/talk/message/TextMessage.vue b/src/components/talk/message/TextMessage.vue index 11561cf..49895dc 100644 --- a/src/components/talk/message/TextMessage.vue +++ b/src/components/talk/message/TextMessage.vue @@ -43,7 +43,7 @@ textContent = textReplaceEmoji(textContent) min-height: 30px; padding: 3px; color: var(--im-message-left-text-color); - background: var(--im-message-left-bg-color); + background: #F4F4FC; border-radius: 0px 10px 10px 10px; font-size: 14px; &.right { diff --git a/src/hooks/useSessionMenu.ts b/src/hooks/useSessionMenu.ts index 4e5d8b6..4a22416 100644 --- a/src/hooks/useSessionMenu.ts +++ b/src/hooks/useSessionMenu.ts @@ -1,17 +1,5 @@ import { reactive, nextTick, computed, h, inject } from 'vue' import { ISession } from '@/types/chat' -import { renderIcon } from '@/utils/util' -import { - ArrowUp, - ArrowDown, - Logout, - Delete, - Clear, - Remind, - CloseRemind, - EditTwo, - IdCard -} from '@icon-park/vue-next' import { ServeTopTalkList, ServeDeleteTalkList, ServeSetNotDisturb } from '@/api/chat' import { useDialogueStore, useTalkStore } from '@/store' import { ServeSecedeGroup } from '@/api/group' @@ -52,45 +40,45 @@ export function useSessionMenu() { if (item.talk_type == 1) { options.push({ - icon: renderIcon(IdCard), + label: '好友信息', key: 'info' }) options.push({ - icon: renderIcon(EditTwo), + label: '修改备注', key: 'remark' }) } options.push({ - icon: renderIcon(item.is_top ? ArrowDown : ArrowUp), + label: item.is_top ? '取消置顶' : '会话置顶', key: 'top' }) options.push({ - icon: renderIcon(item.is_disturb ? Remind : CloseRemind), + label: item.is_disturb ? '关闭免打扰' : '开启免打扰', key: 'disturb' }) options.push({ - icon: renderIcon(Clear), + label: '移除会话', key: 'remove' }) if (item.talk_type == 1) { options.push({ - icon: renderIcon(Delete), + label: '删除好友', key: 'delete_contact' }) } else { options.push({ - icon: renderIcon(Logout), + label: '退出群聊', key: 'signout_group' }) diff --git a/src/store/modules/talk.ts b/src/store/modules/talk.ts index bdd7dfb..c2feae8 100644 --- a/src/store/modules/talk.ts +++ b/src/store/modules/talk.ts @@ -93,6 +93,7 @@ export const useTalkStore = defineStore('talk', { resp.then(({ code, data }) => { if (code == 200) { + this.items = data.items.map((item: any) => { const value = formatTalkItem(item) @@ -104,7 +105,6 @@ export const useTalkStore = defineStore('talk', { if (value.is_robot == 1) { value.is_online = 1 } - return value }) diff --git a/src/views/message/inner/IndexSider.vue b/src/views/message/inner/IndexSider.vue index 1fde2e7..8b59aa4 100644 --- a/src/views/message/inner/IndexSider.vue +++ b/src/views/message/inner/IndexSider.vue @@ -229,15 +229,22 @@ const state = reactive({ }) const items = computed((): ISession[] => { - if (searchKeyword.value.length === 0) { - return talkStore.talkItems + let filtered = talkStore.talkItems + + if (searchKeyword.value.length > 0) { + filtered = filtered.filter((item: ISession) => { + let keyword = item.remark || item.name + return keyword.toLowerCase().indexOf(searchKeyword.value.toLowerCase()) != -1 + }) } - return talkStore.talkItems.filter((item: ISession) => { - let keyword = item.remark || item.name + // 置顶和非置顶分组 + const topItems = filtered + .filter(item => item.is_top === 1) + .sort((a, b) => new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime()) + const normalItems = filtered.filter(item => item.is_top !== 1) - return keyword.toLowerCase().indexOf(searchKeyword.value.toLowerCase()) != -1 - }) + return [...topItems, ...normalItems] }) watch( () => talkStore, diff --git a/src/views/message/inner/TalkItem.vue b/src/views/message/inner/TalkItem.vue index fb11c5a..fca0330 100644 --- a/src/views/message/inner/TalkItem.vue +++ b/src/views/message/inner/TalkItem.vue @@ -19,7 +19,7 @@ const labelColor=[