From 2bbfdf3891f18a7e8b3a07ab0ec3bf806dd6480c Mon Sep 17 00:00:00 2001 From: wangyunfei <1224056307@qq,com> Date: Fri, 29 Aug 2025 09:01:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.js | 6 + .../staffmanage_particulars/Particulars.js | 241 ++++++ .../staffmanage_particulars/Particulars.less | 334 ++++++++ src/pages/staffmanage_particulars/girl.png | Bin 0 -> 11225 bytes src/pages/staffmanage_staffinfo/StaffInfo.js | 655 +++++++++++++++- .../staffmanage_staffinfo/StaffInfo.less | 718 +++++++++++++++++- .../from/StaffInfoadd.js | 197 +++++ .../staffmanage_staffresume/StaffResume.js | 4 +- .../staffmanage_staffresume/StaffResume.less | 477 +++++++++++- src/pages/topnavbar/TopNavBar.js | 8 +- 10 files changed, 2619 insertions(+), 21 deletions(-) create mode 100644 src/pages/staffmanage_particulars/Particulars.js create mode 100644 src/pages/staffmanage_particulars/Particulars.less create mode 100644 src/pages/staffmanage_particulars/girl.png create mode 100644 src/pages/staffmanage_staffinfo/from/StaffInfoadd.js diff --git a/config/routes.js b/config/routes.js index 946cab9..a1007da 100644 --- a/config/routes.js +++ b/config/routes.js @@ -63,6 +63,12 @@ export default [ name: 'staffresume', component: './staffmanage_staffresume/StaffResume', }, + { + path: '/topnavbar00/staffmanage/particulars', + // icon: 'bank', + name: 'particulars', + component: './staffmanage_particulars/Particulars', + }, ], }, // 组织管理 diff --git a/src/pages/staffmanage_particulars/Particulars.js b/src/pages/staffmanage_particulars/Particulars.js new file mode 100644 index 0000000..079cd95 --- /dev/null +++ b/src/pages/staffmanage_particulars/Particulars.js @@ -0,0 +1,241 @@ + +import React, { PureComponent } from 'react'; +import { Card, Avatar, Breadcrumb, Tag, Descriptions, Table, Row, Col, Button, Divider } from 'antd'; +import { UserOutlined, HomeOutlined, TeamOutlined, MailOutlined, PhoneOutlined, IdcardOutlined, ApartmentOutlined, HistoryOutlined, BookOutlined, ArrowLeftOutlined, EditOutlined, PrinterOutlined } from '@ant-design/icons'; +import { history } from 'umi'; +import styles from './Particulars.less'; +import girlAvatar from './girl.png'; + +const careerTableData = [ + { + key: '1', + company: '上海科技有限公司', + position: '高级产品经理', + duration: '2018-06-15 至今 · 5年4个月', + description: '主导公司核心产品线的规划与设计,带领5人产品团队,成功推出3款市场领先产品,用户增长300%', + status: 'current', + }, + { + key: '2', + company: '北京云创科技', + position: '产品经理', + duration: '2015-07-01 至 2018-05-30 · 2年11个月', + description: '负责企业级SaaS产品的设计与迭代,成功将产品NPS从35提升至72,客户续费率提升至85%', + status: '', + }, + { + key: '3', + company: '深圳创新科技', + position: '产品助理', + duration: '2013-09-01 至 2015-06-30 · 1年10个月', + description: '协助产品经理完成需求分析、原型设计,参与3个移动端项目从0到1的全过程', + status: '', + }, +]; + +const educationTableData = [ + { + key: '1', + school: '复旦大学', + degree: '硕士', + major: '计算机科学与技术', + duration: '2011-09 ~ 2013-07', + }, + { + key: '2', + school: '华东理工大学', + degree: '本科', + major: '软件工程', + duration: '2007-09 ~ 2011-07', + }, +]; + +class Particulars extends PureComponent { + handleGoBack = () => { + // 跳转到人员管理页面 + history.push('/topnavbar00/staffmanage'); + }; + + render() { + return ( +
+ + {/* 面包屑导航 */} + + + {/* 返回按钮 */} + + + {/* 个人信息卡片 */} + + + + + + +
+
+ 林晓梅 + 高级产品经理 + 产品研发中心 +
+
+ + +
+ 员工编号 + EMP20230085 +
+ + +
+ 入职日期 + 2018-06-15 +
+ + +
+ 工作年限 + 5年4个月 +
+ + +
+ 员工状态 + 在职 +
+ +
+
+
+ + +
+ + +
+ +
+
+ + {/* 个人信息区 */} + 个人信息}> + + 310******19900823**** + 已婚 + 138****5678 + linxiaomei@company.com + 上海市浦东新区张江高科技园区科苑路88号 + + + + {/* 工作信息区 */} + 工作信息}> + + 产品研发中心 - 产品设计部 + 张伟(产品研发中心总监) + 负责公司核心产品线的规划与设计,主导产品全生命周期管理,协调跨部门资源推动产品落地 + + + + {/* 职业履历表格 */} + 职业履历}> +
+ + + + + {/* 职业履历时间轴(自定义实现) */} + {/* 职业履历时间轴}> +
+ {careerTableData.map((item, idx) => ( +
+
+
+
+ {item.company} + {item.status === 'current' && 当前公司} +
+
{item.position}
+
{item.duration}
+
{item.description}
+
+
+ ))} +
+
*/} + + {/* 教育经历表格 */} + 教育经历}> +
+
+ + + + {/* 组织架构图 */} + {/* 组织架构}> +
+ 组织架构图 +
+
*/} + + {/* 页脚 */} + +
+ +
© 2023 人力资源管理系统 版权所有
+
+ + ); + } +} + +export default Particulars; diff --git a/src/pages/staffmanage_particulars/Particulars.less b/src/pages/staffmanage_particulars/Particulars.less new file mode 100644 index 0000000..9da9f56 --- /dev/null +++ b/src/pages/staffmanage_particulars/Particulars.less @@ -0,0 +1,334 @@ + +.particularsContainer { + background: #f5f6fa; + min-width: 70vw; + min-height: 100vh; + max-height: 100vh; + overflow-y: auto; + overflow-x: hidden; + padding: 16px 24px 32px 24px; +} + +.announcementBar { + background: #fff; + box-shadow: 0 2px 8px #f0f1f2; + padding: 8px 24px; + font-size: 14px; + color: #666; + display: flex; + align-items: center; + gap: 24px; +} +.announcementTitle { + color: #2d5cf6; + font-weight: 500; + margin-right: 8px; +} +.announcementItem { + margin-right: 16px; +} + +.breadcrumb { + margin: 24px 0 8px 0; + font-size: 13px; +} +.backBtn { + margin-bottom: 12px; +} + +.profileCard { + margin-bottom: 24px; + border-radius: 12px; + box-shadow: 0 2px 8px #f0f1f2; +} +.avatarCol { + display: flex; + align-items: center; + justify-content: center; +} +.profileInfoHeader { + padding: 8px 0; +} +.nameSection { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; +} +.profileName { + font-size: 24px; + font-weight: bold; + color: #222; +} +.profileDept { + color: #888; + font-size: 15px; + margin-left: 4px; +} +.profileDetails { + margin-top: 8px; +} +.detailItem { + display: flex; + flex-direction: column; + gap: 4px; +} +.detailLabel { + font-size: 13px; + color: #888; + font-weight: 500; +} +.detailValue { + font-size: 15px; + color: #333; + font-weight: 600; +} +.statusTag { + margin: 0; + font-weight: 500; +} +.actionCol { + display: flex; + align-items: center; + justify-content: center; +} +.actionButtons { + display: flex; + flex-direction: column; + gap: 12px; + width: 100%; + max-width: 120px; +} +.editBtn { + width: 100%; + height: 40px; + border-radius: 8px; + font-weight: 500; +} +.printBtn { + width: 100%; + height: 40px; + border-radius: 8px; + font-weight: 500; +} + +@media (max-width: 768px) { + .actionButtons { + flex-direction: row; + max-width: none; + } + .nameSection { + flex-wrap: wrap; + gap: 8px; + } +} + +.infoCard { + margin-bottom: 24px; + border-radius: 12px; + box-shadow: 0 2px 8px #f0f1f2; + + // 表格包装器样式 + .tableWrapper { + margin-top: 16px; + border-radius: 8px; + overflow: hidden; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05); + + // 自定义滚动条样式 + &::-webkit-scrollbar { + width: 6px; + height: 6px; + } + + &::-webkit-scrollbar-track { + background: #f5f5f5; + border-radius: 3px; + } + + &::-webkit-scrollbar-thumb { + background: #d9d9d9; + border-radius: 3px; + + &:hover { + background: #bfbfbf; + } + } + } + + // 自定义表格样式 + .customTable { + .ant-table-wrapper { + .ant-table-thead > tr > th { + background-color: #2c3e50 !important; + color: #ecf0f1 !important; + font-weight: 600; + border-bottom: 1px solid #34495e; + position: sticky; + top: 0; + z-index: 1; + text-align: center; + font-size: 14px; + padding: 16px 12px; + letter-spacing: 0.5px; + } + + .ant-table-tbody > tr { + &:hover > td { + background-color: #f8f9ff !important; + } + + &:nth-child(even) { + background-color: #fafbfc; + } + + > td { + border-bottom: 1px solid #e8e8e8; + padding: 14px 12px; + font-size: 13px; + color: #333; + vertical-align: top; + line-height: 1.6; + } + } + + .ant-table { + border-radius: 8px; + overflow: hidden; + border: 1px solid #e8e8e8; + } + + .ant-table-container { + border-radius: 8px; + } + } + } + + // 表格通用样式(为了向后兼容) + .ant-table-wrapper { + .ant-table-thead > tr > th { + background-color: #2c3e50 !important; + color: #ecf0f1 !important; + font-weight: 600; + border-bottom: 1px solid #34495e; + position: sticky; + top: 0; + z-index: 1; + text-align: center; + font-size: 13px; + } + + .ant-table-tbody > tr { + &:hover > td { + background-color: #f8f9ff !important; + } + + > td { + border-bottom: 1px solid #e8e8e8; + padding: 12px 8px; + font-size: 13px; + color: #333; + vertical-align: top; + } + } + + .ant-table { + border-radius: 8px; + overflow: hidden; + } + } +} + +.careerTimeline { + margin-top: 16px; + padding-left: 12px; + border-left: 2px solid #2d5cf6; +} +.timelineItem { + position: relative; + margin-bottom: 32px; + padding-left: 24px; +} +.timelineDot { + position: absolute; + left: -13px; + top: 8px; + width: 12px; + height: 12px; + background: #d9d9d9; + border-radius: 50%; + border: 2px solid #fff; + box-shadow: 0 0 0 2px #2d5cf6; +} +.timelineDotActive { + background: #2d5cf6; + box-shadow: 0 0 0 2px #2d5cf6; +} +.timelineContent { + margin-left: 8px; +} +.timelineHeader { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; + font-size: 16px; +} +.timelineCompany { + color: #222; +} +.timelinePosition { + color: #555; + font-size: 15px; + margin-top: 2px; +} +.timelineDuration { + color: #888; + font-size: 13px; + margin-top: 2px; +} +.timelineDescription { + color: #444; + font-size: 14px; + margin-top: 4px; +} + +.orgChartWrapper { + display: flex; + align-items: center; + justify-content: center; + background: #f5f6fa; + border-radius: 8px; + padding: 16px; + min-height: 180px; +} +.orgChartImg { + max-width: 100%; + max-height: 220px; + object-fit: contain; +} + +.footer { + margin-top: 32px; + text-align: center; + color: #888; + font-size: 13px; +} +.footerLinks { + margin-bottom: 8px; + display: flex; + flex-wrap: wrap; + gap: 16px; + justify-content: center; +} +.footerLinks a { + color: #888; + text-decoration: none; + transition: color 0.2s; +} +.footerLinks a:hover { + color: #2d5cf6; +} +.footerCopyright { + margin-top: 4px; +} diff --git a/src/pages/staffmanage_particulars/girl.png b/src/pages/staffmanage_particulars/girl.png new file mode 100644 index 0000000000000000000000000000000000000000..44ff8f57292cbaf670654f3a7a1247ef1fd9244e GIT binary patch literal 11225 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 literal 0 HcmV?d00001 diff --git a/src/pages/staffmanage_staffinfo/StaffInfo.js b/src/pages/staffmanage_staffinfo/StaffInfo.js index 9f2025a..5641bc7 100644 --- a/src/pages/staffmanage_staffinfo/StaffInfo.js +++ b/src/pages/staffmanage_staffinfo/StaffInfo.js @@ -1,13 +1,658 @@ -import React, {Fragment, PureComponent} from 'react'; +import React, { PureComponent } from 'react'; +import { + Card, + Tree, + Input, + Button, + Table, + Select, + Space, + Pagination, + Row, + Col, + Form, +} from 'antd'; +import { history } from 'umi'; +import { + SearchOutlined, + ExpandOutlined, + DownloadOutlined, + UserOutlined, + TeamOutlined, + ApartmentOutlined, + SyncOutlined, + DollarOutlined, + SettingOutlined, + ClearOutlined, + UserAddOutlined, + EditOutlined, + DeleteOutlined +} from '@ant-design/icons'; import styles from './StaffInfo.less'; +import StaffInfoAdd from './from/StaffInfoadd'; + +const { Option } = Select; + class StaffInfo extends PureComponent { + constructor(props) { + super(props); + this.state = { + searchForm: {}, + selectedKeys: [], + expandedKeys: ['0-0', '0-0-0', '0-0-1', '0-0-2'], + addModalVisible: false, // 新增弹窗显示状态 + addLoading: false, // 新增loading状态 + organizationData: [ + { + title: '飞利信科技有限公司', + key: '0-0', + count: 356, + children: [ + { + title: '技术部', + key: '0-0-0', + count: 120, + children: [ + { title: '前端组', key: '0-0-0-0', count: 45 }, + { title: '后端组', key: '0-0-0-1', count: 52 }, + { title: '测试组', key: '0-0-0-2', count: 23 } + ], + }, + { + title: '产品部', + key: '0-0-1', + count: 68, + children: [ + { title: '产品设计组', key: '0-0-1-0', count: 28 }, + { title: '用户体验组', key: '0-0-1-1', count: 25 }, + { title: '产品运营组', key: '0-0-1-2', count: 15 } + ], + }, + { + title: '运营部', + key: '0-0-2', + count: 52, + children: [ + { title: '市场营销组', key: '0-0-2-0', count: 22 }, + { title: '客户服务组', key: '0-0-2-1', count: 18 }, + { title: '商务合作组', key: '0-0-2-2', count: 12 } + ], + }, + { + title: '财务部', + key: '0-0-3', + count: 32, + children: [ + { title: '会计组', key: '0-0-3-0', count: 18 }, + { title: '审计组', key: '0-0-3-1', count: 14 } + ], + }, + { + title: '人事部', + key: '0-0-4', + count: 84, + children: [ + { title: 'HR专员组', key: '0-0-4-0', count: 25 }, + { title: '招聘组', key: '0-0-4-1', count: 22 }, + { title: '培训组', key: '0-0-4-2', count: 18 }, + { title: '薪酬组', key: '0-0-4-3', count: 19 } + ], + }, + ], + }, + ], + tableData: [ + { + key: '1', + id: 1, + name: '张三', + phone: 28, // 年龄 + idCard: '技术部', // 部门 + department: '高级工程师', // 岗位 + position: '全职', // 工作性质 + status: '138****1234', // 电话 + entryDate: '2020-03-15' + }, + { + key: '2', + id: 2, + name: '李四', + phone: 30, // 年龄 + idCard: '产品部', // 部门 + department: '产品经理', // 岗位 + position: '全职', // 工作性质 + status: '139****5678', // 电话 + entryDate: '2019-08-20' + }, + { + key: '3', + id: 3, + name: '王五', + phone: 25, // 年龄 + idCard: '运营部', // 部门 + department: '运营专员', // 岗位 + position: '全职', // 工作性质 + status: '136****9999', // 电话 + entryDate: '2021-05-10' + }, + { + key: '4', + id: 4, + name: '赵六', + phone: 32, // 年龄 + idCard: '财务部', // 部门 + department: '会计', // 岗位 + position: '全职', // 工作性质 + status: '137****8888', // 电话 + entryDate: '2018-12-01' + }, + { + key: '5', + id: 5, + name: '陈七', + phone: 26, // 年龄 + idCard: '人事部', // 部门 + department: 'HR专员', // 岗位 + position: '全职', // 工作性质 + status: '135****7777', // 电话 + entryDate: '2022-01-15' + }, + ], + pagination: { + current: 1, + pageSize: 5, + total: 356, + } + }; + } + + // 获取处理后的树形数据 + getTreeData = () => { + const { organizationData } = this.state; + + const processNode = (node) => ({ + key: node.key, + title: ( + + {this.getNodeIcon(node.title)} + {node.title} + ({node.count}) + + ), + children: node.children ? node.children.map(processNode) : undefined + }); + + return organizationData.map(processNode); + }; + + // 获取节点图标 + getNodeIcon = (title) => { + if (title.includes('公司') || title.includes('集团')) return ; + if (title.includes('技术') || title.includes('开发') || title.includes('测试')) return ; + if (title.includes('产品') || title.includes('设计') || title.includes('体验')) return ; + if (title.includes('运营') || title.includes('市场') || title.includes('客户') || title.includes('商务')) return ; + if (title.includes('财务') || title.includes('会计') || title.includes('审计')) return ; + if (title.includes('人事') || title.includes('HR') || title.includes('招聘') || title.includes('培训') || title.includes('薪酬')) return ; + return ; + }; + + // 组织架构树数据 (保留原始数据以备后用) + treeData = [ + { + title: '飞利信科技有限公司', + key: '0-0', + icon: , + children: [ + { + title: '技术部', + key: '0-0-0', + icon: , + children: [ + { + title: '前端组', + key: '0-0-0-0', + icon: + }, + { + title: '后端组', + key: '0-0-0-1', + icon: + }, + ], + }, + { + title: '产品部', + key: '0-0-1', + icon: , + children: [ + { + title: '产品设计组', + key: '0-0-1-0', + icon: + }, + ], + }, + { + title: '运营部', + key: '0-0-2', + icon: , + }, + { + title: '财务部', + key: '0-0-3', + icon: , + }, + { + title: '人事部', + key: '0-0-4', + icon: , + }, + ], + }, + ]; + + // 表格列配置 + columns = [ + { + title: '序号', + dataIndex: 'id', + key: 'id', + width: 60, + align: 'center', + }, + { + title: '姓名', + dataIndex: 'name', + key: 'name', + width: 60, + render: (text, record) => ( + + ), + }, + { + title: '年龄', + dataIndex: 'phone', + key: 'phone', + width: 50, + }, + { + title: '部门', + dataIndex: 'idCard', + key: 'idCard', + width: 70, + }, + { + title: '岗位', + dataIndex: 'department', + key: 'department', + width: 80, + }, + { + title: '工作性质', + dataIndex: 'position', + key: 'position', + width: 50, + }, + { + title: '电话', + dataIndex: 'status', + key: 'status', + width: 100, + }, + { + title: '操作', + key: 'action', + width: 80, + render: (_, record) => ( + +