From 579fed2e69806d5f0bb3cf7d4bc1781657f50a0b Mon Sep 17 00:00:00 2001 From: Phoenix <64720302+Concur-max@users.noreply.github.com> Date: Wed, 21 May 2025 13:18:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BB=84=E4=BB=B6=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=EF=BC=8C=E6=96=B0=E5=A2=9ENDropdown=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=9B=E8=B0=83=E6=95=B4ForwardRecord.vue=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E6=A8=A1=E6=80=81=E6=A1=86=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=96=87=E4=BB=B6=E7=82=B9=E5=87=BB=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=8C=E4=BF=AE=E5=A4=8DContactModal.vue?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E6=95=B0=E6=8D=AE=E6=8F=90=E4=BA=A4=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=9B=B4=E6=96=B0=E8=B7=AF=E7=94=B1=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=BB=A5=E6=94=AF=E6=8C=81=E6=96=B0=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 1 + src/assets/css/define/theme.less | 2 +- src/components/talk/ForwardRecord.vue | 93 +++++++++++++++-- src/components/talk/message/FileMessage.vue | 6 +- .../talk/message/ForwardMessage.vue | 2 +- .../message/system/SysGroupCreateMessage.vue | 1 + src/components/user/ContactModal.vue | 7 +- src/router/index.js | 5 + src/utils/auth.js | 2 +- .../message/inner/panel/MultiSelectFooter.vue | 10 +- src/views/office/index.vue | 99 +++++++++++++++++++ 11 files changed, 203 insertions(+), 25 deletions(-) create mode 100644 src/views/office/index.vue diff --git a/components.d.ts b/components.d.ts index 3e9678b..380ee57 100644 --- a/components.d.ts +++ b/components.d.ts @@ -52,6 +52,7 @@ declare module 'vue' { NAvatar: typeof import('naive-ui')['NAvatar'] NButton: typeof import('naive-ui')['NButton'] NCheckbox: typeof import('naive-ui')['NCheckbox'] + NDropdown: typeof import('naive-ui')['NDropdown'] NEmpty: typeof import('naive-ui')['NEmpty'] NIcon: typeof import('naive-ui')['NIcon'] NImage: typeof import('naive-ui')['NImage'] diff --git a/src/assets/css/define/theme.less b/src/assets/css/define/theme.less index cb12e6d..ac0e32e 100644 --- a/src/assets/css/define/theme.less +++ b/src/assets/css/define/theme.less @@ -21,7 +21,7 @@ html { // message --im-message-bg-color: #f7f7f7; --im-message-border-color: #efeff5; - --im-message-left-bg-color: #F4F4FC; + --im-message-left-bg-color: #fff; --im-message-left-text-color: #333; --im-message-right-bg-color: #46299D; --im-message-right-text-color: #fff; diff --git a/src/components/talk/ForwardRecord.vue b/src/components/talk/ForwardRecord.vue index d8c9f14..5deeab3 100644 --- a/src/components/talk/ForwardRecord.vue +++ b/src/components/talk/ForwardRecord.vue @@ -5,22 +5,21 @@ import { ServeGetForwardRecords } from '@/api/chat' import { MessageComponents } from '@/constant/message' import { ITalkRecord } from '@/types/chat' import { useInject } from '@/hooks' - -const emit = defineEmits(['close']) +import customModal from '@/components/common/customModal.vue' +import { voiceToText } from '@/api/chat.js' const props = defineProps({ msgId: { type: String, required: true } }) - +const isShow=defineModel('show') const { showUserInfoModal } = useInject() -const isShow = ref(true) const items = ref([]) const title = ref('会话记录') const onMaskClick = () => { - emit('close') + isShow.value=false } const onLoadData = () => { @@ -30,18 +29,92 @@ const onLoadData = () => { if (res.code == 200) { items.value = res.data.items || [] - title.value = `会话记录(${items.value.length})` + // title.value = `会话记录(${items.value.length})` } }) } +const dropdown=ref({ + show:false, + x:'', + y:'', + options:[] as any, + item:{} as ITalkRecord, +}) +const onConvertText =async (data: ITalkRecord) => { + data.is_convert_text = 1 + const res = await voiceToText({msgId:data.msg_id,voiceUrl:data.extra.url}) + if(res.code == 200){ + data.extra.content = res.data.convText + + } +} +const onloseConvertText=(data: ITalkRecord)=>{ + data.is_convert_text = 0 +} +const evnets = { + convertText: onConvertText, + closeConvertText:onloseConvertText +} + +const onContextMenuHandle=(key:string)=>{ + evnets[key] && evnets[key](dropdown.value.item) + closeDropdownMenu() +} +const closeDropdownMenu=()=>{ + dropdown.value.show=false +} onMounted(() => { onLoadData() }) +const onContextMenu = (e:any,item: ITalkRecord) => { + dropdown.value.show=true + + dropdown.value.x=e.clientX + dropdown.value.y=e.clientY + if(item.is_convert_text === 1){ + dropdown.value.options=[{ label: '关闭转文字', key: 'closeConvertText' }] + }else{ + dropdown.value.options=[{ label: '转文字', key: 'convertText' }] + } + + dropdown.value.item=item +} +