11
Some checks are pending
Node CI / build (14.x, macOS-latest) (push) Waiting to run
Node CI / build (14.x, ubuntu-latest) (push) Waiting to run
Node CI / build (14.x, windows-latest) (push) Waiting to run
Node CI / build (16.x, macOS-latest) (push) Waiting to run
Node CI / build (16.x, ubuntu-latest) (push) Waiting to run
Node CI / build (16.x, windows-latest) (push) Waiting to run
coverage CI / build (push) Waiting to run
Node pnpm CI / build (16.x, macOS-latest) (push) Waiting to run
Node pnpm CI / build (16.x, ubuntu-latest) (push) Waiting to run
Node pnpm CI / build (16.x, windows-latest) (push) Waiting to run

This commit is contained in:
francis-fh
2026-07-26 18:45:43 +08:00
parent d653cd97d6
commit 9acb13c4c0
2 changed files with 41 additions and 9 deletions

View File

@@ -92,6 +92,7 @@ const transformJobData = (jobData: any) => {
experience: jobData.experience ? experienceMap[jobData.experience] || jobData.experience : '不限', experience: jobData.experience ? experienceMap[jobData.experience] || jobData.experience : '不限',
education: jobData.education ? educationMap[jobData.education] || jobData.education : '不限', education: jobData.education ? educationMap[jobData.education] || jobData.education : '不限',
tags: Array.isArray(jobData.tags) ? jobData.tags : [], tags: Array.isArray(jobData.tags) ? jobData.tags : [],
jobFeature: jobData.jobFeature,
salaryComposition: parseCommaSeparatedTags(jobData.salaryComposition), salaryComposition: parseCommaSeparatedTags(jobData.salaryComposition),
welfareBenefits: parseCommaSeparatedTags(jobData.welfareBenefits), welfareBenefits: parseCommaSeparatedTags(jobData.welfareBenefits),
workSchedule: parseCommaSeparatedTags(jobData.workSchedule), workSchedule: parseCommaSeparatedTags(jobData.workSchedule),
@@ -143,6 +144,7 @@ const mockJobDetail = {
experience: '3-5年', experience: '3-5年',
education: '本科', education: '本科',
companyNature: '', companyNature: '',
jobFeature: '',
tags: [], tags: [],
salaryComposition: [] as string[], salaryComposition: [] as string[],
welfareBenefits: [] as string[], welfareBenefits: [] as string[],
@@ -203,6 +205,7 @@ const JobDetailPage: React.FC = () => {
]); ]);
const [scaleEnum, setScaleEnum] = useState<DictValueEnumObj>({}); const [scaleEnum, setScaleEnum] = useState<DictValueEnumObj>({});
const [companyNatureEnum, setCompanyNatureEnum] = useState<DictValueEnumObj>({}); const [companyNatureEnum, setCompanyNatureEnum] = useState<DictValueEnumObj>({});
const [jobFeatureEnum, setJobFeatureEnum] = useState<DictValueEnumObj>({});
const [industryTree, setIndustryTree] = useState<any[]>([]); const [industryTree, setIndustryTree] = useState<any[]>([]);
const [complaintVisible, setComplaintVisible] = useState(false); const [complaintVisible, setComplaintVisible] = useState(false);
@@ -268,10 +271,12 @@ const JobDetailPage: React.FC = () => {
Promise.all([ Promise.all([
getDictValueEnum('scale', true, true), getDictValueEnum('scale', true, true),
getDictValueEnum('company_nature', false, true), getDictValueEnum('company_nature', false, true),
getDictValueEnum('job_feature', false, true),
getCmsIndustryTreeList(), getCmsIndustryTreeList(),
]).then(([scaleData, companyNatureData, industryRes]) => { ]).then(([scaleData, companyNatureData, jobFeatureData, industryRes]) => {
setScaleEnum(scaleData); setScaleEnum(scaleData);
setCompanyNatureEnum(companyNatureData); setCompanyNatureEnum(companyNatureData);
setJobFeatureEnum(jobFeatureData);
if (industryRes?.code === 200 && industryRes?.data) { if (industryRes?.code === 200 && industryRes?.data) {
setIndustryTree(industryRes.data); setIndustryTree(industryRes.data);
} }
@@ -564,11 +569,19 @@ const JobDetailPage: React.FC = () => {
<Col span={16}> <Col span={16}>
<div className="job-title-section"> <div className="job-title-section">
<Space direction="vertical" size={8}> <Space direction="vertical" size={8}>
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '16px', flexWrap: 'wrap' }}> <div style={{ display: 'flex', alignItems: 'baseline', gap: '16px', flexWrap: 'wrap' }}>
<Space align="baseline" size={16}> <Title level={2} className="job-title" style={{ marginBottom: 0 }}>
<Title level={2} className="job-title" style={{ marginBottom: 0 }}>{jobDetail.title}</Title> {jobDetail.title}
<Text className="job-salary-display">{jobDetail.salary}</Text> {jobDetail.jobFeature && (
</Space> <Tag
color="orange"
style={{ marginLeft: 10, fontSize: 13, lineHeight: '24px', verticalAlign: 'middle' }}
>
{getDictLabel(jobFeatureEnum, jobDetail.jobFeature)}
</Tag>
)}
</Title>
<Text className="job-salary-display">{jobDetail.salary}</Text>
</div> </div>
<Space size={16}> <Space size={16}>
<Text className="job-meta"> <Text className="job-meta">

View File

@@ -200,6 +200,7 @@ const JobListPage: React.FC = () => {
const [educationEnum, setEducationEnum] = useState<DictValueEnumObj>({}); const [educationEnum, setEducationEnum] = useState<DictValueEnumObj>({});
const [scaleEnum, setScaleEnum] = useState<DictValueEnumObj>({}); const [scaleEnum, setScaleEnum] = useState<DictValueEnumObj>({});
const [companyNatureEnum, setCompanyNatureEnum] = useState<DictValueEnumObj>({}); const [companyNatureEnum, setCompanyNatureEnum] = useState<DictValueEnumObj>({});
const [jobFeatureEnum, setJobFeatureEnum] = useState<DictValueEnumObj>({});
const [jobTitleTree, setJobTitleTree] = useState<any[]>([]); const [jobTitleTree, setJobTitleTree] = useState<any[]>([]);
const [industryTree, setIndustryTree] = useState<any[]>([]); const [industryTree, setIndustryTree] = useState<any[]>([]);
const [searchValue, setSearchValue] = useState<string>(''); // 搜索框的值 const [searchValue, setSearchValue] = useState<string>(''); // 搜索框的值
@@ -316,12 +317,14 @@ const JobListPage: React.FC = () => {
getDictValueEnum('education', true, true), getDictValueEnum('education', true, true),
getDictValueEnum('scale', true, true), getDictValueEnum('scale', true, true),
getDictValueEnum('company_nature', false, true), getDictValueEnum('company_nature', false, true),
getDictValueEnum('job_feature', false, true),
getCmsIndustryTreeList(), getCmsIndustryTreeList(),
getJobTitleTreeSelect(), getJobTitleTreeSelect(),
]).then(([educationData, scaleData, companyNatureData, industryRes, jobTitleRes]) => { ]).then(([educationData, scaleData, companyNatureData, jobFeatureData, industryRes, jobTitleRes]) => {
setEducationEnum(educationData); setEducationEnum(educationData);
setScaleEnum(scaleData); setScaleEnum(scaleData);
setCompanyNatureEnum(companyNatureData); setCompanyNatureEnum(companyNatureData);
setJobFeatureEnum(jobFeatureData);
if (industryRes?.code === 200 && industryRes?.data) { if (industryRes?.code === 200 && industryRes?.data) {
setIndustryTree(industryRes.data); setIndustryTree(industryRes.data);
} }
@@ -888,12 +891,20 @@ const JobListPage: React.FC = () => {
{job.isUrgent === 1 && ( {job.isUrgent === 1 && (
<Tag <Tag
color="red" color="red"
style={{ marginRight: 8, fontSize: 12, lineHeight: '20px' }} style={{ marginRight: 6, fontSize: 12, lineHeight: '20px' }}
> >
</Tag> </Tag>
)} )}
{job.jobTitle || job.title} {job.jobTitle || job.title}
{job.jobFeature && (
<Tag
color="orange"
style={{ marginLeft: 6, fontSize: 12, lineHeight: '20px' }}
>
{getDictLabel(jobFeatureEnum, job.jobFeature)}
</Tag>
)}
</Title> </Title>
<Text className="job-salary"> <Text className="job-salary">
{job.minSalary && job.maxSalary {job.minSalary && job.maxSalary
@@ -972,12 +983,20 @@ const JobListPage: React.FC = () => {
{selectedJob?.isUrgent === 1 && ( {selectedJob?.isUrgent === 1 && (
<Tag <Tag
color="red" color="red"
style={{ marginRight: 8, fontSize: 12, lineHeight: '20px' }} style={{ marginRight: 6, fontSize: 12, lineHeight: '20px' }}
> >
</Tag> </Tag>
)} )}
{selectedJob?.jobTitle || selectedJob?.title || '请选择职位'} {selectedJob?.jobTitle || selectedJob?.title || '请选择职位'}
{selectedJob?.jobFeature && (
<Tag
color="orange"
style={{ marginLeft: 8, fontSize: 12, lineHeight: '22px' }}
>
{getDictLabel(jobFeatureEnum, selectedJob.jobFeature)}
</Tag>
)}
</Title> </Title>
<Text className="salary-text"> <Text className="salary-text">
{selectedJob?.minSalary && selectedJob?.maxSalary {selectedJob?.minSalary && selectedJob?.maxSalary