feat: update tonggao

This commit is contained in:
chashaobao
2025-08-07 00:24:49 +08:00
parent 10e7f39c92
commit 61336b5282
30 changed files with 363 additions and 171 deletions

View File

@ -3,7 +3,7 @@ import Taro, { useLoad } from '@tarojs/taro';
import { Dialog } from '@taroify/core';
import classNames from 'classnames';
import { useCallback, useEffect, useState } from 'react';
import { useCallback, useEffect, useRef, useState } from 'react';
import BlFormCell from '@/components/bl-form-cell';
import BlFormInput from '@/components/bl-form-input';
@ -22,7 +22,7 @@ import { EMPLOY_TYPE_TITLE_MAP, EmployType, JOB_TYPE_SELECT_OPTIONS, JobType } f
import { ProductType } from '@/constants/product';
import useUserInfo from '@/hooks/use-user-info';
import store from '@/store';
import { cacheCreateJob } from '@/store/actions';
import { cacheJobId } from '@/store/actions';
import { CreateJobInfo, JobDetails } from '@/types/job';
import { logWithPrefix } from '@/utils/common';
import { collectEvent } from '@/utils/event';
@ -33,6 +33,7 @@ import {
requestJobDetail,
isFullTimePriceRequired,
isPartTimePriceRequired,
postPublishJob,
} from '@/utils/job';
import { getCityValues } from '@/utils/location';
import { requestProductBalance } from '@/utils/product';
@ -107,6 +108,7 @@ export default function JobPublish() {
const [showCityPicker, setShowCityPicker] = useState(false);
const [address, setAddress] = useState('');
const [showBuy, setShowBuy] = useState(false);
const createdJobIdRef = useRef('');
const userInfo = useUserInfo();
const handleEmployTypeChange = useCallback((value: EmployType) => {
@ -200,13 +202,18 @@ export default function JobPublish() {
await postUpdateJob(data);
Taro.eventCenter.trigger(EventName.JOB_UPDATE, job!.id);
} else {
const jobId = await postCreateJob(data);
createdJobIdRef.current = jobId;
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
if (userInfo.bossAuthStatus !== CertificationStatusType.Success) {
// 去认证
store.dispatch(cacheCreateJob(data));
store.dispatch(cacheJobId(jobId));
navigateTo(PageUrl.CertificationStart);
Taro.hideLoading();
return;
}
const [time] = await requestProductBalance(ProductType.CompanyPublishJob);
if (time <= 0) {
// 付钱
@ -214,12 +221,14 @@ export default function JobPublish() {
Taro.hideLoading();
return;
}
await postCreateJob(data);
await postPublishJob(jobId);
}
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
await Toast.success(isUpdateJob ? '更新成功' : '创建成功', 1500, true);
await Toast.success(isUpdateJob ? '更新成功' : '创建并发布成功', 1500, true);
navigateBack();
} catch (e) {
createdJobIdRef.current = '';
console.error('submit error', e);
Toast.error('审核失败请重试');
collectEvent(CollectEventName.PUBLISH_JOB_FAILED, e);
@ -229,18 +238,11 @@ export default function JobPublish() {
}, [getCreateJobInfo, isUpdate, job, userInfo.bossAuthStatus]);
const handleNext = useCallback(async () => {
const [data, cityCodes] = getCreateJobInfo();
const cityValues = getCityValues(cityCodes);
if (!data.address.startsWith(cityValues)) {
data.address = `${cityValues}${data.address}`;
}
Taro.showLoading();
try {
await postCreateJob(data);
await postPublishJob(createdJobIdRef.current);
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
await Toast.success('创建成功', 1500, true);
await Toast.success('发布成功', 1500, true);
navigateBack();
} catch (e) {
console.error('submit error', e);
@ -249,7 +251,12 @@ export default function JobPublish() {
} finally {
Taro.hideLoading();
}
}, [getCreateJobInfo]);
}, []);
const handleClosePublishJob = useCallback(() => {
setShowBuy(false);
navigateBack(-1);
}, []);
useEffect(() => {
const callback = (d: string) => setDescribe(d);
@ -342,7 +349,7 @@ export default function JobPublish() {
<div className={`${PREFIX}__footer__buttons`}>
{!isUpdate && (
<Button className={`${PREFIX}__footer__button`} onClick={handleSubmit}>
</Button>
)}
{isUpdate && (
@ -365,9 +372,9 @@ export default function JobPublish() {
onConfirm={handleConfirmCityPicker}
onCancel={() => setShowCityPicker(false)}
/>
<Dialog open={showBuy} onClose={() => setShowBuy(false)}>
<Dialog open={showBuy} onClose={handleClosePublishJob}>
<Dialog.Content>
<CompanyPublishJobBuy onNext={handleNext} defaultSelect={1}/>
<CompanyPublishJobBuy onNext={handleNext} />
</Dialog.Content>
</Dialog>
</div>