feat: first commit
This commit is contained in:
149
src/components/product-dialog/publish-job/index.tsx
Normal file
149
src/components/product-dialog/publish-job/index.tsx
Normal file
@ -0,0 +1,149 @@
|
||||
import Taro from '@tarojs/taro';
|
||||
|
||||
import { Dialog } from '@taroify/core';
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
|
||||
import { DialogStatus, PREFIX } from '@/components/product-dialog/const';
|
||||
import QrCodeContent from '@/components/product-dialog/steps-ui/common-qr-code';
|
||||
import CompanyPublishJobBuy from '@/components/product-dialog/steps-ui/company-publish-job-buy';
|
||||
import PublishJobBuy from '@/components/product-dialog/steps-ui/publish-job-buy';
|
||||
import { PageUrl } from '@/constants/app';
|
||||
import { ProductType, QrCodeType } from '@/constants/product';
|
||||
import { UserInfo } from '@/types/user';
|
||||
import { requestProductBalance } from '@/utils/product';
|
||||
import { navigateTo } from '@/utils/route';
|
||||
import Toast from '@/utils/toast';
|
||||
|
||||
import '../index.less';
|
||||
|
||||
interface IProps {
|
||||
userInfo: UserInfo;
|
||||
onClose: (opened: boolean) => void;
|
||||
open?: boolean;
|
||||
}
|
||||
|
||||
export default function PublishJobDialog(props: IProps) {
|
||||
const { userInfo, onClose } = props;
|
||||
const [status, setStatus] = useState<DialogStatus>(DialogStatus.LOADING);
|
||||
const initRef = useRef(() => {});
|
||||
|
||||
const handleCloseDialog = useCallback(() => {
|
||||
onClose(false);
|
||||
}, [onClose]);
|
||||
|
||||
const handleNext = useCallback(async () => {
|
||||
setStatus(DialogStatus.PUBLISH_QR_CODE);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
initRef.current = async () => {
|
||||
// if (1 < 2) {
|
||||
// setStatus(DialogStatus.PUBLISH_QR_CODE);
|
||||
// return;
|
||||
// }
|
||||
try {
|
||||
Taro.showLoading();
|
||||
const isVip = userInfo.isBoss && !userInfo.userBoss?.isExpire;
|
||||
if (isVip) {
|
||||
setStatus(DialogStatus.PUBLISH_QR_CODE);
|
||||
} else {
|
||||
setStatus(DialogStatus.PUBLISH_JOB_BUY);
|
||||
}
|
||||
} catch (e) {
|
||||
Toast.error('出错了,请重试');
|
||||
handleCloseDialog();
|
||||
} finally {
|
||||
Taro.hideLoading();
|
||||
}
|
||||
};
|
||||
}, [userInfo, handleCloseDialog]);
|
||||
|
||||
useEffect(() => {
|
||||
initRef.current();
|
||||
}, []);
|
||||
|
||||
if (status === DialogStatus.LOADING) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Dialog className={PREFIX} onClose={onClose} open>
|
||||
<Dialog.Content>
|
||||
{status === DialogStatus.PUBLISH_JOB_BUY && <PublishJobBuy onNext={handleNext} />}
|
||||
{status === DialogStatus.PUBLISH_QR_CODE && <QrCodeContent type={QrCodeType.PublishJob} />}
|
||||
</Dialog.Content>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
export function PublishJobQrCodeDialog(props: Omit<IProps, 'userInfo'>) {
|
||||
const { onClose, open = true } = props;
|
||||
|
||||
return (
|
||||
<Dialog className={PREFIX} onClose={onClose} open={open}>
|
||||
<Dialog.Content>
|
||||
<QrCodeContent type={QrCodeType.PublishJob} />
|
||||
</Dialog.Content>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
export function CompanyPublishJobDialog(props: IProps) {
|
||||
const { userInfo, onClose } = props;
|
||||
const [status, setStatus] = useState<DialogStatus>(DialogStatus.LOADING);
|
||||
const initRef = useRef(() => {});
|
||||
|
||||
const handleCloseDialog = useCallback(() => {
|
||||
onClose(false);
|
||||
}, [onClose]);
|
||||
|
||||
const handleNext = useCallback(async () => {
|
||||
onClose(true);
|
||||
if (userInfo.bossAuthStatus) {
|
||||
navigateTo(PageUrl.JobPublish);
|
||||
} else {
|
||||
navigateTo(PageUrl.CertificationStart);
|
||||
}
|
||||
}, [userInfo, onClose]);
|
||||
|
||||
useEffect(() => {
|
||||
initRef.current = async () => {
|
||||
// if (1 < 2) {
|
||||
// setStatus(DialogStatus.COMPANY_PUBLISH_JOB_BUY);
|
||||
// return;
|
||||
// }
|
||||
try {
|
||||
const productCode = ProductType.CompanyPublishJob;
|
||||
Taro.showLoading();
|
||||
const time = await requestProductBalance(productCode);
|
||||
if (time <= 0) {
|
||||
setStatus(DialogStatus.COMPANY_PUBLISH_JOB_BUY);
|
||||
return;
|
||||
}
|
||||
// 之前购买的次数还没用完
|
||||
handleNext();
|
||||
} catch (e) {
|
||||
Toast.error('出错了,请重试');
|
||||
handleCloseDialog();
|
||||
} finally {
|
||||
Taro.hideLoading();
|
||||
}
|
||||
};
|
||||
}, [userInfo, handleCloseDialog, handleNext]);
|
||||
|
||||
useEffect(() => {
|
||||
initRef.current();
|
||||
}, []);
|
||||
|
||||
if (status === DialogStatus.LOADING) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Dialog className={PREFIX} onClose={onClose} open>
|
||||
<Dialog.Content>
|
||||
{status === DialogStatus.COMPANY_PUBLISH_JOB_BUY && <CompanyPublishJobBuy onNext={handleNext} />}
|
||||
</Dialog.Content>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user