Compare commits
2 Commits
trunk
...
feature/jo
Author | SHA1 | Date | |
---|---|---|---|
10e7f39c92 | |||
1c1bb146fc |
@ -99,12 +99,8 @@ export function CompanyPublishJobDialog(props: IProps) {
|
|||||||
|
|
||||||
const handleNext = useCallback(async () => {
|
const handleNext = useCallback(async () => {
|
||||||
onClose(true);
|
onClose(true);
|
||||||
if (userInfo.bossAuthStatus) {
|
navigateTo(PageUrl.JobPublish);
|
||||||
navigateTo(PageUrl.JobPublish);
|
}, [onClose]);
|
||||||
} else {
|
|
||||||
navigateTo(PageUrl.CertificationStart);
|
|
||||||
}
|
|
||||||
}, [userInfo, onClose]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
initRef.current = async () => {
|
initRef.current = async () => {
|
||||||
|
@ -16,6 +16,7 @@ import { postSubscribe, subscribeMessage } from '@/utils/subscribe';
|
|||||||
import Toast from '@/utils/toast';
|
import Toast from '@/utils/toast';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
|
defaultSelect?: number;
|
||||||
onNext: () => void;
|
onNext: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,8 +86,8 @@ const subscribe = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default function CompanyPublishJobBuy(props: IProps) {
|
export default function CompanyPublishJobBuy(props: IProps) {
|
||||||
const { onNext } = props;
|
const { onNext, defaultSelect = 0 } = props;
|
||||||
const [selectItem, setSelectItem] = useState(LIST[0]);
|
const [selectItem, setSelectItem] = useState(LIST[defaultSelect]);
|
||||||
|
|
||||||
const handleClickItem = useCallback((newSelectItem: Item) => setSelectItem(newSelectItem), []);
|
const handleClickItem = useCallback((newSelectItem: Item) => setSelectItem(newSelectItem), []);
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ import { useCallback } from 'react';
|
|||||||
import CertificationStatus from '@/components/certification-status';
|
import CertificationStatus from '@/components/certification-status';
|
||||||
import WechatCell from '@/components/wx-cell';
|
import WechatCell from '@/components/wx-cell';
|
||||||
import { PageUrl } from '@/constants/app';
|
import { PageUrl } from '@/constants/app';
|
||||||
import { CertificationStatusType } from '@/constants/company';
|
|
||||||
import useUserInfo from '@/hooks/use-user-info';
|
import useUserInfo from '@/hooks/use-user-info';
|
||||||
import { navigateTo } from '@/utils/route';
|
import { navigateTo } from '@/utils/route';
|
||||||
|
|
||||||
@ -18,10 +17,6 @@ export default function CompanyFragment() {
|
|||||||
// const [showPublish, setShowPublish] = useState(false);
|
// const [showPublish, setShowPublish] = useState(false);
|
||||||
|
|
||||||
const handlePublishJob = useCallback(async () => {
|
const handlePublishJob = useCallback(async () => {
|
||||||
if (userInfo.bossAuthStatus !== CertificationStatusType.Success) {
|
|
||||||
navigateTo(PageUrl.CertificationStart);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
navigateTo(PageUrl.CertificationManage);
|
navigateTo(PageUrl.CertificationManage);
|
||||||
}, [userInfo]);
|
}, [userInfo]);
|
||||||
|
|
||||||
|
10
src/hooks/use-cached-job.tsx
Normal file
10
src/hooks/use-cached-job.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { useSelector } from 'react-redux';
|
||||||
|
|
||||||
|
import { selectCreatedJob } from '@/store/selector/job';
|
||||||
|
|
||||||
|
function useCachedJob() {
|
||||||
|
const data = useSelector(selectCreatedJob);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default useCachedJob;
|
@ -174,7 +174,7 @@ export default function AnchorPage() {
|
|||||||
try {
|
try {
|
||||||
const { jobResults = [] } = await requestJobManageList({ status: JobManageStatus.Open });
|
const { jobResults = [] } = await requestJobManageList({ status: JobManageStatus.Open });
|
||||||
if (!jobResults.length) {
|
if (!jobResults.length) {
|
||||||
Toast.info('当前是根据定位为您展示主播');
|
// Toast.info('当前是根据定位为您展示主播');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const lastSelectJobId = getLastSelectMyJobId();
|
const lastSelectJobId = getLastSelectMyJobId();
|
||||||
|
@ -6,14 +6,15 @@ import classNames from 'classnames';
|
|||||||
import { useCallback, useEffect, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
|
|
||||||
import JobManageList, { IJobManageListProps } from '@/components/job-manage-list';
|
import JobManageList, { IJobManageListProps } from '@/components/job-manage-list';
|
||||||
import { CompanyPublishJobDialog } from '@/components/product-dialog/publish-job';
|
|
||||||
import SafeBottomPadding from '@/components/safe-bottom-padding';
|
import SafeBottomPadding from '@/components/safe-bottom-padding';
|
||||||
|
import { PageUrl } from '@/constants/app';
|
||||||
import { ReportEventId } from '@/constants/event';
|
import { ReportEventId } from '@/constants/event';
|
||||||
import { JOB_MANAGE_TABS, JobManageStatus, JobManageType } from '@/constants/job';
|
import { JOB_MANAGE_TABS, JobManageStatus, JobManageType } from '@/constants/job';
|
||||||
import useListHeight, { IUseListHeightProps } from '@/hooks/use-list-height';
|
import useListHeight, { IUseListHeightProps } from '@/hooks/use-list-height';
|
||||||
import useUserInfo from '@/hooks/use-user-info';
|
import useUserInfo from '@/hooks/use-user-info';
|
||||||
import { logWithPrefix } from '@/utils/common';
|
import { logWithPrefix } from '@/utils/common';
|
||||||
import { reportEvent } from '@/utils/event';
|
import { reportEvent } from '@/utils/event';
|
||||||
|
import { navigateTo } from '@/utils/route';
|
||||||
import { ensureUserInfo } from '@/utils/user';
|
import { ensureUserInfo } from '@/utils/user';
|
||||||
|
|
||||||
import './index.less';
|
import './index.less';
|
||||||
@ -91,7 +92,6 @@ export default function CertificationManage() {
|
|||||||
const userInfo = useUserInfo();
|
const userInfo = useUserInfo();
|
||||||
const listHeight = useListHeight(CALC_LIST_PROPS);
|
const listHeight = useListHeight(CALC_LIST_PROPS);
|
||||||
const [tabType, setTabType] = useState<JobManageType>(JobManageType.All);
|
const [tabType, setTabType] = useState<JobManageType>(JobManageType.All);
|
||||||
const [showPublish, setShowPublish] = useState(false);
|
|
||||||
|
|
||||||
const handleTypeChange = useCallback(value => setTabType(value), []);
|
const handleTypeChange = useCallback(value => setTabType(value), []);
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ export default function CertificationManage() {
|
|||||||
if (!(await ensureUserInfo(userInfo))) {
|
if (!(await ensureUserInfo(userInfo))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setShowPublish(true);
|
navigateTo(PageUrl.JobPublish);
|
||||||
}, [userInfo]);
|
}, [userInfo]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -124,7 +124,6 @@ export default function CertificationManage() {
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
<SafeBottomPadding className={SAFE_BOTTOM_PADDING_CLASS} />
|
<SafeBottomPadding className={SAFE_BOTTOM_PADDING_CLASS} />
|
||||||
<div>{showPublish && <CompanyPublishJobDialog userInfo={userInfo} onClose={() => setShowPublish(false)} />}</div>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import BlFormInput from '@/components/bl-form-input';
|
|||||||
import BlFormItem from '@/components/bl-form-item';
|
import BlFormItem from '@/components/bl-form-item';
|
||||||
import LoadingDialog from '@/components/loading-dialog';
|
import LoadingDialog from '@/components/loading-dialog';
|
||||||
import SafeBottomPadding from '@/components/safe-bottom-padding';
|
import SafeBottomPadding from '@/components/safe-bottom-padding';
|
||||||
import { PageUrl } from '@/constants/app';
|
import { EventName, PageUrl } from '@/constants/app';
|
||||||
import { CertificationStatusType } from '@/constants/company';
|
import { CertificationStatusType } from '@/constants/company';
|
||||||
import { CollectEventName, ReportEventId } from '@/constants/event';
|
import { CollectEventName, ReportEventId } from '@/constants/event';
|
||||||
import useUserInfo from '@/hooks/use-user-info';
|
import useUserInfo from '@/hooks/use-user-info';
|
||||||
@ -16,12 +16,18 @@ import { isValidIdCard, isValidPhone, logWithPrefix } from '@/utils/common';
|
|||||||
import { postCertification, getPhone } from '@/utils/company';
|
import { postCertification, getPhone } from '@/utils/company';
|
||||||
import { collectEvent, reportEvent } from '@/utils/event';
|
import { collectEvent, reportEvent } from '@/utils/event';
|
||||||
import { chooseMedia } from '@/utils/material';
|
import { chooseMedia } from '@/utils/material';
|
||||||
import { redirectTo } from '@/utils/route';
|
import { redirectTo } from '@/utils/route';
|
||||||
import Toast from '@/utils/toast';
|
import Toast from '@/utils/toast';
|
||||||
import { dispatchUpdateUser, requestUserInfo } from '@/utils/user';
|
import { dispatchUpdateUser, requestUserInfo } from '@/utils/user';
|
||||||
import { uploadVideo } from '@/utils/video';
|
import { uploadVideo } from '@/utils/video';
|
||||||
|
|
||||||
import './index.less';
|
import './index.less';
|
||||||
|
import { requestProductBalance } from '@/utils/product';
|
||||||
|
import { ProductType } from '@/constants/product';
|
||||||
|
import useCachedJob from '@/hooks/use-cached-job';
|
||||||
|
import { postCreateJob } from '@/utils/job';
|
||||||
|
import { Dialog } from '@taroify/core';
|
||||||
|
import CompanyPublishJobBuy from '@/components/product-dialog/steps-ui/company-publish-job-buy';
|
||||||
|
|
||||||
const PREFIX = 'page-certification';
|
const PREFIX = 'page-certification';
|
||||||
const log = logWithPrefix(PREFIX);
|
const log = logWithPrefix(PREFIX);
|
||||||
@ -100,6 +106,8 @@ export default function Certification() {
|
|||||||
// const [code, setCode] = useState('');
|
// const [code, setCode] = useState('');
|
||||||
const [company, setCompany] = useState('');
|
const [company, setCompany] = useState('');
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
const [showBuy, setShowBuy] = useState(false);
|
||||||
|
const cachedJobData = useCachedJob();
|
||||||
|
|
||||||
const handleClickIdCardLeft = useCallback(async () => {
|
const handleClickIdCardLeft = useCallback(async () => {
|
||||||
reportEvent(ReportEventId.CLICK_UPLOAD_ID_CARD, { type: 'left' });
|
reportEvent(ReportEventId.CLICK_UPLOAD_ID_CARD, { type: 'left' });
|
||||||
@ -133,6 +141,26 @@ export default function Certification() {
|
|||||||
setCompany(value);
|
setCompany(value);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const handleCreateJob = useCallback(async () => {
|
||||||
|
if (cachedJobData.employType) {
|
||||||
|
Taro.showLoading();
|
||||||
|
try {
|
||||||
|
await postCreateJob(cachedJobData);
|
||||||
|
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
|
||||||
|
await Toast.success('通告创建成功', 1500, true);
|
||||||
|
redirectTo(PageUrl.CertificationManage);
|
||||||
|
} catch (e) {
|
||||||
|
console.error('submit error', e);
|
||||||
|
Toast.error('通告审核失败请重试');
|
||||||
|
collectEvent(CollectEventName.PUBLISH_JOB_FAILED, e);
|
||||||
|
} finally {
|
||||||
|
Taro.hideLoading();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Toast.error('数据出错');
|
||||||
|
}
|
||||||
|
}, [cachedJobData]);
|
||||||
|
|
||||||
const handleSubmit = useCallback(async () => {
|
const handleSubmit = useCallback(async () => {
|
||||||
reportEvent(ReportEventId.CLICK_CERTIFICATION_SUBMIT);
|
reportEvent(ReportEventId.CLICK_CERTIFICATION_SUBMIT);
|
||||||
const data: ICertificationRequest = {
|
const data: ICertificationRequest = {
|
||||||
@ -157,7 +185,16 @@ export default function Certification() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dispatchUpdateUser({ bossAuthStatus: CertificationStatusType.Success });
|
dispatchUpdateUser({ bossAuthStatus: CertificationStatusType.Success });
|
||||||
redirectTo(PageUrl.CertificationManage);
|
// 判断付钱没有
|
||||||
|
const [time] = await requestProductBalance(ProductType.CompanyPublishJob);
|
||||||
|
if (time <= 0) {
|
||||||
|
// 付钱
|
||||||
|
setShowBuy(true);
|
||||||
|
Taro.hideLoading();
|
||||||
|
} else {
|
||||||
|
// 获取data创建
|
||||||
|
await handleCreateJob();
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('submit error', e);
|
console.error('submit error', e);
|
||||||
Toast.error('认证失败请重试');
|
Toast.error('认证失败请重试');
|
||||||
@ -262,6 +299,11 @@ export default function Certification() {
|
|||||||
<div>
|
<div>
|
||||||
<LoadingDialog open={open} text="认证中" />
|
<LoadingDialog open={open} text="认证中" />
|
||||||
</div>
|
</div>
|
||||||
|
<Dialog open={showBuy} onClose={() => setShowBuy(false)}>
|
||||||
|
<Dialog.Content>
|
||||||
|
<CompanyPublishJobBuy onNext={handleCreateJob} defaultSelect={1} />
|
||||||
|
</Dialog.Content>
|
||||||
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { BaseEventOrig, Button, InputProps } from '@tarojs/components';
|
import { BaseEventOrig, Button, InputProps } from '@tarojs/components';
|
||||||
import Taro, { useLoad } from '@tarojs/taro';
|
import Taro, { useLoad } from '@tarojs/taro';
|
||||||
|
|
||||||
|
import { Dialog } from '@taroify/core';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useCallback, useEffect, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
|
|
||||||
@ -12,15 +13,29 @@ import BlFormSelect from '@/components/bl-form-select';
|
|||||||
import BlSalaryInput, { BlSalaryValue } from '@/components/bl-salary-input';
|
import BlSalaryInput, { BlSalaryValue } from '@/components/bl-salary-input';
|
||||||
import { CityPickerPopup } from '@/components/city-picker';
|
import { CityPickerPopup } from '@/components/city-picker';
|
||||||
import PageLoading from '@/components/page-loading';
|
import PageLoading from '@/components/page-loading';
|
||||||
|
import CompanyPublishJobBuy from '@/components/product-dialog/steps-ui/company-publish-job-buy';
|
||||||
import SafeBottomPadding from '@/components/safe-bottom-padding';
|
import SafeBottomPadding from '@/components/safe-bottom-padding';
|
||||||
import { EventName, PageUrl } from '@/constants/app';
|
import { EventName, PageUrl } from '@/constants/app';
|
||||||
|
import { CertificationStatusType } from '@/constants/company';
|
||||||
import { CollectEventName } from '@/constants/event';
|
import { CollectEventName } from '@/constants/event';
|
||||||
import { EMPLOY_TYPE_TITLE_MAP, EmployType, JOB_TYPE_SELECT_OPTIONS, JobType } from '@/constants/job';
|
import { EMPLOY_TYPE_TITLE_MAP, EmployType, JOB_TYPE_SELECT_OPTIONS, JobType } from '@/constants/job';
|
||||||
|
import { ProductType } from '@/constants/product';
|
||||||
|
import useUserInfo from '@/hooks/use-user-info';
|
||||||
|
import store from '@/store';
|
||||||
|
import { cacheCreateJob } from '@/store/actions';
|
||||||
import { CreateJobInfo, JobDetails } from '@/types/job';
|
import { CreateJobInfo, JobDetails } from '@/types/job';
|
||||||
import { logWithPrefix } from '@/utils/common';
|
import { logWithPrefix } from '@/utils/common';
|
||||||
import { collectEvent } from '@/utils/event';
|
import { collectEvent } from '@/utils/event';
|
||||||
import { postCloseJob, postCreateJob, postUpdateJob, requestJobDetail, isFullTimePriceRequired, isPartTimePriceRequired } from '@/utils/job';
|
import {
|
||||||
|
postCloseJob,
|
||||||
|
postCreateJob,
|
||||||
|
postUpdateJob,
|
||||||
|
requestJobDetail,
|
||||||
|
isFullTimePriceRequired,
|
||||||
|
isPartTimePriceRequired,
|
||||||
|
} from '@/utils/job';
|
||||||
import { getCityValues } from '@/utils/location';
|
import { getCityValues } from '@/utils/location';
|
||||||
|
import { requestProductBalance } from '@/utils/product';
|
||||||
import { getPageQuery, navigateBack, navigateTo } from '@/utils/route';
|
import { getPageQuery, navigateBack, navigateTo } from '@/utils/route';
|
||||||
import Toast from '@/utils/toast';
|
import Toast from '@/utils/toast';
|
||||||
|
|
||||||
@ -91,6 +106,8 @@ export default function JobPublish() {
|
|||||||
const [city, setCity] = useState<string[] | undefined>();
|
const [city, setCity] = useState<string[] | undefined>();
|
||||||
const [showCityPicker, setShowCityPicker] = useState(false);
|
const [showCityPicker, setShowCityPicker] = useState(false);
|
||||||
const [address, setAddress] = useState('');
|
const [address, setAddress] = useState('');
|
||||||
|
const [showBuy, setShowBuy] = useState(false);
|
||||||
|
const userInfo = useUserInfo();
|
||||||
|
|
||||||
const handleEmployTypeChange = useCallback((value: EmployType) => {
|
const handleEmployTypeChange = useCallback((value: EmployType) => {
|
||||||
setEmployType(value);
|
setEmployType(value);
|
||||||
@ -144,7 +161,7 @@ export default function JobPublish() {
|
|||||||
}
|
}
|
||||||
}, [job]);
|
}, [job]);
|
||||||
|
|
||||||
const handleSubmit = useCallback(async () => {
|
const getCreateJobInfo = useCallback((): [CreateJobInfo, string[]] => {
|
||||||
const cityCodes = city || [];
|
const cityCodes = city || [];
|
||||||
const data: CreateJobInfo = {
|
const data: CreateJobInfo = {
|
||||||
title,
|
title,
|
||||||
@ -160,6 +177,11 @@ export default function JobPublish() {
|
|||||||
highPriceForPartyTime: !isPartTimePriceRequired(employType) ? 0 : salary[3],
|
highPriceForPartyTime: !isPartTimePriceRequired(employType) ? 0 : salary[3],
|
||||||
address: address,
|
address: address,
|
||||||
};
|
};
|
||||||
|
return [data, cityCodes];
|
||||||
|
}, [address, category, city, describe, employType, salary, title]);
|
||||||
|
|
||||||
|
const handleSubmit = useCallback(async () => {
|
||||||
|
const [data, cityCodes] = getCreateJobInfo();
|
||||||
const errMsg = isInvalidCreateJobInfo(data);
|
const errMsg = isInvalidCreateJobInfo(data);
|
||||||
if (errMsg) {
|
if (errMsg) {
|
||||||
Toast.info(errMsg);
|
Toast.info(errMsg);
|
||||||
@ -178,6 +200,20 @@ export default function JobPublish() {
|
|||||||
await postUpdateJob(data);
|
await postUpdateJob(data);
|
||||||
Taro.eventCenter.trigger(EventName.JOB_UPDATE, job!.id);
|
Taro.eventCenter.trigger(EventName.JOB_UPDATE, job!.id);
|
||||||
} else {
|
} else {
|
||||||
|
if (userInfo.bossAuthStatus !== CertificationStatusType.Success) {
|
||||||
|
// 去认证
|
||||||
|
store.dispatch(cacheCreateJob(data));
|
||||||
|
navigateTo(PageUrl.CertificationStart);
|
||||||
|
Taro.hideLoading();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const [time] = await requestProductBalance(ProductType.CompanyPublishJob);
|
||||||
|
if (time <= 0) {
|
||||||
|
// 付钱
|
||||||
|
setShowBuy(true);
|
||||||
|
Taro.hideLoading();
|
||||||
|
return;
|
||||||
|
}
|
||||||
await postCreateJob(data);
|
await postCreateJob(data);
|
||||||
}
|
}
|
||||||
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
|
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
|
||||||
@ -190,7 +226,30 @@ export default function JobPublish() {
|
|||||||
} finally {
|
} finally {
|
||||||
Taro.hideLoading();
|
Taro.hideLoading();
|
||||||
}
|
}
|
||||||
}, [isUpdate, job, title, employType, category, describe, city, salary, address]);
|
}, [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);
|
||||||
|
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
|
||||||
|
await Toast.success('创建成功', 1500, true);
|
||||||
|
navigateBack();
|
||||||
|
} catch (e) {
|
||||||
|
console.error('submit error', e);
|
||||||
|
Toast.error('审核失败请重试');
|
||||||
|
collectEvent(CollectEventName.PUBLISH_JOB_FAILED, e);
|
||||||
|
} finally {
|
||||||
|
Taro.hideLoading();
|
||||||
|
}
|
||||||
|
}, [getCreateJobInfo]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const callback = (d: string) => setDescribe(d);
|
const callback = (d: string) => setDescribe(d);
|
||||||
@ -306,6 +365,11 @@ export default function JobPublish() {
|
|||||||
onConfirm={handleConfirmCityPicker}
|
onConfirm={handleConfirmCityPicker}
|
||||||
onCancel={() => setShowCityPicker(false)}
|
onCancel={() => setShowCityPicker(false)}
|
||||||
/>
|
/>
|
||||||
|
<Dialog open={showBuy} onClose={() => setShowBuy(false)}>
|
||||||
|
<Dialog.Content>
|
||||||
|
<CompanyPublishJobBuy onNext={handleNext} defaultSelect={1}/>
|
||||||
|
</Dialog.Content>
|
||||||
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
export * from './app';
|
export * from './app';
|
||||||
export * from './user';
|
export * from './user';
|
||||||
export * from './message';
|
export * from './message';
|
||||||
|
export * from './job';
|
||||||
|
7
src/store/actions/job.ts
Normal file
7
src/store/actions/job.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { CreateJobInfo } from '@/types/job';
|
||||||
|
|
||||||
|
import { CREATE_JOB } from '../constants';
|
||||||
|
|
||||||
|
export const cacheCreateJob = (value: CreateJobInfo) => ({ type: CREATE_JOB, value });
|
||||||
|
|
||||||
|
export const clearCachedJob = () => ({ type: CREATE_JOB, value: {} });
|
@ -5,3 +5,4 @@ export const SET_USER_INFO = 'SET_USER_INFO';
|
|||||||
export const SET_BIND_PHONE = 'SET_BIND_PHONE';
|
export const SET_BIND_PHONE = 'SET_BIND_PHONE';
|
||||||
export const SET_USER_MESSAGE = 'SET_USER_MESSAGE';
|
export const SET_USER_MESSAGE = 'SET_USER_MESSAGE';
|
||||||
export const SET_INVITE_CODE = 'SET_INVITE_CODE';
|
export const SET_INVITE_CODE = 'SET_INVITE_CODE';
|
||||||
|
export const CREATE_JOB = 'CREATE_JOB';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { combineReducers } from 'redux';
|
import { combineReducers } from 'redux';
|
||||||
|
|
||||||
import appState from './app';
|
import appState from './app';
|
||||||
|
import jobState from './job';
|
||||||
import message from './message';
|
import message from './message';
|
||||||
import partnerInfo from './partner';
|
import partnerInfo from './partner';
|
||||||
import userInfo from './user';
|
import userInfo from './user';
|
||||||
@ -10,4 +11,5 @@ export default combineReducers({
|
|||||||
userInfo,
|
userInfo,
|
||||||
message,
|
message,
|
||||||
partnerInfo,
|
partnerInfo,
|
||||||
|
jobState,
|
||||||
});
|
});
|
||||||
|
19
src/store/reducers/job.ts
Normal file
19
src/store/reducers/job.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { Action } from 'redux';
|
||||||
|
|
||||||
|
import { CreateJobInfo } from '@/types/job';
|
||||||
|
|
||||||
|
import { CREATE_JOB } from '../constants';
|
||||||
|
|
||||||
|
const INIT_STATE: Partial<CreateJobInfo> = {};
|
||||||
|
|
||||||
|
const userInfo = (state: Partial<CreateJobInfo> = INIT_STATE, action: Action): Partial<CreateJobInfo> => {
|
||||||
|
const { type, value } = action as BL.Anything;
|
||||||
|
switch (type) {
|
||||||
|
case CREATE_JOB:
|
||||||
|
return value;
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default userInfo;
|
3
src/store/selector/job.ts
Normal file
3
src/store/selector/job.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { IState } from '@/types/store';
|
||||||
|
|
||||||
|
export const selectCreatedJob = (state: IState) => state.jobState;
|
@ -1,4 +1,5 @@
|
|||||||
import { RoleType, PageType } from '@/constants/app';
|
import { RoleType, PageType } from '@/constants/app';
|
||||||
|
import { CreateJobInfo } from '@/types/job';
|
||||||
import { UserMessage } from '@/types/message';
|
import { UserMessage } from '@/types/message';
|
||||||
import { PartnerInfo } from '@/types/partner';
|
import { PartnerInfo } from '@/types/partner';
|
||||||
|
|
||||||
@ -10,6 +11,7 @@ export interface IState {
|
|||||||
userInfo: UserInfo;
|
userInfo: UserInfo;
|
||||||
message: UserMessage;
|
message: UserMessage;
|
||||||
partnerInfo: PartnerInfo;
|
partnerInfo: PartnerInfo;
|
||||||
|
jobState: CreateJobInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AppState {
|
export interface AppState {
|
||||||
|
Reference in New Issue
Block a user