diff --git a/src/pages/RecruitmentDataCollection/JobMonitor/index.tsx b/src/pages/RecruitmentDataCollection/JobMonitor/index.tsx index 3ae680f..1b41b09 100644 --- a/src/pages/RecruitmentDataCollection/JobMonitor/index.tsx +++ b/src/pages/RecruitmentDataCollection/JobMonitor/index.tsx @@ -114,7 +114,7 @@ function StorageDetectionList() { > 查看详情 - + */} ), }, diff --git a/src/pages/ResumeLibrary/ResumeList/detail.tsx b/src/pages/ResumeLibrary/ResumeList/detail.tsx index da31fc2..07485e9 100644 --- a/src/pages/ResumeLibrary/ResumeList/detail.tsx +++ b/src/pages/ResumeLibrary/ResumeList/detail.tsx @@ -1,4 +1,10 @@ +import { ModalForm, ProDescriptions } from '@ant-design/pro-components'; +import { Image, Card, Divider, Row, Col, Tag, Timeline, Empty } from 'antd'; import React, { useEffect, useState } from 'react'; +import { getDictValueEnum } from '@/services/system/dict'; +import DictTag from '@/components/DictTag'; +import mockData from './preView.json'; + export type ResumeDetailProps = { onCancel: (flag?: boolean, formVals?: unknown) => void; open: boolean; @@ -6,7 +12,568 @@ export type ResumeDetailProps = { }; const ResumeDetail: React.FC = (props) => { - return
; + const [sexEnum, setSexEnum] = useState([]); + const [educationEnum, setEducationEnum] = useState([]); + const [politicalEnum, setPoliticalEnum] = useState([]); + const [areaEnum, setAreaEnum] = useState([]); + const [experienceEnum, setExperienceEnum] = useState([]); + const [ageEnum, setAgeEnum] = useState([]); + + // 获取字典数据 + useEffect(() => { + getDictValueEnum('sys_user_sex', true).then((data) => { + setSexEnum(data); + }); + getDictValueEnum('education', true, true).then((data) => { + setEducationEnum(data); + }); + getDictValueEnum('political_affiliation', true, true).then((data) => { + setPoliticalEnum(data); + }); + getDictValueEnum('area', true, true).then((data) => { + setAreaEnum(data); + }); + getDictValueEnum('experience', true, true).then((data) => { + setExperienceEnum(data); + }); + }, []); + + const handleCancel = () => { + props.onCancel(); + }; + + const { values } = props; + // const values = mockData; + + // 格式化时间显示 + const formatTimeRange = (start: string, end: string) => { + if (!start && !end) return ''; + return `${start || ''} - ${end || '至今'}`; + }; + + // 渲染空状态 + const renderEmpty = (description: string) => ( + + ); + + return ( + handleCancel(), + footer: null, + width: 1200, + styles: { + body: { maxHeight: '80vh', overflowY: 'auto', padding: '16px', top: '50vh' }, + }, + }} + submitter={false} + > + {/* 基本信息卡片 */} + + + +
+ {values?.avatar ? ( + + ) : ( +
+ 暂无头像 +
+ )} +

+ {values?.name || '未填写'} +

+

+ {values?.jobTitle?.join(' / ') || '暂无期望岗位'} +

+
+ + + + {/* */} + } + /> + + } + /> + } + /> + + + } + /> + + + + + } + /> + + ( + + {record.salaryMin || '面议'} - {record.salaryMax || '面议'} 元/月 + + )} + /> + + +
+ + {/* 附加信息 */} + + + +
+ 毕业院校: + {values?.graduationSchool || '未填写'} +
+ + +
+ 就读专业: + {values?.major || '未填写'} +
+ + +
+ 居住地址: + {values?.residenceAddress || '未填写'} +
+ +
+
+ + {/* 个人介绍与求职意向 */} + + + +
+ 个人简要介绍: +
+ {values?.introduction || '暂无个人介绍'} +
+
+ + +
+ 求职意向岗位: +
+ {values?.jobIntention || '暂无求职意向'} +
+
+ + +
+ 自我评价: +
+ {values?.selfEvaluation || '暂无自我评价'} +
+
+ +
+
+ + {/* 教育经历 */} + + {values?.educationExp?.length > 0 ? ( + + {values.educationExp.map((edu: any, index: number) => ( + +
+
+
+ + {edu.school || '未填写学校'} + +
+ {edu.major || '未填写专业'} | {edu.degree || '未填写学位'} | +
+ +
{' '} +
+
+
+ {formatTimeRange(edu.startTime, edu.endTime)} +
+
+ {(edu.degreeDate || edu.graduation) && ( +
+ {edu.degreeDate && `学位授予: ${edu.degreeDate}`} + {edu.graduation && ` 毕业日期: ${edu.graduation}`} +
+ )} +
+
+ ))} +
+ ) : ( + renderEmpty('暂无教育经历') + )} +
+ + {/* 工作经历 */} + + {values?.workExp?.length > 0 ? ( + + {values.workExp.map((work: any, index: number) => ( + +
+
+
+ + {work.company || '未填写公司'} + +
+ {work.position || '未填写职位'} | {work.department || '未填写部门'} + {work.isFullTime !== null && ( + + {work.isFullTime ? '全职' : '兼职'} + + )} +
+
+
+ {formatTimeRange(work.startTime, work.endTime)} +
+
+ {work.duty && ( +
+ {work.duty} +
+ )} + {work.salary && ( +
+ 薪资: {work.salary} +
+ )} +
+
+ ))} +
+ ) : ( + renderEmpty('暂无工作经历') + )} +
+ + {/* 项目经历 */} + + {values?.projectExp?.length > 0 ? ( + + {values.projectExp.map((project: any, index: number) => ( + +
+
+
+ + {project.name || '未填写项目名称'} + +
+ {project.role || '未填写角色'} | {project.position || '未填写岗位'} +
+
+
+ {formatTimeRange(project.startTime, project.endTime)} +
+
+ {project.tasks && ( +
+ {project.tasks} +
+ )} +
+
+ ))} +
+ ) : ( + renderEmpty('暂无项目经历') + )} +
+ + {/* 技能特长 */} + + {values?.skillList?.length > 0 ? ( +
+ {values.skillList.map((skill: any, index: number) => ( + +
+ + {skill.skill} + + {skill.proficiency && ( +
+ {skill.proficiency} +
+ )} +
+
+ ))} +
+ ) : ( + renderEmpty('暂无技能特长') + )} +
+ + {/* 证书资质 */} + + {values?.certificateList?.length > 0 ? ( +
+ {values.certificateList.map((cert: any, index: number) => ( + +
+
+ {cert.name} +
+
+ 颁发单位: {cert.grantUnit || '未填写'} +
+
+ {cert.issueTime && `颁发时间: ${cert.issueTime}`} + {cert.managementPeriod && ` | 有效期: ${cert.managementPeriod}`} +
+
+
+ ))} +
+ ) : ( + renderEmpty('暂无证书资质') + )} +
+ + {/* 专业技术职务 */} + + {values?.professionalTechnicalPostList?.length > 0 ? ( +
+ {values.professionalTechnicalPostList.map((post: any, index: number) => ( + +
+
+ {post.seriesLevelName} - {post.postSeriesName} +
+
+ 聘任单位: {post.appointmentUnit || '未填写'} +
+
+ {post.appointmentTime && `聘任时间: ${post.appointmentTime}`} + {post.fullTimeOrPartTime && ` | ${post.fullTimeOrPartTime}`} +
+ {post.mainPost && ( +
+ 主要职务: {post.mainPost} +
+ )} +
+
+ ))} +
+ ) : ( + renderEmpty('暂无专业技术职务') + )} +
+
+ ); }; export default ResumeDetail; diff --git a/src/pages/ResumeLibrary/ResumeList/index.tsx b/src/pages/ResumeLibrary/ResumeList/index.tsx index 108c5dd..2c65bc5 100644 --- a/src/pages/ResumeLibrary/ResumeList/index.tsx +++ b/src/pages/ResumeLibrary/ResumeList/index.tsx @@ -76,12 +76,6 @@ function ResumeList() { valueType: 'text', align: 'center', }, - { - title: '手机号', - dataIndex: 'phone', - valueType: 'text', - align: 'center', - }, { title: '性别', dataIndex: 'sex', @@ -99,6 +93,13 @@ function ResumeList() { align: 'center', hideInSearch: true, }, + { + title: '手机号', + dataIndex: 'phone', + valueType: 'text', + align: 'center', + }, + { title: '出生日期', dataIndex: 'birthDate', @@ -126,16 +127,6 @@ function ResumeList() { return ; }, }, - { - title: '期望薪资', - align: 'center', - hideInSearch: true, - render: (_, record) => ( - - {record.salaryMin} - {record.salaryMax} - - ), - }, { title: '地区', dataIndex: 'area', @@ -146,6 +137,17 @@ function ResumeList() { return ; }, }, + { + title: '期望薪资', + align: 'center', + hideInSearch: true, + render: (_, record) => ( + + {record.salaryMin} - {record.salaryMax} + + ), + }, + { title: '状态', dataIndex: 'status', diff --git a/src/pages/ResumeLibrary/ResumeList/preView.json b/src/pages/ResumeLibrary/ResumeList/preView.json new file mode 100644 index 0000000..4516e0f --- /dev/null +++ b/src/pages/ResumeLibrary/ResumeList/preView.json @@ -0,0 +1,196 @@ +{ + "userId": 1001, + "name": "张明", + "age": "3", + "sex": "0", + "birthDate": "1992-05-15", + "education": "4", + "politicalAffiliation": "1", + "phone": "13800138000", + "avatar": "https://example.com/avatar/zhangming.jpg", + "salaryMin": "15000", + "salaryMax": "25000", + "area": "1", + "jobTitleId": "101,102,103", + "experience": "2", + "jobTitle": ["Java开发工程师", "后端开发工程师", "系统架构师"], + "idNumber": "110101199205150012", + "contactEmail": "zhangming@example.com", + "jobIntention": "寻求Java后端开发岗位,希望在互联网行业发挥技术专长,参与高并发分布式系统开发", + "graduationSchool": "清华大学", + "workYears": 5, + "residenceAddress": "北京市海淀区中关村大街1号", + "major": "计算机科学与技术", + "introduction": "5年Java开发经验,精通Spring全家桶,熟悉分布式系统架构设计,有大型互联网项目开发经验", + "selfEvaluation": "技术扎实,学习能力强,具备良好的团队协作精神和问题解决能力,对新技术保持热情", + "educationExp": [ + { + "startTime": "2010-09", + "endTime": "2014-06", + "school": "清华大学", + "major": "计算机科学与技术", + "education": "4", + "degree": "文学学士", + "degreeDate": "2014-06-30", + "graduation": "2014-06-30" + }, + { + "startTime": "2014-09", + "endTime": "2017-06", + "school": "清华大学", + "major": "软件工程", + "education": "5", + "degree": "理学学士", + "degreeDate": "2017-06-30", + "graduation": "2017-06-30" + } + ], + "workExp": [ + { + "startTime": "2019-03", + "endTime": "至今", + "company": "阿里巴巴集团", + "department": "技术事业部", + "position": "高级Java开发工程师", + "duty": "负责电商平台核心交易系统开发,优化系统性能,参与分布式架构设计,主导技术方案评审", + "isFullTime": true, + "salary": "25k-35k" + }, + { + "startTime": "2017-07", + "endTime": "2019-02", + "company": "腾讯科技有限公司", + "department": "微信支付事业部", + "position": "Java开发工程师", + "duty": "参与微信支付后台系统开发,负责交易模块功能实现,处理高并发场景下的技术挑战", + "isFullTime": true, + "salary": "18k-25k" + }, + { + "startTime": "2016-03", + "endTime": "2017-06", + "company": "百度在线网络技术有限公司", + "department": "搜索事业部", + "position": "初级Java开发工程师", + "duty": "参与搜索引擎后端服务开发,学习大型系统架构设计,积累分布式系统开发经验", + "isFullTime": true, + "salary": "12k-18k" + } + ], + "projectExp": [ + { + "startTime": "2020-01", + "endTime": "2021-06", + "name": "电商平台分布式交易系统重构", + "role": "核心开发人员", + "position": "高级Java开发工程师", + "tasks": "负责交易核心模块重构,引入分布式事务解决方案,优化系统吞吐量提升300%,处理峰值QPS达10万+" + }, + { + "startTime": "2019-05", + "endTime": "2019-12", + "name": "微信支付风控系统升级", + "role": "开发负责人", + "position": "Java开发工程师", + "tasks": "主导风控规则引擎重构,引入机器学习算法,提升风险识别准确率至98%,减少误判率50%" + }, + { + "startTime": "2018-03", + "endTime": "2018-10", + "name": "智能推荐系统开发", + "role": "后端开发", + "position": "Java开发工程师", + "tasks": "参与推荐算法后端服务开发,构建用户画像系统,提升推荐点击率25%,日均处理数据量1TB" + } + ], + "certificateList": [ + { + "name": "Oracle Certified Professional, Java SE 11 Developer", + "issueTime": "2020-08", + "grantUnit": "Oracle", + "level": "1", + "mainBasis": "通过Oracle官方认证考试", + "managementPeriod": "长期有效" + }, + { + "name": "阿里云专业认证工程师", + "issueTime": "2019-12", + "grantUnit": "阿里云", + "level": "2", + "mainBasis": "通过阿里云专业技术认证", + "managementPeriod": "3年" + }, + { + "name": "全国计算机等级考试四级", + "issueTime": "2013-09", + "grantUnit": "教育部考试中心", + "level": "2", + "mainBasis": "通过全国计算机等级考试", + "managementPeriod": "长期有效" + }, + { + "name": "软件设计师", + "issueTime": "2016-05", + "grantUnit": "人力资源和社会保障部", + "level": "2", + "mainBasis": "通过全国计算机技术与软件专业技术资格考试", + "managementPeriod": "长期有效" + } + ], + "skillList": [ + { + "skill": "Java", + "proficiency": "精通,8年经验,熟悉JVM调优、多线程编程、性能优化" + }, + { + "skill": "Spring Framework", + "proficiency": "精通,6年项目经验,熟悉Spring Boot、Spring Cloud、Spring MVC" + }, + { + "skill": "MySQL", + "proficiency": "熟练,5年经验,熟悉数据库设计、SQL优化、索引调优" + }, + { + "skill": "Redis", + "proficiency": "熟练,4年经验,熟悉缓存设计、集群部署、高可用方案" + }, + { + "skill": "Docker", + "proficiency": "熟练,3年经验,熟悉容器化部署、镜像管理、编排工具" + }, + { + "skill": "Kubernetes", + "proficiency": "掌握,2年经验,了解集群管理、服务发现、自动扩缩容" + }, + { + "skill": "消息队列", + "proficiency": "熟练,4年经验,熟悉RabbitMQ、Kafka使用和原理" + }, + { + "skill": "分布式系统", + "proficiency": "掌握,3年经验,了解分布式事务、服务治理、限流降级" + } + ], + "professionalTechnicalPostList": [ + { + "serialNumber": 1, + "postSeriesName": "计算机技术", + "appointmentTime": "2020-06-15", + "seriesLevelName": "高级工程师", + "appointmentUnit": "阿里巴巴集团", + "fullTimeOrPartTime": "专职", + "mainPost": "Java后端开发与系统架构", + "partTimeApprovalAuthority": "" + }, + { + "serialNumber": 2, + "postSeriesName": "软件工程", + "appointmentTime": "2018-12-20", + "seriesLevelName": "工程师", + "appointmentUnit": "腾讯科技有限公司", + "fullTimeOrPartTime": "专职", + "mainPost": "后端系统开发", + "partTimeApprovalAuthority": "" + } + ] +}