From 4ed1d4587314752bfae86d51c4f76d81a7d54d80 Mon Sep 17 00:00:00 2001 From: chashaobao Date: Sat, 6 Dec 2025 21:19:25 +0800 Subject: [PATCH] feat: --- src/components/prejob-popup/index.tsx | 24 ++++++++++++++++--- .../product-dialog/contact/index.tsx | 3 ++- src/constants/cache-key.ts | 1 + src/constants/job.ts | 1 + src/pages/job-detail/index.tsx | 9 ++++++- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/components/prejob-popup/index.tsx b/src/components/prejob-popup/index.tsx index 6744e99..6872ad5 100644 --- a/src/components/prejob-popup/index.tsx +++ b/src/components/prejob-popup/index.tsx @@ -1,14 +1,15 @@ import { Button, Image } from '@tarojs/components'; +import Taro from '@tarojs/taro'; -import { Popup, Dialog } from '@taroify/core'; +import { Dialog, Popup } from '@taroify/core'; import { Fragment, useCallback, useState } from 'react'; import JobBuy from '@/components/product-dialog/steps-ui/job-buy'; import SafeBottomPadding from '@/components/safe-bottom-padding'; import { PageUrl } from '@/constants/app'; +import { CacheKey } from '@/constants/cache-key'; import { GET_CONTACT_TYPE } from '@/constants/job'; -import { navigateTo } from '@/utils/route'; - +import { switchTab, navigateTo } from '@/utils/route'; import './index.less'; interface IProps { @@ -33,11 +34,19 @@ const GET_CONTACT_TYPE_OPTIONS = [ desc: '开通会员每天免费查看', btnText: '开通', }, + { + type: GET_CONTACT_TYPE.GROUP, + icon: 'https://publiccdn.neighbourhood.com.cn/img/group-avatar.png', + title: '进群领会员(免费报单)', + desc: '群内定期发放会员,免费报单', + btnText: '进群', + }, ]; export function PrejobPopup({ onCancel, onConfirm }: IProps) { const [openPopup, setOpenPopup] = useState(true); const [openDialog, setOpenDialog] = useState(false); + const [clicked, setClicked] = useState(!!Taro.getStorageSync(CacheKey.JOIN_GROUP_POPUP_CLICKED)); const handleClick = (type: GET_CONTACT_TYPE) => () => { if (type === GET_CONTACT_TYPE.MATERIAL) { navigateTo(PageUrl.MaterialUploadVideo); @@ -47,6 +56,12 @@ export function PrejobPopup({ onCancel, onConfirm }: IProps) { setOpenPopup(false); setOpenDialog(true); } + if (type === GET_CONTACT_TYPE.GROUP) { + Taro.setStorageSync(CacheKey.JOIN_GROUP_POPUP_CLICKED, true); + setClicked(true); + switchTab(PageUrl.GroupV2); + onConfirm(type); + } }; const handleAfterBuy = useCallback(async () => { onConfirm(GET_CONTACT_TYPE.VIP); @@ -58,6 +73,9 @@ export function PrejobPopup({ onCancel, onConfirm }: IProps) {
以下方式任选其一均可获取联系方式
{GET_CONTACT_TYPE_OPTIONS.map(option => { + if (clicked && option.type === GET_CONTACT_TYPE.GROUP) { + return; + } return (
diff --git a/src/components/product-dialog/contact/index.tsx b/src/components/product-dialog/contact/index.tsx index f2a7d36..13ee976 100644 --- a/src/components/product-dialog/contact/index.tsx +++ b/src/components/product-dialog/contact/index.tsx @@ -12,7 +12,7 @@ import { DeclarationType, ProductType } from '@/constants/product'; import { JobDetails } from '@/types/job'; import { GetProductIsUnlockResponse, ProductInfo } from '@/types/product'; import { logWithPrefix } from '@/utils/common'; -import { requestProductUseRecord, requestUseProduct } from '@/utils/product'; +import { requestUseProduct } from '@/utils/product'; import Toast from '@/utils/toast'; import '../index.less'; @@ -67,6 +67,7 @@ function ProductContactDialog(props: Omit) { return; } const productInfo = await requestUseProduct(PRODUCT_CODE, { jobId: data.id }); + console.log('开始报单'); Taro.eventCenter.trigger(EventName.READ_CONTACT); handleContact(productInfo.declarationTypeResult); } catch (e) { diff --git a/src/constants/cache-key.ts b/src/constants/cache-key.ts index f45331f..d1c0495 100644 --- a/src/constants/cache-key.ts +++ b/src/constants/cache-key.ts @@ -13,4 +13,5 @@ export enum CacheKey { AGREEMENT_SIGNED = '__agreement_signed__', CITY_CODES = '__city_codes__', JOIN_GROUP_CARD_CLICKED = '__join_group_card_clicked__', + JOIN_GROUP_POPUP_CLICKED = '__join_group_popup_clicked__', } diff --git a/src/constants/job.ts b/src/constants/job.ts index 5d2e6c5..efb7f01 100644 --- a/src/constants/job.ts +++ b/src/constants/job.ts @@ -213,4 +213,5 @@ export const FULL_PRICE_OPTIONS = FULL_EMPLOY_SALARY_OPTIONS.filter(o => !!o.val export enum GET_CONTACT_TYPE { VIP = 'vip', MATERIAL = 'material', + GROUP = 'group', } diff --git a/src/pages/job-detail/index.tsx b/src/pages/job-detail/index.tsx index d26fe33..3444c51 100644 --- a/src/pages/job-detail/index.tsx +++ b/src/pages/job-detail/index.tsx @@ -42,6 +42,7 @@ import { getJumpUrl, getPageQuery, navigateTo } from '@/utils/route'; import { getCommonShareMessage } from '@/utils/share'; import { formatDate } from '@/utils/time'; import Toast from '@/utils/toast'; +import { isNeedPhone } from '@/utils/user'; import './index.less'; const PREFIX = 'job-detail'; @@ -75,7 +76,8 @@ const AnchorFooter = (props: { data: JobDetails }) => { const [showBuyDialog, setShowBuyDialog] = useState(false); const [productInfo, setProductInfo] = useState(); const [productRecord, setProductRecord] = useState(); - + const userInfo = useUserInfo(); + const needPhone = isNeedPhone(userInfo); const getProductRecord = useCallback(async () => { const result = await requestProductUseRecord(ProductType.VIP, { jobId: data.id }); setProductRecord(result); @@ -163,8 +165,11 @@ const AnchorFooter = (props: { data: JobDetails }) => { const handleAfterBuy = useCallback(async () => { setShowBuyDialog(false); + Taro.showLoading({ mask: true, title: '加载中...' }); await getProductBalance(); + console.log('购买后重新获取次数'); setContactDialogVisible(true); + Taro.hideLoading(); }, [getProductBalance]); const handleCancel = useCallback(() => { @@ -217,6 +222,8 @@ const AnchorFooter = (props: { data: JobDetails }) => {
{data.isAuthed ? '急招岗位可免费查看' : productInfo?.content}
+ ) : needPhone ? ( +
登录后可免费报单
) : null}