yuanxingsheji/健康管理/健康管理-管理员.html

1884 lines
74 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>员工健康管理系统 - 管理员</title>
<style>
:root {
--primary-color: #3498db;
--secondary-color: #2c3e50;
--success-color: #27ae60;
--danger-color: #e74c3c;
--warning-color: #f39c12;
--light-color: #f8f9fa;
--dark-color: #343a40;
--gray-color: #7f8c8d;
--border-color: #ddd;
--transition-speed: 0.3s;
}
body {
font-family: 'Microsoft YaHei', sans-serif;
margin: 0;
padding: 0;
background-color: #f4f6f9;
color: #333;
}
.header {
background-color: var(--secondary-color);
color: white;
padding: 15px 20px;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
position: sticky;
top: 0;
z-index: 100;
}
.header h1 {
margin: 0;
font-size: 22px;
}
.user-info {
display: flex;
align-items: center;
}
.user-info span {
margin-right: 15px;
}
.logout-btn {
background-color: var(--danger-color);
color: white;
border: none;
padding: 5px 10px;
border-radius: 3px;
cursor: pointer;
transition: background-color var(--transition-speed);
}
.logout-btn:hover {
background-color: #c0392b;
}
.container {
display: flex;
min-height: calc(100vh - 60px);
}
.sidebar {
width: 220px;
background-color: #34495e;
color: white;
padding: 20px 0;
transition: width var(--transition-speed);
position: relative;
z-index: 90;
}
.sidebar-menu {
list-style: none;
padding: 0;
margin: 0;
}
.sidebar-menu li {
padding: 12px 20px;
cursor: pointer;
transition: all var(--transition-speed);
display: flex;
align-items: center;
position: relative;
}
.sidebar-menu li i {
margin-right: 10px;
width: 20px;
text-align: center;
transition: margin-right var(--transition-speed);
}
.sidebar-menu li:hover {
background-color: var(--secondary-color);
}
.sidebar-menu li.active {
background-color: var(--secondary-color);
border-left: 4px solid var(--primary-color);
}
.sidebar-menu li .shortcut {
position: absolute;
right: 20px;
font-size: 12px;
opacity: 0.7;
transition: opacity var(--transition-speed);
}
.sidebar-menu li:hover .shortcut {
opacity: 1;
}
.main-content {
flex: 1;
padding: 20px;
transition: margin-left var(--transition-speed);
}
/* 内容区域切换动画 */
.tab-content {
display: none;
opacity: 0;
transform: translateY(10px);
transition: opacity 0.3s ease, transform 0.3s ease;
}
.tab-content.active {
display: block;
opacity: 1;
transform: translateY(0);
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.card {
background-color: white;
border-radius: 5px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
margin-bottom: 20px;
}
.card-header {
border-bottom: 1px solid var(--border-color);
padding-bottom: 10px;
margin-bottom: 15px;
display: flex;
justify-content: space-between;
align-items: center;
}
.card-header h2 {
margin: 0;
font-size: 18px;
color: var(--secondary-color);
}
table {
width: 100%;
border-collapse: collapse;
}
th, td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid var(--border-color);
}
th {
background-color: var(--light-color);
font-weight: bold;
color: var(--secondary-color);
}
tr:hover {
background-color: #f5f5f5;
}
.btn {
padding: 8px 12px;
border-radius: 3px;
border: none;
cursor: pointer;
font-size: 14px;
margin-right: 5px;
transition: background-color 0.3s;
display: inline-flex;
align-items: center;
}
.btn i {
margin-right: 5px;
}
.btn-primary {
background-color: var(--primary-color);
color: white;
}
.btn-success {
background-color: var(--success-color);
color: white;
}
.btn-danger {
background-color: var(--danger-color);
color: white;
}
.btn-warning {
background-color: var(--warning-color);
color: white;
}
.btn-info {
background-color: #17a2b8;
color: white;
}
.btn-primary:hover {
background-color: #2980b9;
}
.btn-success:hover {
background-color: #219653;
}
.btn-danger:hover {
background-color: #c0392b;
}
.btn-warning:hover {
background-color: #e67e22;
}
.btn-info:hover {
background-color: #138496;
}
.status-active {
color: var(--success-color);
font-weight: bold;
}
.status-expired {
color: var(--danger-color);
font-weight: bold;
}
.status-pending {
color: var(--warning-color);
font-weight: bold;
}
.status-warning {
color: var(--warning-color);
font-weight: bold;
}
.text-success {
color: var(--success-color);
}
.text-warning {
color: var(--warning-color);
}
.text-danger {
color: var(--danger-color);
}
.text-info {
color: #17a2b8;
}
.search-bar {
display: flex;
margin-bottom: 20px;
gap: 10px;
}
.search-bar input {
flex: 1;
padding: 10px;
border: 1px solid var(--border-color);
border-radius: 4px;
}
.search-bar button {
padding: 10px 15px;
background-color: var(--primary-color);
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s;
}
.search-bar button:hover {
background-color: #2980b9;
}
.pagination {
display: flex;
justify-content: center;
margin-top: 20px;
}
.pagination a {
color: var(--primary-color);
padding: 8px 16px;
text-decoration: none;
border: 1px solid var(--border-color);
margin: 0 4px;
}
.pagination a.active {
background-color: var(--primary-color);
color: white;
border: 1px solid var(--primary-color);
}
.pagination a:hover:not(.active) {
background-color: #ddd;
}
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0,0,0,0.4);
}
.modal-content {
background-color: #fefefe;
margin: 10% auto;
padding: 20px;
border: 1px solid #888;
width: 60%;
border-radius: 5px;
max-width: 800px;
box-shadow: 0 5px 15px rgba(0,0,0,0.3);
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
cursor: pointer;
}
.close:hover {
color: black;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
.form-group input,
.form-group select,
.form-group textarea {
width: 100%;
padding: 8px;
border: 1px solid var(--border-color);
border-radius: 4px;
box-sizing: border-box;
}
.form-group textarea {
min-height: 100px;
resize: vertical;
}
.form-actions {
text-align: right;
margin-top: 20px;
}
.badge {
display: inline-block;
padding: 3px 8px;
border-radius: 10px;
font-size: 12px;
font-weight: bold;
margin-left: 5px;
}
.badge-success {
background-color: var(--success-color);
color: white;
}
.badge-warning {
background-color: var(--warning-color);
color: white;
}
.badge-danger {
background-color: var(--danger-color);
color: white;
}
.badge-info {
background-color: #17a2b8;
color: white;
}
.alert {
padding: 10px 15px;
border-radius: 4px;
margin-bottom: 15px;
}
.alert-warning {
background-color: #fff3cd;
color: #856404;
border-left: 4px solid var(--warning-color);
}
.alert-info {
background-color: #d1ecf1;
color: #0c5460;
border-left: 4px solid #17a2b8;
}
.toggle-sidebar {
display: none;
background: none;
border: none;
color: white;
font-size: 20px;
cursor: pointer;
margin-right: 15px;
}
.health-record {
margin-bottom: 20px;
padding: 15px;
background-color: white;
border-radius: 5px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.health-record-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px solid var(--border-color);
}
.health-record-title {
font-weight: bold;
color: var(--secondary-color);
}
.health-record-date {
color: var(--gray-color);
font-size: 14px;
}
.health-record-content {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.health-record-section {
flex: 1;
min-width: 250px;
}
.health-record-section h4 {
margin-top: 0;
color: var(--secondary-color);
border-bottom: 1px solid var(--border-color);
padding-bottom: 5px;
}
.health-record-item {
display: flex;
margin-bottom: 8px;
}
.health-record-label {
width: 120px;
font-weight: bold;
color: #555;
}
.health-record-value {
flex: 1;
}
.stat-cards {
display: flex;
gap: 20px;
margin-bottom: 20px;
flex-wrap: wrap;
}
.stat-card {
flex: 1;
min-width: 200px;
background-color: white;
border-radius: 5px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
text-align: center;
}
.stat-card h3 {
margin-top: 0;
color: var(--gray-color);
}
.stat-card .value {
font-size: 24px;
font-weight: bold;
margin: 10px 0;
}
.stat-card .trend {
font-size: 14px;
color: var(--success-color);
}
.stat-card .trend.down {
color: var(--danger-color);
}
.chart-container {
width: 100%;
height: 400px;
margin-bottom: 20px;
background-color: white;
border-radius: 5px;
padding: 20px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: center;
}
.profile-section {
display: flex;
align-items: center;
margin-bottom: 20px;
}
.profile-avatar img {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
margin-right: 20px;
border: 3px solid var(--primary-color);
}
.profile-info {
flex: 1;
}
.profile-name {
font-size: 24px;
font-weight: bold;
margin-bottom: 5px;
}
.profile-meta {
color: var(--gray-color);
margin-bottom: 10px;
}
.info-table {
width: 100%;
border-collapse: collapse;
}
.info-table td {
padding: 10px;
border-bottom: 1px solid var(--border-color);
}
.info-table td:first-child {
width: 150px;
font-weight: bold;
color: var(--secondary-color);
}
.tabs {
display: flex;
border-bottom: 1px solid var(--border-color);
margin-bottom: 20px;
}
.tab {
padding: 10px 20px;
cursor: pointer;
border-bottom: 3px solid transparent;
transition: all var(--transition-speed);
}
.tab:hover {
background-color: #f5f5f5;
}
.tab.active {
border-bottom-color: var(--primary-color);
color: var(--primary-color);
font-weight: bold;
}
.settings-tab-content {
display: none;
}
.settings-tab-content.active {
display: block;
}
/* 响应式设计 */
@media (max-width: 992px) {
.sidebar {
width: 60px;
overflow: hidden;
}
.sidebar-menu li span {
display: none;
opacity: 0;
transition: opacity var(--transition-speed);
}
.sidebar-menu li i {
margin-right: 0;
font-size: 18px;
}
.sidebar-menu li .shortcut {
display: none;
}
.sidebar.expanded {
width: 220px;
}
.sidebar.expanded .sidebar-menu li span {
display: inline;
opacity: 1;
}
.sidebar.expanded .sidebar-menu li i {
margin-right: 10px;
}
.toggle-sidebar {
display: block;
}
}
@media (max-width: 768px) {
.container {
flex-direction: column;
}
.sidebar {
width: 100%;
padding: 10px 0;
position: sticky;
top: 60px;
}
.sidebar-menu {
display: flex;
overflow-x: auto;
scrollbar-width: none; /* Firefox */
}
.sidebar-menu::-webkit-scrollbar {
display: none; /* Chrome/Safari */
}
.sidebar-menu li {
white-space: nowrap;
flex: 0 0 auto;
}
.sidebar.expanded .sidebar-menu {
flex-wrap: wrap;
}
.main-content {
padding: 15px;
}
.stat-cards {
flex-direction: column;
}
.health-record-content {
flex-direction: column;
}
.modal-content {
width: 90%;
margin: 20px auto;
}
.profile-section {
flex-direction: column;
text-align: center;
}
.profile-avatar {
margin-bottom: 15px;
margin-right: 0;
}
}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
</head>
<body>
<div class="header">
<div>
<button class="toggle-sidebar" onclick="toggleSidebar()">
<i class="fas fa-bars"></i>
</button>
<h1>员工健康管理系统 - 管理员</h1>
</div>
<div class="user-info">
<span id="current-username">系统管理员</span>
<button class="logout-btn" onclick="logout()">
<i class="fas fa-sign-out-alt"></i> 退出
</button>
</div>
</div>
<div class="container">
<div class="sidebar" id="sidebar">
<ul class="sidebar-menu">
<li class="active" data-target="dashboard" data-shortcut="1">
<i class="fas fa-tachometer-alt"></i>
<span>工作台</span>
<span class="shortcut">1</span>
</li>
<li data-target="health-records" data-shortcut="2">
<i class="fas fa-heartbeat"></i>
<span>健康档案</span>
<span class="shortcut">2</span>
</li>
<li data-target="medical-checkups" data-shortcut="3">
<i class="fas fa-stethoscope"></i>
<span>体检管理</span>
<span class="shortcut">3</span>
</li>
<li data-target="health-statistics" data-shortcut="4">
<i class="fas fa-chart-bar"></i>
<span>健康统计</span>
<span class="shortcut">4</span>
</li>
<li data-target="profile" data-shortcut="5">
<i class="fas fa-user"></i>
<span>个人信息</span>
<span class="shortcut">5</span>
</li>
<li data-target="settings" data-shortcut="6">
<i class="fas fa-cog"></i>
<span>系统设置</span>
<span class="shortcut">6</span>
</li>
</ul>
</div>
<div class="main-content" id="main-content">
<!-- 工作台 -->
<div id="dashboard" class="tab-content active">
<div class="card">
<div class="card-header">
<h2><i class="fas fa-tachometer-alt"></i> 健康管理概览</h2>
</div>
<div>
<div class="stat-cards">
<div class="stat-card">
<h3>员工总数</h3>
<div class="value">156</div>
<div class="trend">↑ 5% 较上月</div>
</div>
<div class="stat-card">
<h3>健康员工</h3>
<div class="value">128</div>
<div class="trend">↑ 3% 较上月</div>
</div>
<div class="stat-card">
<h3>需关注员工</h3>
<div class="value">23</div>
<div class="trend down">↑ 5% 较上月</div>
</div>
<div class="stat-card">
<h3>年度体检率</h3>
<div class="value">92%</div>
<div class="trend">↑ 8% 较上年</div>
</div>
</div>
<div class="filter-bar">
<select>
<option>全部部门</option>
<option>人事部</option>
<option>技术部</option>
<option>市场部</option>
<option>财务部</option>
</select>
<button class="btn btn-primary">
<i class="fas fa-filter"></i> 筛选
</button>
<button class="btn btn-success">
<i class="fas fa-file-excel"></i> 导出Excel
</button>
</div>
<div class="alert alert-warning">
<i class="fas fa-exclamation-triangle"></i> 您有 <strong>5名</strong> 员工需要近期体检,请及时安排。
</div>
<div class="chart-container">
<img src="https://via.placeholder.com/1200x400?text=员工健康状况分布图表" alt="员工健康状况分布图表" style="width:100%; border:1px solid #eee; border-radius:5px;">
</div>
<div class="card">
<div class="card-header">
<h2><i class="fas fa-bell"></i> 健康待办事项</h2>
</div>
<table>
<thead>
<tr>
<th>事项</th>
<th>相关员工</th>
<th>截止日期</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三-年度体检</td>
<td>张三 (EMP001)</td>
<td>2023-12-15</td>
<td class="status-warning">即将到期</td>
<td>
<button class="btn btn-primary btn-sm">
<i class="fas fa-edit"></i> 处理
</button>
</td>
</tr>
<tr>
<td>李四-复查安排</td>
<td>李四 (EMP002)</td>
<td>2023-12-20</td>
<td class="status-warning">即将到期</td>
<td>
<button class="btn btn-primary btn-sm">
<i class="fas fa-edit"></i> 处理
</button>
</td>
</tr>
<tr>
<td>王五-体检报告审核</td>
<td>王五 (EMP003)</td>
<td>2023-11-30</td>
<td class="status-danger">已过期</td>
<td>
<button class="btn btn-primary btn-sm">
<i class="fas fa-edit"></i> 处理
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- 健康档案 -->
<div id="health-records" class="tab-content">
<div class="card">
<div class="card-header">
<h2><i class="fas fa-heartbeat"></i> 健康档案管理</h2>
<button class="btn btn-success" id="add-health-btn" onclick="showModal('addHealthRecordModal')">
<i class="fas fa-plus"></i> 添加记录
</button>
</div>
<div>
<div class="search-bar">
<input type="text" placeholder="搜索员工姓名或工号...">
<button class="btn btn-primary">
<i class="fas fa-search"></i> 搜索
</button>
</div>
<table>
<thead>
<tr>
<th>员工姓名</th>
<th>工号</th>
<th>最近体检日期</th>
<th>体检医院</th>
<th>体检结果</th>
<th>下次体检日期</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三</td>
<td>EMP001</td>
<td>2023-10-15</td>
<td>北京协和医院</td>
<td><span class="badge badge-success">正常</span></td>
<td>2024-10-15</td>
<td>
<button class="btn btn-primary btn-sm" onclick="showHealthDetail('张三')">
<i class="fas fa-eye"></i> 查看
</button>
<button class="btn btn-info btn-sm">
<i class="fas fa-edit"></i> 编辑
</button>
</td>
</tr>
<tr>
<td>李四</td>
<td>EMP002</td>
<td>2023-09-20</td>
<td>上海瑞金医院</td>
<td><span class="badge badge-warning">轻度异常</span></td>
<td>2024-03-20</td>
<td>
<button class="btn btn-primary btn-sm" onclick="showHealthDetail('李四')">
<i class="fas fa-eye"></i> 查看
</button>
<button class="btn btn-info btn-sm">
<i class="fas fa-edit"></i> 编辑
</button>
</td>
</tr>
<tr>
<td>王五</td>
<td>EMP003</td>
<td>2023-08-10</td>
<td>广州中山医院</td>
<td><span class="badge badge-danger">异常</span></td>
<td>2023-11-10</td>
<td>
<button class="btn btn-primary btn-sm" onclick="showHealthDetail('王五')">
<i class="fas fa-eye"></i> 查看
</button>
<button class="btn btn-info btn-sm">
<i class="fas fa-edit"></i> 编辑
</button>
</td>
</tr>
</tbody>
</table>
<div class="pagination">
<a href="#">&laquo;</a>
<a href="#" class="active">1</a>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">&raquo;</a>
</div>
</div>
</div>
</div>
<!-- 体检管理 -->
<div id="medical-checkups" class="tab-content">
<div class="card">
<div class="card-header">
<h2><i class="fas fa-stethoscope"></i> 体检管理</h2>
<button class="btn btn-success" onclick="showModal('addCheckupModal')">
<i class="fas fa-plus"></i> 添加体检安排
</button>
</div>
<div>
<div class="search-bar">
<input type="text" placeholder="搜索员工姓名、工号或体检医院...">
<button class="btn btn-primary">
<i class="fas fa-search"></i> 搜索
</button>
</div>
<div class="alert alert-info">
<i class="fas fa-info-circle"></i> 当前有 <strong>3名</strong> 员工需要在本月完成体检。
</div>
<table>
<thead>
<tr>
<th>员工姓名</th>
<th>工号</th>
<th>部门</th>
<th>体检类型</th>
<th>体检医院</th>
<th>体检日期</th>
<th>体检状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三</td>
<td>EMP001</td>
<td>技术部</td>
<td>年度体检</td>
<td>北京协和医院</td>
<td>2023-10-15</td>
<td><span class="badge badge-success">已完成</span></td>
<td>
<button class="btn btn-primary btn-sm">
<i class="fas fa-eye"></i> 查看
</button>
<button class="btn btn-info btn-sm">
<i class="fas fa-edit"></i> 编辑
</button>
</td>
</tr>
<tr>
<td>李四</td>
<td>EMP002</td>
<td>市场部</td>
<td>专项体检</td>
<td>上海瑞金医院</td>
<td>2023-09-20</td>
<td><span class="badge badge-success">已完成</span></td>
<td>
<button class="btn btn-primary btn-sm">
<i class="fas fa-eye"></i> 查看
</button>
<button class="btn btn-info btn-sm">
<i class="fas fa-edit"></i> 编辑
</button>
</td>
</tr>
<tr>
<td>王五</td>
<td>EMP003</td>
<td>财务部</td>
<td>年度体检</td>
<td>广州中山医院</td>
<td>2023-11-30</td>
<td><span class="badge badge-warning">待完成</span></td>
<td>
<button class="btn btn-primary btn-sm">
<i class="fas fa-eye"></i> 查看
</button>
<button class="btn btn-info btn-sm">
<i class="fas fa-edit"></i> 编辑
</button>
<button class="btn btn-success btn-sm">
<i class="fas fa-check"></i> 确认完成
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- 健康统计 -->
<div id="health-statistics" class="tab-content">
<div class="card">
<div class="card-header">
<h2><i class="fas fa-chart-bar"></i> 健康统计与分析</h2>
<button class="btn btn-primary">
<i class="fas fa-download"></i> 导出报告
</button>
</div>
<div>
<div class="filter-bar">
<select>
<option>全部部门</option>
<option>人事部</option>
<option>技术部</option>
<option>市场部</option>
<option>财务部</option>
</select>
<select>
<option>2023年</option>
<option>2022年</option>
<option>2021年</option>
</select>
<button class="btn btn-primary">
<i class="fas fa-filter"></i> 筛选
</button>
</div>
<div class="stat-cards">
<div class="stat-card">
<h3>体检覆盖率</h3>
<div class="value">92%</div>
<div class="trend">↑ 5% 较上年</div>
</div>
<div class="stat-card">
<h3>健康员工比例</h3>
<div class="value">82%</div>
<div class="trend">↑ 3% 较上年</div>
</div>
<div class="stat-card">
<h3>异常检出率</h3>
<div class="value">18%</div>
<div class="trend down">↓ 2% 较上年</div>
</div>
<div class="stat-card">
<h3>复查完成率</h3>
<div class="value">75%</div>
<div class="trend">↑ 8% 较上年</div>
</div>
</div>
<div class="chart-container">
<img src="https://via.placeholder.com/1200x400?text=员工健康状况趋势图表" alt="员工健康状况趋势图表" style="width:100%; border:1px solid #eee; border-radius:5px;">
</div>
<div class="chart-container">
<img src="https://via.placeholder.com/1200x400?text=各部门健康状况对比图表" alt="各部门健康状况对比图表" style="width:100%; border:1px solid #eee; border-radius:5px;">
</div>
<div class="card">
<div class="card-header">
<h2><i class="fas fa-list"></i> 常见健康问题统计</h2>
</div>
<table>
<thead>
<tr>
<th>健康问题</th>
<th>人数</th>
<th>占比</th>
<th>较上年变化</th>
<th>建议措施</th>
</tr>
</thead>
<tbody>
<tr>
<td>颈椎/腰椎问题</td>
<td>45</td>
<td>28.8%</td>
<td class="text-danger">↑ 5%</td>
<td>工位调整、定期运动</td>
</tr>
<tr>
<td>视力问题</td>
<td>38</td>
<td>24.4%</td>
<td class="text-danger">↑ 3%</td>
<td>定期休息、眼保健操</td>
</tr>
<tr>
<td>高血压</td>
<td>22</td>
<td>14.1%</td>
<td class="text-success">↓ 2%</td>
<td>饮食指导、定期监测</td>
</tr>
<tr>
<td>脂肪肝</td>
<td>18</td>
<td>11.5%</td>
<td class="text-success">↓ 4%</td>
<td>运动计划、饮食调整</td>
</tr>
<tr>
<td>糖尿病</td>
<td>8</td>
<td>5.1%</td>
<td class="text-success">↓ 1%</td>
<td>医疗干预、定期检查</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- 个人信息 -->
<div id="profile" class="tab-content">
<div class="card">
<div class="card-header">
<h2><i class="fas fa-user"></i> 个人信息</h2>
<button class="btn btn-primary" id="edit-profile-btn">
<i class="fas fa-edit"></i> 编辑信息
</button>
</div>
<div class="profile-section">
<div class="profile-avatar">
<img src="https://randomuser.me/api/portraits/men/32.jpg" alt="员工头像">
</div>
<div class="profile-info">
<div class="profile-name">系统管理员</div>
<div class="profile-meta">
<span>ADM001</span> |
<span>人事部</span> |
<span>系统管理员</span>
</div>
<div class="profile-actions">
<button class="btn btn-primary btn-sm">
<i class="fas fa-camera"></i> 更换头像
</button>
</div>
</div>
</div>
<table class="info-table">
<tr>
<td>员工编号</td>
<td>ADM001</td>
</tr>
<tr>
<td>部门</td>
<td>人事部</td>
</tr>
<tr>
<td>职位</td>
<td>系统管理员</td>
</tr>
<tr>
<td>入职日期</td>
<td>2020-01-15</td>
</tr>
<tr>
<td>联系电话</td>
<td>13800138000</td>
</tr>
<tr>
<td>电子邮箱</td>
<td>admin@company.com</td>
</tr>
<tr>
<td>身份证号</td>
<td>**************0000</td>
</tr>
<tr>
<td>联系地址</td>
<td>北京市海淀区中关村软件园1号楼</td>
</tr>
<tr>
<td>紧急联系人</td>
<td>王五 (同事) 13800138003</td>
</tr>
</table>
</div>
</div>
<!-- 系统设置 -->
<div id="settings" class="tab-content">
<div class="card">
<div class="tabs">
<div class="tab active" onclick="switchSettingsTab('health')">健康设置</div>
<div class="tab" onclick="switchSettingsTab('checkup')">体检设置</div>
<div class="tab" onclick="switchSettingsTab('notification')">通知设置</div>
</div>
<div id="settings-health" class="settings-tab-content active">
<div class="card-header">
<h2><i class="fas fa-heartbeat"></i> 健康管理设置</h2>
</div>
<form>
<div class="form-group">
<label for="health-levels">健康等级划分</label>
<textarea id="health-levels" rows="3">1. 健康:无异常指标
2. 亚健康1-2项轻度异常
3. 需关注3项及以上轻度异常或1项中度异常
4. 高风险1项及以上重度异常</textarea>
</div>
<div class="form-group">
<label for="health-intervention">健康干预措施</label>
<textarea id="health-intervention" rows="3">1. 健康:定期体检
2. 亚健康:健康指导
3. 需关注:医疗咨询
4. 高风险:医疗干预</textarea>
</div>
<div class="form-actions">
<button type="reset" class="btn btn-danger">
<i class="fas fa-times"></i> 重置
</button>
<button type="submit" class="btn btn-success">
<i class="fas fa-check"></i> 保存
</button>
</div>
</form>
</div>
<div id="settings-checkup" class="settings-tab-content">
<div class="card-header">
<h2><i class="fas fa-stethoscope"></i> 体检管理设置</h2>
</div>
<form>
<div class="form-group">
<label for="checkup-interval">常规体检间隔(月)</label>
<input type="number" id="checkup-interval" value="12">
</div>
<div class="form-group">
<label for="checkup-types">体检类型</label>
<textarea id="checkup-types" rows="3">1. 入职体检
2. 年度体检
3. 专项体检
4. 复查体检</textarea>
</div>
<div class="form-group">
<label for="checkup-hospitals">合作医院</label>
<textarea id="checkup-hospitals" rows="3">1. 北京协和医院
2. 上海瑞金医院
3. 广州中山医院
4. 深圳人民医院</textarea>
</div>
<div class="form-actions">
<button type="reset" class="btn btn-danger">
<i class="fas fa-times"></i> 重置
</button>
<button type="submit" class="btn btn-success">
<i class="fas fa-check"></i> 保存
</button>
</div>
</form>
</div>
<div id="settings-notification" class="settings-tab-content">
<div class="card-header">
<h2><i class="fas fa-bell"></i> 通知设置</h2>
</div>
<form>
<div class="form-group">
<label for="checkup-notice">体检提前通知天数</label>
<input type="number" id="checkup-notice" value="30">
</div>
<div class="form-group">
<label for="recheck-notice">复查提前通知天数</label>
<input type="number" id="recheck-notice" value="14">
</div>
<div class="form-group">
<label for="health-alert">健康异常提醒级别</label>
<select id="health-alert">
<option value="all">所有异常</option>
<option value="moderate" selected>中度及以上</option>
<option value="severe">仅重度</option>
</select>
</div>
<div class="form-group">
<label for="notification-methods">通知方式</label>
<div>
<label><input type="checkbox" checked> 系统消息</label>
<label><input type="checkbox" checked> 电子邮件</label>
<label><input type="checkbox"> 短信通知</label>
</div>
</div>
<div class="form-actions">
<button type="reset" class="btn btn-danger">
<i class="fas fa-times"></i> 重置
</button>
<button type="submit" class="btn btn-success">
<i class="fas fa-check"></i> 保存
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- 添加健康记录模态框 -->
<div id="addHealthRecordModal" class="modal">
<div class="modal-content">
<span class="close" onclick="hideModal('addHealthRecordModal')">&times;</span>
<h2><i class="fas fa-plus-circle"></i> 添加健康记录</h2>
<form>
<div class="form-group">
<label for="health-employee">员工</label>
<select id="health-employee">
<option value="">请选择员工</option>
<option value="EMP001">张三 (EMP001)</option>
<option value="EMP002">李四 (EMP002)</option>
<option value="EMP003">王五 (EMP003)</option>
<option value="EMP004">赵六 (EMP004)</option>
</select>
</div>
<div class="form-group">
<label for="checkup-date">体检日期</label>
<input type="date" id="checkup-date">
</div>
<div class="form-group">
<label for="hospital">体检医院</label>
<input type="text" id="hospital" placeholder="请输入体检医院">
</div>
<div class="form-group">
<label for="checkup-type">体检类型</label>
<select id="checkup-type">
<option value="常规体检">常规体检</option>
<option value="入职体检">入职体检</option>
<option value="年度体检">年度体检</option>
<option value="专项体检">专项体检</option>
</select>
</div>
<div class="form-group">
<label for="checkup-result">体检结果</label>
<select id="checkup-result">
<option value="正常">正常</option>
<option value="轻度异常">轻度异常</option>
<option value="异常">异常</option>
</select>
</div>
<div class="form-group">
<label for="next-checkup">下次体检日期</label>
<input type="date" id="next-checkup">
</div>
<div class="form-group">
<label for="health-summary">体检总结</label>
<textarea id="health-summary" rows="3" placeholder="请输入体检总结"></textarea>
</div>
<div class="form-group">
<label for="health-suggestion">医生建议</label>
<textarea id="health-suggestion" rows="3" placeholder="请输入医生建议"></textarea>
</div>
<div class="form-group">
<label for="health-report">体检报告</label>
<input type="file" id="health-report">
</div>
<div class="form-actions">
<button type="button" class="btn btn-danger" onclick="hideModal('addHealthRecordModal')">
<i class="fas fa-times"></i> 取消
</button>
<button type="submit" class="btn btn-success">
<i class="fas fa-check"></i> 保存
</button>
</div>
</form>
</div>
</div>
<!-- 添加体检安排模态框 -->
<div id="addCheckupModal" class="modal">
<div class="modal-content">
<span class="close" onclick="hideModal('addCheckupModal')">&times;</span>
<h2><i class="fas fa-calendar-plus"></i> 添加体检安排</h2>
<form>
<div class="form-group">
<label>选择员工</label>
<div style="border: 1px solid #ddd; padding: 10px; max-height: 200px; overflow-y: auto;">
<label style="display: block;"><input type="checkbox"> 张三 (EMP001)</label>
<label style="display: block;"><input type="checkbox"> 李四 (EMP002)</label>
<label style="display: block;"><input type="checkbox"> 王五 (EMP003)</label>
<label style="display: block;"><input type="checkbox"> 赵六 (EMP004)</label>
<label style="display: block;"><input type="checkbox"> 钱七 (EMP005)</label>
</div>
</div>
<div class="form-group">
<label for="checkup-type">体检类型</label>
<select id="checkup-type">
<option value="年度体检">年度体检</option>
<option value="入职体检">入职体检</option>
<option value="专项体检">专项体检</option>
<option value="复查体检">复查体检</option>
</select>
</div>
<div class="form-group">
<label for="checkup-hospital">体检医院</label>
<select id="checkup-hospital">
<option value="北京协和医院">北京协和医院</option>
<option value="上海瑞金医院">上海瑞金医院</option>
<option value="广州中山医院">广州中山医院</option>
<option value="深圳人民医院">深圳人民医院</option>
<option value="其他">其他</option>
</select>
</div>
<div class="form-group">
<label for="checkup-date">体检日期</label>
<input type="date" id="checkup-date">
</div>
<div class="form-group">
<label for="checkup-notice">提前通知天数</label>
<input type="number" id="checkup-notice" value="15">
</div>
<div class="form-group">
<label for="checkup-notes">备注</label>
<textarea id="checkup-notes" rows="3" placeholder="请输入备注信息"></textarea>
</div>
<div class="form-actions">
<button type="button" class="btn btn-danger" onclick="hideModal('addCheckupModal')">
<i class="fas fa-times"></i> 取消
</button>
<button type="submit" class="btn btn-success">
<i class="fas fa-check"></i> 保存
</button>
</div>
</form>
</div>
</div>
<!-- 健康详情模态框 -->
<div id="healthDetailModal" class="modal">
<div class="modal-content" style="width: 70%;">
<span class="close" onclick="hideModal('healthDetailModal')">&times;</span>
<h2><i class="fas fa-user-md"></i> <span id="detail-employee-name"></span> - 健康档案详情</h2>
<div class="health-record">
<div class="health-record-header">
<div class="health-record-title">基本信息</div>
<div class="health-record-date">最后更新: 2023-10-15</div>
</div>
<div class="health-record-content">
<div class="health-record-section">
<h4>个人信息</h4>
<div class="health-record-item">
<div class="health-record-label">员工编号:</div>
<div class="health-record-value">EMP001</div>
</div>
<div class="health-record-item">
<div class="health-record-label">部门:</div>
<div class="health-record-value">技术部</div>
</div>
<div class="health-record-item">
<div class="health-record-label">职位:</div>
<div class="health-record-value">高级工程师</div>
</div>
<div class="health-record-item">
<div class="health-record-label">年龄:</div>
<div class="health-record-value">32</div>
</div>
<div class="health-record-item">
<div class="health-record-label">性别:</div>
<div class="health-record-value"></div>
</div>
</div>
<div class="health-record-section">
<h4>体检信息</h4>
<div class="health-record-item">
<div class="health-record-label">最近体检日期:</div>
<div class="health-record-value">2023-10-15</div>
</div>
<div class="health-record-item">
<div class="health-record-label">体检医院:</div>
<div class="health-record-value">北京协和医院</div>
</div>
<div class="health-record-item">
<div class="health-record-label">体检类型:</div>
<div class="health-record-value">年度体检</div>
</div>
<div class="health-record-item">
<div class="health-record-label">体检结果:</div>
<div class="health-record-value"><span class="badge badge-success">正常</span></div>
</div>
<div class="health-record-item">
<div class="health-record-label">下次体检日期:</div>
<div class="health-record-value">2024-10-15</div>
</div>
</div>
</div>
</div>
<div class="health-record">
<div class="health-record-header">
<div class="health-record-title">体检结果详情</div>
</div>
<div class="health-record-content">
<div class="health-record-section">
<h4>一般检查</h4>
<div class="health-record-item">
<div class="health-record-label">身高:</div>
<div class="health-record-value">175cm</div>
>
<div class="health-record-item">
<div class="health-record-label">体重:</div>
<div class="health-record-value">68kg</div>
</div>
<div class="health-record-item">
<div class="health-record-label">BMI:</div>
<div class="health-record-value">22.2 (正常)</div>
</div>
<div class="health-record-item">
<div class="health-record-label">血压:</div>
<div class="health-record-value">120/80mmHg (正常)</div>
</div>
<div class="health-record-item">
<div class="health-record-label">心率:</div>
<div class="health-record-value">72次/分 (正常)</div>
</div>
</div>
<div class="health-record-section">
<h4>血液检查</h4>
<div class="health-record-item">
<div class="health-record-label">白细胞计数:</div>
<div class="health-record-value">5.6×10⁹/L (正常)</div>
</div>
<div class="health-record-item">
<div class="health-record-label">红细胞计数:</div>
<div class="health-record-value">4.5×10¹²/L (正常)</div>
</div>
<div class="health-record-item">
<div class="health-record-label">血红蛋白:</div>
<div class="health-record-value">145g/L (正常)</div>
</div>
<div class="health-record-item">
<div class="health-record-label">血小板计数:</div>
<div class="health-record-value">210×10⁹/L (正常)</div>
</div>
<div class="health-record-item">
<div class="health-record-label">血糖:</div>
<div class="health-record-value">5.2mmol/L (正常)</div>
</div>
</div>
<div class="health-record-section">
<h4>其他检查</h4>
<div class="health-record-item">
<div class="health-record-label">肝功能:</div>
<div class="health-record-value">正常</div>
</div>
<div class="health-record-item">
<div class="health-record-label">肾功能:</div>
<div class="health-record-value">正常</div>
</div>
<div class="health-record-item">
<div class="health-record-label">血脂:</div>
<div class="health-record-value">正常</div>
</div>
<div class="health-record-item">
<div class="health-record-label">心电图:</div>
<div class="health-record-value">窦性心律,正常心电图</div>
</div>
<div class="health-record-item">
<div class="health-record-label">胸部X光:</div>
<div class="health-record-value">未见明显异常</div>
</div>
</div>
</div>
</div>
<div class="health-record">
<div class="health-record-header">
<div class="health-record-title">医生建议</div>
</div>
<div class="health-record-content">
<div class="health-record-section" style="flex: 1 1 100%;">
<p>1. 继续保持健康的生活方式,均衡饮食,适量运动。</p>
<p>2. 建议每天保持30分钟以上的中等强度运动。</p>
<p>3. 注意用眼卫生每工作1小时休息5-10分钟。</p>
<p>4. 建议每年进行一次常规体检。</p>
</div>
</div>
</div>
<div class="form-actions">
<button type="button" class="btn btn-danger" onclick="hideModal('healthDetailModal')">
<i class="fas fa-times"></i> 关闭
</button>
<button type="button" class="btn btn-primary">
<i class="fas fa-print"></i> 打印
</button>
<button type="button" class="btn btn-success">
<i class="fas fa-download"></i> 下载报告
</button>
</div>
</div>
</div>
<script>
// 初始化页面
document.addEventListener('DOMContentLoaded', function() {
// 绑定侧边栏菜单点击事件
bindSidebarMenuEvents();
// 绑定其他事件
bindEvents();
// 初始化键盘快捷键
initKeyboardShortcuts();
// 检查URL hash并导航到对应页面
checkUrlHash();
});
// 绑定侧边栏菜单点击事件(使用事件委托)
function bindSidebarMenuEvents() {
const sidebar = document.querySelector('.sidebar-menu');
sidebar.addEventListener('click', function(e) {
const menuItem = e.target.closest('li');
if (!menuItem) return;
// 获取目标内容区域ID
const targetId = menuItem.getAttribute('data-target');
// 切换导航
switchTab(targetId);
});
}
// 切换标签页
function switchTab(targetId) {
// 移除所有菜单项的active类
document.querySelectorAll('.sidebar-menu li').forEach(li => {
li.classList.remove('active');
});
// 给当前点击的菜单项添加active类
const activeMenuItem = document.querySelector(`.sidebar-menu li[data-target="${targetId}"]`);
if (activeMenuItem) {
activeMenuItem.classList.add('active');
}
// 隐藏所有内容区域
document.querySelectorAll('.tab-content').forEach(content => {
content.classList.remove('active');
});
// 显示目标内容区域
const targetContent = document.getElementById(targetId);
if (targetContent) {
targetContent.classList.add('active');
// 更新URL hash
window.location.hash = targetId;
// 滚动到顶部
window.scrollTo(0, 0);
// 触发自定义事件
const event = new CustomEvent('tabChanged', { detail: { tabId: targetId } });
document.dispatchEvent(event);
}
}
// 检查URL hash并导航到对应页面
function checkUrlHash() {
const hash = window.location.hash.substring(1);
if (hash) {
const targetContent = document.getElementById(hash);
if (targetContent) {
switchTab(hash);
}
}
}
// 初始化键盘快捷键
function initKeyboardShortcuts() {
document.addEventListener('keydown', function(e) {
// 检查是否按下了数字键1-6
if (e.key >= '1' && e.key <= '6') {
const targetId = document.querySelector(`.sidebar-menu li[data-shortcut="${e.key}"]`)?.getAttribute('data-target');
if (targetId) {
switchTab(targetId);
}
}
// Ctrl+1 到 Ctrl+6 快捷键
if (e.ctrlKey && e.key >= '1' && e.key <= '6') {
const targetId = document.querySelector(`.sidebar-menu li[data-shortcut="${e.key}"]`)?.getAttribute('data-target');
if (targetId) {
switchTab(targetId);
}
}
});
}
// 绑定其他事件
function bindEvents() {
// 点击模态框外部关闭模态框
window.addEventListener('click', function(event) {
if (event.target.classList.contains('modal')) {
event.target.style.display = 'none';
}
});
// 监听hash变化
window.addEventListener('hashchange', checkUrlHash);
// 监听自定义tabChanged事件
document.addEventListener('tabChanged', function(e) {
console.log('切换到标签页:', e.detail.tabId);
// 可以在这里添加标签页切换后的额外逻辑
});
}
// 显示模态框
function showModal(modalId) {
document.getElementById(modalId).style.display = 'block';
}
// 隐藏模态框
function hideModal(modalId) {
document.getElementById(modalId).style.display = 'none';
}
// 显示健康详情
function showHealthDetail(employeeName) {
document.getElementById('detail-employee-name').textContent = employeeName;
showModal('healthDetailModal');
}
// 切换系统设置标签页
function switchSettingsTab(tabId) {
// 隐藏所有标签内容
document.querySelectorAll('.settings-tab-content').forEach(content => {
content.classList.remove('active');
});
// 取消所有标签的活动状态
document.querySelectorAll('#settings .tab').forEach(tab => {
tab.classList.remove('active');
});
// 显示选中的标签内容
document.getElementById('settings-' + tabId).classList.add('active');
// 设置选中标签的活动状态
event.currentTarget.classList.add('active');
}
// 切换侧边栏显示状态
function toggleSidebar() {
const sidebar = document.getElementById('sidebar');
sidebar.classList.toggle('expanded');
const mainContent = document.getElementById('main-content');
if (sidebar.classList.contains('expanded')) {
mainContent.style.marginLeft = '220px';
} else {
mainContent.style.marginLeft = '60px';
}
}
// 退出登录
function logout() {
if (confirm('确定要退出系统吗?')) {
window.location.href = 'login.html';
}
}
</script>
</body>
</html>