From c08b0bef955f3076b347dd5498cc424c3d8ec5e4 Mon Sep 17 00:00:00 2001 From: chashaobao Date: Sun, 15 Jun 2025 00:14:48 +0800 Subject: [PATCH] feat: support click avatar jump to resume page --- src/components/message-chat/base/index.tsx | 18 ++++++++++------- src/pages/message-chat/index.tsx | 23 +++++++++++++++++++++- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/components/message-chat/base/index.tsx b/src/components/message-chat/base/index.tsx index 744638e..515877b 100644 --- a/src/components/message-chat/base/index.tsx +++ b/src/components/message-chat/base/index.tsx @@ -2,13 +2,13 @@ import { Image } from '@tarojs/components'; import classNames from 'classnames'; import { PropsWithChildren, useEffect, useState, useCallback } from 'react'; -import { MaterialViewSource } from '@/constants/material'; +import { PageUrl } from '@/constants/app'; +import { MaterialViewSource } from '@/constants/material'; import useUserInfo from '@/hooks/use-user-info'; import { IChatMessage } from '@/types/message'; import { getScrollItemId } from '@/utils/common'; import { navigateTo } from '@/utils/route'; -import { PageUrl } from '@/constants/app'; import './index.less'; @@ -19,12 +19,13 @@ export interface IBaseMessageProps { export interface IUserMessageProps extends PropsWithChildren, IBaseMessageProps { isRead?: boolean; + resumeId?: string; } const PREFIX = 'base-message'; function BaseMessage(props: IUserMessageProps) { - const { id, message, isRead: isReadProps, children } = props; + const { id, message, isRead: isReadProps, children, resumeId } = props; const { userId } = useUserInfo(); const [isRead, setIsRead] = useState(message.isRead); const isSender = message.senderUserId === userId; @@ -37,10 +38,12 @@ function BaseMessage(props: IUserMessageProps) { // const timer = setTimeout(() => setIsRead(true), 1200); // return () => clearTimeout(timer); // }, [isSender]); - const handleClick = useCallback( - () => navigateTo(PageUrl.MaterialView, { resumeId: message.jobId, source: MaterialViewSource.Chat }), - [message.jobId] - ); + const handleClick = useCallback(() => { + if (!resumeId || isSender) { + return; + } + navigateTo(PageUrl.MaterialView, { resumeId: resumeId, source: MaterialViewSource.Chat }); + }, [resumeId, isSender]); useEffect(() => { if (isRead) { return; @@ -53,6 +56,7 @@ function BaseMessage(props: IUserMessageProps) {
diff --git a/src/pages/message-chat/index.tsx b/src/pages/message-chat/index.tsx index d230127..44fc09e 100644 --- a/src/pages/message-chat/index.tsx +++ b/src/pages/message-chat/index.tsx @@ -31,7 +31,7 @@ import { PostMessageRequest, } from '@/types/message'; import { isAnchorMode } from '@/utils/app'; -import { getScrollItemId, last, logWithPrefix } from '@/utils/common'; +import { getScrollItemId, last, logWithPrefix, safeJsonParse } from '@/utils/common'; import { collectEvent } from '@/utils/event'; import { isExchangeMessage, @@ -85,6 +85,15 @@ const getHeaderLeftButtonText = (job?: IJobMessage, material?: IMaterialMessage) return isAnchorMode() ? '不感兴趣' : '标记为不合适'; }; +const getResumeId = (messages: IChatMessage[]) => { + const resumeStr = messages.find(it => it.type === MessageType.Material)?.actionObject; + if (resumeStr) { + const resumeObj = safeJsonParse(resumeStr); + return resumeObj.id; + } + return undefined; +}; + export default function MessageChat() { const listHeight = useListHeight(CALC_LIST_PROPS); const [input, setInput] = useState(''); @@ -96,6 +105,7 @@ export default function MessageChat() { const [messageStatusList, setMessageStatusList] = useState([]); const [jobId, setJobId] = useState(); const [job, setJob] = useState(); + const [resumeId, setResumeId] = useState(); const [material, setMaterial] = useState(); const [scrollItemId, setScrollItemId] = useState(); const scrollToLowerRef = useRef(false); @@ -252,6 +262,16 @@ export default function MessageChat() { // }; // }, []); + useEffect(() => { + if (resumeId) { + return; + } + + setResumeId(getResumeId(messages)); + }, [messages, resumeId]); + + console.log('resumeId', resumeId) + useEffect(() => { if (!chat) { return; @@ -353,6 +373,7 @@ export default function MessageChat() { id={message.msgId} key={message.msgId} message={message} + resumeId={resumeId} isRead={messageStatusList.some(m => m.msgId === message.msgId && !!m.isRead)} /> );