From 8659049ae9eb388c8e736dbb8f12fceff59a02ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=98=E9=A3=8E?= Date: Mon, 1 Dec 2025 12:23:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BAMessageRecord=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=BB=A5=E6=94=AF=E6=8C=81RedPacketMessage=E5=92=8CTr?= =?UTF-8?q?ansferMessage=E7=9A=84=E9=A2=9D=E5=A4=96=E9=81=93=E5=85=B7?= =?UTF-8?q?=EF=BC=8C=E4=BB=8E=E8=80=8C=E6=9B=B4=E5=A5=BD=E5=9C=B0=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8D=95=E5=87=BB=E4=BA=8B=E4=BB=B6=E5=92=8C=E5=A5=97?= =?UTF-8?q?=E6=8E=A5=E5=AD=97=E8=AF=B7=E6=B1=82=E3=80=82=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=A6=81=E7=94=A8=E7=9A=84=E8=BD=AC=E6=8E=A5=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E6=A0=B7=E5=BC=8F=E4=BB=A5=E6=94=B9=E5=96=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BD=93=E9=AA=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/RedPacketMessage/index.tsx | 44 ++++++++- .../TransferMessage.module.scss | 10 ++ .../components/TransferMessage/index.tsx | 92 +++++++++++++++++-- .../components/MessageRecord/index.tsx | 13 ++- 4 files changed, 148 insertions(+), 11 deletions(-) diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/RedPacketMessage/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/RedPacketMessage/index.tsx index 75bf86ff..1d462caf 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/RedPacketMessage/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/RedPacketMessage/index.tsx @@ -1,4 +1,6 @@ import React from "react"; +import { useWebSocketStore } from "@/store/module/websocket/websocket"; +import { ChatRecord, ContractData, weChatGroup } from "@/pages/pc/ckbox/data"; import styles from "./RedPacketMessage.module.scss"; interface RedPacketData { @@ -10,9 +12,15 @@ interface RedPacketData { interface RedPacketMessageProps { content: string; + msg?: ChatRecord; + contract?: ContractData | weChatGroup; } -const RedPacketMessage: React.FC = ({ content }) => { +const RedPacketMessage: React.FC = ({ + content, + msg, + contract, +}) => { const renderErrorMessage = (fallbackText: string) => (
{fallbackText}
); @@ -39,10 +47,42 @@ const RedPacketMessage: React.FC = ({ content }) => { const title = jsonData.sendertitle || "恭喜发财,大吉大利"; const paymsgid = jsonData.paymsgid || ""; + const nativeurl = jsonData.nativeurl || ""; + + // 处理红包点击事件,发送 socket 请求 + const handleRedPacketClick = () => { + if (!contract || !paymsgid || !nativeurl) { + console.warn("红包点击失败:缺少必要参数", { + contract, + paymsgid, + nativeurl, + }); + return; + } + + const isGroup = !!contract.chatroomId; + const wechatFriendId = isGroup ? 0 : contract.id; + + // 发送 socket 请求 + useWebSocketStore.getState().sendCommand("CmdOpenLuckyMoney", { + wechatAccountId: contract.wechatAccountId, + wechatFriendId: wechatFriendId, + paymsgid: paymsgid, + nativeurl: nativeurl, + }); + + console.log("发送红包打开请求:", { + cmdType: "CmdOpenLuckyMoney", + wechatAccountId: contract.wechatAccountId, + wechatFriendId: wechatFriendId, + paymsgid: paymsgid, + nativeurl: nativeurl, + }); + }; return (
-
+
🧧
{title}
diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/TransferMessage.module.scss b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/TransferMessage.module.scss index 731e418c..006691c6 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/TransferMessage.module.scss +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/TransferMessage.module.scss @@ -25,6 +25,16 @@ &:active { transform: translateY(0); } + + &.transferDisabled { + opacity: 0.5; + cursor: not-allowed; + + &:hover { + transform: none; + box-shadow: 0 2px 8px rgba(255, 149, 0, 0.2); + } + } } .transferHeader { diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/index.tsx index be9f9312..7c6f2f68 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/TransferMessage/index.tsx @@ -1,5 +1,7 @@ import React from "react"; import { SwapOutlined } from "@ant-design/icons"; +import { useWebSocketStore } from "@/store/module/websocket/websocket"; +import { ChatRecord, ContractData, weChatGroup } from "@/pages/pc/ckbox/data"; import styles from "./TransferMessage.module.scss"; interface TransferData { @@ -15,9 +17,16 @@ interface TransferData { interface TransferMessageProps { content: string; + msg?: ChatRecord; + contract?: ContractData | weChatGroup; } -const TransferMessage: React.FC = ({ content }) => { +const TransferMessage: React.FC = ({ + content, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + msg, // 保留参数以保持与 RedPacketMessage 组件的一致性,未来可能会用到 + contract, +}) => { const renderErrorMessage = (fallbackText: string) => (
{fallbackText}
); @@ -40,14 +49,85 @@ const TransferMessage: React.FC = ({ content }) => { } const amount = jsonData.feedesc || "¥0.00"; - const memo = jsonData.payMemo || ""; - // 根据转账状态显示不同的提示文字 - // 可以根据实际业务逻辑判断状态,这里默认显示"待朋友确认收钱" - const statusText = "待朋友确认收钱"; + + // 判断转账状态 + const getTransferStatus = ( + data: TransferData, + ): { text: string; canClick: boolean } => { + const paySubType = data.paysubtype || ""; + + switch (paySubType) { + case "1": + return { text: "待朋友确认收钱", canClick: true }; + case "2": + return { text: "已过期", canClick: false }; + case "3": + return { text: "已领取", canClick: false }; + case "4": + return { text: "已退回", canClick: false }; + default: + // 默认情况:可能是待领取 + return { text: "待朋友确认收钱", canClick: true }; + } + }; + + const { text: statusText, canClick } = getTransferStatus(jsonData); + + // 处理转账点击事件,发送 socket 请求 + const handleTransferClick = () => { + // 如果状态不允许点击,直接返回 + if (!canClick) { + console.log("转账状态不允许点击:", statusText); + return; + } + + if ( + !contract || + !jsonData.transferid || + !jsonData.transcationid || + !jsonData.invalidtime || + !jsonData.paysubtype + ) { + console.warn("转账点击失败:缺少必要参数", { + contract, + transferid: jsonData.transferid, + transcationid: jsonData.transcationid, + invalidtime: jsonData.invalidtime, + paysubtype: jsonData.paysubtype, + }); + return; + } + + const isGroup = !!contract.chatroomId; + const wechatFriendId = isGroup ? 0 : contract.id; + + // 发送 socket 请求 + useWebSocketStore.getState().sendCommand("CmdReceiveTransMoney", { + wechatAccountId: contract.wechatAccountId, + wechatFriendId: wechatFriendId, + transcationid: jsonData.transcationid, + transferid: jsonData.transferid, + invalidtime: jsonData.invalidtime, + paysubtype: jsonData.paysubtype, + }); + + console.log("发送转账接收请求:", { + cmdType: "CmdReceiveTransMoney", + wechatAccountId: contract.wechatAccountId, + wechatFriendId: wechatFriendId, + transcationid: jsonData.transcationid, + transferid: jsonData.transferid, + invalidtime: jsonData.invalidtime, + paysubtype: jsonData.paysubtype, + }); + }; return (
-
+
diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx index ad11cec5..44b01c97 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx @@ -256,7 +256,6 @@ const MessageRecord: React.FC = ({ contract }) => { msg?: ChatRecord, contract?: ContractData | weChatGroup, ) => { - console.log("红包"); if (isLegacyEmojiContent(trimmedContent)) { return renderEmojiContent(rawContent); } @@ -272,7 +271,13 @@ const MessageRecord: React.FC = ({ contract }) => { "wxpay://c2cbizmessagehandler/hongbao/receivehongbao", ) ) { - return ; + return ( + + ); } // 判断是否为转账消息 @@ -280,7 +285,9 @@ const MessageRecord: React.FC = ({ contract }) => { jsonData.title === "微信转账" || (jsonData.transferid && jsonData.feedesc) ) { - return ; + return ( + + ); } if (jsonData.type === "file" && msg && contract) {