import { Button } from '@tarojs/components'; import Taro from '@tarojs/taro'; import { Cell, Dialog } from '@taroify/core'; import { Fragment, useCallback, useEffect, useMemo, useState } from 'react'; import PageLoading from '@/components/page-loading'; import { PublishJobQrCodeDialog } from '@/components/product-dialog/publish-job'; import CompanyPublishJobBuy from '@/components/product-dialog/steps-ui/company-publish-job-buy'; import SafeBottomPadding from '@/components/safe-bottom-padding'; import { ISelectOption, PopupSelect } from '@/components/select'; import { PageUrl } from '@/constants/app'; import { JobManageStatus } from '@/constants/job'; import { OrderStatus, OrderType, ProductType } from '@/constants/product'; import useCityOperators from '@/hooks/use-city-operators'; import { usePublishJob } from '@/hooks/use-publish-job'; import { CityConfigListItem } from '@/types/location'; import { logWithPrefix } from '@/utils/common'; import { requestJobDetail } from '@/utils/job'; import { getOrderPrice, isCancelPay, requestAllBuyProduct, requestCreatePayInfo, requestOrderInfo, requestPayment, } from '@/utils/product'; import { navigateTo } from '@/utils/route'; import Toast from '@/utils/toast'; import './index.less'; interface CityOption extends ISelectOption { value: CityConfigListItem; } const PREFIX = 'user-batch-publish'; const log = logWithPrefix(PREFIX); export default function UserBatchPublish({ cityCode, jobId }: { cityCode?: string; jobId?: string }) { const [loading, setLoading] = useState(true); const [showQrCode, setShowQrCode] = useState(false); const [selectable, setSelectable] = useState(false); const [showCitySelect, setShowCitySelect] = useState(false); const [city, setCity] = useState(null); const [showPublishJob, setShowPublishJob] = useState(false); const cityOperators = useCityOperators(); const availableCities = useMemo(() => cityOperators.filter(c => c.sendCount), [cityOperators]); const cityOptions: CityOption[] = useMemo( () => availableCities.map(value => ({ value, label: value.cityName })), [availableCities] ); const [showBuy, setShowBuy, handlePublishJob] = usePublishJob(jobId); const handleClickCity = useCallback(() => setShowCitySelect(true), []); const handleSelectCity = useCallback(value => { setCity(value); setShowCitySelect(false); }, []); const handleClickViewGroup = useCallback(() => navigateTo(PageUrl.GroupList, { city: city?.cityCode }), [city]); const handleClickBuy = useCallback(async () => { // if (1 < 2) { // await new Promise(r => setTimeout(r, 3000)); // setShowQrCode(true); // return; // } if (!city || !city.payPrice || !city.showPrice || !city.sendCount || !city.productSpecId) { return; } try { Taro.showLoading(); const allowBuy = await requestAllBuyProduct(ProductType.GroupBatchPublish); if (!allowBuy) { Taro.hideLoading(); Toast.info('您最近已购买过,可直接联系客服'); setShowQrCode(true); return; } if (jobId && cityCode) { const jobDetail = await requestJobDetail(jobId); if (jobDetail.status !== JobManageStatus.Open) { Taro.hideLoading(); setShowPublishJob(true); return; } } const { payOrderNo, createPayInfo } = await requestCreatePayInfo({ type: OrderType.GroupBatchPublish, amt: city.payPrice, // amt: 1, productCode: ProductType.GroupBatchPublish, productSpecId: city.productSpecId, }); log('handleBuy payInfo', payOrderNo, createPayInfo); await requestPayment({ timeStamp: createPayInfo.timeStamp, nonceStr: createPayInfo.nonceStr, package: createPayInfo.packageVal, signType: createPayInfo.signType, paySign: createPayInfo.paySign, }); const { status } = await requestOrderInfo({ payOrderNo }); log('handleBuy orderInfo', status); if (status !== OrderStatus.Success) { throw new Error('order status error'); } Taro.hideLoading(); setShowQrCode(true); } catch (e) { Taro.hideLoading(); Toast.error(isCancelPay(e) ? '取消购买' : '购买失败请重试'); log('handleBuy error', e); } }, [cityCode, jobId, city]); useEffect(() => { if (!availableCities.length) { return; } try { const initCity = cityCode ? availableCities.find(o => o.cityCode === cityCode) : availableCities[0]; setSelectable(!cityCode); setLoading(false); if (initCity) { setCity(initCity); } else { Toast.info('当前城市不支持代发'); } } catch (e) { Toast.error('加载失败请重试'); } }, [availableCities, cityCode]); if (loading) { return ; } return (
{/**/}
服务说明
服务方式:帮您把招聘需求
发到本地主播群,投递量大幅增加
{selectable ? (
请选择城市
) : (
当前通告城市
)} {city && (
查看该城市合作群列表
可购买群数
服务费用
{`${city?.showPrice}元`}
{`原价:${city?.originalPrice || city?.sendCount}元`}
)}
setShowCitySelect(false)} /> setShowQrCode(false)} open={showQrCode} /> setShowBuy(false)}> setShowPublishJob(false)}>
请先发布通告
); }