PHP_WORKS/modules/patients/view.php
2025-05-30 11:10:14 +08:00

298 lines
17 KiB
PHP

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>患者详情 - 电子病历系统</title>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
<link href="../../css/material.css" rel="stylesheet">
</head>
<body>
<header class="header">
<h1>
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"/>
</svg>
患者详情
</h1>
</header>
<nav class="nav-menu">
<ul>
<li><a href="../../index.php">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M10,20V14H14V20H19V12H22L12,3L2,12H5V20H10Z"/>
</svg>
仪表板
</a></li>
<li><a href="list.php" class="active">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"/>
</svg>
患者管理
</a></li>
<li><a href="../doctors/list.php">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M14.84,2.5C16.2,2.5 17.5,3.2 18.28,4.38L18.5,4.75L19.25,4.38C19.92,4 20.75,4.2 21.13,4.87C21.5,5.54 21.33,6.42 20.66,6.79L20.04,7.12C20.04,7.12 20.04,7.12 20.04,7.12C20.47,7.88 20.47,8.78 20.04,9.54L20.5,9.78C21.17,10.15 21.33,11.04 20.97,11.71C20.6,12.38 19.72,12.54 19.05,12.17L18.5,11.88C17.71,13.07 16.39,13.77 15.04,13.77C13.68,13.77 12.36,13.07 11.57,11.88L11,12.17C10.33,12.54 9.45,12.38 9.08,11.71C8.71,11.04 8.88,10.15 9.55,9.78L10,9.54C9.58,8.78 9.58,7.88 10,7.12L9.38,6.79C8.71,6.42 8.55,5.54 8.92,4.87C9.29,4.2 10.17,4 10.84,4.38L11.57,4.75C12.35,3.56 13.67,2.86 15.04,2.86M15.04,4.64C14.18,4.64 13.4,5.09 12.96,5.78L12.5,6.5L11.78,6.06C11.58,5.94 11.32,6 11.19,6.21C11.07,6.42 11.13,6.68 11.34,6.81L12.06,7.25L11.78,7.94C11.58,8.38 11.58,8.87 11.78,9.31L12.06,10L11.34,10.44C11.13,10.57 11.07,10.83 11.19,11.04C11.32,11.25 11.58,11.31 11.78,11.19L12.5,10.75L12.96,11.47C13.4,12.16 14.18,12.61 15.04,12.61C15.9,12.61 16.68,12.16 17.12,11.47L17.58,10.75L18.3,11.19C18.5,11.31 18.76,11.25 18.89,11.04C19.01,10.83 18.95,10.57 18.74,10.44L18.02,10L18.3,9.31C18.5,8.87 18.5,8.38 18.3,7.94L18.02,7.25L18.74,6.81C18.95,6.68 19.01,6.42 18.89,6.21C18.76,6 18.5,5.94 18.3,6.06L17.58,6.5L17.12,5.78C16.68,5.09 15.9,4.64 15.04,4.64M11,15.5V17.5H3V15.5C3,14.39 6.69,13.5 9.5,13.5C10.4,13.5 11.5,13.65 12.5,13.91C11.84,14.8 11.5,15.88 11.5,17C11.34,16.83 11.17,16.66 11,15.5M9.5,12A2.5,2.5 0 0,1 7,9.5A2.5,2.5 0 0,1 9.5,7A2.5,2.5 0 0,1 12,9.5A2.5,2.5 0 0,1 9.5,12Z"/>
</svg>
医生管理
</a></li>
<li><a href="../medical_records/list.php">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"/>
</svg>
病历管理
</a></li>
<li><a href="../departments/list.php">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z"/>
</svg>
科室管理
</a></li>
<li><a href="../medications/list.php">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M17,3C18.1,3 19,3.9 19,5V8H21V10H19V19C19,20.1 18.1,21 17,21H7C5.9,21 5,20.1 5,19V10H3V8H5V5C5,3.9 5.9,3 7,3H17M7,5V8H17V5H7M7,10V19H17V10H7M9,12H15V14H9V12M9,15H13V17H9V15Z"/>
</svg>
药品管理
</a></li>
</ul>
</nav>
<div class="container">
<?php
include "../../conn/conn.php";
$patient_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($patient_id <= 0) {
echo '<div class="alert alert-error">无效的患者ID</div>';
exit;
}
$sql = "SELECT * FROM patients WHERE id = $patient_id";
$result = mysqli_query($connID, $sql);
if (mysqli_num_rows($result) == 0) {
echo '<div class="alert alert-error">患者不存在</div>';
exit;
}
$patient = mysqli_fetch_assoc($result);
$birth_date = $patient['birth_date'];
$age = '';
if($birth_date) {
$today = new DateTime();
$birth = new DateTime($birth_date);
$age = $today->diff($birth)->y . '岁';
}
?>
<div class="grid grid-2">
<div class="card">
<div class="card-header">
<h2 class="card-title">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"/>
</svg>
基本信息
</h2>
<div style="margin-top: 16px;">
<a href="edit.php?id=<?php echo $patient['id']; ?>" class="btn btn-warning">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"/>
</svg>
编辑信息
</a>
<a href="../medical_records/add.php?patient_id=<?php echo $patient['id']; ?>" class="btn btn-success">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"/>
</svg>
创建病历
</a>
</div>
</div>
<div class="card-content">
<div class="grid" style="grid-template-columns: 1fr 1fr; gap: 16px;">
<div>
<strong>患者姓名:</strong><br>
<span style="font-size: 18px; color: #1976d2; font-weight: 500;"><?php echo htmlspecialchars($patient['name']); ?></span>
</div>
<div>
<strong>性别:</strong><br>
<?php echo $patient['gender']; ?>
</div>
<div>
<strong>出生日期:</strong><br>
<?php echo $birth_date ? date('Y年m月d日', strtotime($birth_date)) : '未设置'; ?>
</div>
<div>
<strong>年龄:</strong><br>
<?php echo $age ?: '未知'; ?>
</div>
<div>
<strong>联系电话:</strong><br>
<?php echo htmlspecialchars($patient['phone']); ?>
</div>
<div>
<strong>身份证号:</strong><br>
<?php echo htmlspecialchars($patient['id_card'] ?: '未填写'); ?>
</div>
</div>
<?php if($patient['address']): ?>
<div style="margin-top: 16px;">
<strong>家庭住址:</strong><br>
<?php echo htmlspecialchars($patient['address']); ?>
</div>
<?php endif; ?>
<?php if($patient['emergency_contact']): ?>
<div style="margin-top: 16px;">
<strong>紧急联系人:</strong><br>
<?php echo htmlspecialchars($patient['emergency_contact']); ?>
<?php if($patient['emergency_phone']): ?>
<span style="color: #666;"> - <?php echo htmlspecialchars($patient['emergency_phone']); ?></span>
<?php endif; ?>
</div>
<?php endif; ?>
<div style="margin-top: 16px; padding-top: 16px; border-top: 1px solid #e0e0e0; color: #666; font-size: 14px;">
创建时间:<?php echo date('Y年m月d日 H:i', strtotime($patient['created_at'])); ?>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h2 class="card-title">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"/>
</svg>
就诊统计
</h2>
</div>
<div class="card-content">
<?php
$records_query = "SELECT COUNT(*) as total_records FROM medical_records WHERE patient_id = $patient_id";
$total_records = mysqli_fetch_assoc(mysqli_query($connID, $records_query))['total_records'];
$completed_query = "SELECT COUNT(*) as completed_records FROM medical_records WHERE patient_id = $patient_id AND status = '已完成'";
$completed_records = mysqli_fetch_assoc(mysqli_query($connID, $completed_query))['completed_records'];
$pending_query = "SELECT COUNT(*) as pending_records FROM medical_records WHERE patient_id = $patient_id AND status = '待诊'";
$pending_records = mysqli_fetch_assoc(mysqli_query($connID, $pending_query))['pending_records'];
$last_visit_query = "SELECT MAX(visit_date) as last_visit FROM medical_records WHERE patient_id = $patient_id";
$last_visit = mysqli_fetch_assoc(mysqli_query($connID, $last_visit_query))['last_visit'];
?>
<div style="display: grid; gap: 12px;">
<div style="display: flex; justify-content: space-between; align-items: center; padding: 12px; background: #e3f2fd; border-radius: 4px;">
<span>总就诊次数</span>
<strong style="color: #1976d2; font-size: 18px;"><?php echo $total_records; ?></strong>
</div>
<div style="display: flex; justify-content: space-between; align-items: center; padding: 12px; background: #e8f5e8; border-radius: 4px;">
<span>已完成诊治</span>
<strong style="color: #388e3c; font-size: 18px;"><?php echo $completed_records; ?></strong>
</div>
<div style="display: flex; justify-content: space-between; align-items: center; padding: 12px; background: #fff3e0; border-radius: 4px;">
<span>待诊记录</span>
<strong style="color: #f57c00; font-size: 18px;"><?php echo $pending_records; ?></strong>
</div>
<?php if($last_visit): ?>
<div style="display: flex; justify-content: space-between; align-items: center; padding: 12px; background: #f5f5f5; border-radius: 4px;">
<span>最近就诊</span>
<strong style="color: #666; font-size: 14px;"><?php echo date('Y-m-d', strtotime($last_visit)); ?></strong>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h2 class="card-title">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"/>
</svg>
病历记录
</h2>
</div>
<div class="card-content">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>病历号</th>
<th>就诊时间</th>
<th>医生</th>
<th>科室</th>
<th>诊断</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php
$records_sql = "SELECT mr.*, d.name as doctor_name, dept.name as department_name
FROM medical_records mr
JOIN doctors d ON mr.doctor_id = d.id
JOIN departments dept ON mr.department_id = dept.id
WHERE mr.patient_id = $patient_id
ORDER BY mr.visit_date DESC";
$records_result = mysqli_query($connID, $records_sql);
if(mysqli_num_rows($records_result) > 0):
while($record = mysqli_fetch_assoc($records_result)):
$status_class = '';
switch($record['status']) {
case '待诊': $status_class = 'status-pending'; break;
case '就诊中': $status_class = 'status-processing'; break;
case '已完成': $status_class = 'status-completed'; break;
}
?>
<tr>
<td><strong>MR<?php echo str_pad($record['id'], 6, '0', STR_PAD_LEFT); ?></strong></td>
<td><?php echo date('Y-m-d H:i', strtotime($record['visit_date'])); ?></td>
<td><?php echo htmlspecialchars($record['doctor_name']); ?></td>
<td><?php echo htmlspecialchars($record['department_name']); ?></td>
<td style="max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
<?php echo htmlspecialchars($record['diagnosis'] ?: '未确诊'); ?>
</td>
<td>
<span class="status-badge <?php echo $status_class; ?>">
<?php echo $record['status']; ?>
</span>
</td>
<td>
<a href="../medical_records/view.php?id=<?php echo $record['id']; ?>" class="btn btn-small btn-primary">查看</a>
</td>
</tr>
<?php
endwhile;
else:
?>
<tr>
<td colspan="7" style="text-align: center; color: #999; padding: 40px;">
该患者暂无病历记录
</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<div style="margin-top: 24px; text-align: center;">
<a href="list.php" class="btn" style="background: #f5f5f5; color: #666;">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"/>
</svg>
返回患者列表
</a>
</div>
</div>
</body>
</html>