feat: update terminology from "户外招聘会" to "线下招聘会" across the application and improve job position urgency display
Some checks failed
Node CI / build (14.x, macOS-latest) (push) Has been cancelled
Node CI / build (14.x, ubuntu-latest) (push) Has been cancelled
Node CI / build (14.x, windows-latest) (push) Has been cancelled
Node CI / build (16.x, macOS-latest) (push) Has been cancelled
Node CI / build (16.x, ubuntu-latest) (push) Has been cancelled
Node CI / build (16.x, windows-latest) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
coverage CI / build (push) Has been cancelled
Node pnpm CI / build (16.x, macOS-latest) (push) Has been cancelled
Node pnpm CI / build (16.x, ubuntu-latest) (push) Has been cancelled
Node pnpm CI / build (16.x, windows-latest) (push) Has been cancelled

This commit is contained in:
2026-07-22 15:24:31 +08:00
parent b4c92cb27d
commit 48325cefa4
10 changed files with 43 additions and 34 deletions

21
.codegraph/.gitignore vendored
View File

@@ -1,16 +1,5 @@
# CodeGraph data files # CodeGraph data files — local to each machine, not for committing.
# These are local to each machine and should not be committed # Ignore everything in .codegraph/ except this file itself, so transient
# files (the database, daemon.pid, sockets, logs) never show up in git.
# Database *
*.db !.gitignore
*.db-wal
*.db-shm
# Cache
cache/
# Logs
*.log
# Hook markers
.dirty

View File

