From 6b084b2df262628d3542173ed92a390e6ceac992 Mon Sep 17 00:00:00 2001 From: chashaobao Date: Tue, 2 Dec 2025 21:44:07 +0800 Subject: [PATCH] feat --- .../product-dialog/contact/index.tsx | 16 ++++----- src/pages/job-detail/index.tsx | 36 ++++++++++++++----- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/components/product-dialog/contact/index.tsx b/src/components/product-dialog/contact/index.tsx index f4a2453..f2a7d36 100644 --- a/src/components/product-dialog/contact/index.tsx +++ b/src/components/product-dialog/contact/index.tsx @@ -7,18 +7,19 @@ import { DialogStatus, PREFIX } from '@/components/product-dialog/const'; import ContactCustomerService from '@/components/product-dialog/steps-ui/job-contact-customer'; import ContactDirect from '@/components/product-dialog/steps-ui/job-contact-direct'; import UnableUnlockContent from '@/components/product-dialog/steps-ui/job-unable'; +import { EventName } from '@/constants/app'; import { DeclarationType, ProductType } from '@/constants/product'; import { JobDetails } from '@/types/job'; -import { ProductInfo } from '@/types/product'; +import { GetProductIsUnlockResponse, ProductInfo } from '@/types/product'; import { logWithPrefix } from '@/utils/common'; import { requestProductUseRecord, requestUseProduct } from '@/utils/product'; import Toast from '@/utils/toast'; import '../index.less'; -import { EventName } from '@/constants/app'; interface IProps { data: JobDetails; + productRecord?: GetProductIsUnlockResponse; productInfo?: ProductInfo; onClose: () => void; } @@ -27,7 +28,7 @@ const PRODUCT_CODE = ProductType.VIP; const log = logWithPrefix('product-contact-dialog'); function ProductContactDialog(props: Omit) { - const { data, productInfo: productInfoProps, onClose } = props; + const { data, productInfo: productInfoProps, productRecord, onClose } = props; const [status, setStatus] = useState(DialogStatus.LOADING); const [publisherAcctNo, setPublisherAcctNo] = useState(''); const initRef = useRef(() => {}); @@ -56,10 +57,9 @@ function ProductContactDialog(props: Omit) { // setStatus(DialogStatus.JOB_CONTACT_CS); // return; // } - const result = await requestProductUseRecord(PRODUCT_CODE, { jobId: data.id }); - log('requestProductUseRecord result', result); - if (result) { - handleContact(result.declarationTypeResult); + log('requestProductUseRecord result', productRecord); + if (productRecord) { + handleContact(productRecord.declarationTypeResult); return; } if (!productInfoProps?.balance) { @@ -76,7 +76,7 @@ function ProductContactDialog(props: Omit) { Taro.hideLoading(); } }; - }, [data, handleCloseDialog]); + }, [data, handleCloseDialog, productRecord, productInfoProps?.balance]); useEffect(() => { initRef.current(); diff --git a/src/pages/job-detail/index.tsx b/src/pages/job-detail/index.tsx index 0f22a4f..d26fe33 100644 --- a/src/pages/job-detail/index.tsx +++ b/src/pages/job-detail/index.tsx @@ -28,7 +28,7 @@ import { RESPONSE_ERROR_CODE } from '@/http/constant'; import { HttpError } from '@/http/error'; import { JobDetails } from '@/types/job'; import { IMaterialMessage } from '@/types/message'; -import { ProductInfo } from '@/types/product'; +import { GetProductIsUnlockResponse, ProductInfo } from '@/types/product'; import { switchRoleType } from '@/utils/app'; import { copy, logWithPrefix } from '@/utils/common'; import { reportEvent } from '@/utils/event'; @@ -37,7 +37,7 @@ import { calcDistance, isValidLocation } from '@/utils/location'; import { requestProfileDetail } from '@/utils/material'; import { isChatWithSelf, postCreateChat } from '@/utils/message'; import { getInviteCodeFromQueryAndUpdate } from '@/utils/partner'; -import { requestProductBalance } from '@/utils/product'; +import { requestProductBalance, requestProductUseRecord } from '@/utils/product'; import { getJumpUrl, getPageQuery, navigateTo } from '@/utils/route'; import { getCommonShareMessage } from '@/utils/share'; import { formatDate } from '@/utils/time'; @@ -74,11 +74,17 @@ const AnchorFooter = (props: { data: JobDetails }) => { const [showMaterialGuide, setShowMaterialGuide] = useState(false); const [showBuyDialog, setShowBuyDialog] = useState(false); const [productInfo, setProductInfo] = useState(); + const [productRecord, setProductRecord] = useState(); + + const getProductRecord = useCallback(async () => { + const result = await requestProductUseRecord(ProductType.VIP, { jobId: data.id }); + setProductRecord(result); + }, [data.id]); const getProductBalance = useCallback(async () => { const [, resp] = await requestProductBalance(ProductType.VIP); setProductInfo(resp); - }, [data.id]); + }, []); const handleClickContact = useCallback(async () => { log('handleClickContact'); @@ -155,9 +161,9 @@ const AnchorFooter = (props: { data: JobDetails }) => { [getProductBalance] ); - const handleAfterBuy = useCallback(() => { + const handleAfterBuy = useCallback(async () => { setShowBuyDialog(false); - getProductBalance(); + await getProductBalance(); setContactDialogVisible(true); }, [getProductBalance]); @@ -184,12 +190,21 @@ const AnchorFooter = (props: { data: JobDetails }) => { useEffect(() => { Taro.eventCenter.on(EventName.CREATE_PROFILE, getProductBalance); Taro.eventCenter.on(EventName.READ_CONTACT, getProductBalance); - }, []); + + return () => { + Taro.eventCenter.off(EventName.CREATE_PROFILE); + Taro.eventCenter.off(EventName.READ_CONTACT); + }; + }, [getProductBalance]); useEffect(() => { getProductBalance(); }, [getProductBalance]); + useEffect(() => { + getProductRecord(); + }, [getProductRecord]); + return ( <>
@@ -198,7 +213,7 @@ const AnchorFooter = (props: { data: JobDetails }) => { {data.isAuthed ? '在线沟通' : '查看联系方式'} - {data.isAuthed || productInfo?.content ? ( + {!productRecord && (data.isAuthed || productInfo?.content) ? (
{data.isAuthed ? '急招岗位可免费查看' : productInfo?.content}
@@ -207,7 +222,12 @@ const AnchorFooter = (props: { data: JobDetails }) => {
{contactDialogVisible && ( - + )} {showMaterialGuide && ( setShowMaterialGuide(false)} onConfirm={handleConfirmPrejob} />