From b046388c864ee196c3a4cb0ff12db3485add1131 Mon Sep 17 00:00:00 2001 From: wangyifeng <812766448@qq.com> Date: Tue, 5 Aug 2025 15:45:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=99=BA=E8=83=BD=E5=8A=A9?= =?UTF-8?q?=E6=89=8B=E6=8E=A8=E9=80=81=E7=9A=84=E7=B3=BB=E7=BB=9F=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=B1=BB=E5=9E=8B=E5=AF=B9=E6=8E=A5=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=AF=B9=E5=BA=94=E7=B1=BB=E5=9E=8B=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E5=8D=A1=E7=89=87=E5=B1=95=E7=A4=BA=E5=92=8C?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E7=BB=86=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 1 + env/.env.dev | 6 +- package.json | 1 + src/components/deep-bubble/deep-bubble.vue | 17 ++- .../talk/message/system/sysPushMessage.vue | 133 ++++++++++++++++++ src/constant/message.ts | 29 +++- src/event/talk.js | 6 +- src/pages/chatSettings/index.vue | 4 +- src/pages/dialog/index.vue | 85 ++++++++--- src/static/image/chatBotMessageCard/copy.png | Bin 0 -> 3365 bytes .../image/chatBotMessageCard/errorClock.png | Bin 0 -> 3224 bytes .../chatBotMessageCard/noClockAfterWork.png | Bin 0 -> 3060 bytes .../chatBotMessageCard/noClockBeforeWork.png | Bin 0 -> 3216 bytes .../image/chatBotMessageCard/prompt.png | Bin 0 -> 3093 bytes 14 files changed, 251 insertions(+), 31 deletions(-) create mode 100644 src/components/talk/message/system/sysPushMessage.vue create mode 100644 src/static/image/chatBotMessageCard/copy.png create mode 100644 src/static/image/chatBotMessageCard/errorClock.png create mode 100644 src/static/image/chatBotMessageCard/noClockAfterWork.png create mode 100644 src/static/image/chatBotMessageCard/noClockBeforeWork.png create mode 100644 src/static/image/chatBotMessageCard/prompt.png diff --git a/components.d.ts b/components.d.ts index c5aef78..7e123e7 100644 --- a/components.d.ts +++ b/components.d.ts @@ -51,6 +51,7 @@ declare module 'vue' { SysGroupMemberRemovedMessage: typeof import('./src/components/talk/message/system/SysGroupMemberRemovedMessage.vue')['default'] SysGroupMutedMessage: typeof import('./src/components/talk/message/system/SysGroupMutedMessage.vue')['default'] SysGroupTransferMessage: typeof import('./src/components/talk/message/system/SysGroupTransferMessage.vue')['default'] + SysPushMessage: typeof import('./src/components/talk/message/system/sysPushMessage.vue')['default'] SysTextMessage: typeof import('./src/components/talk/message/system/SysTextMessage.vue')['default'] TabbarItem: typeof import('./src/components/x-tabbar/components/tabbar-item/index.vue')['default'] TextMessage: typeof import('./src/components/talk/message/TextMessage.vue')['default'] diff --git a/env/.env.dev b/env/.env.dev index 1de5297..ab6d813 100644 --- a/env/.env.dev +++ b/env/.env.dev @@ -5,8 +5,10 @@ VITE_SHOW_CONSOLE = true # 是否开启sourcemap VITE_SHOW_SOURCEMAP = true # baseUrl -VITE_BASEURL = 'http://172.16.100.93:8503' +# VITE_BASEURL = 'http://172.16.100.93:8503' +VITE_BASEURL = 'http://192.168.88.47:9503' #VITE_SOCKET_API -VITE_SOCKET_API = 'ws://172.16.100.93:8504' +# VITE_SOCKET_API = 'ws://172.16.100.93:8504' +VITE_SOCKET_API = 'ws://192.168.88.47:9504' # EPRAPI baseUrl VITE_EPR_BASEURL = 'http://114.218.158.24:9020' diff --git a/package.json b/package.json index 53e6624..83c1d2f 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "packageManager": "pnpm@8.14.1", "license": "MIT", "scripts": { + "dev:h5": "uni --mode dev --port 2468", "test:h5": "uni --mode test --port 2468", "prod:h5": "uni --mode prod", "build:h5:test": "uni build --mode test", diff --git a/src/components/deep-bubble/deep-bubble.vue b/src/components/deep-bubble/deep-bubble.vue index fc9572c..4d2685a 100644 --- a/src/components/deep-bubble/deep-bubble.vue +++ b/src/components/deep-bubble/deep-bubble.vue @@ -36,6 +36,7 @@
转文字
@@ -47,7 +48,7 @@
多选
@@ -63,6 +64,7 @@
撤回
@@ -110,14 +112,17 @@ const bubbleRef = ref(null) const props = defineProps({ isShowCopy: { + //是否显示复制 type: Boolean, default: true, }, isShowCite: { + //是否显示引用 type: Boolean, default: true, }, isShowWithdraw: { + //是否显示撤回 type: Boolean, default: true, }, @@ -126,6 +131,16 @@ const props = defineProps({ type: Boolean, default: false, }, + isShowMultipleChoose: { + //是否显示多选 + type: Boolean, + default: true, + }, + isChatRobot: { + //是否是智能助手 + type: Boolean, + default: false, + } }) const emits = defineEmits(['clickMenu']) diff --git a/src/components/talk/message/system/sysPushMessage.vue b/src/components/talk/message/system/sysPushMessage.vue new file mode 100644 index 0000000..dbf3320 --- /dev/null +++ b/src/components/talk/message/system/sysPushMessage.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/src/constant/message.ts b/src/constant/message.ts index cc50fce..784de46 100644 --- a/src/constant/message.ts +++ b/src/constant/message.ts @@ -29,6 +29,14 @@ export const ChatMsgSysGroupTransfer = 1113 // 变更群主 export const ChatMsgSysGroupAdmin = 1114 // 设置管理员 export const ChatMsgSysGroupMemberRemoved = 1115 // 移出群成员消息(部门群、公司群自动移出) export const ChatMsgSysGroupInfoChange = 1116 // 管理员更新了群信息 +export const ChatMsgSysPush_PromptReminder = 1117 // 系统推送消息-催办提醒 +export const ChatMsgSysPush_NoClockReminderBeforeWork = 1118 // 系统推送消息-上班未打卡 +export const ChatMsgSysPush_NoClockReminderAfterWork = 1119 // 系统推送消息-下班未打卡 +export const ChatMsgSysPush_ApprovalReminder = 1120 // 系统推送消息-待审批提醒 +export const ChatMsgSysPush_CopyReminder = 1121 // 系统推送消息-抄送提醒 +export const ChatMsgSysPush_AbsentReminder = 1122 // 系统推送消息-缺卡提醒 +export const ChatMsgSysPush_LateReminder = 1123 // 系统推送消息-迟到提醒 +export const ChatMsgSysPush_EarlyReminder = 1124 // 系统推送消息-早退提醒 export const ChatMsgTypeMapping = { [ChatMsgTypeText]: '[文本消息]', @@ -60,7 +68,15 @@ export const ChatMsgTypeMapping = { [ChatMsgSysGroupTransfer]: '[转让群主]', [ChatMsgSysGroupAdmin]: '[设置管理员]', [ChatMsgSysGroupMemberRemoved]: '[移出群成员消息]', - [ChatMsgSysGroupInfoChange]: '[群信息更新]' + [ChatMsgSysGroupInfoChange]: '[群信息更新]', + [ChatMsgSysPush_PromptReminder]: '[催办提醒]', + [ChatMsgSysPush_NoClockReminderBeforeWork]: '[未打卡提醒]', + [ChatMsgSysPush_NoClockReminderAfterWork]: '[未打卡提醒]', + [ChatMsgSysPush_ApprovalReminder]: '[审批提醒]', + [ChatMsgSysPush_CopyReminder]: '[抄送提醒]', + [ChatMsgSysPush_AbsentReminder]: '[异常卡提醒]', + [ChatMsgSysPush_LateReminder]: '[异常卡提醒]', + [ChatMsgSysPush_EarlyReminder]: '[异常卡提醒]' } // 消息类型 - 消息组件 映射关系 @@ -93,7 +109,16 @@ export const MessageComponents = { [ChatMsgSysGroupTransfer]: 'sys-group-transfer-message', [ChatMsgSysGroupAdmin]:'sys-group-admin-message', [ChatMsgSysGroupMemberRemoved]:'sys-group-member-removed-message', - [ChatMsgSysGroupInfoChange]:'sys-group-info-change-message' + [ChatMsgSysGroupInfoChange]:'sys-group-info-change-message', + // 智能助手推送的系统消息采用相同的模版 + [ChatMsgSysPush_PromptReminder]:'sys-push-message', + [ChatMsgSysPush_NoClockReminderBeforeWork]:'sys-push-message', + [ChatMsgSysPush_NoClockReminderAfterWork]:'sys-push-message', + [ChatMsgSysPush_ApprovalReminder]:'sys-push-message', + [ChatMsgSysPush_CopyReminder]:'sys-push-message', + [ChatMsgSysPush_AbsentReminder]:'sys-push-message', + [ChatMsgSysPush_LateReminder]:'sys-push-message', + [ChatMsgSysPush_EarlyReminder]:'sys-push-message' } // 可转发的消息类型 diff --git a/src/event/talk.js b/src/event/talk.js index 4cfc957..c699906 100644 --- a/src/event/talk.js +++ b/src/event/talk.js @@ -94,7 +94,11 @@ class Talk extends Base { */ getTalkText() { let text = '' - if (this.resource.msg_type != message.ChatMsgTypeText) { + if ( + this.resource.msg_type != message.ChatMsgTypeText && + //智能助手发送的系统消息,也直接显示内容 + this.resource.user_id !== 2 + ) { text = message.ChatMsgTypeMapping[this.resource.msg_type] } else { text = this.resource.extra.content.replace(//g, '') diff --git a/src/pages/chatSettings/index.vue b/src/pages/chatSettings/index.vue index 8ec0b4c..cc60e5a 100644 --- a/src/pages/chatSettings/index.vue +++ b/src/pages/chatSettings/index.vue @@ -58,7 +58,7 @@ :isManager="groupParams?.groupInfo?.is_manager">
- -
+
diff --git a/src/pages/dialog/index.vue b/src/pages/dialog/index.vue index 8b09807..d1b3afa 100644 --- a/src/pages/dialog/index.vue +++ b/src/pages/dialog/index.vue @@ -84,7 +84,14 @@ " > -
+ +
{{ item.nickname }} + + + + {{ '智能助手' || item?.extra?.title }} + {{ parseTime(item.created_at, '{m}/{d} {h}:{i}') }} @@ -197,6 +212,7 @@ :isShowCopy="isShowCopy(item)" :isShowWithdraw="isRevoke(talkParams.uid, item) || isLeader" :isShowConvertText="isShowConvertText(item)" + :isChatRobot="item.user_id === 2" >
{ //点击跳转到用户详情页面 const toUserDetailPage = (userItem) => { + //智能助手不可以查看详细信息 + if (userItem?.user_id === 2) { + return + } uni.navigateTo({ url: '/pages/dialog/dialogDetail/userDetail?erpUserId=' + userItem.erp_user_id, @@ -2073,15 +2100,17 @@ const queryRecordsByMsgInfo = async (msgInfo) => { }) .exec() const footBoxAreaQuery = uni.createSelectorQuery() - footBoxAreaQuery - .select('#footBoxArea') - .boundingClientRect((res) => { - if (res) { - // console.log('元素高度:', res.height) - offset = offset - res.height - } - }) - .exec() + const footBoxArea = footBoxAreaQuery.select('#footBoxArea') + if (footBoxArea) { + footBoxArea + .boundingClientRect((res) => { + if (res) { + // console.log('元素高度:', res.height) + offset = offset - res.height + } + }) + .exec() + } setTimeout(() => { zpagingRef.value.scrollIntoViewById( 'zp-id-' + msgInfo.msg_id, @@ -2192,6 +2221,10 @@ let avatarPressTimer = null let currentPressItem = null const handleAvatarTouchStart = (item) => { + //智能助手不可以长按@ + if (item?.user_id === 2) { + return + } currentPressItem = item avatarPressTimer = setTimeout(() => { if (!state.value.canUseQuillEditor) { @@ -2202,7 +2235,11 @@ const handleAvatarTouchStart = (item) => { }, 500) } -const handleAvatarTouchEnd = () => { +const handleAvatarTouchEnd = (item) => { + //智能助手不可以长按@ + if (item?.user_id === 2) { + return + } if (avatarPressTimer) { clearTimeout(avatarPressTimer) avatarPressTimer = null @@ -2788,16 +2825,18 @@ const convertText = (msgItem) => { msgId: msgItem.msg_id, }) // console.log(resp, 'resp') - resp.then(({ code, data }) => { - msgItem.isVoiceToTexting = false - // console.log(code, data, 'data') - if (code === 200) { - console.log(data.convText, 'convText') - msgItem.voiceContent = data.convText - } - }).catch(() => { - msgItem.isVoiceToTexting = false - }) + resp + .then(({ code, data }) => { + msgItem.isVoiceToTexting = false + // console.log(code, data, 'data') + if (code === 200) { + console.log(data.convText, 'convText') + msgItem.voiceContent = data.convText + } + }) + .catch(() => { + msgItem.isVoiceToTexting = false + }) } //语音输入框高度 const chatInputHeight = computed(() => { diff --git a/src/static/image/chatBotMessageCard/copy.png b/src/static/image/chatBotMessageCard/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..b1bfe692059aac310518da3a8a3cf8a2ed1d13fa GIT binary patch literal 3365 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 literal 0 HcmV?d00001 diff --git a/src/static/image/chatBotMessageCard/noClockBeforeWork.png b/src/static/image/chatBotMessageCard/noClockBeforeWork.png new file mode 100644 index 0000000000000000000000000000000000000000..a48e9c284dbad8aae31ce3e1832e95279a3ab214 GIT binary patch literal 3216 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 O5w_M2R*bVi;=cev&2cUO literal 0 HcmV?d00001 diff --git a/src/static/image/chatBotMessageCard/prompt.png b/src/static/image/chatBotMessageCard/prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..d223c127a6c8288797c3985e3993391e20cc15ad GIT binary patch literal 3093 zcmai$dpJ~EAIC{@4&g*72B%Yu%Ut%*Z7S)aoJ#b%)g&=G#@&Q*8RLFADy5stgrP`^ zA_+Ni853bPLPlc@h1n)%ka0Qg@9wwTWj`mVLVYdveN{r&Af_VshtmWuM4 z@={V#il=_Hu$7XMhTx|3gADBWT(nSuJLw=>%VSa{9f+?|QX3HGtn5#~=B^kXI_!&a zz{oBt4;?vTL>t6Vhf(2QFcCs@ga8{QG>MxAV!mQy#X#&d?z>LnVnncsi<^QUP2wg^ z;=h^1&%lmJ!i-6R)zGia z(7)BtA6B-ZKWIp18gGS_bBXWn)RhUjA*a`Sx6wqZ92-9s8 z*kcsbV;tCJ9N1$F4}v}#Q($_HDI8-;pK&n9I2hJXC`vDi!a)W1q2O@{3>OvBj|%0X z!Uj-bd~^sG9oml$<)K3d&|xrqbl4!8%12XS9YRw-qr+joV5mbF>Ss(i%oj}fFop&* zf}xFKB1SL~0!$Wtqgn-B~APPnZ zM1KXM$ARbxAO=PR#KMSiF%xi&aIr9A99*wBm?<1wvUr$pxP%#8f&`Z^`@LlGFn^Wr z-?f{C3ul@jF-@G6Tlkd;e;>LOTWdQhr7bFI=)GnqtbGC=Jb7AFS;ym#jx8)KF0Zbx zt*vQD>abE$KSrFgIBFl(FXk^gAq3J50kr;_d4Dku_a+s6=eX*#j}Kid9h_oM?XK9m z`^ATZ-OdgACo>hjGPm}iES%2VIoq^{_ptE~Ui(UX8bc3p(3A!)cg#iAo4>j*I@~!% z9Sa-db7^j)b?+5UzFbMvUjQ1A#-w2|KUx*DE@is1go-=fhPYJ2!@4U%HJc z&RS?hJ#o=GI$4vOM6kF$D%0*8F=h%V2!~EKEH@*GA$+f$(~+_yUb)9=1=w~P+EZK6 ztQLg(6Et5zfgJ7jR3mpvp}0T&)=v~&F#R~5&~MvKJc49B^c`6DqN6pjem(;stmBF2 z04zNFUUAOr#LoW@e+tuhKg)^ zK|{78l9lJXA_Wz#*|levWeZRVzjI@%i_*LywPJCJCSaLc-4{cMWz5&RI)2`YA~rm4 zkaf@`$v&}E(gG~~_B(Bck^$qZ6T_}spy{c~D*SCH(9>o+VEIMAmp>voTf8U=A+T3U zY=nH;?icR$hs%B_my@|@^8%}Knt)XaC*1hn*8=*$ze9$=ZX{Yy*JmCUmvz;f__dR_L<>&a-^_@qT1jr~C2) z12ji72I{|65$Ta%-+Dri6ArdVg6~Q8rn_b^dKo+yi4IH(gSwHl_;D2GM10)pFU^uR&G_TNBh-c>0;SQe!fD zIBPX9s`O4dK-coK2ZB7fUGr;mH>s50xg#5~b4~`PYagRzg7y!^aCvM)X7coV_6?+X z-+n{4QpNJlD)j8DJQljNX=c*_Fh_sMF{tmruzw*sq?FtxTVB{MPr`KGq8#+=s;z5^ z2a*ce%}UH6fu3ROSqL^&JjpA!b{*sFpQ-CC$oY$5C^pY3c~yPn9key-@yc)s0wm^iU7o`C;N9o?36cs8!md#- zlbkp3u7gvTUmrB@IlysMT5y+ympXFDj_A!Dj&%_@)`rVun)4<}vp=mRd~eOt6mZ76 zV=7~-PQ|4V7d&9@n7|!Le++1`1qCwwot4<}-5N5Jt=j=w_H*5ME3e-ByHqo;En?|e z2FUBxf!ii|;T}bHpB8oy=V_;D`BfE+Gwa=Mb!6!v)z;-lM}iW^boZ_UyGU*uA^m#` zAFF&0PT4=G+CBI?-WE(FpI-@GwhzsaE>}La!jB)Tiq0_7^CoR1t*5jv`Z_=+_pXbR zPc|13ysDiW zviMQGA1^@_j_M?@xrXP*7(nrz`7NN)>mN)tIsnVZ|DZbv32-CQ(}ZSp2TyfU2Xp)i zr@W+_n0`4|inN1?D%aI;b$o<}C&AuT$T=@HR6tCBP(!;rl1JBC{-!|J>fp!slxmyn zKOE`1z%{Hse`{Jch@}Xh=0}CMo`R25GNt*A-SF6?x>G*Bhy1iJ(z!JbGayU zozb!<;6B3#V3&NIW8ecoJl(x-<@_@p)q-r-LUe6d50Y42*koYNh$lqdzjW@|2j)Sb z_yYuTAjEr&8tedhleW zJA9+-zrcrkf=k5CnRo?smF*qeg@?)IWVpG>MZK^oBY=(T!jLU9% zqRU|y#mt$enp{OvK!q&0=xq$zHcPDTqKtCue0(P;KK0ZaZV& zps5~V%Y|_SO1w0Es6+XkYx*T}2U#!x?^_V+%5)JVCS3t&0mL~E-Mj1idNt#@SveB1 z6vNzYj_R6jmtk{oa>5x$uN?@;o&MrONi5@R0|z;hl)knzW+AzaJj_442B zo@hfYlOr}6{j)jPYym6gO#9GwMQ8c7H z3?$X%7i4P3;%6Df?GZ|lP&aep(0&#|Xj1XO6rN1$2djumkyS)eVY_vf9YC*s_{$T^ zmI=DZKA(byD4U__^OBRJc7QREJ)s2xaasJY$rF`13+Tv4wbh`bhD) z_i9;XV1`d#Z)#S-pFq+Ri{3!-qQz!N*qb}Jv}b