@@ -18,7 +18,7 @@ export default {
'/api/': { '/api/': {
// 要代理的地址 // 要代理的地址
// target: 'http://39.98.44.136:6024/api/shihezi/', // 线上环境 // target: 'http://39.98.44.136:6024/api/shihezi/', // 线上环境
target: 'http://test.xjshzly.longbiosphere.com/api/shihezi/', // 线上环境 target: 'https://test.xjshzly.longbiosphere.com/api/shihezi/', // 测试环境
// target: 'http://wykj.cdwsx.com/api',// 后端 // target: 'http://wykj.cdwsx.com/api',// 后端
// target: 'http://ks.zhaopinzao8dian.com/api/ks', // target: 'http://ks.zhaopinzao8dian.com/api/ks',
// 配置了这个可以从 http 代理到 https // 配置了这个可以从 http 代理到 https

View File

@@ -264,7 +264,7 @@ export default [
component: './Jobfair/PublicJobFair/Signups', component: './Jobfair/PublicJobFair/Signups',
}, },
{ {
name: '户外招聘会管理', name: '线下招聘会管理',
path: '/jobfair/outdoor-fair', path: '/jobfair/outdoor-fair',
component: './Jobfair/Outdoorfair', component: './Jobfair/Outdoorfair',
}, },
@@ -279,7 +279,7 @@ export default [
component: './Jobfair/Venueinfo/Detail', component: './Jobfair/Venueinfo/Detail',
}, },
{ {
name: '户外招聘会详情', name: '线下招聘会详情',
path: '/jobfair/outdoor-fair/detail', path: '/jobfair/outdoor-fair/detail',
component: './Jobfair/Outdoorfair/Detail', component: './Jobfair/Outdoorfair/Detail',
}, },

View File

@@ -183,7 +183,7 @@ const PortalJobFairDetailPage: React.FC = () => {
<div className="job-fair-detail-title-row"> <div className="job-fair-detail-title-row">
<div> <div>
<Tag color={channel === 'outdoor' ? 'cyan' : 'blue'}> <Tag color={channel === 'outdoor' ? 'cyan' : 'blue'}>
{channel === 'outdoor' ? '户外招聘会' : '线上招聘会'} {channel === 'outdoor' ? '线下招聘会' : '线上招聘会'}
</Tag> </Tag>
<Title level={2}>{detail.jobFairTitle}</Title> <Title level={2}>{detail.jobFairTitle}</Title>
</div> </div>
@@ -280,7 +280,17 @@ const PortalJobFairDetailPage: React.FC = () => {
onClick={() => handlePositionClick(position)} onClick={() => handlePositionClick(position)}
> >
<div className="job-header"> <div className="job-header">
<Title level={4}>{position.jobTitle || '未命名岗位'}</Title> <Title level={4}>
{position.isUrgent === 1 && (
<Tag
color="red"
style={{ marginRight: 8, fontSize: 12, lineHeight: '20px' }}
>
</Tag>
)}
{position.jobTitle || '未命名岗位'}
</Title>
<Typography.Text className="job-salary"> <Typography.Text className="job-salary">
{formatSalary(position)} {formatSalary(position)}
</Typography.Text> </Typography.Text>

View File

@@ -43,7 +43,7 @@ const PAGE_SIZE = 9;
const fairTabs: Array<{ key: JobFairChannel; label: string }> = [ const fairTabs: Array<{ key: JobFairChannel; label: string }> = [
{ key: 'online', label: '线上招聘会' }, { key: 'online', label: '线上招聘会' },
{ key: 'outdoor', label: '户外招聘会' }, { key: 'outdoor', label: '线下招聘会' },
]; ];
function formatDateTime(value?: string) { function formatDateTime(value?: string) {
@@ -232,7 +232,7 @@ const PortalJobFairPage: React.FC = () => {
<section className="job-fair-hero"> <section className="job-fair-hero">
<div> <div>
<Title level={2}></Title> <Title level={2}></Title>
<Text>线</Text> <Text>线线</Text>
</div> </div>
<CalendarOutlined className="job-fair-hero-icon" aria-hidden="true" /> <CalendarOutlined className="job-fair-hero-icon" aria-hidden="true" />
</section> </section>
@@ -309,14 +309,14 @@ const PortalJobFairPage: React.FC = () => {
</Button> </Button>
</Card> </Card>
<div className="fair-summary-grid"> <div className="fair-summary-grid">
{renderSummary(`本月${channel === 'outdoor' ? '户外' : ''}招聘会`, monthFairs)} {renderSummary(`本月${channel === 'outdoor' ? '线下' : ''}招聘会`, monthFairs)}
{renderSummary(`本季度${channel === 'outdoor' ? '户外' : ''}招聘会`, quarterFairs)} {renderSummary(`本季度${channel === 'outdoor' ? '线下' : ''}招聘会`, quarterFairs)}
</div> </div>
</section> </section>
<section className="job-fair-list-section" aria-live="polite"> <section className="job-fair-list-section" aria-live="polite">
<div className="job-fair-list-heading"> <div className="job-fair-list-heading">
<Title level={3}>{channel === 'outdoor' ? '户外招聘会' : '线上招聘会'}</Title> <Title level={3}>{channel === 'outdoor' ? '线下招聘会' : '线上招聘会'}</Title>
<Text type="secondary"> {total} </Text> <Text type="secondary"> {total} </Text>
</div> </div>
@@ -339,7 +339,7 @@ const PortalJobFairPage: React.FC = () => {
> >
<div className="fair-card-tags"> <div className="fair-card-tags">
<Tag color={channel === 'outdoor' ? 'cyan' : 'blue'}> <Tag color={channel === 'outdoor' ? 'cyan' : 'blue'}>
{channel === 'outdoor' ? '户外招聘会' : '线上招聘会'} {channel === 'outdoor' ? '线下招聘会' : '线上招聘会'}
</Tag> </Tag>
{status && <Tag color={status.color}>{status.label}</Tag>} {status && <Tag color={status.color}>{status.label}</Tag>}
</div> </div>

View File

@@ -141,7 +141,7 @@ const EditModal: React.FC<EditModalProps> = ({
return ( return (
<ModalForm <ModalForm
title={values ? '编辑户外招聘会' : '新增户外招聘会'} title={values ? '编辑线下招聘会' : '新增线下招聘会'}
form={form} form={form}
open={open} open={open}
width={700} width={700}

View File

@@ -136,7 +136,7 @@ const OutdoorFairList: React.FC = () => {
const handleDelete = async (id: number) => { const handleDelete = async (id: number) => {
Modal.confirm({ Modal.confirm({
title: '确认删除', title: '确认删除',
content: '确定要删除该户外招聘会吗?', content: '确定要删除该线下招聘会吗?',
onOk: async () => { onOk: async () => {
const res = await deleteOutdoorFair(id); const res = await deleteOutdoorFair(id);
if (res.code === 200) { if (res.code === 200) {
@@ -432,7 +432,7 @@ const OutdoorFairList: React.FC = () => {
return ( return (
<PageContainer> <PageContainer>
<ProTable<OutdoorFairItem> <ProTable<OutdoorFairItem>
headerTitle="户外招聘会管理列表" headerTitle="线下招聘会管理列表"
actionRef={actionRef} actionRef={actionRef}
rowKey="id" rowKey="id"
columns={columns} columns={columns}

View File

@@ -11,7 +11,12 @@ interface CompanySelectModalProps {
onSuccess: () => void; onSuccess: () => void;
} }
const CompanySelectModal: React.FC<CompanySelectModalProps> = ({ open, jobFairId, onCancel, onSuccess }) => { const CompanySelectModal: React.FC<CompanySelectModalProps> = ({
open,
jobFairId,
onCancel,
onSuccess,
}) => {
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType>();
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]); const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
@@ -70,9 +75,11 @@ const CompanySelectModal: React.FC<CompanySelectModalProps> = ({ open, jobFairId
}} }}
request={async (params) => { request={async (params) => {
const res = await getCmsCompanyList({ const res = await getCmsCompanyList({
current: params.current,
pageSize: params.pageSize,
name: params.name, name: params.name,
} as any); });
return { data: res.rows, total: res.total, success: true }; return { data: res.rows, total: res.total, success: res.code === 200 };
}} }}
toolBarRender={false} toolBarRender={false}
/> />

View File

@@ -109,6 +109,7 @@ export interface PortalJobFairPosition {
jobLocation?: string; jobLocation?: string;
jobAddress?: string; jobAddress?: string;
vacancies?: number | string; vacancies?: number | string;
isUrgent?: number;
} }
interface PortalJobFairCompanyWithJobs { interface PortalJobFairCompanyWithJobs {
@@ -189,7 +190,7 @@ export async function getPortalJobFairDetail(channel: JobFairChannel, jobFairId:
msg: response.msg, msg: response.msg,
data: { data: {
jobFairId: fair.jobFairId || String(fair.id ?? jobFairId), jobFairId: fair.jobFairId || String(fair.id ?? jobFairId),
jobFairTitle: fair.jobFairTitle || fair.title || '户外招聘会', jobFairTitle: fair.jobFairTitle || fair.title || '线下招聘会',
jobFairAddress: fair.jobFairAddress || fair.address || fair.venueName, jobFairAddress: fair.jobFairAddress || fair.address || fair.venueName,
jobFairType: fair.jobFairType || fair.fairType || 'outdoor', jobFairType: fair.jobFairType || fair.fairType || 'outdoor',
jobFairStartTime: fair.jobFairStartTime || fair.holdTime, jobFairStartTime: fair.jobFairStartTime || fair.holdTime,

View File

@@ -33,6 +33,8 @@ declare namespace API.CompanyList {
} }
export interface Params { export interface Params {
current?: number;
pageSize?: number;
createTime?: string; createTime?: string;
companyId?: number; companyId?: number;
name?: string; name?: string;