diff --git a/src/components/job-manage-card/index.tsx b/src/components/job-manage-card/index.tsx
index b7fa7a7..9c4b6ae 100644
--- a/src/components/job-manage-card/index.tsx
+++ b/src/components/job-manage-card/index.tsx
@@ -2,11 +2,12 @@ import { Image } from '@tarojs/components';
import { Arrow } from '@taroify/icons';
import classNames from 'classnames';
-import React, { useCallback } from 'react';
+import React, { useCallback, useMemo } from 'react';
-import { cityValues } from '@/components/user-batch-publish';
+// import { cityValues } from '@/components/user-batch-publish';
import { PageUrl } from '@/constants/app';
import { JOB_MANAGE_STATUS_TITLE_MAP, JobManageStatus } from '@/constants/job';
+import useCityOperators from '@/hooks/use-city-operators';
import { JobManageInfo } from '@/types/job';
import { getJobLocation } from '@/utils/job';
import { navigateTo } from '@/utils/route';
@@ -30,6 +31,9 @@ const STATUS_CLASS_MAP = {
};
function GoBatchTag({ cityCode, jobId }: { cityCode: string; jobId: JobManageInfo['id'] }) {
+ const cityOperators = useCityOperators();
+ const availableCities = useMemo(() => cityOperators.filter(c => c.sendCount), [cityOperators]);
+
const handleClick = useCallback(
e => {
e.preventDefault();
@@ -38,7 +42,7 @@ function GoBatchTag({ cityCode, jobId }: { cityCode: string; jobId: JobManageInf
},
[cityCode, jobId]
);
- if (!cityValues.find(c => c.cityCode === cityCode)) {
+ if (!availableCities.find(c => c.cityCode === cityCode)) {
return null;
}
return (
diff --git a/src/components/job-manage-list/index.less b/src/components/job-manage-list/index.less
index 1df8cd1..e9261db 100644
--- a/src/components/job-manage-list/index.less
+++ b/src/components/job-manage-list/index.less
@@ -1,2 +1,28 @@
@import '@/styles/common.less';
-@import '@/styles/variables.less';
\ No newline at end of file
+@import '@/styles/variables.less';
+
+.job-manage-list {
+ &__empty-tips {
+ width: 100%;
+ height: 100vh;
+ padding-top: 218px;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ position: absolute;
+
+ &__icon {
+ width: 386px;
+ height: 278px;
+ }
+
+ &__describe {
+ font-size: 28px;
+ font-weight: 500;
+ line-height: 40px;
+ color: @blColor;
+ margin-top: 50px;
+ }
+ }
+}
diff --git a/src/components/job-manage-list/index.tsx b/src/components/job-manage-list/index.tsx
index 1575094..1a7ca5e 100644
--- a/src/components/job-manage-list/index.tsx
+++ b/src/components/job-manage-list/index.tsx
@@ -1,3 +1,4 @@
+import { Image } from '@tarojs/components';
import Taro from '@tarojs/taro';
import { List, PullRefresh } from '@taroify/core';
@@ -28,7 +29,15 @@ const FIRST_PAGE = 0;
const PAGE_SIZE = 40;
const PREFIX = 'job-manage-list';
const log = logWithPrefix(PREFIX);
-
+const EmptyTips = (props: { className?: string; height?: number }) => {
+ const { className, height } = props;
+ return (
+
+ );
+};
function JobManageList(props: IJobManageListProps) {
const { className, listHeight, refreshDisabled, visible = true, status, onListEmpty } = props;
const [refreshing, setRefreshing] = useState(false);
@@ -151,6 +160,8 @@ function JobManageList(props: IJobManageListProps) {
onRefresh={handleRefresh}
disabled={refreshDisabled}
>
+ {Boolean(!dataList.length) && }
+
void;
+ onRefresh: () => void;
+ needLogin?: boolean;
isCreateResume?: boolean;
onConfirm: (type: GET_CONTACT_TYPE) => void;
}
@@ -27,6 +30,7 @@ const GET_CONTACT_TYPE_OPTIONS = [
title: '创建模卡(免费报单)',
desc: '免费报单,优先推荐给企业,机会更多',
btnText: '创建',
+ needLogin: true,
},
{
type: GET_CONTACT_TYPE.VIP,
@@ -51,7 +55,7 @@ const GET_CONTACT_TYPE_OPTIONS = [
},
];
-export function PrejobPopup({ onCancel, isCreateResume, onConfirm }: IProps) {
+export function PrejobPopup({ onCancel, isCreateResume, onConfirm, onRefresh }: IProps) {
const [openPopup, setOpenPopup] = useState(true);
const [openDialog, setOpenDialog] = useState(false);
const [clicked, setClicked] = useState(!!Taro.getStorageSync(CacheKey.JOIN_GROUP_POPUP_CLICKED));
@@ -98,9 +102,20 @@ export function PrejobPopup({ onCancel, isCreateResume, onConfirm }: IProps) {
{option.desc}
-
+ {option.needLogin ? (
+
+ {option.btnText}
+
+ ) : (
+
+ )}
);
diff --git a/src/components/user-batch-publish/index.tsx b/src/components/user-batch-publish/index.tsx
index eaf5345..b008fb0 100644
--- a/src/components/user-batch-publish/index.tsx
+++ b/src/components/user-batch-publish/index.tsx
@@ -2,7 +2,7 @@ import { Button } from '@tarojs/components';
import Taro from '@tarojs/taro';
import { Cell, Dialog } from '@taroify/core';
-import { Fragment, useCallback, useEffect, useState } from 'react';
+import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
import PageLoading from '@/components/page-loading';
import { PublishJobQrCodeDialog } from '@/components/product-dialog/publish-job';
@@ -11,9 +11,10 @@ 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, ProductSpecId, ProductType } from '@/constants/product';
+import { OrderStatus, OrderType, ProductType } from '@/constants/product';
+import useCityOperators from '@/hooks/use-city-operators';
import { usePublishJob } from '@/hooks/use-publish-job';
-import { BatchPublishGroup } from '@/types/group';
+import { CityConfigListItem } from '@/types/location';
import { logWithPrefix } from '@/utils/common';
import { requestJobDetail } from '@/utils/job';
import {
@@ -28,65 +29,29 @@ import { navigateTo } from '@/utils/route';
import Toast from '@/utils/toast';
import './index.less';
-interface CityValue extends BatchPublishGroup {
- cityName: string;
-}
-
-interface CityOption extends ISelectOption {
- value: CityValue;
+interface CityOption extends ISelectOption {
+ value: CityConfigListItem;
}
const PREFIX = 'user-batch-publish';
const log = logWithPrefix(PREFIX);
-export const cityValues: CityValue[] = [
- { cityCode: '440100', cityName: '广州', count: 800 },
- { cityCode: '440300', cityName: '深圳', count: 100 },
- { cityCode: '330100', cityName: '杭州', count: 750 },
- { cityCode: '110100', cityName: '北京', count: 150 },
- { cityCode: '510100', cityName: '成都', count: 100 },
- { cityCode: '500100', cityName: '重庆', count: 50 },
- { cityCode: '430100', cityName: '长沙', count: 50 },
- { cityCode: '350200', cityName: '厦门', count: 50 },
- { cityCode: '310100', cityName: '上海', count: 150 },
- { cityCode: '420100', cityName: '武汉', count: 80 },
- { cityCode: '610100', cityName: '西安', count: 60 },
- { cityCode: '410100', cityName: '郑州', count: 150 },
-].sort((a, b) => b.count - a.count);
-const MIN_GROUP_SIZE = 20;
-const GROUP_OPTIONS = [
- { value: MIN_GROUP_SIZE, productSpecId: ProductSpecId.GroupBatchPublish20, label: '20', price: 18 },
- { value: 50, productSpecId: ProductSpecId.GroupBatchPublish50, label: '50', price: 40 },
- { value: 60, productSpecId: ProductSpecId.GroupBatchPublish60, label: '60', price: 48 },
- { value: 80, productSpecId: ProductSpecId.GroupBatchPublish80, label: '80', price: 58 },
- { value: 100, productSpecId: ProductSpecId.GroupBatchPublish100, label: '100', price: 68 },
- { value: 150, productSpecId: ProductSpecId.GroupBatchPublish150, label: '150', price: 98 },
- { value: 300, productSpecId: ProductSpecId.GroupBatchPublish300, label: '300', price: 128 },
- { value: 500, productSpecId: ProductSpecId.GroupBatchPublish500, label: '500', price: 168 },
- { value: 750, productSpecId: ProductSpecId.GroupBatchPublish750, label: '750', price: 188 },
- { value: 800, productSpecId: ProductSpecId.GroupBatchPublish800, label: '800', price: 198 },
- { value: 1000, productSpecId: ProductSpecId.GroupBatchPublish1000, label: '1000', price: 288 },
-];
-const calcPrice = (city: CityValue | null) => {
- if (!city) {
- return {};
- }
- const { count } = city;
- const originalPrice = count * 1;
- const price = GROUP_OPTIONS.find(o => o.value === count)?.price || 18;
- const productSpecId = GROUP_OPTIONS.find(o => o.value === count)?.productSpecId || ProductSpecId.GroupBatchPublish20;
- return { price, originalPrice, productSpecId };
-};
-const cityOptions: CityOption[] = cityValues.map(value => ({ value, label: value.cityName }));
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 { price, originalPrice, productSpecId } = calcPrice(city);
+ 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), []);
@@ -102,7 +67,7 @@ export default function UserBatchPublish({ cityCode, jobId }: { cityCode?: strin
// setShowQrCode(true);
// return;
// }
- if (!price || !productSpecId) {
+ if (!city || !city.payPrice || !city.showPrice || !city.sendCount || !city.productSpecId) {
return;
}
try {
@@ -127,10 +92,10 @@ export default function UserBatchPublish({ cityCode, jobId }: { cityCode?: strin
const { payOrderNo, createPayInfo } = await requestCreatePayInfo({
type: OrderType.GroupBatchPublish,
- amt: getOrderPrice(price),
+ amt: city.payPrice,
// amt: 1,
productCode: ProductType.GroupBatchPublish,
- productSpecId: productSpecId,
+ productSpecId: city.productSpecId,
});
log('handleBuy payInfo', payOrderNo, createPayInfo);
await requestPayment({
@@ -152,14 +117,14 @@ export default function UserBatchPublish({ cityCode, jobId }: { cityCode?: strin
Toast.error(isCancelPay(e) ? '取消购买' : '购买失败请重试');
log('handleBuy error', e);
}
- }, [jobId, price, productSpecId]);
+ }, [cityCode, jobId, city]);
useEffect(() => {
- // if (!cityCode) {
- // return;
- // }
+ if (!availableCities.length) {
+ return;
+ }
try {
- const initCity = cityCode ? cityValues.find(o => o.cityCode === cityCode) : cityValues[0];
+ const initCity = cityCode ? availableCities.find(o => o.cityCode === cityCode) : availableCities[0];
setSelectable(!cityCode);
@@ -172,7 +137,7 @@ export default function UserBatchPublish({ cityCode, jobId }: { cityCode?: strin
} catch (e) {
Toast.error('加载失败请重试');
}
- }, [cityCode]);
+ }, [availableCities, cityCode]);
if (loading) {
return ;
@@ -203,11 +168,13 @@ export default function UserBatchPublish({ cityCode, jobId }: { cityCode?: strin
查看该城市合作群列表
可购买群数
- |
+ |
服务费用
-
{`${price}元`}
-
{`原价:${originalPrice}元`}
+
{`${city?.showPrice}元`}
+
{`原价:${city?.originalPrice || city?.sendCount}元`}