chore: 全量排查修复PRD+新增页面+移除node_modules追踪
- health-monitor PRD 全量排查与一致性修复(91页逐一核对) - 新增穿戴监测运维中心告警页面(心率/血氧/体温/压力) - 新增单位人群状态详情页面 - 体重管理模块页面优化 - 新增/更新大量页面截图 - 新增 .gitignore 排除 node_modules/.idea/ - 从 git 追踪中移除 node_modules (本地保留) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@@ -0,0 +1,541 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>健康监测 - 单位健康现状详情 | 健康CQ原型</title>
|
||||
<style>
|
||||
*{box-sizing:border-box;margin:0;padding:0;}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
|
||||
:root{--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;--font-xl:20px;--font-xxl:24px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--shadow-sm:0 1px 4px rgba(0,0,0,0.08);}
|
||||
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
|
||||
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;width:240px;flex-shrink:0;white-space:nowrap;}
|
||||
.top-bar__logo svg{width:28px;height:28px;}
|
||||
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
|
||||
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
|
||||
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
|
||||
.top-bar__nav a.active{color:#fff;background:var(--primary);}
|
||||
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
|
||||
.btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
|
||||
.btn-back:hover{color:#fff;}
|
||||
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);}
|
||||
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;}
|
||||
.sidebar-group-title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;letter-spacing:.5px;}
|
||||
.sidebar-item{display:flex;align-items:center;gap:10px;padding:12px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .2s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;}
|
||||
.breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:16px;font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.breadcrumb a{color:var(--primary);text-decoration:none;}
|
||||
.breadcrumb a:hover{color:#40a9ff;}
|
||||
.breadcrumb .sep{color:var(--text-placeholder);}
|
||||
.tab-bar{display:flex;gap:0;border-bottom:2px solid var(--border);margin-bottom:16px;}
|
||||
.tab-item{padding:10px 24px;font-size:var(--font-sm);color:var(--text-secondary);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s;white-space:nowrap;}
|
||||
.tab-item:hover{color:var(--primary);}
|
||||
.tab-item.active{color:var(--primary);font-weight:600;border-bottom-color:var(--primary);}
|
||||
.tab-panel{display:none;}
|
||||
.tab-panel.active{display:block;}
|
||||
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
|
||||
.filter-item{display:flex;align-items:center;gap:8px;}
|
||||
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
|
||||
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);outline:none;background:#fff;min-width:180px;}
|
||||
.filter-input:focus{border-color:var(--primary);}
|
||||
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
|
||||
.btn-primary{background:var(--primary);color:#fff;}
|
||||
.btn-primary:hover{background:#40a9ff;}
|
||||
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}
|
||||
.btn-default:hover{color:var(--primary);border-color:var(--primary);}
|
||||
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);overflow:hidden;}
|
||||
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);}
|
||||
.table-card__title{font-size:var(--font-base);font-weight:600;}
|
||||
.table-card__content{overflow-x:auto;overflow-y:hidden;}
|
||||
.table-card__content table{min-width:100%;white-space:nowrap;}
|
||||
table{width:100%;border-collapse:collapse;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
.tag-green{background:#F6FFED;color:var(--success);}
|
||||
.tag-blue{background:var(--primary-light);color:var(--primary);}
|
||||
.tag-orange{background:#FFF7E6;color:var(--warning);}
|
||||
.tag-yellow{background:#FFFBE6;color:#D4B106;}
|
||||
.tag-cyan{background:#E6FFFB;color:#13C2C2;}
|
||||
.tag-red{background:#FFF1F0;color:var(--danger);}
|
||||
.tag-purple{background:#F9F0FF;color:#722ED1;}
|
||||
.link{color:var(--primary);cursor:pointer;font-size:var(--font-sm);text-decoration:none;background:none;border:none;}
|
||||
.link:hover{color:#40a9ff;}
|
||||
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
|
||||
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
|
||||
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
|
||||
.detail-title{font-size:var(--font-lg);font-weight:600;margin-bottom:4px;}
|
||||
.detail-meta{font-size:var(--font-sm);color:var(--text-secondary);margin-bottom:16px;}
|
||||
.empty-state{text-align:center;padding:40px 20px;color:var(--text-placeholder);}
|
||||
.empty-state svg{width:64px;height:64px;margin-bottom:12px;opacity:0.3;}
|
||||
.empty-state__title{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 顶部导航栏 -->
|
||||
<div class="top-bar">
|
||||
<div class="top-bar__logo">
|
||||
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
|
||||
健康监测
|
||||
</div>
|
||||
<nav class="top-bar__nav">
|
||||
<a href="archive-personal.html">档案</a>
|
||||
<a href="crowd-status-employee.html">健康现状</a>
|
||||
<a href="health-checkup/survey-category.html">健康排查</a>
|
||||
<a href="wearable/tool-manage.html">穿戴监测</a>
|
||||
<a href="environment/indoor-device-list.html">健康环境</a>
|
||||
<a href="exception-dirty.html">异常事件</a>
|
||||
</nav>
|
||||
<div class="top-bar__right">
|
||||
<a class="btn-back" href="../../index.html">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回首页
|
||||
</a>
|
||||
<div class="avatar">管</div>
|
||||
<span style="color:rgba(255,255,255,0.65);">系统管理员 ▾</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 侧边栏 -->
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-group-title">档案</div>
|
||||
<a href="archive-personal.html" class="sidebar-item">个人监测数据</a>
|
||||
<a href="archive-unit.html" class="sidebar-item active">单位报表数据</a>
|
||||
<a href="archive-algorithm.html" class="sidebar-item">算法模型</a>
|
||||
</aside>
|
||||
|
||||
<!-- 主内容区 -->
|
||||
<main class="main">
|
||||
<!-- 返回按钮 -->
|
||||
<div style="margin-bottom:16px;">
|
||||
<a href="archive-unit.html" style="display:inline-flex;align-items:center;gap:6px;color:var(--primary);text-decoration:none;font-size:var(--font-sm);">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回单位报表
|
||||
</a>
|
||||
</div>
|
||||
<!-- 面包屑 -->
|
||||
<div class="breadcrumb">
|
||||
<a href="archive-unit.html">单位报表数据</a>
|
||||
<span class="sep">/</span>
|
||||
<span id="unitDept"></span>
|
||||
<span class="sep">/</span>
|
||||
<span>健康现状</span>
|
||||
</div>
|
||||
<div class="detail-title" id="detailTitle"></div>
|
||||
<div class="detail-meta" id="detailMeta"></div>
|
||||
|
||||
<!-- Tab 切换 -->
|
||||
<div class="tab-bar">
|
||||
<div class="tab-item active" onclick="switchTab('a',this)">A类(人数)</div>
|
||||
<div class="tab-item" onclick="switchTab('b',this)">B类(人数)</div>
|
||||
<div class="tab-item" onclick="switchTab('c',this)">C类(人数)</div>
|
||||
<div class="tab-item" onclick="switchTab('d',this)">D类(人数)</div>
|
||||
<div class="tab-item" onclick="switchTab('e',this)">E类(人数)</div>
|
||||
</div>
|
||||
|
||||
<!-- A类面板 -->
|
||||
<div class="tab-panel active" id="panel-a">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>员工姓名</label>
|
||||
<input class="filter-input" type="text" id="aNameFilter" placeholder="请输入员工姓名">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>员工编号</label>
|
||||
<input class="filter-input" type="text" id="aEmpIdFilter" placeholder="请输入员工编号">
|
||||
</div>
|
||||
<button class="btn btn-primary" onclick="filterPanel('a')">查询</button>
|
||||
<button class="btn btn-default" onclick="resetPanel('a')">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default" onclick="alert('导出A类人员数据')">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">A类员工列表(健康)</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);" id="aCount">共 768 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>单位</th>
|
||||
<th>部门</th>
|
||||
<th>姓名</th>
|
||||
<th>员工编号</th>
|
||||
<th>性别</th>
|
||||
<th>年龄</th>
|
||||
<th>健康分类</th>
|
||||
<th>更新时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody-a"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span id="aPageInfo">显示 5 条,共 768 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">3</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- B类面板 -->
|
||||
<div class="tab-panel" id="panel-b">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>员工姓名</label>
|
||||
<input class="filter-input" type="text" id="bNameFilter" placeholder="请输入员工姓名">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>员工编号</label>
|
||||
<input class="filter-input" type="text" id="bEmpIdFilter" placeholder="请输入员工编号">
|
||||
</div>
|
||||
<button class="btn btn-primary" onclick="filterPanel('b')">查询</button>
|
||||
<button class="btn btn-default" onclick="resetPanel('b')">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default" onclick="alert('导出B类人员数据')">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">B类员工列表(亚健康)</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);" id="bCount">共 256 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>单位</th>
|
||||
<th>部门</th>
|
||||
<th>姓名</th>
|
||||
<th>员工编号</th>
|
||||
<th>性别</th>
|
||||
<th>年龄</th>
|
||||
<th>健康分类</th>
|
||||
<th>更新时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody-b"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span id="bPageInfo">显示 5 条,共 256 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- C类面板 -->
|
||||
<div class="tab-panel" id="panel-c">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>员工姓名</label>
|
||||
<input class="filter-input" type="text" id="cNameFilter" placeholder="请输入员工姓名">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>员工编号</label>
|
||||
<input class="filter-input" type="text" id="cEmpIdFilter" placeholder="请输入员工编号">
|
||||
</div>
|
||||
<button class="btn btn-primary" onclick="filterPanel('c')">查询</button>
|
||||
<button class="btn btn-default" onclick="resetPanel('c')">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default" onclick="alert('导出C类人员数据')">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">C类员工列表(低风险)</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);" id="cCount">共 128 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>单位</th>
|
||||
<th>部门</th>
|
||||
<th>姓名</th>
|
||||
<th>员工编号</th>
|
||||
<th>性别</th>
|
||||
<th>年龄</th>
|
||||
<th>健康分类</th>
|
||||
<th>更新时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody-c"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span id="cPageInfo">显示 5 条,共 128 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- D类面板 -->
|
||||
<div class="tab-panel" id="panel-d">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>员工姓名</label>
|
||||
<input class="filter-input" type="text" id="dNameFilter" placeholder="请输入员工姓名">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>员工编号</label>
|
||||
<input class="filter-input" type="text" id="dEmpIdFilter" placeholder="请输入员工编号">
|
||||
</div>
|
||||
<button class="btn btn-primary" onclick="filterPanel('d')">查询</button>
|
||||
<button class="btn btn-default" onclick="resetPanel('d')">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default" onclick="alert('导出D类人员数据')">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">D类员工列表(中风险)</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);" id="dCount">共 89 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>单位</th>
|
||||
<th>部门</th>
|
||||
<th>姓名</th>
|
||||
<th>员工编号</th>
|
||||
<th>性别</th>
|
||||
<th>年龄</th>
|
||||
<th>健康分类</th>
|
||||
<th>更新时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody-d"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span id="dPageInfo">显示 5 条,共 89 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- E类面板 -->
|
||||
<div class="tab-panel" id="panel-e">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>员工姓名</label>
|
||||
<input class="filter-input" type="text" id="eNameFilter" placeholder="请输入员工姓名">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>员工编号</label>
|
||||
<input class="filter-input" type="text" id="eEmpIdFilter" placeholder="请输入员工编号">
|
||||
</div>
|
||||
<button class="btn btn-primary" onclick="filterPanel('e')">查询</button>
|
||||
<button class="btn btn-default" onclick="resetPanel('e')">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default" onclick="alert('导出E类人员数据')">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">E类员工列表(高风险/慢病)</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);" id="eCount">共 39 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>单位</th>
|
||||
<th>部门</th>
|
||||
<th>姓名</th>
|
||||
<th>员工编号</th>
|
||||
<th>性别</th>
|
||||
<th>年龄</th>
|
||||
<th>健康分类</th>
|
||||
<th>更新时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody-e"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span id="ePageInfo">显示 5 条,共 39 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<script>
|
||||
function getUrlParam(name) {
|
||||
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||
var r = window.location.search.substr(1).match(reg);
|
||||
return r ? decodeURIComponent(r[2]) : null;
|
||||
}
|
||||
|
||||
function esc(s) { return (s||'').replace(/&/g,'&').replace(/"/g,'"').replace(/</g,'<').replace(/>/g,'>'); }
|
||||
|
||||
function switchTab(tabName, elem) {
|
||||
document.querySelectorAll('.tab-item').forEach(function(t) { t.classList.remove('active'); });
|
||||
document.querySelectorAll('.tab-panel').forEach(function(p) { p.classList.remove('active'); });
|
||||
elem.classList.add('active');
|
||||
document.getElementById('panel-' + tabName).classList.add('active');
|
||||
}
|
||||
|
||||
/* ===== 模拟员工数据 ===== */
|
||||
var empData = {
|
||||
a: [
|
||||
{seq:1, unit:'采油一厂', dept:'研发部', name:'张伟', empId:'CQ001001', gender:'男', age:32, classify:'A类', updateTime:'2026-06-08 09:15'},
|
||||
{seq:2, unit:'采油一厂', dept:'运营部', name:'李娜', empId:'CQ001012', gender:'女', age:28, classify:'A类', updateTime:'2026-06-08 10:22'},
|
||||
{seq:3, unit:'采油二厂', dept:'研发部', name:'王磊', empId:'CQ002034', gender:'男', age:35, classify:'A类', updateTime:'2026-06-07 14:30'},
|
||||
{seq:4, unit:'采气一厂', dept:'技术部', name:'赵敏', empId:'CQ003056', gender:'女', age:30, classify:'A类', updateTime:'2026-06-07 16:45'},
|
||||
{seq:5, unit:'能源总部机关', dept:'办公室', name:'刘洋', empId:'CQ004078', gender:'男', age:27, classify:'A类', updateTime:'2026-06-06 08:50'}
|
||||
],
|
||||
b: [
|
||||
{seq:1, unit:'采油一厂', dept:'运营部', name:'陈晨', empId:'CQ001023', gender:'女', age:34, classify:'B类', updateTime:'2026-06-08 11:10'},
|
||||
{seq:2, unit:'采油二厂', dept:'财务部', name:'周杰', empId:'CQ002045', gender:'男', age:38, classify:'B类', updateTime:'2026-06-07 15:20'},
|
||||
{seq:3, unit:'采气一厂', dept:'市场部', name:'吴芳', empId:'CQ003067', gender:'女', age:29, classify:'B类', updateTime:'2026-06-06 09:30'},
|
||||
{seq:4, unit:'能源总部机关', dept:'工会', name:'孙丽', empId:'CQ004089', gender:'女', age:41, classify:'B类', updateTime:'2026-06-06 10:45'},
|
||||
{seq:5, unit:'勘探开发研究院', dept:'信息部', name:'郑浩', empId:'CQ005012', gender:'男', age:33, classify:'B类', updateTime:'2026-06-05 14:00'}
|
||||
],
|
||||
c: [
|
||||
{seq:1, unit:'采油一厂', dept:'市场部', name:'何强', empId:'CQ001035', gender:'男', age:43, classify:'C类', updateTime:'2026-06-08 13:25'},
|
||||
{seq:2, unit:'采油二厂', dept:'运营部', name:'马超', empId:'CQ002056', gender:'男', age:47, classify:'C类', updateTime:'2026-06-07 16:10'},
|
||||
{seq:3, unit:'采气一厂', dept:'技术部', name:'杨丽', empId:'CQ003078', gender:'女', age:39, classify:'C类', updateTime:'2026-06-06 11:30'},
|
||||
{seq:4, unit:'能源总部机关', dept:'安全部', name:'朱峰', empId:'CQ004091', gender:'男', age:45, classify:'C类', updateTime:'2026-06-06 12:15'},
|
||||
{seq:5, unit:'勘探开发研究院', dept:'研发部', name:'徐明', empId:'CQ005023', gender:'男', age:40, classify:'C类', updateTime:'2026-06-05 15:40'}
|
||||
],
|
||||
d: [
|
||||
{seq:1, unit:'采油一厂', dept:'研发部', name:'韩雪', empId:'CQ001046', gender:'女', age:52, classify:'D类', updateTime:'2026-06-08 14:50'},
|
||||
{seq:2, unit:'采油二厂', dept:'运营部', name:'曹杰', empId:'CQ002067', gender:'男', age:49, classify:'D类', updateTime:'2026-06-07 17:30'},
|
||||
{seq:3, unit:'采气一厂', dept:'市场部', name:'邓辉', empId:'CQ003089', gender:'男', age:55, classify:'D类', updateTime:'2026-06-06 13:45'},
|
||||
{seq:4, unit:'能源总部机关', dept:'人事部', name:'冯娟', empId:'CQ004102', gender:'女', age:51, classify:'D类', updateTime:'2026-06-06 14:20'},
|
||||
{seq:5, unit:'勘探开发研究院', dept:'信息部', name:'蒋伟', empId:'CQ005034', gender:'男', age:48, classify:'D类', updateTime:'2026-06-05 16:55'}
|
||||
],
|
||||
e: [
|
||||
{seq:1, unit:'采油一厂', dept:'运营部', name:'沈涛', empId:'CQ001057', gender:'男', age:58, classify:'E类', updateTime:'2026-06-08 15:30'},
|
||||
{seq:2, unit:'采油二厂', dept:'研发部', name:'田甜', empId:'CQ002078', gender:'女', age:54, classify:'E类', updateTime:'2026-06-07 18:10'},
|
||||
{seq:3, unit:'采气一厂', dept:'技术部', name:'潘刚', empId:'CQ003091', gender:'男', age:60, classify:'E类', updateTime:'2026-06-06 14:50'},
|
||||
{seq:4, unit:'能源总部机关', dept:'工会', name:'丁兰', empId:'CQ004113', gender:'女', age:56, classify:'E类', updateTime:'2026-06-06 15:25'},
|
||||
{seq:5, unit:'勘探开发研究院', dept:'研发部', name:'叶强', empId:'CQ005045', gender:'男', age:53, classify:'E类', updateTime:'2026-06-05 17:40'}
|
||||
]
|
||||
};
|
||||
|
||||
/* 分类标签映射 */
|
||||
var classTagMap = {
|
||||
'A类': 'tag-red',
|
||||
'B类': 'tag-orange',
|
||||
'C类': 'tag-yellow',
|
||||
'D类': 'tag-blue',
|
||||
'E类': 'tag-green'
|
||||
};
|
||||
|
||||
/* 渲染面板 */
|
||||
function renderPanel(cat, data) {
|
||||
var tbody = document.getElementById('tbody-' + cat);
|
||||
if (!data) data = empData[cat];
|
||||
var html = '';
|
||||
if (data.length === 0) {
|
||||
html = '<tr><td colspan="10"><div class="empty-state"><svg viewBox="0 0 64 64" fill="none"><circle cx="32" cy="32" r="26" stroke="currentColor" stroke-width="2" stroke-dasharray="4 3"/><path d="M24 28h16M24 34h10M24 40h6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg><div class="empty-state__title">暂无该分类员工数据</div></div></td></tr>';
|
||||
} else {
|
||||
data.forEach(function(e) {
|
||||
var tagClass = classTagMap[e.classify] || 'tag-gray';
|
||||
html += '<tr>';
|
||||
html += '<td>' + e.seq + '</td>';
|
||||
html += '<td>' + esc(e.unit) + '</td>';
|
||||
html += '<td>' + esc(e.dept) + '</td>';
|
||||
html += '<td>' + esc(e.name) + '</td>';
|
||||
html += '<td>' + esc(e.empId) + '</td>';
|
||||
html += '<td>' + esc(e.gender) + '</td>';
|
||||
html += '<td>' + e.age + '</td>';
|
||||
html += '<td><span class="tag ' + tagClass + '">' + esc(e.classify) + '</span></td>';
|
||||
html += '<td>' + esc(e.updateTime) + '</td>';
|
||||
html += '<td><a class="link" href="#">详情</a></td>';
|
||||
html += '</tr>';
|
||||
});
|
||||
}
|
||||
tbody.innerHTML = html;
|
||||
document.getElementById(cat + 'PageInfo').textContent = '显示 ' + data.length + ' 条,共 ' + empData[cat].length + ' 条';
|
||||
}
|
||||
|
||||
/* 筛选 */
|
||||
function filterPanel(cat) {
|
||||
var name = document.getElementById(cat + 'NameFilter').value.trim().toLowerCase();
|
||||
var empId = document.getElementById(cat + 'EmpIdFilter').value.trim().toLowerCase();
|
||||
var filtered = empData[cat].filter(function(e) {
|
||||
if (name && e.name.toLowerCase().indexOf(name) === -1) return false;
|
||||
if (empId && e.empId.toLowerCase().indexOf(empId) === -1) return false;
|
||||
return true;
|
||||
});
|
||||
renderPanel(cat, filtered);
|
||||
}
|
||||
|
||||
/* 重置 */
|
||||
function resetPanel(cat) {
|
||||
document.getElementById(cat + 'NameFilter').value = '';
|
||||
document.getElementById(cat + 'EmpIdFilter').value = '';
|
||||
renderPanel(cat, empData[cat]);
|
||||
}
|
||||
|
||||
/* ===== 初始化 ===== */
|
||||
(function() {
|
||||
var unit = getUrlParam('unit') || '采油一厂';
|
||||
var dept = getUrlParam('dept') || '';
|
||||
var displayName = unit + (dept ? ' - ' + dept : '');
|
||||
|
||||
document.getElementById('unitDept').textContent = displayName;
|
||||
document.getElementById('detailTitle').textContent = displayName + ' — 健康现状 详情';
|
||||
document.getElementById('detailMeta').textContent = '2026年 · A类768人 · B类256人 · C类128人 · D类89人 · E类39人';
|
||||
|
||||
// 渲染所有面板
|
||||
['a','b','c','d','e'].forEach(function(cat) { renderPanel(cat); });
|
||||
|
||||
// 根据URL参数自动切换tab
|
||||
var tab = getUrlParam('tab');
|
||||
if (tab) {
|
||||
var items = document.querySelectorAll('.tab-item');
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
if (items[i].getAttribute('onclick') && items[i].getAttribute('onclick').indexOf("'" + tab + "'") > -1) {
|
||||
items[i].click();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,543 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>健康监测 - 单位体重监测详情 | 健康CQ原型</title>
|
||||
<style>
|
||||
*{box-sizing:border-box;margin:0;padding:0;}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
|
||||
:root{--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;--font-xl:20px;--font-xxl:24px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--shadow-sm:0 1px 4px rgba(0,0,0,0.08);}
|
||||
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
|
||||
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;width:240px;flex-shrink:0;white-space:nowrap;}
|
||||
.top-bar__logo svg{width:28px;height:28px;}
|
||||
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
|
||||
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
|
||||
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
|
||||
.top-bar__nav a.active{color:#fff;background:var(--primary);}
|
||||
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
|
||||
.btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
|
||||
.btn-back:hover{color:#fff;}
|
||||
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);}
|
||||
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;}
|
||||
.sidebar-group-title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;letter-spacing:.5px;}
|
||||
.sidebar-item{display:flex;align-items:center;gap:10px;padding:12px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .2s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;}
|
||||
.breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:16px;font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.breadcrumb a{color:var(--primary);text-decoration:none;}
|
||||
.breadcrumb a:hover{color:#40a9ff;}
|
||||
.breadcrumb .sep{color:var(--text-placeholder);}
|
||||
.tab-bar{display:flex;gap:0;border-bottom:2px solid var(--border);margin-bottom:16px;}
|
||||
.tab-item{padding:10px 24px;font-size:var(--font-sm);color:var(--text-secondary);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s;white-space:nowrap;}
|
||||
.tab-item:hover{color:var(--primary);}
|
||||
.tab-item.active{color:var(--primary);font-weight:600;border-bottom-color:var(--primary);}
|
||||
.tab-panel{display:none;}
|
||||
.tab-panel.active{display:block;}
|
||||
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
|
||||
.filter-item{display:flex;align-items:center;gap:8px;}
|
||||
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
|
||||
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);outline:none;background:#fff;min-width:180px;}
|
||||
.filter-input:focus{border-color:var(--primary);}
|
||||
.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;min-width:120px;}
|
||||
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
|
||||
.btn-primary{background:var(--primary);color:#fff;}
|
||||
.btn-primary:hover{background:#40a9ff;}
|
||||
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}
|
||||
.btn-default:hover{color:var(--primary);border-color:var(--primary);}
|
||||
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);overflow:hidden;}
|
||||
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);}
|
||||
.table-card__title{font-size:var(--font-base);font-weight:600;}
|
||||
.table-card__content{overflow-x:auto;overflow-y:hidden;}
|
||||
.table-card__content table{min-width:100%;white-space:nowrap;}
|
||||
table{width:100%;border-collapse:collapse;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
.tag-green{background:#F6FFED;color:var(--success);}
|
||||
.tag-orange{background:#FFF7E6;color:var(--warning);}
|
||||
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
|
||||
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
|
||||
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
|
||||
.detail-title{font-size:var(--font-lg);font-weight:600;margin-bottom:4px;}
|
||||
.detail-meta{font-size:var(--font-sm);color:var(--text-secondary);margin-bottom:16px;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 顶部导航栏 -->
|
||||
<div class="top-bar">
|
||||
<div class="top-bar__logo">
|
||||
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
|
||||
健康监测
|
||||
</div>
|
||||
<nav class="top-bar__nav">
|
||||
<a href="archive-personal.html" class="active">档案</a>
|
||||
<a href="crowd-status-employee.html">健康现状</a>
|
||||
<a href="health-checkup/survey-category.html">健康排查</a>
|
||||
<a href="wearable/tool-manage.html">穿戴监测</a>
|
||||
<a href="environment/indoor-device-list.html">健康环境</a>
|
||||
<a href="exception-dirty.html">异常事件</a>
|
||||
</nav>
|
||||
<div class="top-bar__right">
|
||||
<a class="btn-back" href="../../index.html">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回首页
|
||||
</a>
|
||||
<div class="avatar">管</div>
|
||||
<span style="color:rgba(255,255,255,0.65);">系统管理员 ▾</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 侧边栏 -->
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-group-title">档案</div>
|
||||
<a href="archive-personal.html" class="sidebar-item">个人监测数据</a>
|
||||
<a href="archive-unit.html" class="sidebar-item active">单位报表数据</a>
|
||||
<a href="archive-algorithm.html" class="sidebar-item">算法模型</a>
|
||||
</aside>
|
||||
|
||||
<!-- 主内容区 -->
|
||||
<main class="main">
|
||||
<!-- 返回按钮 -->
|
||||
<div style="margin-bottom:16px;">
|
||||
<a href="archive-unit.html" style="display:inline-flex;align-items:center;gap:6px;color:var(--primary);text-decoration:none;font-size:var(--font-sm);">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回单位报表
|
||||
</a>
|
||||
</div>
|
||||
<!-- 面包屑 -->
|
||||
<div class="breadcrumb">
|
||||
<a href="archive-unit.html">单位报表数据</a>
|
||||
<span class="sep">/</span>
|
||||
<span id="unitDept"></span>
|
||||
<span class="sep">/</span>
|
||||
<span>体重监测</span>
|
||||
</div>
|
||||
<div class="detail-title" id="detailTitle"></div>
|
||||
<div class="detail-meta" id="detailMeta"></div>
|
||||
|
||||
<!-- [交互] Tab 切换 -->
|
||||
<div class="tab-bar">
|
||||
<div class="tab-item active" onclick="switchTab('scale',this)">体重秤设备</div>
|
||||
<div class="tab-item" onclick="switchTab('bluetooth',this)">蓝牙称设备</div>
|
||||
<div class="tab-item" onclick="switchTab('analyzer',this)">体脂仪设备</div>
|
||||
<div class="tab-item" onclick="switchTab('equipment',this)">运动器械设备</div>
|
||||
<div class="tab-item" onclick="switchTab('overweight',this)">体重超标人员</div>
|
||||
</div>
|
||||
|
||||
<!-- 体重秤设备面板 -->
|
||||
<div class="tab-panel active" id="panel-scale">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" type="text" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<button class="btn btn-primary">查询</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default">导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">体重秤设备列表</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);">共 42 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>设备名称</th>
|
||||
<th>设备厂商</th>
|
||||
<th>设备型号</th>
|
||||
<th>所属单位</th>
|
||||
<th>布放位置</th>
|
||||
<th>入库日期</th>
|
||||
<th>设备状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SC-2024-001</td>
|
||||
<td>体重秤A1</td>
|
||||
<td>华为</td>
|
||||
<td>HW-S100</td>
|
||||
<td>采油一厂</td>
|
||||
<td>职工活动中心1F</td>
|
||||
<td>2024-03-15</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SC-2024-002</td>
|
||||
<td>体重秤A2</td>
|
||||
<td>小米</td>
|
||||
<td>MI-Scale2</td>
|
||||
<td>采油一厂</td>
|
||||
<td>办公楼2F健身房</td>
|
||||
<td>2024-03-18</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SC-2024-003</td>
|
||||
<td>体重秤B1</td>
|
||||
<td>乐心</td>
|
||||
<td>LX-Pro</td>
|
||||
<td>采油二厂</td>
|
||||
<td>员工食堂入口</td>
|
||||
<td>2024-04-02</td>
|
||||
<td><span class="tag tag-orange">维护中</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>显示 3 条,共 42 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 蓝牙称设备面板 -->
|
||||
<div class="tab-panel" id="panel-bluetooth">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" type="text" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<button class="btn btn-primary">查询</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default">导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">蓝牙称设备列表</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);">共 28 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>设备名称</th>
|
||||
<th>设备厂商</th>
|
||||
<th>设备型号</th>
|
||||
<th>所属单位</th>
|
||||
<th>布放位置</th>
|
||||
<th>入库日期</th>
|
||||
<th>设备状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>BT-2024-001</td>
|
||||
<td>蓝牙称A1</td>
|
||||
<td>华为</td>
|
||||
<td>HW-S100</td>
|
||||
<td>采油一厂</td>
|
||||
<td>职工活动中心1F</td>
|
||||
<td>2024-03-15</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BT-2024-002</td>
|
||||
<td>蓝牙称A2</td>
|
||||
<td>小米</td>
|
||||
<td>MI-Scale2</td>
|
||||
<td>采油一厂</td>
|
||||
<td>办公楼2F健身房</td>
|
||||
<td>2024-03-18</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BT-2024-003</td>
|
||||
<td>蓝牙称B1</td>
|
||||
<td>乐心</td>
|
||||
<td>LX-Pro</td>
|
||||
<td>采油二厂</td>
|
||||
<td>员工食堂入口</td>
|
||||
<td>2024-04-02</td>
|
||||
<td><span class="tag tag-orange">维护中</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>显示 3 条,共 28 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 体脂仪设备面板 -->
|
||||
<div class="tab-panel" id="panel-analyzer">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" type="text" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<button class="btn btn-primary">查询</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default">导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">体脂仪设备列表</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);">共 15 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>设备名称</th>
|
||||
<th>设备厂商</th>
|
||||
<th>设备型号</th>
|
||||
<th>所属单位</th>
|
||||
<th>布放位置</th>
|
||||
<th>入库日期</th>
|
||||
<th>设备状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>FT-2024-001</td>
|
||||
<td>体脂仪A1</td>
|
||||
<td>华为</td>
|
||||
<td>HW-S100</td>
|
||||
<td>采油一厂</td>
|
||||
<td>职工活动中心1F</td>
|
||||
<td>2024-03-15</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>FT-2024-002</td>
|
||||
<td>体脂仪A2</td>
|
||||
<td>小米</td>
|
||||
<td>MI-Scale2</td>
|
||||
<td>采油一厂</td>
|
||||
<td>办公楼2F健身房</td>
|
||||
<td>2024-03-18</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>FT-2024-003</td>
|
||||
<td>体脂仪B1</td>
|
||||
<td>乐心</td>
|
||||
<td>LX-Pro</td>
|
||||
<td>采油二厂</td>
|
||||
<td>员工食堂入口</td>
|
||||
<td>2024-04-02</td>
|
||||
<td><span class="tag tag-orange">维护中</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>显示 3 条,共 15 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 运动器械设备面板 -->
|
||||
<div class="tab-panel" id="panel-equipment">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" type="text" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<button class="btn btn-primary">查询</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default">导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">运动器械设备列表</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);">共 24 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>设备名称</th>
|
||||
<th>设备类型</th>
|
||||
<th>设备厂商</th>
|
||||
<th>设备型号</th>
|
||||
<th>所属单位</th>
|
||||
<th>布放位置</th>
|
||||
<th>入库日期</th>
|
||||
<th>设备状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SP-2024-001</td>
|
||||
<td>跑步机T1</td>
|
||||
<td><span class="tag tag-blue">有氧器械</span></td>
|
||||
<td>舒华</td>
|
||||
<td>SH-T5170</td>
|
||||
<td>采油一厂</td>
|
||||
<td>职工活动中心1F</td>
|
||||
<td>2024-03-15</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SP-2024-002</td>
|
||||
<td>椭圆机E1</td>
|
||||
<td><span class="tag tag-blue">有氧器械</span></td>
|
||||
<td>岱宇</td>
|
||||
<td>DY-E600</td>
|
||||
<td>采油一厂</td>
|
||||
<td>办公楼2F健身房</td>
|
||||
<td>2024-03-18</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SP-2024-003</td>
|
||||
<td>划船机R1</td>
|
||||
<td><span class="tag tag-blue">有氧器械</span></td>
|
||||
<td>美国诺德</td>
|
||||
<td>NordicTrack-RW</td>
|
||||
<td>采油二厂</td>
|
||||
<td>员工食堂入口</td>
|
||||
<td>2024-04-02</td>
|
||||
<td><span class="tag tag-green">正常</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>显示 3 条,共 24 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 体重超标人员面板 -->
|
||||
<div class="tab-panel" id="panel-overweight">
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>员工姓名</label>
|
||||
<input class="filter-input" type="text" placeholder="请输入员工姓名">
|
||||
</div>
|
||||
<button class="btn btn-primary">查询</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;">
|
||||
<button class="btn btn-default">导出列表数据</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">体重超标人员列表</span>
|
||||
<span style="font-size:var(--font-sm);color:var(--text-secondary);">共 14 条</span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>员工姓名</th>
|
||||
<th>员工编号</th>
|
||||
<th>部门名称</th>
|
||||
<th>身高(cm)</th>
|
||||
<th>体重(kg)</th>
|
||||
<th>BMI</th>
|
||||
<th>体脂率(%)</th>
|
||||
<th>最后更新时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>王磊</td>
|
||||
<td>EMP003</td>
|
||||
<td>运营部</td>
|
||||
<td>175</td>
|
||||
<td>83.4</td>
|
||||
<td>27.5 <span class="tag tag-orange">超重</span></td>
|
||||
<td>28.3</td>
|
||||
<td>2026-05-12 10:20</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>周明</td>
|
||||
<td>EMP006</td>
|
||||
<td>采购部</td>
|
||||
<td>172</td>
|
||||
<td>88.5</td>
|
||||
<td>29.2 <span class="tag tag-orange">肥胖</span></td>
|
||||
<td>32.1</td>
|
||||
<td>2026-05-11 14:35</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>显示 2 条,共 14 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<script>
|
||||
function getUrlParam(name) {
|
||||
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||
var r = window.location.search.substr(1).match(reg);
|
||||
return r ? decodeURIComponent(r[2]) : null;
|
||||
}
|
||||
|
||||
function switchTab(tabName, elem) {
|
||||
document.querySelectorAll('.tab-item').forEach(function(t) { t.classList.remove('active'); });
|
||||
document.querySelectorAll('.tab-panel').forEach(function(p) { p.classList.remove('active'); });
|
||||
elem.classList.add('active');
|
||||
document.getElementById('panel-' + tabName).classList.add('active');
|
||||
}
|
||||
|
||||
var unit = getUrlParam('unit') || '采油一厂';
|
||||
var dept = getUrlParam('dept') || '';
|
||||
var displayName = unit + (dept ? ' - ' + dept : '');
|
||||
|
||||
document.getElementById('unitDept').textContent = displayName;
|
||||
document.getElementById('detailTitle').textContent = displayName + ' — 体重监测 详情';
|
||||
document.getElementById('detailMeta').textContent = '2026年 · 总人数 90';
|
||||
|
||||
// 根据URL参数自动切换tab
|
||||
var tab = getUrlParam('tab');
|
||||
if(tab){
|
||||
var items = document.querySelectorAll('.tab-item');
|
||||
for(var i=0;i<items.length;i++){
|
||||
if(items[i].getAttribute('onclick') && items[i].getAttribute('onclick').indexOf(tab) > -1){
|
||||
items[i].click();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -171,23 +171,23 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
<tr>
|
||||
<th rowspan="2">单位名称</th>
|
||||
<th rowspan="2">总人数</th>
|
||||
<th colspan="5">健康现状</th>
|
||||
<th colspan="2">健康排查</th>
|
||||
<th colspan="4">穿戴监测</th>
|
||||
<th colspan="5">体重监测</th>
|
||||
<th colspan="5">环境监测</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>A类人数 ↕</th>
|
||||
<th>B类人数 ↕</th>
|
||||
<th>C类人数 ↕</th>
|
||||
<th>D类人数 ↕</th>
|
||||
<th>E类人数 ↕</th>
|
||||
<th>活动次数 ↕</th>
|
||||
<th>未参加人数 ↕</th>
|
||||
<th>入库设备数 ↕</th>
|
||||
<th>分配设备数 ↕</th>
|
||||
<th>告警次数 ↕</th>
|
||||
<th>告警人数 ↕</th>
|
||||
<th>体重秤设备数 ↕</th>
|
||||
<th>蓝牙称设备数 ↕</th>
|
||||
<th>体脂仪设备数 ↕</th>
|
||||
<th>运动器械设备数 ↕</th>
|
||||
<th>体重超标人数 ↕</th>
|
||||
<th>室内设备数 ↕</th>
|
||||
<th>室外设备数 ↕</th>
|
||||
<th>水质设备数 ↕</th>
|
||||
@@ -197,13 +197,13 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="stat-row">
|
||||
<td>统计行</td><td>1,280</td><td>5</td><td>133</td><td>1,280</td><td>1,147</td><td>45</td><td>27</td><td>1,147</td><td>244</td><td>129</td><td>86</td><td>53</td><td>80</td><td>25</td><td>12</td><td>6</td><td>12</td>
|
||||
<td>统计行</td><td>1,280</td><td>768</td><td>256</td><td>128</td><td>89</td><td>39</td><td>5</td><td>133</td><td>1,280</td><td>1,147</td><td>45</td><td>27</td><td>80</td><td>25</td><td>12</td><td>6</td><td>12</td>
|
||||
</tr>
|
||||
<tr><td>采油一厂</td><td>420</td><td>5</td><td>22</td><td>420</td><td>398</td><td>12</td><td>8</td><td>398</td><td>85</td><td>42</td><td>28</td><td>15</td><td>24</td><td>8</td><td>4</td><td>2</td><td>3</td></tr>
|
||||
<tr><td>采油二厂</td><td>380</td><td>5</td><td>24</td><td>380</td><td>356</td><td>18</td><td>12</td><td>356</td><td>76</td><td>38</td><td>25</td><td>18</td><td>20</td><td>6</td><td>3</td><td>2</td><td>5</td></tr>
|
||||
<tr><td>采气一厂</td><td>260</td><td>4</td><td>15</td><td>260</td><td>245</td><td>8</td><td>5</td><td>245</td><td>52</td><td>26</td><td>18</td><td>12</td><td>16</td><td>5</td><td>2</td><td>1</td><td>2</td></tr>
|
||||
<tr><td>能源总部机关</td><td>150</td><td>5</td><td>2</td><td>150</td><td>148</td><td>4</td><td>2</td><td>148</td><td>32</td><td>16</td><td>10</td><td>5</td><td>12</td><td>4</td><td>2</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>勘探开发研究院</td><td>70</td><td>3</td><td>5</td><td>70</td><td>65</td><td>3</td><td>2</td><td>65</td><td>14</td><td>7</td><td>5</td><td>3</td><td>8</td><td>2</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油一厂</td><td>420</td><td>252</td><td>84</td><td>42</td><td>29</td><td>13</td><td>5</td><td>22</td><td>420</td><td>398</td><td>12</td><td>8</td><td>24</td><td>8</td><td>4</td><td>2</td><td>3</td></tr>
|
||||
<tr><td>采油二厂</td><td>380</td><td>228</td><td>76</td><td>38</td><td>26</td><td>12</td><td>5</td><td>24</td><td>380</td><td>356</td><td>18</td><td>12</td><td>20</td><td>6</td><td>3</td><td>2</td><td>5</td></tr>
|
||||
<tr><td>采气一厂</td><td>260</td><td>156</td><td>52</td><td>26</td><td>18</td><td>8</td><td>4</td><td>15</td><td>260</td><td>245</td><td>8</td><td>5</td><td>16</td><td>5</td><td>2</td><td>1</td><td>2</td></tr>
|
||||
<tr><td>能源总部机关</td><td>150</td><td>90</td><td>30</td><td>15</td><td>10</td><td>5</td><td>5</td><td>2</td><td>150</td><td>148</td><td>4</td><td>2</td><td>12</td><td>4</td><td>2</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>勘探开发研究院</td><td>70</td><td>42</td><td>14</td><td>7</td><td>5</td><td>2</td><td>3</td><td>5</td><td>70</td><td>65</td><td>3</td><td>2</td><td>8</td><td>2</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -225,23 +225,23 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
<th rowspan="2">单位名称</th>
|
||||
<th rowspan="2">部门名称</th>
|
||||
<th rowspan="2">总人数</th>
|
||||
<th colspan="5">健康现状</th>
|
||||
<th colspan="2">健康排查</th>
|
||||
<th colspan="4">穿戴监测</th>
|
||||
<th colspan="5">体重监测</th>
|
||||
<th colspan="5">环境监测</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>A类人数 ↕</th>
|
||||
<th>B类人数 ↕</th>
|
||||
<th>C类人数 ↕</th>
|
||||
<th>D类人数 ↕</th>
|
||||
<th>E类人数 ↕</th>
|
||||
<th>活动次数 ↕</th>
|
||||
<th>未参加人数 ↕</th>
|
||||
<th>入库设备数 ↕</th>
|
||||
<th>分配设备数 ↕</th>
|
||||
<th>异常次数 ↕</th>
|
||||
<th>异常人数 ↕</th>
|
||||
<th>体重秤设备数 ↕</th>
|
||||
<th>蓝牙称设备数 ↕</th>
|
||||
<th>体脂仪设备数 ↕</th>
|
||||
<th>运动器械设备数 ↕</th>
|
||||
<th>体重超标人数 ↕</th>
|
||||
<th>室内设备数 ↕</th>
|
||||
<th>室外设备数 ↕</th>
|
||||
<th>水质设备数 ↕</th>
|
||||
@@ -251,13 +251,13 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="stat-row">
|
||||
<td>统计行</td><td>—</td><td>405</td><td>5</td><td>21</td><td>405</td><td>384</td><td>14</td><td>8</td><td>384</td><td>82</td><td>41</td><td>27</td><td>15</td><td>24</td><td>8</td><td>4</td><td>4</td><td>5</td>
|
||||
<td>统计行</td><td>—</td><td>405</td><td>243</td><td>81</td><td>40</td><td>28</td><td>13</td><td>5</td><td>21</td><td>405</td><td>384</td><td>14</td><td>8</td><td>24</td><td>8</td><td>4</td><td>4</td><td>5</td>
|
||||
</tr>
|
||||
<tr><td>采油一厂</td><td>研发部</td><td>85</td><td>5</td><td>3</td><td>85</td><td>82</td><td>2</td><td>1</td><td>82</td><td>18</td><td>9</td><td>6</td><td>3</td><td>6</td><td>2</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油一厂</td><td>运营部</td><td>120</td><td>4</td><td>8</td><td>120</td><td>112</td><td>5</td><td>3</td><td>112</td><td>24</td><td>12</td><td>8</td><td>5</td><td>8</td><td>3</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油一厂</td><td>市场部</td><td>95</td><td>5</td><td>5</td><td>95</td><td>90</td><td>3</td><td>2</td><td>90</td><td>19</td><td>10</td><td>6</td><td>4</td><td>6</td><td>2</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油二厂</td><td>财务部</td><td>60</td><td>3</td><td>2</td><td>60</td><td>58</td><td>2</td><td>1</td><td>58</td><td>12</td><td>6</td><td>4</td><td>2</td><td>4</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油二厂</td><td>人事部</td><td>45</td><td>3</td><td>3</td><td>45</td><td>42</td><td>2</td><td>1</td><td>42</td><td>9</td><td>5</td><td>3</td><td>2</td><td>3</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油一厂</td><td>研发部</td><td>85</td><td>51</td><td>17</td><td>9</td><td>6</td><td>2</td><td>5</td><td>3</td><td>85</td><td>82</td><td>2</td><td>1</td><td>6</td><td>2</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油一厂</td><td>运营部</td><td>120</td><td>72</td><td>24</td><td>12</td><td>8</td><td>4</td><td>4</td><td>8</td><td>120</td><td>112</td><td>5</td><td>3</td><td>8</td><td>3</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油一厂</td><td>市场部</td><td>95</td><td>57</td><td>19</td><td>10</td><td>7</td><td>2</td><td>5</td><td>5</td><td>95</td><td>90</td><td>3</td><td>2</td><td>6</td><td>2</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油二厂</td><td>财务部</td><td>60</td><td>36</td><td>12</td><td>6</td><td>4</td><td>2</td><td>3</td><td>2</td><td>60</td><td>58</td><td>2</td><td>1</td><td>4</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
<tr><td>采油二厂</td><td>人事部</td><td>45</td><td>27</td><td>9</td><td>5</td><td>3</td><td>1</td><td>3</td><td>3</td><td>45</td><td>42</td><td>2</td><td>1</td><td>3</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -314,23 +314,23 @@ function switchTab(idx) {
|
||||
|
||||
// 二级单位表格
|
||||
if(tableIdx === 0){
|
||||
// 健康排查列 (2-3): 活动次数、未参加人数
|
||||
// 健康现状列 (2-6): A类、B类、C类、D类、E类
|
||||
var crowdBase = 'archive-unit-crowd-status-detail.html?unit=' + encodeURIComponent(unitName);
|
||||
wrapLink(cells[2], crowdBase + '&tab=a');
|
||||
wrapLink(cells[3], crowdBase + '&tab=b');
|
||||
wrapLink(cells[4], crowdBase + '&tab=c');
|
||||
wrapLink(cells[5], crowdBase + '&tab=d');
|
||||
wrapLink(cells[6], crowdBase + '&tab=e');
|
||||
// 健康排查列 (7-8): 活动次数、未参加人数
|
||||
var hcBase = 'archive-unit-health-checkup-detail.html?unit=' + encodeURIComponent(unitName);
|
||||
wrapLink(cells[2], hcBase + '&tab=activity-list');
|
||||
wrapLink(cells[3], hcBase + '&tab=pending-emp');
|
||||
// 穿戴监测列 (4-7): 入库、分配、告警次数、告警人数
|
||||
wrapLink(cells[7], hcBase + '&tab=activity-list');
|
||||
wrapLink(cells[8], hcBase + '&tab=pending-emp');
|
||||
// 穿戴监测列 (9-12): 入库、分配、告警次数、告警人数
|
||||
var wearableBase = 'archive-unit-wearable-detail.html?unit=' + encodeURIComponent(unitName);
|
||||
wrapLink(cells[4], wearableBase + '&tab=inbound');
|
||||
wrapLink(cells[5], wearableBase + '&tab=allocated');
|
||||
wrapLink(cells[6], wearableBase + '&tab=exception-times');
|
||||
wrapLink(cells[7], wearableBase + '&tab=exception-people');
|
||||
// 体重监测列 (8-12): 体重秤、蓝牙称、体脂仪、运动器械、BMI异常
|
||||
var weightBase = 'archive-unit-weight-detail.html?unit=' + encodeURIComponent(unitName);
|
||||
wrapLink(cells[8], weightBase + '&tab=scale');
|
||||
wrapLink(cells[9], weightBase + '&tab=bluetooth');
|
||||
wrapLink(cells[10], weightBase + '&tab=analyzer');
|
||||
wrapLink(cells[11], weightBase + '&tab=equipment');
|
||||
wrapLink(cells[12], weightBase + '&tab=overweight');
|
||||
wrapLink(cells[9], wearableBase + '&tab=inbound');
|
||||
wrapLink(cells[10], wearableBase + '&tab=allocated');
|
||||
wrapLink(cells[11], wearableBase + '&tab=exception-times');
|
||||
wrapLink(cells[12], wearableBase + '&tab=exception-people');
|
||||
// 环境监测列 (13-17): 室内、室外、水质、花粉、报警
|
||||
var envBase = 'archive-unit-environment-detail.html?unit=' + encodeURIComponent(unitName);
|
||||
wrapLink(cells[13], envBase + '&tab=indoor');
|
||||
@@ -346,23 +346,23 @@ function switchTab(idx) {
|
||||
var unitNameFromCell = unitCell.textContent;
|
||||
var q = '&dept=' + encodeURIComponent(deptName);
|
||||
|
||||
// 健康排查列 (3-4): 活动次数、未参加人数
|
||||
// 健康现状列 (3-7): A类、B类、C类、D类、E类
|
||||
var crowdBase = 'archive-unit-crowd-status-detail.html?unit=' + encodeURIComponent(unitNameFromCell) + q;
|
||||
wrapLink(cells[3], crowdBase + '&tab=a');
|
||||
wrapLink(cells[4], crowdBase + '&tab=b');
|
||||
wrapLink(cells[5], crowdBase + '&tab=c');
|
||||
wrapLink(cells[6], crowdBase + '&tab=d');
|
||||
wrapLink(cells[7], crowdBase + '&tab=e');
|
||||
// 健康排查列 (8-9): 活动次数、未参加人数
|
||||
var hcBase = 'archive-unit-health-checkup-detail.html?unit=' + encodeURIComponent(unitNameFromCell) + q;
|
||||
wrapLink(cells[3], hcBase + '&tab=activity-list');
|
||||
wrapLink(cells[4], hcBase + '&tab=pending-emp');
|
||||
// 穿戴监测列 (5-8): 入库、分配、异常次数、异常人数
|
||||
wrapLink(cells[8], hcBase + '&tab=activity-list');
|
||||
wrapLink(cells[9], hcBase + '&tab=pending-emp');
|
||||
// 穿戴监测列 (10-13): 入库、分配、异常次数、异常人数
|
||||
var wearableBase = 'archive-unit-wearable-detail.html?unit=' + encodeURIComponent(unitNameFromCell) + q;
|
||||
wrapLink(cells[5], wearableBase + '&tab=inbound');
|
||||
wrapLink(cells[6], wearableBase + '&tab=allocated');
|
||||
wrapLink(cells[7], wearableBase + '&tab=exception-times');
|
||||
wrapLink(cells[8], wearableBase + '&tab=exception-people');
|
||||
// 体重监测列 (9-13): 体重秤、蓝牙称、体脂仪、运动器械、BMI异常
|
||||
var weightBase = 'archive-unit-weight-detail.html?unit=' + encodeURIComponent(unitNameFromCell) + q;
|
||||
wrapLink(cells[9], weightBase + '&tab=scale');
|
||||
wrapLink(cells[10], weightBase + '&tab=bluetooth');
|
||||
wrapLink(cells[11], weightBase + '&tab=analyzer');
|
||||
wrapLink(cells[12], weightBase + '&tab=equipment');
|
||||
wrapLink(cells[13], weightBase + '&tab=overweight');
|
||||
wrapLink(cells[10], wearableBase + '&tab=inbound');
|
||||
wrapLink(cells[11], wearableBase + '&tab=allocated');
|
||||
wrapLink(cells[12], wearableBase + '&tab=exception-times');
|
||||
wrapLink(cells[13], wearableBase + '&tab=exception-people');
|
||||
// 环境监测列 (14-18): 室内、室外、水质、花粉、报警
|
||||
var envBase = 'archive-unit-environment-detail.html?unit=' + encodeURIComponent(unitNameFromCell) + q;
|
||||
wrapLink(cells[14], envBase + '&tab=indoor');
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
# 健康监测管理端 CHANGELOG
|
||||
|
||||
## [2026-06-09]
|
||||
|
||||
### 修复 — PRD 全量排查与一致性修复(91页逐一核对)
|
||||
|
||||
- **全量页面识别**:确认 health-monitor 共 91 个 HTML 页面(含占位页面),覆盖 12 个模块
|
||||
- **废弃页面处理**:删除 7 个不存在的健康排查页面从 PRD(survey-category/question/score/template, maxim, record-user/dept),清理对应 7 张废弃截图
|
||||
- **缺失截图补全**:新增 29 张缺失的页面截图
|
||||
- **过期截图重生成**:重新生成 19 张与 HTML 不一致的旧截图
|
||||
- **缺失截图引用修复**:14 个页面 PRD 描述中缺少 `![页面截图]` 引用,已补全
|
||||
- archive-personal-detail, crowd-status-employee/unit, survey-manage/edit, activity-manage/edit/detail/stat, alarm-heartrate/spo2/temp/stress, monitor-sleep-watch5
|
||||
- **页面描述修正**:
|
||||
- archive-personal:删除体重监测列、健康排查子列修正为应参加/已参加/未参加
|
||||
- archive-unit:健康排查修正为活动次数/未参加人数
|
||||
- archive-unit-health-checkup-detail:改写为活动列表/未参加员工视图
|
||||
- wearable/dept-stat:改写为二级单位/三级单位视图
|
||||
- wearable/personal-stat:重写主表列结构,增加额外指标组
|
||||
- wearable/ops 多个监测页:修正实际列结构
|
||||
- environment 多个监测页:修正筛选条件、列差异
|
||||
- **最终验证**:57 个 PRD 页面段落均有截图引用,92 条截图引用全部对应有效文件,119 张有效截图文件
|
||||
|
||||
### 修改 — PRD文档更新(对齐实际HTML页面)
|
||||
|
||||
- **页面清单更新**:新增问卷管理(2页)、活动管理(4页)、运维中心异常告警(watch5)(4页)、日常监测(watch5)(1页)、个人监测详情(1页),共计新增12个页面条目
|
||||
- **导航结构更新**:补充问卷管理、活动管理、异常告警(watch5)、睡眠信息(watch5)、个人监测详情等新增节点
|
||||
- **逐页说明新增**:
|
||||
- 问卷管理(survey-manage):问卷列表、开关状态、预览弹窗
|
||||
- 新增/编辑问卷(survey-edit):左右分栏编辑器、题目卡片、跳转逻辑
|
||||
- 活动管理(activity-manage):CRUD管理、人员范围弹窗
|
||||
- 新增/编辑活动(activity-edit):完整表单、员工选择器、文件上传
|
||||
- 活动详情(activity-detail):已参加/未参加人员Tab、问卷详情弹窗
|
||||
- 活动统计(activity-stat):参与统计列表
|
||||
- 心率/血氧/体温/压力异常(watch5):告警事件列表、详情弹窗(含GPS误差状态)
|
||||
- 睡眠信息(watch5):睡眠数据列表、睡眠阶段子表格
|
||||
- 个人监测详情(archive-personal-detail):三Tab(健康现状/健康排查/穿戴监测)
|
||||
- **体重监测路径修正**:文件路径从 `weight/` 修正为 `weight-management/`,添加说明体重监测为独立模块
|
||||
|
||||
## [2026-06-08]
|
||||
|
||||
### 新增 — 穿戴监测运维中心 · 睡眠信息(watch5) 页面
|
||||
|
||||
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 198 KiB |
@@ -156,23 +156,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item active" id="sidebarActManage">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item" id="sidebarActStat">活动统计</a>
|
||||
|
||||
@@ -206,23 +206,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item active">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item active">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -131,23 +131,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item active">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item active">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -115,23 +115,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item active">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item active">活动统计</a>
|
||||
|
||||
@@ -94,23 +94,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -92,23 +92,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item active">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -103,23 +103,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item active">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -126,23 +126,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item active">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -249,23 +249,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -159,23 +159,6 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item active">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -120,23 +120,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item active">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -78,23 +78,9 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item active">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item active">活动统计</a>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -126,23 +126,6 @@
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">健康排查</div>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查问卷</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="survey-category.html" class="sidebar-item">问题分类</a>
|
||||
<a href="survey-score.html" class="sidebar-item">积分规则</a>
|
||||
<a href="survey-template.html" class="sidebar-item active">模板信息</a>
|
||||
<a href="survey-question.html" class="sidebar-item">问题管理</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="maxim.html" class="sidebar-item" style="display:none">格言管理</a>
|
||||
<div class="sidebar-subgroup" style="display:none">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 排查记录</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="record-user.html" class="sidebar-item">员工排查统计</a>
|
||||
<a href="record-dept.html" class="sidebar-item">单位排查统计</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="survey-manage.html" class="sidebar-item">问卷管理</a>
|
||||
<a href="activity-manage.html" class="sidebar-item">活动管理</a>
|
||||
<a href="activity-stat.html" class="sidebar-item">活动统计</a>
|
||||
|
||||
@@ -0,0 +1,456 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>健康监测 - 心率异常(watch5) | 健康长庆原型</title>
|
||||
<style>
|
||||
*{box-sizing:border-box;margin:0;padding:0;}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
|
||||
:root{
|
||||
--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;
|
||||
--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;
|
||||
--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;
|
||||
--radius-sm:4px;--radius-md:8px;--radius-lg:12px;
|
||||
--shadow-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.12);
|
||||
}
|
||||
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
|
||||
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;white-space:nowrap;width:240px;flex-shrink:0;}
|
||||
.top-bar__logo svg{width:28px;height:28px;}
|
||||
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
|
||||
.btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
|
||||
.btn-back:hover{color:#fff;}
|
||||
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);cursor:pointer;}
|
||||
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
|
||||
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
|
||||
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
|
||||
.top-bar__nav a.active{color:#fff;background:var(--primary);}
|
||||
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;padding-top:8px;}
|
||||
.sidebar-section__title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;letter-spacing:.5px;}
|
||||
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.sidebar-subgroup__header{display:flex;align-items:center;gap:6px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;user-select:none;}
|
||||
.sidebar-subgroup__header:hover{color:rgba(255,255,255,0.85);background:rgba(255,255,255,0.04);}
|
||||
.sidebar-subgroup__header .arrow{width:10px;height:10px;transition:transform .2s;flex-shrink:0;}
|
||||
.sidebar-subgroup__header .arrow path{stroke:rgba(255,255,255,0.45);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header{color:rgba(255,255,255,0.85);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header .arrow{transform:rotate(90deg);}
|
||||
.sidebar-subgroup__body{display:none;}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__body{display:block;}
|
||||
.sidebar-subgroup__body>.sidebar-item{padding-left:36px;font-size:var(--font-sm);}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__header{padding-left:36px;}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__body>.sidebar-item{padding-left:52px;font-size:var(--font-sm);}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
|
||||
.page-header{margin-bottom:20px;}
|
||||
.page-title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);}
|
||||
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
|
||||
.filter-item{display:flex;align-items:center;gap:8px;}
|
||||
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
|
||||
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;min-width:180px;}
|
||||
.filter-input:focus{border-color:var(--primary);}
|
||||
.date-range{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 10px;height:36px;background:#fff;}
|
||||
.date-range input{border:none;outline:none;font-size:var(--font-sm);color:var(--text-primary);height:34px;width:140px;}
|
||||
.date-range .sep{color:var(--text-placeholder);font-size:var(--font-sm);}
|
||||
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
|
||||
.btn-primary{background:var(--primary);color:#fff;border:1px solid var(--primary);}.btn-primary:hover{background:#40a9ff;border-color:#40a9ff;}
|
||||
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}.btn-default:hover{color:var(--primary);border-color:var(--primary);}
|
||||
.btn-link{background:none;border:none;color:var(--primary);cursor:pointer;font-size:var(--font-sm);padding:0 4px;}.btn-link:hover{color:#40a9ff;}
|
||||
.action-bar{display:flex;gap:8px;align-items:center;margin-bottom:12px;}
|
||||
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);}
|
||||
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--border);}
|
||||
.table-card__title{font-size:var(--font-base);font-weight:600;}
|
||||
.table-card__title small{font-size:var(--font-sm);color:var(--text-secondary);font-weight:400;margin-left:8px;}
|
||||
.table-card__content{overflow-x:auto;}
|
||||
table{width:100%;border-collapse:collapse;white-space:nowrap;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
.mono{font-family:'SFMono-Regular',Consolas,Menlo,monospace;color:var(--text-primary);}
|
||||
.cell-truncate{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
.tag-green{background:#F6FFED;color:#52C41A;}
|
||||
.tag-red{background:#FFF1F0;color:#FF4D4F;}
|
||||
.tag-orange{background:#FFF7E6;color:#FAAD14;}
|
||||
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
|
||||
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
|
||||
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
|
||||
.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;cursor:pointer;min-width:90px;}
|
||||
.modal-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:500;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .15s;}
|
||||
.modal-mask.show{opacity:1;pointer-events:auto;}
|
||||
.modal{background:#fff;border-radius:var(--radius-lg);width:640px;max-height:85vh;overflow-y:auto;box-shadow:0 8px 40px rgba(0,0,0,0.18);}
|
||||
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--border);}
|
||||
.modal-title{font-size:var(--font-base);font-weight:600;}
|
||||
.modal-close{width:32px;height:32px;border:none;background:none;cursor:pointer;font-size:18px;color:var(--text-secondary);border-radius:var(--radius-sm);}
|
||||
.modal-close:hover{background:#F5F5F5;color:var(--text-primary);}
|
||||
.modal-body{padding:24px;}
|
||||
.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--border);}
|
||||
.detail-list{display:grid;grid-template-columns:1fr 1fr;gap:14px 24px;}
|
||||
.detail-item{display:flex;flex-direction:column;gap:4px;}
|
||||
.detail-item label{font-size:var(--font-xs);color:var(--text-placeholder);}
|
||||
.detail-item span{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;word-break:break-all;}
|
||||
.detail-section-title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);margin:18px 0 10px;display:flex;align-items:center;gap:6px;}
|
||||
.detail-section-title::before{content:'';width:3px;height:14px;background:var(--primary);border-radius:2px;}
|
||||
.map-placeholder{width:100%;height:260px;background:#F0F2F5;border-radius:var(--radius-md);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;}
|
||||
.map-placeholder__grid{position:absolute;inset:0;background-image:linear-gradient(rgba(0,0,0,0.05) 1px,transparent 1px),linear-gradient(90deg,rgba(0,0,0,0.05) 1px,transparent 1px);background-size:40px 40px;}
|
||||
.map-placeholder__pin{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;}
|
||||
.map-placeholder__pin svg{width:32px;height:32px;filter:drop-shadow(0 2px 4px rgba(0,0,0,0.2));}
|
||||
.map-placeholder__coords{font-size:var(--font-xs);color:var(--text-secondary);background:#fff;padding:4px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);margin-top:6px;font-family:monospace;}
|
||||
.map-placeholder__error{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;}
|
||||
.map-placeholder__error svg{width:40px;height:40px;color:var(--text-placeholder);}
|
||||
.map-placeholder__error p{font-size:var(--font-sm);color:var(--text-placeholder);margin-top:8px;text-align:center;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="top-bar">
|
||||
<div class="top-bar__logo">
|
||||
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
|
||||
健康监测
|
||||
</div>
|
||||
<nav class="top-bar__nav">
|
||||
<a href="../../archive-personal.html">档案</a>
|
||||
<a href="../../crowd-status-employee.html">健康现状</a>
|
||||
<a href="../../health-checkup/survey-category.html">健康排查</a>
|
||||
<a href="../tool-manage.html" class="active">穿戴监测</a>
|
||||
<a href="../../environment/indoor-device-list.html">健康环境</a>
|
||||
<a href="../../exception-dirty.html">异常事件</a>
|
||||
</nav>
|
||||
<div class="top-bar__right">
|
||||
<a class="btn-back" href="../../../../index.html">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回首页
|
||||
</a>
|
||||
<div class="avatar">管</div>
|
||||
<span>系统管理员 ▾</span>
|
||||
</div>
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">穿戴监测</div>
|
||||
<a href="../tool-manage.html" class="sidebar-item">设备管理</a>
|
||||
<a href="../bind-record.html" class="sidebar-item">绑定记录</a>
|
||||
<a href="../user-data.html" class="sidebar-item">用户数据</a>
|
||||
<a href="../exception-event.html" class="sidebar-item">告警记录</a>
|
||||
<a href="../notification.html" class="sidebar-item">通知消息</a>
|
||||
<a href="../dept-stat.html" class="sidebar-item">单位数据统计</a>
|
||||
<a href="../personal-stat.html" class="sidebar-item">个人数据统计</a>
|
||||
<a href="../dept-report.html" class="sidebar-item">单位数据分析报告</a>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 运维中心</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 终端设置</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="terminal-default-config.html" class="sidebar-item">默认配置</a>
|
||||
<a href="terminal-config-info.html" class="sidebar-item">配置信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日常监测</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="monitor-ecg.html" class="sidebar-item">心电图信息</a>
|
||||
<a href="monitor-spo2.html" class="sidebar-item">血氧信息</a>
|
||||
<a href="monitor-temp.html" class="sidebar-item">体温信息</a>
|
||||
<a href="monitor-stress.html" class="sidebar-item">压力信息</a>
|
||||
<a href="monitor-exercise.html" class="sidebar-item">锻炼信息</a>
|
||||
<a href="monitor-heartrate.html" class="sidebar-item">心率信息</a>
|
||||
<a href="monitor-sleep.html" class="sidebar-item">睡眠信息</a>
|
||||
<a href="monitor-sleep-watch5.html" class="sidebar-item">睡眠信息(watch5)</a>
|
||||
<a href="sdc-overview.html" class="sidebar-item">SDC信息</a>
|
||||
<a href="monitor-activity.html" class="sidebar-item">活动信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-data.html" class="sidebar-item">事件监听</a>
|
||||
<div class="sidebar-subgroup open">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-heartrate.html" class="sidebar-item active">心率异常</a>
|
||||
<a href="alarm-spo2.html" class="sidebar-item">血氧异常</a>
|
||||
<a href="alarm-temp.html" class="sidebar-item">体温异常</a>
|
||||
<a href="alarm-stress.html" class="sidebar-item">压力异常</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="log-network.html" class="sidebar-item">手表网络切换日志</a>
|
||||
<a href="log-version.html" class="sidebar-item">版本更新历史</a>
|
||||
<a href="log-error.html" class="sidebar-item">手表错误日志</a>
|
||||
<a href="log-task.html" class="sidebar-item">任务日志</a>
|
||||
<a href="log-mqtt.html" class="sidebar-item">mqtt消息日志</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<main class="main">
|
||||
<div class="page-header">
|
||||
<div class="page-title">心率异常(watch5)</div>
|
||||
</div>
|
||||
|
||||
<!-- 筛选 -->
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>日期范围</label>
|
||||
<div class="date-range">
|
||||
<input type="date" value="2026-05-26">
|
||||
<span class="sep">至</span>
|
||||
<input type="date" value="2026-06-02">
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="6" cy="6" r="4.5" stroke="currentColor" stroke-width="1.5"/><path d="M10.5 10.5l2 2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
查询
|
||||
</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
|
||||
<!-- 操作行 -->
|
||||
<div class="action-bar">
|
||||
<button class="btn btn-default">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 1v8M3.5 5.5L7 9l3.5-3.5M2 12h10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
导出列表数据
|
||||
</button>
|
||||
<button class="btn btn-default">查看导出任务</button>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">心率异常记录<small>共 48 条</small></span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>事件类型</th>
|
||||
<th>心率告警类型</th>
|
||||
<th>心率</th>
|
||||
<th>静息心率</th>
|
||||
<th>告警时间</th>
|
||||
<th>经度</th>
|
||||
<th>纬度</th>
|
||||
<th>地址</th>
|
||||
<th>GPS异常信息</th>
|
||||
<th>创建日期</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr data-code="4PMBB25A2810000001" data-etype="heartRateAlarmEvent" data-alarmtype="0" data-value="111" data-rest="" data-time="2026-06-08 11:15:30" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-08 11:15:33" data-emp="张伟" data-empcode="CQ001234" data-unit="采油一厂" data-dept="作业一区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>heartRateAlarmEvent</td>
|
||||
<td>0</td>
|
||||
<td>111</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:15:30</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:15:33</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB263141000002" data-etype="heartRateAlarmEvent" data-alarmtype="0" data-value="112" data-rest="" data-time="2026-06-08 11:02:15" data-lng="85.049420" data-lat="45.626727" data-addr="" data-gps="" data-created="2026-06-08 11:02:18" data-emp="李建国" data-empcode="CQ001235" data-unit="采油一厂" data-dept="作业二区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB26314100...</span></td>
|
||||
<td>heartRateAlarmEvent</td>
|
||||
<td>0</td>
|
||||
<td>112</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:02:15</td>
|
||||
<td>85.049420</td>
|
||||
<td>45.626727</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:02:18</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25A2810000003" data-etype="heartRateAlarmEvent" data-alarmtype="0" data-value="103" data-rest="" data-time="2026-06-08 11:00:22" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-08 11:00:25" data-emp="王磊" data-empcode="CQ002101" data-unit="采气一厂" data-dept="集气站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>heartRateAlarmEvent</td>
|
||||
<td>0</td>
|
||||
<td>103</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:00:22</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:00:25</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000004" data-etype="heartRateAlarmEvent" data-alarmtype="1" data-value="0" data-rest="" data-time="2026-05-14 04:30:10" data-lng="0" data-lat="0" data-addr="" data-gps="{\"code\":3}" data-created="2026-06-08 10:30:13" data-emp="陈晓明" data-empcode="CQ001500" data-unit="采油二厂" data-dept="注水站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>heartRateAlarmEvent</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>—</td>
|
||||
<td>2026-05-14 04:30:10</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>—</td>
|
||||
<td class="cell-truncate">{"code":3...</td>
|
||||
<td>2026-06-08 10:30:13</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000005" data-etype="heartRateAlarmEvent" data-alarmtype="1" data-value="0" data-rest="" data-time="2026-06-08 07:10:22" data-lng="87.295736" data-lat="43.989552" data-addr="" data-gps="" data-created="2026-06-08 07:10:25" data-emp="赵强" data-empcode="CQ003010" data-unit="采气二厂" data-dept="作业三区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>heartRateAlarmEvent</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 07:10:22</td>
|
||||
<td>87.295736</td>
|
||||
<td>43.989552</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 07:10:25</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000006" data-etype="heartRateAlarmEvent" data-alarmtype="1" data-value="0" data-rest="" data-time="2026-06-08 06:40:15" data-lng="87.295779" data-lat="43.989548" data-addr="" data-gps="" data-created="2026-06-08 06:40:18" data-emp="孙丽" data-empcode="CQ003050" data-unit="采气二厂" data-dept="作业四区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>heartRateAlarmEvent</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 06:40:15</td>
|
||||
<td>87.295779</td>
|
||||
<td>43.989548</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 06:40:18</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>共 48 条</span>
|
||||
<button class="page-btn">«</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">3</button>
|
||||
<button class="page-btn">…</button>
|
||||
<button class="page-btn">5</button>
|
||||
<button class="page-btn">»</button>
|
||||
<select class="filter-select">
|
||||
<option>10条/页</option>
|
||||
<option>20条/页</option>
|
||||
<option>50条/页</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<div class="modal-mask" id="detailModal">
|
||||
<div class="modal">
|
||||
<div class="modal-header">
|
||||
<span class="modal-title">心率异常详情</span>
|
||||
<button class="modal-close" onclick="closeModal('detailModal')">✕</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="detail-section-title">异常信息</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>设备编码</label><span class="mono" id="d-code">—</span></div>
|
||||
<div class="detail-item"><label>事件类型</label><span id="d-etype">—</span></div>
|
||||
<div class="detail-item"><label>心率告警类型</label><span id="d-alarmtype">—</span></div>
|
||||
<div class="detail-item"><label>心率</label><span id="d-value">—</span></div>
|
||||
<div class="detail-item"><label>静息心率</label><span id="d-rest">—</span></div>
|
||||
<div class="detail-item"><label>告警时间</label><span id="d-time">—</span></div>
|
||||
<div class="detail-item"><label>经度</label><span id="d-lng">—</span></div>
|
||||
<div class="detail-item"><label>纬度</label><span id="d-lat">—</span></div>
|
||||
<div class="detail-item"><label>地址</label><span id="d-addr">—</span></div>
|
||||
<div class="detail-item"><label>GPS异常信息</label><span id="d-gps">—</span></div>
|
||||
<div class="detail-item"><label>创建日期</label><span id="d-created">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">绑定员工</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>员工姓名</label><span id="d-emp">—</span></div>
|
||||
<div class="detail-item"><label>员工编号</label><span class="mono" id="d-empcode">—</span></div>
|
||||
<div class="detail-item"><label>所属单位</label><span id="d-unit">—</span></div>
|
||||
<div class="detail-item"><label>所属部门</label><span id="d-dept">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">位置信息</div>
|
||||
<div class="map-placeholder" id="mapPlaceholder">
|
||||
<div class="map-placeholder__grid"></div>
|
||||
<!-- 正常定位 -->
|
||||
<div class="map-placeholder__pin" id="mapPin">
|
||||
<svg viewBox="0 0 32 32" fill="none">
|
||||
<path d="M16 2C10.477 2 6 6.477 6 12c0 7.5 10 18 10 18s10-10.5 10-18c0-5.523-4.477-10-10-10z" fill="#FF4D4F"/>
|
||||
<circle cx="16" cy="12" r="4" fill="#fff"/>
|
||||
</svg>
|
||||
<span class="map-placeholder__coords" id="d-coords">—</span>
|
||||
</div>
|
||||
<!-- GPS错误状态 -->
|
||||
<div class="map-placeholder__error" id="mapError" style="display:none;">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
|
||||
<path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7z"/>
|
||||
<line x1="9" y1="9" x2="15" y2="12" stroke-width="2"/>
|
||||
</svg>
|
||||
<p id="d-mapErrorText">—</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default" onclick="closeModal('detailModal')">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleSubgroup(h){h.parentElement.classList.toggle('open');}
|
||||
(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var el=a.parentElement;while(el){if(el.classList&&el.classList.contains('sidebar-subgroup'))el.classList.add('open');el=el.parentElement;}})();
|
||||
|
||||
function closeModal(id){document.getElementById(id).classList.remove('show');}
|
||||
document.querySelectorAll('.modal-mask').forEach(function(m){m.addEventListener('click',function(e){if(e.target===m)m.classList.remove('show');});});
|
||||
|
||||
function openDetail(btn){
|
||||
var tr = btn.closest('tr');
|
||||
var d = tr.dataset;
|
||||
|
||||
document.getElementById('d-code').textContent = d.code;
|
||||
document.getElementById('d-etype').textContent = d.etype;
|
||||
document.getElementById('d-alarmtype').textContent = d.alarmtype;
|
||||
document.getElementById('d-value').textContent = d.value || '—';
|
||||
document.getElementById('d-rest').textContent = d.rest || '—';
|
||||
document.getElementById('d-time').textContent = d.time;
|
||||
document.getElementById('d-lng').textContent = d.lng;
|
||||
document.getElementById('d-lat').textContent = d.lat;
|
||||
document.getElementById('d-addr').textContent = d.addr || '—';
|
||||
document.getElementById('d-gps').textContent = d.gps || '—';
|
||||
document.getElementById('d-created').textContent = d.created;
|
||||
document.getElementById('d-emp').textContent = d.emp;
|
||||
document.getElementById('d-empcode').textContent = d.empcode;
|
||||
document.getElementById('d-unit').textContent = d.unit;
|
||||
document.getElementById('d-dept').textContent = d.dept;
|
||||
|
||||
// GPS错误处理:有错误信息时隐藏地图定位,显示错误状态
|
||||
if (d.gps) {
|
||||
document.getElementById('mapPin').style.display = 'none';
|
||||
document.getElementById('mapError').style.display = 'flex';
|
||||
document.getElementById('d-mapErrorText').textContent = d.gps;
|
||||
} else {
|
||||
document.getElementById('mapPin').style.display = 'flex';
|
||||
document.getElementById('mapError').style.display = 'none';
|
||||
document.getElementById('d-coords').textContent = '纬度: ' + d.lat + ' 经度: ' + d.lng;
|
||||
}
|
||||
|
||||
document.getElementById('detailModal').classList.add('show');
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,492 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>健康监测 - 血氧异常(watch5) | 健康长庆原型</title>
|
||||
<style>
|
||||
*{box-sizing:border-box;margin:0;padding:0;}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
|
||||
:root{
|
||||
--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;
|
||||
--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;
|
||||
--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;
|
||||
--radius-sm:4px;--radius-md:8px;--radius-lg:12px;
|
||||
--shadow-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.12);
|
||||
}
|
||||
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
|
||||
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;white-space:nowrap;width:240px;flex-shrink:0;}
|
||||
.top-bar__logo svg{width:28px;height:28px;}
|
||||
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
|
||||
.btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
|
||||
.btn-back:hover{color:#fff;}
|
||||
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);cursor:pointer;}
|
||||
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
|
||||
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
|
||||
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
|
||||
.top-bar__nav a.active{color:#fff;background:var(--primary);}
|
||||
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;padding-top:8px;}
|
||||
.sidebar-section__title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;letter-spacing:.5px;}
|
||||
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.sidebar-subgroup__header{display:flex;align-items:center;gap:6px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;user-select:none;}
|
||||
.sidebar-subgroup__header:hover{color:rgba(255,255,255,0.85);background:rgba(255,255,255,0.04);}
|
||||
.sidebar-subgroup__header .arrow{width:10px;height:10px;transition:transform .2s;flex-shrink:0;}
|
||||
.sidebar-subgroup__header .arrow path{stroke:rgba(255,255,255,0.45);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header{color:rgba(255,255,255,0.85);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header .arrow{transform:rotate(90deg);}
|
||||
.sidebar-subgroup__body{display:none;}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__body{display:block;}
|
||||
.sidebar-subgroup__body>.sidebar-item{padding-left:36px;font-size:var(--font-sm);}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__header{padding-left:36px;}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__body>.sidebar-item{padding-left:52px;font-size:var(--font-sm);}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
|
||||
.page-header{margin-bottom:20px;}
|
||||
.page-title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);}
|
||||
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
|
||||
.filter-item{display:flex;align-items:center;gap:8px;}
|
||||
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
|
||||
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;min-width:180px;}
|
||||
.filter-input:focus{border-color:var(--primary);}
|
||||
.date-range{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 10px;height:36px;background:#fff;}
|
||||
.date-range input{border:none;outline:none;font-size:var(--font-sm);color:var(--text-primary);height:34px;width:140px;}
|
||||
.date-range .sep{color:var(--text-placeholder);font-size:var(--font-sm);}
|
||||
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
|
||||
.btn-primary{background:var(--primary);color:#fff;border:1px solid var(--primary);}.btn-primary:hover{background:#40a9ff;border-color:#40a9ff;}
|
||||
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}.btn-default:hover{color:var(--primary);border-color:var(--primary);}
|
||||
.btn-link{background:none;border:none;color:var(--primary);cursor:pointer;font-size:var(--font-sm);padding:0 4px;}.btn-link:hover{color:#40a9ff;}
|
||||
.action-bar{display:flex;gap:8px;align-items:center;margin-bottom:12px;}
|
||||
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);}
|
||||
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--border);}
|
||||
.table-card__title{font-size:var(--font-base);font-weight:600;}
|
||||
.table-card__title small{font-size:var(--font-sm);color:var(--text-secondary);font-weight:400;margin-left:8px;}
|
||||
.table-card__content{overflow-x:auto;}
|
||||
table{width:100%;border-collapse:collapse;white-space:nowrap;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
.mono{font-family:'SFMono-Regular',Consolas,Menlo,monospace;color:var(--text-primary);}
|
||||
.cell-truncate{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
.tag-green{background:#F6FFED;color:#52C41A;}
|
||||
.tag-red{background:#FFF1F0;color:#FF4D4F;}
|
||||
.tag-orange{background:#FFF7E6;color:#FAAD14;}
|
||||
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
|
||||
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
|
||||
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
|
||||
.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;cursor:pointer;min-width:90px;}
|
||||
.modal-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:500;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .15s;}
|
||||
.modal-mask.show{opacity:1;pointer-events:auto;}
|
||||
.modal{background:#fff;border-radius:var(--radius-lg);width:640px;max-height:85vh;overflow-y:auto;box-shadow:0 8px 40px rgba(0,0,0,0.18);}
|
||||
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--border);}
|
||||
.modal-title{font-size:var(--font-base);font-weight:600;}
|
||||
.modal-close{width:32px;height:32px;border:none;background:none;cursor:pointer;font-size:18px;color:var(--text-secondary);border-radius:var(--radius-sm);}
|
||||
.modal-close:hover{background:#F5F5F5;color:var(--text-primary);}
|
||||
.modal-body{padding:24px;}
|
||||
.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--border);}
|
||||
.detail-list{display:grid;grid-template-columns:1fr 1fr;gap:14px 24px;}
|
||||
.detail-item{display:flex;flex-direction:column;gap:4px;}
|
||||
.detail-item label{font-size:var(--font-xs);color:var(--text-placeholder);}
|
||||
.detail-item span{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;word-break:break-all;}
|
||||
.detail-section-title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);margin:18px 0 10px;display:flex;align-items:center;gap:6px;}
|
||||
.detail-section-title::before{content:'';width:3px;height:14px;background:var(--primary);border-radius:2px;}
|
||||
.map-placeholder{width:100%;height:260px;background:#F0F2F5;border-radius:var(--radius-md);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;}
|
||||
.map-placeholder__grid{position:absolute;inset:0;background-image:linear-gradient(rgba(0,0,0,0.05) 1px,transparent 1px),linear-gradient(90deg,rgba(0,0,0,0.05) 1px,transparent 1px);background-size:40px 40px;}
|
||||
.map-placeholder__pin{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;}
|
||||
.map-placeholder__pin svg{width:32px;height:32px;filter:drop-shadow(0 2px 4px rgba(0,0,0,0.2));}
|
||||
.map-placeholder__coords{font-size:var(--font-xs);color:var(--text-secondary);background:#fff;padding:4px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);margin-top:6px;font-family:monospace;}
|
||||
.map-placeholder__error{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;}
|
||||
.map-placeholder__error svg{width:40px;height:40px;color:var(--text-placeholder);}
|
||||
.map-placeholder__error p{font-size:var(--font-sm);color:var(--text-placeholder);margin-top:8px;text-align:center;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="top-bar">
|
||||
<div class="top-bar__logo">
|
||||
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
|
||||
健康监测
|
||||
</div>
|
||||
<nav class="top-bar__nav">
|
||||
<a href="../../archive-personal.html">档案</a>
|
||||
<a href="../../crowd-status-employee.html">健康现状</a>
|
||||
<a href="../../health-checkup/survey-category.html">健康排查</a>
|
||||
<a href="../tool-manage.html" class="active">穿戴监测</a>
|
||||
<a href="../../environment/indoor-device-list.html">健康环境</a>
|
||||
<a href="../../exception-dirty.html">异常事件</a>
|
||||
</nav>
|
||||
<div class="top-bar__right">
|
||||
<a class="btn-back" href="../../../../index.html">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回首页
|
||||
</a>
|
||||
<div class="avatar">管</div>
|
||||
<span>系统管理员 ▾</span>
|
||||
</div>
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">穿戴监测</div>
|
||||
<a href="../tool-manage.html" class="sidebar-item">设备管理</a>
|
||||
<a href="../bind-record.html" class="sidebar-item">绑定记录</a>
|
||||
<a href="../user-data.html" class="sidebar-item">用户数据</a>
|
||||
<a href="../exception-event.html" class="sidebar-item">告警记录</a>
|
||||
<a href="../notification.html" class="sidebar-item">通知消息</a>
|
||||
<a href="../dept-stat.html" class="sidebar-item">单位数据统计</a>
|
||||
<a href="../personal-stat.html" class="sidebar-item">个人数据统计</a>
|
||||
<a href="../dept-report.html" class="sidebar-item">单位数据分析报告</a>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 运维中心</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 终端设置</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="terminal-default-config.html" class="sidebar-item">默认配置</a>
|
||||
<a href="terminal-config-info.html" class="sidebar-item">配置信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日常监测</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="monitor-ecg.html" class="sidebar-item">心电图信息</a>
|
||||
<a href="monitor-spo2.html" class="sidebar-item">血氧信息</a>
|
||||
<a href="monitor-temp.html" class="sidebar-item">体温信息</a>
|
||||
<a href="monitor-stress.html" class="sidebar-item">压力信息</a>
|
||||
<a href="monitor-exercise.html" class="sidebar-item">锻炼信息</a>
|
||||
<a href="monitor-heartrate.html" class="sidebar-item">心率信息</a>
|
||||
<a href="monitor-sleep.html" class="sidebar-item">睡眠信息</a>
|
||||
<a href="monitor-sleep-watch5.html" class="sidebar-item">睡眠信息(watch5)</a>
|
||||
<a href="sdc-overview.html" class="sidebar-item">SDC信息</a>
|
||||
<a href="monitor-activity.html" class="sidebar-item">活动信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-data.html" class="sidebar-item">事件监听</a>
|
||||
<div class="sidebar-subgroup open">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-heartrate.html" class="sidebar-item">心率异常</a>
|
||||
<a href="alarm-spo2.html" class="sidebar-item active">血氧异常</a>
|
||||
<a href="alarm-temp.html" class="sidebar-item">体温异常</a>
|
||||
<a href="alarm-stress.html" class="sidebar-item">压力异常</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="log-network.html" class="sidebar-item">手表网络切换日志</a>
|
||||
<a href="log-version.html" class="sidebar-item">版本更新历史</a>
|
||||
<a href="log-error.html" class="sidebar-item">手表错误日志</a>
|
||||
<a href="log-task.html" class="sidebar-item">任务日志</a>
|
||||
<a href="log-mqtt.html" class="sidebar-item">mqtt消息日志</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<main class="main">
|
||||
<div class="page-header">
|
||||
<div class="page-title">血氧异常(watch5)</div>
|
||||
</div>
|
||||
|
||||
<!-- 筛选 -->
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>日期范围</label>
|
||||
<div class="date-range">
|
||||
<input type="date" value="2026-05-26">
|
||||
<span class="sep">至</span>
|
||||
<input type="date" value="2026-06-02">
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="6" cy="6" r="4.5" stroke="currentColor" stroke-width="1.5"/><path d="M10.5 10.5l2 2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
查询
|
||||
</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
|
||||
<!-- 操作行 -->
|
||||
<div class="action-bar">
|
||||
<button class="btn btn-default">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 1v8M3.5 5.5L7 9l3.5-3.5M2 12h10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
导出列表数据
|
||||
</button>
|
||||
<button class="btn btn-default">查看导出任务</button>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">血氧异常记录<small>共 32 条</small></span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>开始时间</th>
|
||||
<th>结束时间</th>
|
||||
<th>血氧告警值</th>
|
||||
<th>最高血氧值</th>
|
||||
<th>最低血氧值</th>
|
||||
<th>血氧记录数据个数</th>
|
||||
<th>血氧数值缓存</th>
|
||||
<th>测量时间缓存</th>
|
||||
<th>告警时间</th>
|
||||
<th>经度</th>
|
||||
<th>纬度</th>
|
||||
<th>地址</th>
|
||||
<th>GPS异常信息</th>
|
||||
<th>创建日期</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr data-code="4PMBB25A281000001" data-start="1780622760" data-end="1780622760" data-spo2alarm="90" data-maxspo2="82" data-minspo2="82" data-count="1" data-spo2cache='["82","0","0"]' data-timecache='["1780622760","0..."]' data-time="2026-06-08 11:05:30" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-08 11:05:33" data-emp="张伟" data-empcode="CQ001234" data-unit="采油一厂" data-dept="作业一区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>1780622760</td>
|
||||
<td>1780622760</td>
|
||||
<td>90</td>
|
||||
<td>82</td>
|
||||
<td>82</td>
|
||||
<td>1</td>
|
||||
<td class="cell-truncate">["82","0","0"...</td>
|
||||
<td class="cell-truncate">["1780622760","0...]</td>
|
||||
<td>2026-06-08 11:05:30</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:05:33</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB263141000002" data-start="1780276200" data-end="1780276200" data-spo2alarm="90" data-maxspo2="84" data-minspo2="84" data-count="1" data-spo2cache='["84","0","0"]' data-timecache='["1780276200","0..."]' data-time="2026-06-08 11:02:15" data-lng="85.049420" data-lat="45.626727" data-addr="" data-gps="" data-created="2026-06-08 11:02:18" data-emp="李建国" data-empcode="CQ001235" data-unit="采油一厂" data-dept="作业二区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB26314100...</span></td>
|
||||
<td>1780276200</td>
|
||||
<td>1780276200</td>
|
||||
<td>90</td>
|
||||
<td>84</td>
|
||||
<td>84</td>
|
||||
<td>1</td>
|
||||
<td class="cell-truncate">["84","0","0"...</td>
|
||||
<td class="cell-truncate">["1780276200","0...]</td>
|
||||
<td>2026-06-08 11:02:15</td>
|
||||
<td>85.049420</td>
|
||||
<td>45.626727</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:02:18</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25A281000003" data-start="1780189020" data-end="1780189020" data-spo2alarm="90" data-maxspo2="89" data-minspo2="89" data-count="1" data-spo2cache='["89","0","0"]' data-timecache='["1780189020","0..."]' data-time="2026-06-08 03:15:10" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-08 03:15:13" data-emp="王磊" data-empcode="CQ002101" data-unit="采气一厂" data-dept="集气站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>1780189020</td>
|
||||
<td>1780189020</td>
|
||||
<td>90</td>
|
||||
<td>89</td>
|
||||
<td>89</td>
|
||||
<td>1</td>
|
||||
<td class="cell-truncate">["89","0","0"...</td>
|
||||
<td class="cell-truncate">["1780189020","0...]</td>
|
||||
<td>2026-06-08 03:15:10</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 03:15:13</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000004" data-start="1779754500" data-end="1779754500" data-spo2alarm="90" data-maxspo2="80" data-minspo2="80" data-count="1" data-spo2cache='["80","0","0"]' data-timecache='["1779754500","0..."]' data-time="2026-05-14 04:30:10" data-lng="0" data-lat="0" data-addr="" data-gps="{\"code\":3}" data-created="2026-06-08 10:30:13" data-emp="陈晓明" data-empcode="CQ001500" data-unit="采油二厂" data-dept="注水站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>1779754500</td>
|
||||
<td>1779754500</td>
|
||||
<td>90</td>
|
||||
<td>80</td>
|
||||
<td>80</td>
|
||||
<td>1</td>
|
||||
<td class="cell-truncate">["80","0","0"...</td>
|
||||
<td class="cell-truncate">["1779754500","0...]</td>
|
||||
<td>2026-05-14 04:30:10</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>—</td>
|
||||
<td class="cell-truncate">{"code":3...</td>
|
||||
<td>2026-06-08 10:30:13</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000005" data-start="1779459120" data-end="1779459120" data-spo2alarm="85" data-maxspo2="80" data-minspo2="80" data-count="1" data-spo2cache='["80","0","0"]' data-timecache='["1779459120","0..."]' data-time="2026-06-08 07:10:22" data-lng="87.295736" data-lat="43.989552" data-addr="" data-gps="" data-created="2026-06-08 07:10:25" data-emp="赵强" data-empcode="CQ003010" data-unit="采气二厂" data-dept="作业三区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>1779459120</td>
|
||||
<td>1779459120</td>
|
||||
<td>85</td>
|
||||
<td>80</td>
|
||||
<td>80</td>
|
||||
<td>1</td>
|
||||
<td class="cell-truncate">["80","0","0"...</td>
|
||||
<td class="cell-truncate">["1779459120","0...]</td>
|
||||
<td>2026-06-08 07:10:22</td>
|
||||
<td>87.295736</td>
|
||||
<td>43.989552</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 07:10:25</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000006" data-start="1779376860" data-end="1779376860" data-spo2alarm="90" data-maxspo2="79" data-minspo2="79" data-count="1" data-spo2cache='["79","0","0"]' data-timecache='["1779376860","0..."]' data-time="2026-06-08 06:40:15" data-lng="87.295779" data-lat="43.989548" data-addr="" data-gps="" data-created="2026-06-08 06:40:18" data-emp="孙丽" data-empcode="CQ003050" data-unit="采气二厂" data-dept="作业四区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>1779376860</td>
|
||||
<td>1779376860</td>
|
||||
<td>90</td>
|
||||
<td>79</td>
|
||||
<td>79</td>
|
||||
<td>1</td>
|
||||
<td class="cell-truncate">["79","0","0"...</td>
|
||||
<td class="cell-truncate">["1779376860","0...]</td>
|
||||
<td>2026-06-08 06:40:15</td>
|
||||
<td>87.295779</td>
|
||||
<td>43.989548</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 06:40:18</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>共 32 条</span>
|
||||
<button class="page-btn">«</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">3</button>
|
||||
<button class="page-btn">…</button>
|
||||
<button class="page-btn">4</button>
|
||||
<button class="page-btn">»</button>
|
||||
<select class="filter-select">
|
||||
<option>10条/页</option>
|
||||
<option>20条/页</option>
|
||||
<option>50条/页</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<div class="modal-mask" id="detailModal">
|
||||
<div class="modal">
|
||||
<div class="modal-header">
|
||||
<span class="modal-title">血氧异常详情</span>
|
||||
<button class="modal-close" onclick="closeModal('detailModal')">✕</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="detail-section-title">异常信息</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>设备编码</label><span class="mono" id="d-code">—</span></div>
|
||||
<div class="detail-item"><label>开始时间</label><span id="d-start">—</span></div>
|
||||
<div class="detail-item"><label>结束时间</label><span id="d-end">—</span></div>
|
||||
<div class="detail-item"><label>血氧告警值</label><span id="d-spo2alarm">—</span></div>
|
||||
<div class="detail-item"><label>最高血氧值</label><span id="d-maxspo2">—</span></div>
|
||||
<div class="detail-item"><label>最低血氧值</label><span id="d-minspo2">—</span></div>
|
||||
<div class="detail-item"><label>血氧记录数据个数</label><span id="d-count">—</span></div>
|
||||
<div class="detail-item"><label>血氧数值缓存</label><span class="mono cell-truncate" id="d-spo2cache">—</span></div>
|
||||
<div class="detail-item"><label>测量时间缓存</label><span class="mono cell-truncate" id="d-timecache">—</span></div>
|
||||
<div class="detail-item"><label>告警时间</label><span id="d-time">—</span></div>
|
||||
<div class="detail-item"><label>经度</label><span id="d-lng">—</span></div>
|
||||
<div class="detail-item"><label>纬度</label><span id="d-lat">—</span></div>
|
||||
<div class="detail-item"><label>地址</label><span id="d-addr">—</span></div>
|
||||
<div class="detail-item"><label>GPS异常信息</label><span id="d-gps">—</span></div>
|
||||
<div class="detail-item"><label>创建日期</label><span id="d-created">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">绑定员工</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>员工姓名</label><span id="d-emp">—</span></div>
|
||||
<div class="detail-item"><label>员工编号</label><span class="mono" id="d-empcode">—</span></div>
|
||||
<div class="detail-item"><label>所属单位</label><span id="d-unit">—</span></div>
|
||||
<div class="detail-item"><label>所属部门</label><span id="d-dept">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">位置信息</div>
|
||||
<div class="map-placeholder" id="mapPlaceholder">
|
||||
<div class="map-placeholder__grid"></div>
|
||||
<!-- 正常定位 -->
|
||||
<div class="map-placeholder__pin" id="mapPin">
|
||||
<svg viewBox="0 0 32 32" fill="none">
|
||||
<path d="M16 2C10.477 2 6 6.477 6 12c0 7.5 10 18 10 18s10-10.5 10-18c0-5.523-4.477-10-10-10z" fill="#FF4D4F"/>
|
||||
<circle cx="16" cy="12" r="4" fill="#fff"/>
|
||||
</svg>
|
||||
<span class="map-placeholder__coords" id="d-coords">—</span>
|
||||
</div>
|
||||
<!-- GPS错误状态 -->
|
||||
<div class="map-placeholder__error" id="mapError" style="display:none;">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
|
||||
<path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7z"/>
|
||||
<line x1="9" y1="9" x2="15" y2="12" stroke-width="2"/>
|
||||
</svg>
|
||||
<p id="d-mapErrorText">—</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default" onclick="closeModal('detailModal')">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleSubgroup(h){h.parentElement.classList.toggle('open');}
|
||||
(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var el=a.parentElement;while(el){if(el.classList&&el.classList.contains('sidebar-subgroup'))el.classList.add('open');el=el.parentElement;}})();
|
||||
|
||||
function closeModal(id){document.getElementById(id).classList.remove('show');}
|
||||
document.querySelectorAll('.modal-mask').forEach(function(m){m.addEventListener('click',function(e){if(e.target===m)m.classList.remove('show');});});
|
||||
|
||||
function openDetail(btn){
|
||||
var tr = btn.closest('tr');
|
||||
var d = tr.dataset;
|
||||
|
||||
document.getElementById('d-code').textContent = d.code;
|
||||
document.getElementById('d-start').textContent = d.start || '—';
|
||||
document.getElementById('d-end').textContent = d.end || '—';
|
||||
document.getElementById('d-spo2alarm').textContent = d.spo2alarm || '—';
|
||||
document.getElementById('d-maxspo2').textContent = d.maxspo2 || '—';
|
||||
document.getElementById('d-minspo2').textContent = d.minspo2 || '—';
|
||||
document.getElementById('d-count').textContent = d.count || '—';
|
||||
document.getElementById('d-spo2cache').textContent = d.spo2cache || '—';
|
||||
document.getElementById('d-timecache').textContent = d.timecache || '—';
|
||||
document.getElementById('d-time').textContent = d.time;
|
||||
document.getElementById('d-lng').textContent = d.lng;
|
||||
document.getElementById('d-lat').textContent = d.lat;
|
||||
document.getElementById('d-addr').textContent = d.addr || '—';
|
||||
document.getElementById('d-gps').textContent = d.gps || '—';
|
||||
document.getElementById('d-created').textContent = d.created;
|
||||
document.getElementById('d-emp').textContent = d.emp;
|
||||
document.getElementById('d-empcode').textContent = d.empcode;
|
||||
document.getElementById('d-unit').textContent = d.unit;
|
||||
document.getElementById('d-dept').textContent = d.dept;
|
||||
|
||||
// GPS错误处理:有错误信息时隐藏地图定位,显示错误状态
|
||||
if (d.gps) {
|
||||
document.getElementById('mapPin').style.display = 'none';
|
||||
document.getElementById('mapError').style.display = 'flex';
|
||||
document.getElementById('d-mapErrorText').textContent = d.gps;
|
||||
} else {
|
||||
document.getElementById('mapPin').style.display = 'flex';
|
||||
document.getElementById('mapError').style.display = 'none';
|
||||
document.getElementById('d-coords').textContent = '纬度: ' + d.lat + ' 经度: ' + d.lng;
|
||||
}
|
||||
|
||||
document.getElementById('detailModal').classList.add('show');
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,456 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>健康监测 - 压力异常(watch5) | 健康长庆原型</title>
|
||||
<style>
|
||||
*{box-sizing:border-box;margin:0;padding:0;}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
|
||||
:root{
|
||||
--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;
|
||||
--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;
|
||||
--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;
|
||||
--radius-sm:4px;--radius-md:8px;--radius-lg:12px;
|
||||
--shadow-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.12);
|
||||
}
|
||||
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
|
||||
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;white-space:nowrap;width:240px;flex-shrink:0;}
|
||||
.top-bar__logo svg{width:28px;height:28px;}
|
||||
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
|
||||
.btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
|
||||
.btn-back:hover{color:#fff;}
|
||||
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);cursor:pointer;}
|
||||
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
|
||||
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
|
||||
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
|
||||
.top-bar__nav a.active{color:#fff;background:var(--primary);}
|
||||
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;padding-top:8px;}
|
||||
.sidebar-section__title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;letter-spacing:.5px;}
|
||||
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.sidebar-subgroup__header{display:flex;align-items:center;gap:6px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;user-select:none;}
|
||||
.sidebar-subgroup__header:hover{color:rgba(255,255,255,0.85);background:rgba(255,255,255,0.04);}
|
||||
.sidebar-subgroup__header .arrow{width:10px;height:10px;transition:transform .2s;flex-shrink:0;}
|
||||
.sidebar-subgroup__header .arrow path{stroke:rgba(255,255,255,0.45);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header{color:rgba(255,255,255,0.85);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header .arrow{transform:rotate(90deg);}
|
||||
.sidebar-subgroup__body{display:none;}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__body{display:block;}
|
||||
.sidebar-subgroup__body>.sidebar-item{padding-left:36px;font-size:var(--font-sm);}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__header{padding-left:36px;}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__body>.sidebar-item{padding-left:52px;font-size:var(--font-sm);}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
|
||||
.page-header{margin-bottom:20px;}
|
||||
.page-title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);}
|
||||
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
|
||||
.filter-item{display:flex;align-items:center;gap:8px;}
|
||||
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
|
||||
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;min-width:180px;}
|
||||
.filter-input:focus{border-color:var(--primary);}
|
||||
.date-range{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 10px;height:36px;background:#fff;}
|
||||
.date-range input{border:none;outline:none;font-size:var(--font-sm);color:var(--text-primary);height:34px;width:140px;}
|
||||
.date-range .sep{color:var(--text-placeholder);font-size:var(--font-sm);}
|
||||
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
|
||||
.btn-primary{background:var(--primary);color:#fff;border:1px solid var(--primary);}.btn-primary:hover{background:#40a9ff;border-color:#40a9ff;}
|
||||
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}.btn-default:hover{color:var(--primary);border-color:var(--primary);}
|
||||
.btn-link{background:none;border:none;color:var(--primary);cursor:pointer;font-size:var(--font-sm);padding:0 4px;}.btn-link:hover{color:#40a9ff;}
|
||||
.action-bar{display:flex;gap:8px;align-items:center;margin-bottom:12px;}
|
||||
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);}
|
||||
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--border);}
|
||||
.table-card__title{font-size:var(--font-base);font-weight:600;}
|
||||
.table-card__title small{font-size:var(--font-sm);color:var(--text-secondary);font-weight:400;margin-left:8px;}
|
||||
.table-card__content{overflow-x:auto;}
|
||||
table{width:100%;border-collapse:collapse;white-space:nowrap;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
.mono{font-family:'SFMono-Regular',Consolas,Menlo,monospace;color:var(--text-primary);}
|
||||
.cell-truncate{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
.tag-green{background:#F6FFED;color:#52C41A;}
|
||||
.tag-red{background:#FFF1F0;color:#FF4D4F;}
|
||||
.tag-orange{background:#FFF7E6;color:#FAAD14;}
|
||||
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
|
||||
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
|
||||
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
|
||||
.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;cursor:pointer;min-width:90px;}
|
||||
.modal-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:500;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .15s;}
|
||||
.modal-mask.show{opacity:1;pointer-events:auto;}
|
||||
.modal{background:#fff;border-radius:var(--radius-lg);width:640px;max-height:85vh;overflow-y:auto;box-shadow:0 8px 40px rgba(0,0,0,0.18);}
|
||||
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--border);}
|
||||
.modal-title{font-size:var(--font-base);font-weight:600;}
|
||||
.modal-close{width:32px;height:32px;border:none;background:none;cursor:pointer;font-size:18px;color:var(--text-secondary);border-radius:var(--radius-sm);}
|
||||
.modal-close:hover{background:#F5F5F5;color:var(--text-primary);}
|
||||
.modal-body{padding:24px;}
|
||||
.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--border);}
|
||||
.detail-list{display:grid;grid-template-columns:1fr 1fr;gap:14px 24px;}
|
||||
.detail-item{display:flex;flex-direction:column;gap:4px;}
|
||||
.detail-item label{font-size:var(--font-xs);color:var(--text-placeholder);}
|
||||
.detail-item span{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;word-break:break-all;}
|
||||
.detail-section-title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);margin:18px 0 10px;display:flex;align-items:center;gap:6px;}
|
||||
.detail-section-title::before{content:'';width:3px;height:14px;background:var(--primary);border-radius:2px;}
|
||||
.map-placeholder{width:100%;height:260px;background:#F0F2F5;border-radius:var(--radius-md);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;}
|
||||
.map-placeholder__grid{position:absolute;inset:0;background-image:linear-gradient(rgba(0,0,0,0.05) 1px,transparent 1px),linear-gradient(90deg,rgba(0,0,0,0.05) 1px,transparent 1px);background-size:40px 40px;}
|
||||
.map-placeholder__pin{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;}
|
||||
.map-placeholder__pin svg{width:32px;height:32px;filter:drop-shadow(0 2px 4px rgba(0,0,0,0.2));}
|
||||
.map-placeholder__coords{font-size:var(--font-xs);color:var(--text-secondary);background:#fff;padding:4px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);margin-top:6px;font-family:monospace;}
|
||||
.map-placeholder__error{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;}
|
||||
.map-placeholder__error svg{width:40px;height:40px;color:var(--text-placeholder);}
|
||||
.map-placeholder__error p{font-size:var(--font-sm);color:var(--text-placeholder);margin-top:8px;text-align:center;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="top-bar">
|
||||
<div class="top-bar__logo">
|
||||
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
|
||||
健康监测
|
||||
</div>
|
||||
<nav class="top-bar__nav">
|
||||
<a href="../../archive-personal.html">档案</a>
|
||||
<a href="../../crowd-status-employee.html">健康现状</a>
|
||||
<a href="../../health-checkup/survey-category.html">健康排查</a>
|
||||
<a href="../tool-manage.html" class="active">穿戴监测</a>
|
||||
<a href="../../environment/indoor-device-list.html">健康环境</a>
|
||||
<a href="../../exception-dirty.html">异常事件</a>
|
||||
</nav>
|
||||
<div class="top-bar__right">
|
||||
<a class="btn-back" href="../../../../index.html">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回首页
|
||||
</a>
|
||||
<div class="avatar">管</div>
|
||||
<span>系统管理员 ▾</span>
|
||||
</div>
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">穿戴监测</div>
|
||||
<a href="../tool-manage.html" class="sidebar-item">设备管理</a>
|
||||
<a href="../bind-record.html" class="sidebar-item">绑定记录</a>
|
||||
<a href="../user-data.html" class="sidebar-item">用户数据</a>
|
||||
<a href="../exception-event.html" class="sidebar-item">告警记录</a>
|
||||
<a href="../notification.html" class="sidebar-item">通知消息</a>
|
||||
<a href="../dept-stat.html" class="sidebar-item">单位数据统计</a>
|
||||
<a href="../personal-stat.html" class="sidebar-item">个人数据统计</a>
|
||||
<a href="../dept-report.html" class="sidebar-item">单位数据分析报告</a>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 运维中心</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 终端设置</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="terminal-default-config.html" class="sidebar-item">默认配置</a>
|
||||
<a href="terminal-config-info.html" class="sidebar-item">配置信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日常监测</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="monitor-ecg.html" class="sidebar-item">心电图信息</a>
|
||||
<a href="monitor-spo2.html" class="sidebar-item">血氧信息</a>
|
||||
<a href="monitor-temp.html" class="sidebar-item">体温信息</a>
|
||||
<a href="monitor-stress.html" class="sidebar-item">压力信息</a>
|
||||
<a href="monitor-exercise.html" class="sidebar-item">锻炼信息</a>
|
||||
<a href="monitor-heartrate.html" class="sidebar-item">心率信息</a>
|
||||
<a href="monitor-sleep.html" class="sidebar-item">睡眠信息</a>
|
||||
<a href="monitor-sleep-watch5.html" class="sidebar-item">睡眠信息(watch5)</a>
|
||||
<a href="sdc-overview.html" class="sidebar-item">SDC信息</a>
|
||||
<a href="monitor-activity.html" class="sidebar-item">活动信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-data.html" class="sidebar-item">事件监听</a>
|
||||
<div class="sidebar-subgroup open">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-heartrate.html" class="sidebar-item">心率异常</a>
|
||||
<a href="alarm-spo2.html" class="sidebar-item">血氧异常</a>
|
||||
<a href="alarm-temp.html" class="sidebar-item">体温异常</a>
|
||||
<a href="alarm-stress.html" class="sidebar-item active">压力异常</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="log-network.html" class="sidebar-item">手表网络切换日志</a>
|
||||
<a href="log-version.html" class="sidebar-item">版本更新历史</a>
|
||||
<a href="log-error.html" class="sidebar-item">手表错误日志</a>
|
||||
<a href="log-task.html" class="sidebar-item">任务日志</a>
|
||||
<a href="log-mqtt.html" class="sidebar-item">mqtt消息日志</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<main class="main">
|
||||
<div class="page-header">
|
||||
<div class="page-title">压力异常(watch5)</div>
|
||||
</div>
|
||||
|
||||
<!-- 筛选 -->
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>日期范围</label>
|
||||
<div class="date-range">
|
||||
<input type="date" value="2026-05-26">
|
||||
<span class="sep">至</span>
|
||||
<input type="date" value="2026-06-02">
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="6" cy="6" r="4.5" stroke="currentColor" stroke-width="1.5"/><path d="M10.5 10.5l2 2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
查询
|
||||
</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
|
||||
<!-- 操作行 -->
|
||||
<div class="action-bar">
|
||||
<button class="btn btn-default">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 1v8M3.5 5.5L7 9l3.5-3.5M2 12h10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
导出列表数据
|
||||
</button>
|
||||
<button class="btn btn-default">查看导出任务</button>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">压力异常记录<small>共 40 条</small></span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>压力得分</th>
|
||||
<th>异常提示</th>
|
||||
<th>高告警的阈值</th>
|
||||
<th>低告警的阈值</th>
|
||||
<th>告警时间</th>
|
||||
<th>经度</th>
|
||||
<th>纬度</th>
|
||||
<th>地址</th>
|
||||
<th>GPS异常信息</th>
|
||||
<th>创建日期</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr data-code="4PMBB25A281000001" data-score="85" data-remind="异常" data-high="80" data-low="40" data-time="2026-06-02 08:30:15" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-02 08:30:18" data-emp="张伟" data-empcode="CQ001234" data-unit="采油一厂" data-dept="作业一区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>85</td>
|
||||
<td>异常</td>
|
||||
<td>80</td>
|
||||
<td>40</td>
|
||||
<td>2026-06-02 08:30:15</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-02 08:30:18</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB263141000002" data-score="92" data-remind="异常" data-high="80" data-low="40" data-time="2026-06-02 18:10:25" data-lng="85.049420" data-lat="45.626727" data-addr="" data-gps="" data-created="2026-06-02 18:10:28" data-emp="李建国" data-empcode="CQ001235" data-unit="采油一厂" data-dept="作业二区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB26314100...</span></td>
|
||||
<td>92</td>
|
||||
<td>异常</td>
|
||||
<td>80</td>
|
||||
<td>40</td>
|
||||
<td>2026-06-02 18:10:25</td>
|
||||
<td>85.049420</td>
|
||||
<td>45.626727</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-02 18:10:28</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25A281000003" data-score="75" data-remind="—" data-high="80" data-low="40" data-time="2026-06-02 11:30:42" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-02 11:30:45" data-emp="王磊" data-empcode="CQ002101" data-unit="采气一厂" data-dept="集气站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>75</td>
|
||||
<td>—</td>
|
||||
<td>80</td>
|
||||
<td>40</td>
|
||||
<td>2026-06-02 11:30:42</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-02 11:30:45</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000004" data-score="88" data-remind="异常" data-high="80" data-low="40" data-time="2026-06-02 14:15:33" data-lng="87.295736" data-lat="43.989552" data-addr="" data-gps="" data-created="2026-06-02 14:15:36" data-emp="陈晓明" data-empcode="CQ001500" data-unit="采油二厂" data-dept="注水站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>88</td>
|
||||
<td>异常</td>
|
||||
<td>80</td>
|
||||
<td>40</td>
|
||||
<td>2026-06-02 14:15:33</td>
|
||||
<td>87.295736</td>
|
||||
<td>43.989552</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-02 14:15:36</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000005" data-score="72" data-remind="—" data-high="80" data-low="40" data-time="2026-06-02 16:05:18" data-lng="87.295779" data-lat="43.989548" data-addr="" data-gps="" data-created="2026-06-02 16:05:21" data-emp="孙丽" data-empcode="CQ003050" data-unit="采气二厂" data-dept="作业四区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>72</td>
|
||||
<td>—</td>
|
||||
<td>80</td>
|
||||
<td>40</td>
|
||||
<td>2026-06-02 16:05:18</td>
|
||||
<td>87.295779</td>
|
||||
<td>43.989548</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-02 16:05:21</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000006" data-score="95" data-remind="异常" data-high="80" data-low="40" data-time="2026-05-14 04:30:10" data-lng="0" data-lat="0" data-addr="" data-gps="{\"code\":3}" data-created="2026-06-08 10:30:13" data-emp="赵强" data-empcode="CQ003010" data-unit="采气二厂" data-dept="作业三区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>95</td>
|
||||
<td>异常</td>
|
||||
<td>80</td>
|
||||
<td>40</td>
|
||||
<td>2026-05-14 04:30:10</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>—</td>
|
||||
<td class="cell-truncate">{"code":3...</td>
|
||||
<td>2026-06-08 10:30:13</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>共 40 条</span>
|
||||
<button class="page-btn">«</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">3</button>
|
||||
<button class="page-btn">…</button>
|
||||
<button class="page-btn">4</button>
|
||||
<button class="page-btn">»</button>
|
||||
<select class="filter-select">
|
||||
<option>10条/页</option>
|
||||
<option>20条/页</option>
|
||||
<option>50条/页</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<div class="modal-mask" id="detailModal">
|
||||
<div class="modal">
|
||||
<div class="modal-header">
|
||||
<span class="modal-title">压力异常详情</span>
|
||||
<button class="modal-close" onclick="closeModal('detailModal')">✕</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="detail-section-title">异常信息</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>设备编码</label><span class="mono" id="d-code">—</span></div>
|
||||
<div class="detail-item"><label>压力得分</label><span id="d-score">—</span></div>
|
||||
<div class="detail-item"><label>异常提示</label><span id="d-remind">—</span></div>
|
||||
<div class="detail-item"><label>高告警的阈值</label><span id="d-high">—</span></div>
|
||||
<div class="detail-item"><label>低告警的阈值</label><span id="d-low">—</span></div>
|
||||
<div class="detail-item"><label>告警时间</label><span id="d-time">—</span></div>
|
||||
<div class="detail-item"><label>经度</label><span id="d-lng">—</span></div>
|
||||
<div class="detail-item"><label>纬度</label><span id="d-lat">—</span></div>
|
||||
<div class="detail-item"><label>地址</label><span id="d-addr">—</span></div>
|
||||
<div class="detail-item"><label>GPS异常信息</label><span id="d-gps">—</span></div>
|
||||
<div class="detail-item"><label>创建日期</label><span id="d-created">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">绑定员工</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>员工姓名</label><span id="d-emp">—</span></div>
|
||||
<div class="detail-item"><label>员工编号</label><span class="mono" id="d-empcode">—</span></div>
|
||||
<div class="detail-item"><label>所属单位</label><span id="d-unit">—</span></div>
|
||||
<div class="detail-item"><label>所属部门</label><span id="d-dept">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">位置信息</div>
|
||||
<div class="map-placeholder" id="mapPlaceholder">
|
||||
<div class="map-placeholder__grid"></div>
|
||||
<!-- 正常定位 -->
|
||||
<div class="map-placeholder__pin" id="mapPin">
|
||||
<svg viewBox="0 0 32 32" fill="none">
|
||||
<path d="M16 2C10.477 2 6 6.477 6 12c0 7.5 10 18 10 18s10-10.5 10-18c0-5.523-4.477-10-10-10z" fill="#FF4D4F"/>
|
||||
<circle cx="16" cy="12" r="4" fill="#fff"/>
|
||||
</svg>
|
||||
<span class="map-placeholder__coords" id="d-coords">—</span>
|
||||
</div>
|
||||
<!-- GPS错误状态 -->
|
||||
<div class="map-placeholder__error" id="mapError" style="display:none;">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
|
||||
<path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7z"/>
|
||||
<line x1="9" y1="9" x2="15" y2="12" stroke-width="2"/>
|
||||
</svg>
|
||||
<p id="d-mapErrorText">—</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default" onclick="closeModal('detailModal')">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleSubgroup(h){h.parentElement.classList.toggle('open');}
|
||||
(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var el=a.parentElement;while(el){if(el.classList&&el.classList.contains('sidebar-subgroup'))el.classList.add('open');el=el.parentElement;}})();
|
||||
|
||||
function closeModal(id){document.getElementById(id).classList.remove('show');}
|
||||
document.querySelectorAll('.modal-mask').forEach(function(m){m.addEventListener('click',function(e){if(e.target===m)m.classList.remove('show');});});
|
||||
|
||||
function openDetail(btn){
|
||||
var tr = btn.closest('tr');
|
||||
var d = tr.dataset;
|
||||
|
||||
document.getElementById('d-code').textContent = d.code;
|
||||
document.getElementById('d-score').textContent = d.score || '—';
|
||||
document.getElementById('d-remind').textContent = d.remind || '—';
|
||||
document.getElementById('d-high').textContent = d.high || '—';
|
||||
document.getElementById('d-low').textContent = d.low || '—';
|
||||
document.getElementById('d-time').textContent = d.time;
|
||||
document.getElementById('d-lng').textContent = d.lng;
|
||||
document.getElementById('d-lat').textContent = d.lat;
|
||||
document.getElementById('d-addr').textContent = d.addr || '—';
|
||||
document.getElementById('d-gps').textContent = d.gps || '—';
|
||||
document.getElementById('d-created').textContent = d.created;
|
||||
document.getElementById('d-emp').textContent = d.emp;
|
||||
document.getElementById('d-empcode').textContent = d.empcode;
|
||||
document.getElementById('d-unit').textContent = d.unit;
|
||||
document.getElementById('d-dept').textContent = d.dept;
|
||||
|
||||
// GPS错误处理:有错误信息时隐藏地图定位,显示错误状态
|
||||
if (d.gps) {
|
||||
document.getElementById('mapPin').style.display = 'none';
|
||||
document.getElementById('mapError').style.display = 'flex';
|
||||
document.getElementById('d-mapErrorText').textContent = d.gps;
|
||||
} else {
|
||||
document.getElementById('mapPin').style.display = 'flex';
|
||||
document.getElementById('mapError').style.display = 'none';
|
||||
document.getElementById('d-coords').textContent = '纬度: ' + d.lat + ' 经度: ' + d.lng;
|
||||
}
|
||||
|
||||
document.getElementById('detailModal').classList.add('show');
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,465 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>健康监测 - 体温异常(watch5) | 健康长庆原型</title>
|
||||
<style>
|
||||
*{box-sizing:border-box;margin:0;padding:0;}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
|
||||
:root{
|
||||
--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;
|
||||
--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;
|
||||
--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;
|
||||
--radius-sm:4px;--radius-md:8px;--radius-lg:12px;
|
||||
--shadow-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.12);
|
||||
}
|
||||
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
|
||||
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;white-space:nowrap;width:240px;flex-shrink:0;}
|
||||
.top-bar__logo svg{width:28px;height:28px;}
|
||||
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
|
||||
.btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
|
||||
.btn-back:hover{color:#fff;}
|
||||
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);cursor:pointer;}
|
||||
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
|
||||
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
|
||||
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
|
||||
.top-bar__nav a.active{color:#fff;background:var(--primary);}
|
||||
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;padding-top:8px;}
|
||||
.sidebar-section__title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;letter-spacing:.5px;}
|
||||
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.sidebar-subgroup__header{display:flex;align-items:center;gap:6px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;user-select:none;}
|
||||
.sidebar-subgroup__header:hover{color:rgba(255,255,255,0.85);background:rgba(255,255,255,0.04);}
|
||||
.sidebar-subgroup__header .arrow{width:10px;height:10px;transition:transform .2s;flex-shrink:0;}
|
||||
.sidebar-subgroup__header .arrow path{stroke:rgba(255,255,255,0.45);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header{color:rgba(255,255,255,0.85);}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__header .arrow{transform:rotate(90deg);}
|
||||
.sidebar-subgroup__body{display:none;}
|
||||
.sidebar-subgroup.open>.sidebar-subgroup__body{display:block;}
|
||||
.sidebar-subgroup__body>.sidebar-item{padding-left:36px;font-size:var(--font-sm);}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__header{padding-left:36px;}
|
||||
.sidebar-subgroup__body>.sidebar-subgroup>.sidebar-subgroup__body>.sidebar-item{padding-left:52px;font-size:var(--font-sm);}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
|
||||
.page-header{margin-bottom:20px;}
|
||||
.page-title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);}
|
||||
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
|
||||
.filter-item{display:flex;align-items:center;gap:8px;}
|
||||
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
|
||||
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;min-width:180px;}
|
||||
.filter-input:focus{border-color:var(--primary);}
|
||||
.date-range{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 10px;height:36px;background:#fff;}
|
||||
.date-range input{border:none;outline:none;font-size:var(--font-sm);color:var(--text-primary);height:34px;width:140px;}
|
||||
.date-range .sep{color:var(--text-placeholder);font-size:var(--font-sm);}
|
||||
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
|
||||
.btn-primary{background:var(--primary);color:#fff;border:1px solid var(--primary);}.btn-primary:hover{background:#40a9ff;border-color:#40a9ff;}
|
||||
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}.btn-default:hover{color:var(--primary);border-color:var(--primary);}
|
||||
.btn-link{background:none;border:none;color:var(--primary);cursor:pointer;font-size:var(--font-sm);padding:0 4px;}.btn-link:hover{color:#40a9ff;}
|
||||
.action-bar{display:flex;gap:8px;align-items:center;margin-bottom:12px;}
|
||||
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);}
|
||||
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--border);}
|
||||
.table-card__title{font-size:var(--font-base);font-weight:600;}
|
||||
.table-card__title small{font-size:var(--font-sm);color:var(--text-secondary);font-weight:400;margin-left:8px;}
|
||||
.table-card__content{overflow-x:auto;}
|
||||
table{width:100%;border-collapse:collapse;white-space:nowrap;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
.mono{font-family:'SFMono-Regular',Consolas,Menlo,monospace;color:var(--text-primary);}
|
||||
.cell-truncate{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
.tag-green{background:#F6FFED;color:#52C41A;}
|
||||
.tag-red{background:#FFF1F0;color:#FF4D4F;}
|
||||
.tag-orange{background:#FFF7E6;color:#FAAD14;}
|
||||
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
|
||||
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
|
||||
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
|
||||
.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;cursor:pointer;min-width:90px;}
|
||||
.modal-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:500;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .15s;}
|
||||
.modal-mask.show{opacity:1;pointer-events:auto;}
|
||||
.modal{background:#fff;border-radius:var(--radius-lg);width:640px;max-height:85vh;overflow-y:auto;box-shadow:0 8px 40px rgba(0,0,0,0.18);}
|
||||
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--border);}
|
||||
.modal-title{font-size:var(--font-base);font-weight:600;}
|
||||
.modal-close{width:32px;height:32px;border:none;background:none;cursor:pointer;font-size:18px;color:var(--text-secondary);border-radius:var(--radius-sm);}
|
||||
.modal-close:hover{background:#F5F5F5;color:var(--text-primary);}
|
||||
.modal-body{padding:24px;}
|
||||
.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--border);}
|
||||
.detail-list{display:grid;grid-template-columns:1fr 1fr;gap:14px 24px;}
|
||||
.detail-item{display:flex;flex-direction:column;gap:4px;}
|
||||
.detail-item label{font-size:var(--font-xs);color:var(--text-placeholder);}
|
||||
.detail-item span{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;word-break:break-all;}
|
||||
.detail-section-title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);margin:18px 0 10px;display:flex;align-items:center;gap:6px;}
|
||||
.detail-section-title::before{content:'';width:3px;height:14px;background:var(--primary);border-radius:2px;}
|
||||
.map-placeholder{width:100%;height:260px;background:#F0F2F5;border-radius:var(--radius-md);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;}
|
||||
.map-placeholder__grid{position:absolute;inset:0;background-image:linear-gradient(rgba(0,0,0,0.05) 1px,transparent 1px),linear-gradient(90deg,rgba(0,0,0,0.05) 1px,transparent 1px);background-size:40px 40px;}
|
||||
.map-placeholder__pin{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;}
|
||||
.map-placeholder__pin svg{width:32px;height:32px;filter:drop-shadow(0 2px 4px rgba(0,0,0,0.2));}
|
||||
.map-placeholder__coords{font-size:var(--font-xs);color:var(--text-secondary);background:#fff;padding:4px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);margin-top:6px;font-family:monospace;}
|
||||
.map-placeholder__error{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;}
|
||||
.map-placeholder__error svg{width:40px;height:40px;color:var(--text-placeholder);}
|
||||
.map-placeholder__error p{font-size:var(--font-sm);color:var(--text-placeholder);margin-top:8px;text-align:center;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="top-bar">
|
||||
<div class="top-bar__logo">
|
||||
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
|
||||
健康监测
|
||||
</div>
|
||||
<nav class="top-bar__nav">
|
||||
<a href="../../archive-personal.html">档案</a>
|
||||
<a href="../../crowd-status-employee.html">健康现状</a>
|
||||
<a href="../../health-checkup/survey-category.html">健康排查</a>
|
||||
<a href="../tool-manage.html" class="active">穿戴监测</a>
|
||||
<a href="../../environment/indoor-device-list.html">健康环境</a>
|
||||
<a href="../../exception-dirty.html">异常事件</a>
|
||||
</nav>
|
||||
<div class="top-bar__right">
|
||||
<a class="btn-back" href="../../../../index.html">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
返回首页
|
||||
</a>
|
||||
<div class="avatar">管</div>
|
||||
<span>系统管理员 ▾</span>
|
||||
</div>
|
||||
</div>
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">穿戴监测</div>
|
||||
<a href="../tool-manage.html" class="sidebar-item">设备管理</a>
|
||||
<a href="../bind-record.html" class="sidebar-item">绑定记录</a>
|
||||
<a href="../user-data.html" class="sidebar-item">用户数据</a>
|
||||
<a href="../exception-event.html" class="sidebar-item">告警记录</a>
|
||||
<a href="../notification.html" class="sidebar-item">通知消息</a>
|
||||
<a href="../dept-stat.html" class="sidebar-item">单位数据统计</a>
|
||||
<a href="../personal-stat.html" class="sidebar-item">个人数据统计</a>
|
||||
<a href="../dept-report.html" class="sidebar-item">单位数据分析报告</a>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 运维中心</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 终端设置</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="terminal-default-config.html" class="sidebar-item">默认配置</a>
|
||||
<a href="terminal-config-info.html" class="sidebar-item">配置信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日常监测</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="monitor-ecg.html" class="sidebar-item">心电图信息</a>
|
||||
<a href="monitor-spo2.html" class="sidebar-item">血氧信息</a>
|
||||
<a href="monitor-temp.html" class="sidebar-item">体温信息</a>
|
||||
<a href="monitor-stress.html" class="sidebar-item">压力信息</a>
|
||||
<a href="monitor-exercise.html" class="sidebar-item">锻炼信息</a>
|
||||
<a href="monitor-heartrate.html" class="sidebar-item">心率信息</a>
|
||||
<a href="monitor-sleep.html" class="sidebar-item">睡眠信息</a>
|
||||
<a href="monitor-sleep-watch5.html" class="sidebar-item">睡眠信息(watch5)</a>
|
||||
<a href="sdc-overview.html" class="sidebar-item">SDC信息</a>
|
||||
<a href="monitor-activity.html" class="sidebar-item">活动信息</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-data.html" class="sidebar-item">事件监听</a>
|
||||
<div class="sidebar-subgroup open">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="alarm-heartrate.html" class="sidebar-item">心率异常</a>
|
||||
<a href="alarm-spo2.html" class="sidebar-item">血氧异常</a>
|
||||
<a href="alarm-temp.html" class="sidebar-item active">体温异常</a>
|
||||
<a href="alarm-stress.html" class="sidebar-item">压力异常</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-subgroup">
|
||||
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
|
||||
<div class="sidebar-subgroup__body">
|
||||
<a href="log-network.html" class="sidebar-item">手表网络切换日志</a>
|
||||
<a href="log-version.html" class="sidebar-item">版本更新历史</a>
|
||||
<a href="log-error.html" class="sidebar-item">手表错误日志</a>
|
||||
<a href="log-task.html" class="sidebar-item">任务日志</a>
|
||||
<a href="log-mqtt.html" class="sidebar-item">mqtt消息日志</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<main class="main">
|
||||
<div class="page-header">
|
||||
<div class="page-title">体温异常(watch5)</div>
|
||||
</div>
|
||||
|
||||
<!-- 筛选 -->
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item">
|
||||
<label>设备编码</label>
|
||||
<input class="filter-input" placeholder="请输入设备编码">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>日期范围</label>
|
||||
<div class="date-range">
|
||||
<input type="date" value="2026-05-26">
|
||||
<span class="sep">至</span>
|
||||
<input type="date" value="2026-06-02">
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="6" cy="6" r="4.5" stroke="currentColor" stroke-width="1.5"/><path d="M10.5 10.5l2 2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
||||
查询
|
||||
</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
|
||||
<!-- 操作行 -->
|
||||
<div class="action-bar">
|
||||
<button class="btn btn-default">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 1v8M3.5 5.5L7 9l3.5-3.5M2 12h10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
导出列表数据
|
||||
</button>
|
||||
<button class="btn btn-default">查看导出任务</button>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<span class="table-card__title">体温异常记录<small>共 26 条</small></span>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>设备编码</th>
|
||||
<th>结束时间</th>
|
||||
<th>提醒类型</th>
|
||||
<th>高温提醒类型</th>
|
||||
<th>体温告警值</th>
|
||||
<th>体温数值缓存</th>
|
||||
<th>告警时间</th>
|
||||
<th>经度</th>
|
||||
<th>纬度</th>
|
||||
<th>地址</th>
|
||||
<th>GPS异常信息</th>
|
||||
<th>创建日期</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr data-code="4PMBB25A281000001" data-end="1780759560" data-remind="提醒类型1" data-hightemp="否" data-tempalarm="375" data-tempcache="[38.1,38.0,37.9,37..." data-time="2026-06-08 11:05:30" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-08 11:05:33" data-emp="张伟" data-empcode="CQ001234" data-unit="采油一厂" data-dept="作业一区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>1780759560</td>
|
||||
<td>提醒类型1</td>
|
||||
<td>否</td>
|
||||
<td>375</td>
|
||||
<td class="cell-truncate">[38.1,38.0,37.9,37...</td>
|
||||
<td>2026-06-08 11:05:30</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:05:33</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB263141000002" data-end="1780759260" data-remind="提醒类型1" data-hightemp="否" data-tempalarm="373" data-tempcache="[37.30000000000..." data-time="2026-06-08 11:02:15" data-lng="85.049420" data-lat="45.626727" data-addr="" data-gps="" data-created="2026-06-08 11:02:18" data-emp="李建国" data-empcode="CQ001235" data-unit="采油一厂" data-dept="作业二区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB26314100...</span></td>
|
||||
<td>1780759260</td>
|
||||
<td>提醒类型1</td>
|
||||
<td>否</td>
|
||||
<td>373</td>
|
||||
<td class="cell-truncate">[37.30000000000...</td>
|
||||
<td>2026-06-08 11:02:15</td>
|
||||
<td>85.049420</td>
|
||||
<td>45.626727</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 11:02:18</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25A281000003" data-end="1780753140" data-remind="提醒类型1" data-hightemp="否" data-tempalarm="375" data-tempcache="[37.7,37.7,37.7,37..." data-time="2026-06-08 03:15:10" data-lng="84.892521" data-lat="45.604393" data-addr="" data-gps="" data-created="2026-06-08 03:15:13" data-emp="王磊" data-empcode="CQ002101" data-unit="采气一厂" data-dept="集气站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25A28100...</span></td>
|
||||
<td>1780753140</td>
|
||||
<td>提醒类型1</td>
|
||||
<td>否</td>
|
||||
<td>375</td>
|
||||
<td class="cell-truncate">[37.7,37.7,37.7,37...</td>
|
||||
<td>2026-06-08 03:15:10</td>
|
||||
<td>84.892521</td>
|
||||
<td>45.604393</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 03:15:13</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000004" data-end="1780757160" data-remind="提醒类型1" data-hightemp="否" data-tempalarm="375" data-tempcache="[38.0,38.1,38.1,38..." data-time="2026-05-14 04:30:10" data-lng="0" data-lat="0" data-addr="" data-gps="{\"code\":3}" data-created="2026-06-08 10:30:13" data-emp="陈晓明" data-empcode="CQ001500" data-unit="采油二厂" data-dept="注水站">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>1780757160</td>
|
||||
<td>提醒类型1</td>
|
||||
<td>否</td>
|
||||
<td>375</td>
|
||||
<td class="cell-truncate">[38.0,38.1,38.1,38...</td>
|
||||
<td>2026-05-14 04:30:10</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>—</td>
|
||||
<td class="cell-truncate">{"code":3...</td>
|
||||
<td>2026-06-08 10:30:13</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000005" data-end="1780756800" data-remind="提醒类型1" data-hightemp="否" data-tempalarm="375" data-tempcache="[37.9,37.800000..." data-time="2026-06-08 07:10:22" data-lng="87.295736" data-lat="43.989552" data-addr="" data-gps="" data-created="2026-06-08 07:10:25" data-emp="赵强" data-empcode="CQ003010" data-unit="采气二厂" data-dept="作业三区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>1780756800</td>
|
||||
<td>提醒类型1</td>
|
||||
<td>否</td>
|
||||
<td>375</td>
|
||||
<td class="cell-truncate">[37.9,37.800000...</td>
|
||||
<td>2026-06-08 07:10:22</td>
|
||||
<td>87.295736</td>
|
||||
<td>43.989552</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 07:10:25</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
<tr data-code="4PMBB25C011000006" data-end="1780756500" data-remind="提醒类型1" data-hightemp="否" data-tempalarm="372" data-tempcache="[37.4,37.4,37.3000..." data-time="2026-06-08 06:40:15" data-lng="87.295779" data-lat="43.989548" data-addr="" data-gps="" data-created="2026-06-08 06:40:18" data-emp="孙丽" data-empcode="CQ003050" data-unit="采气二厂" data-dept="作业四区">
|
||||
<td class="cell-truncate"><span class="mono">4PMBB25C01100...</span></td>
|
||||
<td>1780756500</td>
|
||||
<td>提醒类型1</td>
|
||||
<td>否</td>
|
||||
<td>372</td>
|
||||
<td class="cell-truncate">[37.4,37.4,37.3000...</td>
|
||||
<td>2026-06-08 06:40:15</td>
|
||||
<td>87.295779</td>
|
||||
<td>43.989548</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
<td>2026-06-08 06:40:18</td>
|
||||
<td><button class="btn-link" onclick="openDetail(this)">详情</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>共 26 条</span>
|
||||
<button class="page-btn">«</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">3</button>
|
||||
<button class="page-btn">…</button>
|
||||
<button class="page-btn">4</button>
|
||||
<button class="page-btn">»</button>
|
||||
<select class="filter-select">
|
||||
<option>10条/页</option>
|
||||
<option>20条/页</option>
|
||||
<option>50条/页</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<div class="modal-mask" id="detailModal">
|
||||
<div class="modal">
|
||||
<div class="modal-header">
|
||||
<span class="modal-title">体温异常详情</span>
|
||||
<button class="modal-close" onclick="closeModal('detailModal')">✕</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="detail-section-title">异常信息</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>设备编码</label><span class="mono" id="d-code">—</span></div>
|
||||
<div class="detail-item"><label>结束时间</label><span id="d-end">—</span></div>
|
||||
<div class="detail-item"><label>提醒类型</label><span id="d-remind">—</span></div>
|
||||
<div class="detail-item"><label>高温提醒类型</label><span id="d-hightemp">—</span></div>
|
||||
<div class="detail-item"><label>体温告警值</label><span id="d-tempalarm">—</span></div>
|
||||
<div class="detail-item"><label>体温数值缓存</label><span class="mono cell-truncate" id="d-tempcache">—</span></div>
|
||||
<div class="detail-item"><label>告警时间</label><span id="d-time">—</span></div>
|
||||
<div class="detail-item"><label>经度</label><span id="d-lng">—</span></div>
|
||||
<div class="detail-item"><label>纬度</label><span id="d-lat">—</span></div>
|
||||
<div class="detail-item"><label>地址</label><span id="d-addr">—</span></div>
|
||||
<div class="detail-item"><label>GPS异常信息</label><span id="d-gps">—</span></div>
|
||||
<div class="detail-item"><label>创建日期</label><span id="d-created">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">绑定员工</div>
|
||||
<div class="detail-list">
|
||||
<div class="detail-item"><label>员工姓名</label><span id="d-emp">—</span></div>
|
||||
<div class="detail-item"><label>员工编号</label><span class="mono" id="d-empcode">—</span></div>
|
||||
<div class="detail-item"><label>所属单位</label><span id="d-unit">—</span></div>
|
||||
<div class="detail-item"><label>所属部门</label><span id="d-dept">—</span></div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section-title">位置信息</div>
|
||||
<div class="map-placeholder" id="mapPlaceholder">
|
||||
<div class="map-placeholder__grid"></div>
|
||||
<!-- 正常定位 -->
|
||||
<div class="map-placeholder__pin" id="mapPin">
|
||||
<svg viewBox="0 0 32 32" fill="none">
|
||||
<path d="M16 2C10.477 2 6 6.477 6 12c0 7.5 10 18 10 18s10-10.5 10-18c0-5.523-4.477-10-10-10z" fill="#FF4D4F"/>
|
||||
<circle cx="16" cy="12" r="4" fill="#fff"/>
|
||||
</svg>
|
||||
<span class="map-placeholder__coords" id="d-coords">—</span>
|
||||
</div>
|
||||
<!-- GPS错误状态 -->
|
||||
<div class="map-placeholder__error" id="mapError" style="display:none;">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
|
||||
<path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7z"/>
|
||||
<line x1="9" y1="9" x2="15" y2="12" stroke-width="2"/>
|
||||
</svg>
|
||||
<p id="d-mapErrorText">—</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default" onclick="closeModal('detailModal')">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleSubgroup(h){h.parentElement.classList.toggle('open');}
|
||||
(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var el=a.parentElement;while(el){if(el.classList&&el.classList.contains('sidebar-subgroup'))el.classList.add('open');el=el.parentElement;}})();
|
||||
|
||||
function closeModal(id){document.getElementById(id).classList.remove('show');}
|
||||
document.querySelectorAll('.modal-mask').forEach(function(m){m.addEventListener('click',function(e){if(e.target===m)m.classList.remove('show');});});
|
||||
|
||||
function openDetail(btn){
|
||||
var tr = btn.closest('tr');
|
||||
var d = tr.dataset;
|
||||
|
||||
document.getElementById('d-code').textContent = d.code;
|
||||
document.getElementById('d-end').textContent = d.end || '—';
|
||||
document.getElementById('d-remind').textContent = d.remind || '—';
|
||||
document.getElementById('d-hightemp').textContent = d.hightemp || '—';
|
||||
document.getElementById('d-tempalarm').textContent = d.tempalarm || '—';
|
||||
document.getElementById('d-tempcache').textContent = d.tempcache || '—';
|
||||
document.getElementById('d-time').textContent = d.time;
|
||||
document.getElementById('d-lng').textContent = d.lng;
|
||||
document.getElementById('d-lat').textContent = d.lat;
|
||||
document.getElementById('d-addr').textContent = d.addr || '—';
|
||||
document.getElementById('d-gps').textContent = d.gps || '—';
|
||||
document.getElementById('d-created').textContent = d.created;
|
||||
document.getElementById('d-emp').textContent = d.emp;
|
||||
document.getElementById('d-empcode').textContent = d.empcode;
|
||||
document.getElementById('d-unit').textContent = d.unit;
|
||||
document.getElementById('d-dept').textContent = d.dept;
|
||||
|
||||
// GPS错误处理:有错误信息时隐藏地图定位,显示错误状态
|
||||
if (d.gps) {
|
||||
document.getElementById('mapPin').style.display = 'none';
|
||||
document.getElementById('mapError').style.display = 'flex';
|
||||
document.getElementById('d-mapErrorText').textContent = d.gps;
|
||||
} else {
|
||||
document.getElementById('mapPin').style.display = 'flex';
|
||||
document.getElementById('mapError').style.display = 'none';
|
||||
document.getElementById('d-coords').textContent = '纬度: ' + d.lat + ' 经度: ' + d.lng;
|
||||
}
|
||||
|
||||
document.getElementById('detailModal').classList.add('show');
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -33,8 +33,6 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.mi{display:inline-block;width:20px;text-align:center;filter:grayscale(1);opacity:0.65;margin-right:2px;}
|
||||
.sidebar-item.active .mi{opacity:0.9;}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
|
||||
|
||||
/* 筛选栏 */
|
||||
@@ -68,8 +66,8 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
.table-card__title{font-size:var(--font-base);font-weight:600;}
|
||||
.table-card__content{overflow-x:auto;-webkit-overflow-scrolling:touch;}
|
||||
table{width:100%;border-collapse:collapse;min-width:100%;white-space:nowrap;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:center;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
thead th{background:#FAFAFA;padding:10px 12px;text-align:center;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody td{padding:12px 12px;text-align:center;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
@@ -122,9 +120,9 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
<!-- 侧边栏 -->
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">档案</div>
|
||||
<a class="sidebar-item active" href="archive-personal-weight-data.html"><span class="mi">👤</span>个人体重数据</a>
|
||||
<a class="sidebar-item" href="archive-unit-report.html"><span class="mi">🏢</span>单位报表数据</a>
|
||||
<a class="sidebar-item" href="archive-algorithm-model.html"><span class="mi">🤖</span>算法模型</a>
|
||||
<a class="sidebar-item active" href="archive-personal-weight-data.html">个人体重数据</a>
|
||||
<a class="sidebar-item" href="archive-unit-report.html">单位报表数据</a>
|
||||
<a class="sidebar-item" href="archive-algorithm-model.html">算法模型</a>
|
||||
</aside>
|
||||
|
||||
<!-- 主内容区 -->
|
||||
@@ -168,63 +166,78 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
<!-- 数据表格 -->
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<div class="table-card__title">个人体重数据(2026年)</div>
|
||||
<div class="table-card__title">个人体重数据</div>
|
||||
</div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th rowspan="2">姓名</th>
|
||||
<th rowspan="2">员工编号</th>
|
||||
<th rowspan="2">所属单位</th>
|
||||
<th rowspan="2">所属部门</th>
|
||||
<th colspan="6">体重监测</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="sortable">最初体重(kg)<span class="sort-icon"><span class="arrow-up"></span><span class="arrow-down"></span></span></th>
|
||||
<th class="sortable">最终体重(kg)<span class="sort-icon"><span class="arrow-up"></span><span class="arrow-down"></span></span></th>
|
||||
<th class="sortable">体重变化(kg)<span class="sort-icon"><span class="arrow-up"></span><span class="arrow-down"></span></span></th>
|
||||
<th class="sortable">最初BMI<span class="sort-icon"><span class="arrow-up"></span><span class="arrow-down"></span></span></th>
|
||||
<th class="sortable">最终BMI<span class="sort-icon"><span class="arrow-up"></span><span class="arrow-down"></span></span></th>
|
||||
<th class="sortable">BMI变化<span class="sort-icon"><span class="arrow-up"></span><span class="arrow-down"></span></span></th>
|
||||
<th>操作</th>
|
||||
<th>序号</th>
|
||||
<th>姓名</th>
|
||||
<th>员工编号</th>
|
||||
<th>性别</th>
|
||||
<th>年龄</th>
|
||||
<th>单位</th>
|
||||
<th>部门</th>
|
||||
<th>饮食记录次数</th>
|
||||
<th>运动记录次数</th>
|
||||
<th>体重记录次数</th>
|
||||
<th>体重变化(cm)</th>
|
||||
<th>BMI变化</th>
|
||||
<th>腰围变化(cm)</th>
|
||||
<th>体脂变化(%)</th>
|
||||
<th>详细数据</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>张伟</td><td>EMP001</td><td>CQ能源总部</td><td>研发部</td>
|
||||
<td>72.5</td><td>70.2</td><td style="color:#52C41A;">-2.3</td><td>24.1</td><td>23.4</td><td style="color:#52C41A;">-0.7</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=EMP001">详细信息</a></td>
|
||||
<td>1</td><td>李凯明</td><td>424234</td><td>男</td><td>23</td>
|
||||
<td>第四采油厂</td><td>岭南作业区</td>
|
||||
<td>345</td><td>123</td><td>132</td>
|
||||
<td>95->80</td><td>30->28</td><td>90->80</td><td>30->28</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=424234">查看</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>李娜</td><td>EMP002</td><td>CQ能源总部</td><td>市场部</td>
|
||||
<td>58.3</td><td>57.8</td><td style="color:#52C41A;">-0.5</td><td>21.8</td><td>21.6</td><td style="color:#52C41A;">-0.2</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=EMP002">详细信息</a></td>
|
||||
<td>2</td><td>张文胜</td><td>234223</td><td>男</td><td>45</td>
|
||||
<td>第四采油厂</td><td>虎狼山作业区</td>
|
||||
<td>342</td><td>231</td><td>123</td>
|
||||
<td>95->80</td><td>30->28</td><td>90->80</td><td>30->28</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=234223">查看</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>陈刚</td><td>EMP005</td><td>CQ能源总部</td><td>人事部</td>
|
||||
<td>78.9</td><td>76.5</td><td style="color:#52C41A;">-2.4</td><td>26.1</td><td>25.3</td><td style="color:#52C41A;">-0.8</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=EMP005">详细信息</a></td>
|
||||
<td>3</td><td>王丽华</td><td>318756</td><td>女</td><td>32</td>
|
||||
<td>采油一厂</td><td>设备维护站</td>
|
||||
<td>280</td><td>156</td><td>98</td>
|
||||
<td>72->66</td><td>26->23</td><td>82->76</td><td>28->25</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=318756">查看</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>王磊</td><td>EMP003</td><td>采油一厂</td><td>运营部</td>
|
||||
<td>85.6</td><td>83.4</td><td style="color:#52C41A;">-2.2</td><td>28.2</td><td>27.5</td><td style="color:#52C41A;">-0.7</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=EMP003">详细信息</a></td>
|
||||
<td>4</td><td>刘建国</td><td>567890</td><td>男</td><td>38</td>
|
||||
<td>采气一厂</td><td>生产运行部</td>
|
||||
<td>210</td><td>189</td><td>87</td>
|
||||
<td>88->82</td><td>29->27</td><td>95->89</td><td>32->29</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=567890">查看</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>赵敏</td><td>EMP004</td><td>采油二厂</td><td>财务部</td>
|
||||
<td>62.1</td><td>61.5</td><td style="color:#52C41A;">-0.6</td><td>23.2</td><td>23.0</td><td style="color:#52C41A;">-0.2</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=EMP004">详细信息</a></td>
|
||||
<td>5</td><td>陈思雨</td><td>192847</td><td>女</td><td>28</td>
|
||||
<td>CQ能源总部</td><td>人力资源部</td>
|
||||
<td>356</td><td>200</td><td>145</td>
|
||||
<td>65->60</td><td>24->22</td><td>75->70</td><td>26->23</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=192847">查看</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>孙强</td><td>EMP006</td><td>采气一厂</td><td>生产部</td>
|
||||
<td>91.2</td><td>89.8</td><td style="color:#52C41A;">-1.4</td><td>30.1</td><td>29.6</td><td style="color:#52C41A;">-0.5</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=EMP006">详细信息</a></td>
|
||||
<td>6</td><td>杨志强</td><td>445612</td><td>男</td><td>41</td>
|
||||
<td>采油二厂</td><td>后勤保障部</td>
|
||||
<td>198</td><td>142</td><td>76</td>
|
||||
<td>92->86</td><td>31->28</td><td>98->92</td><td>33->30</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=445612">查看</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>周婷</td><td>EMP007</td><td>采油一厂</td><td>技术部</td>
|
||||
<td>55.0</td><td>55.8</td><td style="color:#FF4D4F;">+0.8</td><td>20.6</td><td>20.9</td><td style="color:#FF4D4F;">+0.3</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=EMP007">详细信息</a></td>
|
||||
<td>7</td><td>赵晓峰</td><td>678901</td><td>男</td><td>35</td>
|
||||
<td>采油一厂</td><td>技术研发部</td>
|
||||
<td>267</td><td>178</td><td>110</td>
|
||||
<td>78->74</td><td>27->25</td><td>86->82</td><td>27->24</td>
|
||||
<td><a class="link" href="archive-personal-weight-detail.html?id=678901">查看</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -30,8 +30,6 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.mi{display:inline-block;width:20px;text-align:center;filter:grayscale(1);opacity:0.65;margin-right:2px;}
|
||||
.sidebar-item.active .mi{opacity:0.9;}
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
|
||||
/* 面包屑 */
|
||||
.breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:16px;font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
@@ -107,9 +105,9 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
<!-- 侧边栏 -->
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-menu__title">档案</div>
|
||||
<a class="sidebar-item active" href="archive-personal-weight-data.html"><span class="mi">👤</span>个人体重数据</a>
|
||||
<a class="sidebar-item" href="archive-unit-report.html"><span class="mi">🏢</span>单位报表数据</a>
|
||||
<a class="sidebar-item" href="archive-algorithm-model.html"><span class="mi">🤖</span>算法模型</a>
|
||||
<a class="sidebar-item active" href="archive-personal-weight-data.html">个人体重数据</a>
|
||||
<a class="sidebar-item" href="archive-unit-report.html">单位报表数据</a>
|
||||
<a class="sidebar-item" href="archive-algorithm-model.html">算法模型</a>
|
||||
</aside>
|
||||
<!-- 主内容区 -->
|
||||
<div class="main">
|
||||
|
||||
@@ -33,8 +33,6 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
|
||||
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
|
||||
.sidebar-item.active{color:#fff;background:var(--primary);}
|
||||
.mi{display:inline-block;width:20px;text-align:center;filter:grayscale(1);opacity:0.65;margin-right:2px;}
|
||||
.sidebar-item.active .mi{opacity:0.9;}
|
||||
/* 主内容区域 */
|
||||
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
|
||||
/* 筛选栏 */
|
||||
@@ -56,12 +54,10 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
.table-card__content{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;}
|
||||
.table-card__content table{min-width:100%;white-space:nowrap;}
|
||||
table{width:100%;border-collapse:collapse;}
|
||||
thead th{background:#FAFAFA;padding:12px 16px;text-align:center;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
thead th{background:#FAFAFA;padding:10px 12px;text-align:center;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody td{padding:12px 12px;text-align:center;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);white-space:nowrap;}
|
||||
tbody tr:last-child td{border-bottom:none;}
|
||||
tbody tr:hover{background:#F8FBFF;}
|
||||
tbody tr.stat-row{background:#F0F5FF;font-weight:500;}
|
||||
tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
/* 标签 */
|
||||
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
|
||||
.tag-green{background:#F6FFED;color:var(--success);}
|
||||
@@ -109,9 +105,9 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
<!-- 侧边栏 -->
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-menu__title">档案</div>
|
||||
<a class="sidebar-item" href="archive-personal-weight-data.html"><span class="mi">👤</span>个人体重数据</a>
|
||||
<a class="sidebar-item active" href="archive-unit-report.html"><span class="mi">🏢</span>单位报表数据</a>
|
||||
<a class="sidebar-item" href="archive-algorithm-model.html"><span class="mi">🤖</span>算法模型</a>
|
||||
<a class="sidebar-item" href="archive-personal-weight-data.html">个人体重数据</a>
|
||||
<a class="sidebar-item active" href="archive-unit-report.html">单位报表数据</a>
|
||||
<a class="sidebar-item" href="archive-algorithm-model.html">算法模型</a>
|
||||
</div>
|
||||
|
||||
<!-- 主内容区域 -->
|
||||
@@ -126,22 +122,27 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
<!-- 筛选栏 -->
|
||||
<div class="filter-bar" style="border-radius:0 0 var(--radius-md) var(--radius-md);margin-top:0;">
|
||||
<div class="filter-item">
|
||||
<label>单位名称</label>
|
||||
<label>组织单位</label>
|
||||
<select class="filter-select">
|
||||
<option>全部</option>
|
||||
<option>第四采油厂</option>
|
||||
<option>采油一厂</option>
|
||||
<option>采油二厂</option>
|
||||
<option>采气一厂</option>
|
||||
<option>能源总部机关</option>
|
||||
<option>勘探开发研究院</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>计划名称</label>
|
||||
<input class="filter-input" type="text" placeholder="请输入计划名称" style="min-width:220px;">
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>年份</label>
|
||||
<select class="filter-select">
|
||||
<option selected>2026年</option>
|
||||
<option>2025年</option>
|
||||
<option>2024年</option>
|
||||
<option>2023年</option>
|
||||
<option>2022年</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="btn btn-primary">查询</button>
|
||||
@@ -157,7 +158,7 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
<!-- 数据表格 -->
|
||||
<div class="table-card">
|
||||
<div class="table-card__header">
|
||||
<div class="table-card__title">单位体重监测数据(2026年)</div>
|
||||
<div class="table-card__title">单位报表数据</div>
|
||||
</div>
|
||||
|
||||
<!-- 二级单位表格 -->
|
||||
@@ -166,37 +167,51 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th rowspan="2">单位名称</th>
|
||||
<th rowspan="2">总人数</th>
|
||||
<th colspan="6">体重监测</th>
|
||||
<th rowspan="2">操作</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>最初平均体重(kg) ↕</th>
|
||||
<th>最终平均体重(kg) ↕</th>
|
||||
<th>平均体重变化(kg) ↕</th>
|
||||
<th>最初平均BMI ↕</th>
|
||||
<th>最终平均BMI ↕</th>
|
||||
<th>平均BMI变化 ↕</th>
|
||||
<th>序号</th>
|
||||
<th>组织单位</th>
|
||||
<th>计划名称</th>
|
||||
<th>起止日期</th>
|
||||
<th>应参加人数</th>
|
||||
<th>实际参加人数</th>
|
||||
<th>完成体重目标人数</th>
|
||||
<th>完成体脂目标人数</th>
|
||||
<th>完成腰围目标人数</th>
|
||||
<th>人均减重(kg)</th>
|
||||
<th>人均减重率(%)</th>
|
||||
<th>人均BMI降低</th>
|
||||
<th>人均体脂率降低(%)</th>
|
||||
<th>人均腰围减少(cm)</th>
|
||||
<th>人均每日摄入热量(kcal)</th>
|
||||
<th>人均每日消耗热量(kcal)</th>
|
||||
<th>人均每日热量缺口</th>
|
||||
<th>人均综合得分</th>
|
||||
<th>人均行动得分</th>
|
||||
<th>组织部门</th>
|
||||
<th>负责人</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="stat-row">
|
||||
<td>统计行</td><td>1,280</td><td>74.3</td><td>72.8</td><td>-1.5</td><td>24.8</td><td>24.3</td><td>-0.5</td><td><a class="link" href="archive-unit-weight-detail.html">查看明细</a></td>
|
||||
<tr>
|
||||
<td>1</td><td>第四采油厂</td><td>第四采油厂2023年超重健康干预</td><td>2023/08/23 – 2023/12/12</td><td>234</td><td>220</td><td>213</td><td>213</td><td>213</td><td>2.3</td><td>5</td><td>2</td><td>2</td><td>5</td><td>5410</td><td>3541</td><td>1570</td><td>86</td><td>86</td><td>健康部</td><td>宋喜宁</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td><td>第四采油厂</td><td>第四采油厂2022年超重健康干预</td><td>2022/08/23 – 2022/12/12</td><td>432</td><td>350</td><td>321</td><td>321</td><td>321</td><td>5.5</td><td>5</td><td>3</td><td>1</td><td>6</td><td>5410</td><td>3541</td><td>1570</td><td>75</td><td>75</td><td>健康部</td><td>宋喜宁</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td><td>采油一厂</td><td>采油一厂2024年体重管理专项行动</td><td>2024/03/01 – 2024/06/30</td><td>310</td><td>280</td><td>256</td><td>248</td><td>240</td><td>3.8</td><td>4</td><td>2.5</td><td>1.8</td><td>4</td><td>5200</td><td>3420</td><td>1620</td><td>82</td><td>80</td><td>健康部</td><td>刘建华</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td><td>采气一厂</td><td>采气一厂2024年健康管理计划</td><td>2024/05/10 – 2024/09/10</td><td>180</td><td>165</td><td>152</td><td>148</td><td>140</td><td>4.2</td><td>6</td><td>1.5</td><td>2.2</td><td>3</td><td>5350</td><td>3600</td><td>1590</td><td>78</td><td>76</td><td>健康部</td><td>王志强</td>
|
||||
</tr>
|
||||
<tr><td>采油一厂</td><td>420</td><td>75.6</td><td>73.8</td><td>-1.8</td><td>25.2</td><td>24.6</td><td>-0.6</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采油一厂">查看明细</a></td></tr>
|
||||
<tr><td>采油二厂</td><td>380</td><td>73.2</td><td>72.0</td><td>-1.2</td><td>24.5</td><td>24.1</td><td>-0.4</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采油二厂">查看明细</a></td></tr>
|
||||
<tr><td>采气一厂</td><td>260</td><td>76.8</td><td>75.1</td><td>-1.7</td><td>25.8</td><td>25.2</td><td>-0.6</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采气一厂">查看明细</a></td></tr>
|
||||
<tr><td>能源总部机关</td><td>150</td><td>70.5</td><td>69.8</td><td>-0.7</td><td>23.5</td><td>23.2</td><td>-0.3</td><td><a class="link" href="archive-unit-weight-detail.html?unit=能源总部机关">查看明细</a></td></tr>
|
||||
<tr><td>勘探开发研究院</td><td>70</td><td>72.1</td><td>71.2</td><td>-0.9</td><td>24.0</td><td>23.7</td><td>-0.3</td><td><a class="link" href="archive-unit-weight-detail.html?unit=勘探开发研究院">查看明细</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>显示 5 条,共 8 条</span>
|
||||
<span>显示 4 条,共 12 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">3</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -207,41 +222,50 @@ tbody tr.stat-row:hover{background:#E6F0FF;}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th rowspan="2">单位名称</th>
|
||||
<th rowspan="2">部门名称</th>
|
||||
<th rowspan="2">总人数</th>
|
||||
<th colspan="6">体重监测</th>
|
||||
<th rowspan="2">操作</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>最初平均体重(kg) ↕</th>
|
||||
<th>最终平均体重(kg) ↕</th>
|
||||
<th>平均体重变化(kg) ↕</th>
|
||||
<th>最初平均BMI ↕</th>
|
||||
<th>最终平均BMI ↕</th>
|
||||
<th>平均BMI变化 ↕</th>
|
||||
<th>序号</th>
|
||||
<th>组织单位</th>
|
||||
<th>计划名称</th>
|
||||
<th>起止日期</th>
|
||||
<th>应参加人数</th>
|
||||
<th>实际参加人数</th>
|
||||
<th>完成体重目标人数</th>
|
||||
<th>完成体脂目标人数</th>
|
||||
<th>完成腰围目标人数</th>
|
||||
<th>人均减重(kg)</th>
|
||||
<th>人均减重率(%)</th>
|
||||
<th>人均BMI降低</th>
|
||||
<th>人均体脂率降低(%)</th>
|
||||
<th>人均腰围减少(cm)</th>
|
||||
<th>人均每日摄入热量(kcal)</th>
|
||||
<th>人均每日消耗热量(kcal)</th>
|
||||
<th>人均每日热量缺口</th>
|
||||
<th>人均综合得分</th>
|
||||
<th>人均行动得分</th>
|
||||
<th>组织部门</th>
|
||||
<th>负责人</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="stat-row">
|
||||
<td>统计行</td><td>—</td><td>405</td><td>75.6</td><td>73.8</td><td>-1.8</td><td>25.2</td><td>24.6</td><td>-0.6</td><td><a class="link" href="archive-unit-weight-detail.html">查看明细</a></td>
|
||||
<tr>
|
||||
<td>1</td><td>第四采油厂</td><td>第四采油厂2024年超重健康干预</td><td>2024/08/01 – 2024/11/30</td><td>150</td><td>138</td><td>130</td><td>128</td><td>125</td><td>3.2</td><td>4</td><td>1.8</td><td>2.0</td><td>4</td><td>5300</td><td>3500</td><td>1600</td><td>84</td><td>82</td><td>健康部</td><td>宋喜宁</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td><td>第四采油厂</td><td>第四采油厂2023年健康减重专项行动</td><td>2023/04/01 – 2023/09/30</td><td>200</td><td>185</td><td>172</td><td>168</td><td>160</td><td>4.0</td><td>5</td><td>2.2</td><td>1.5</td><td>5</td><td>5150</td><td>3480</td><td>1550</td><td>80</td><td>78</td><td>健康部</td><td>宋喜宁</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td><td>采油一厂</td><td>采油一厂2023年体重管理专项行动</td><td>2023/06/01 – 2023/10/31</td><td>280</td><td>260</td><td>242</td><td>238</td><td>230</td><td>2.8</td><td>3</td><td>1.2</td><td>1.8</td><td>3</td><td>5250</td><td>3380</td><td>1520</td><td>76</td><td>74</td><td>健康部</td><td>刘建华</td>
|
||||
</tr>
|
||||
<tr><td>采油一厂</td><td>研发部</td><td>85</td><td>73.2</td><td>71.5</td><td>-1.7</td><td>24.4</td><td>23.8</td><td>-0.6</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采油一厂&dept=研发部">查看明细</a></td></tr>
|
||||
<tr><td>采油一厂</td><td>运营部</td><td>120</td><td>76.8</td><td>74.6</td><td>-2.2</td><td>25.8</td><td>25.1</td><td>-0.7</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采油一厂&dept=运营部">查看明细</a></td></tr>
|
||||
<tr><td>采油一厂</td><td>市场部</td><td>95</td><td>74.5</td><td>73.2</td><td>-1.3</td><td>25.0</td><td>24.6</td><td>-0.4</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采油一厂&dept=市场部">查看明细</a></td></tr>
|
||||
<tr><td>采油二厂</td><td>财务部</td><td>60</td><td>71.0</td><td>70.1</td><td>-0.9</td><td>23.8</td><td>23.5</td><td>-0.3</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采油二厂&dept=财务部">查看明细</a></td></tr>
|
||||
<tr><td>采油二厂</td><td>人事部</td><td>45</td><td>72.3</td><td>71.5</td><td>-0.8</td><td>24.1</td><td>23.8</td><td>-0.3</td><td><a class="link" href="archive-unit-weight-detail.html?unit=采油二厂&dept=人事部">查看明细</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<span>显示 5 条,共 24 条</span>
|
||||
<span>显示 3 条,共 18 条</span>
|
||||
<button class="page-btn">‹</button>
|
||||
<button class="page-btn active">1</button>
|
||||
<button class="page-btn">2</button>
|
||||
<button class="page-btn">3</button>
|
||||
<button class="page-btn">...</button>
|
||||
<button class="page-btn">5</button>
|
||||
<button class="page-btn">6</button>
|
||||
<button class="page-btn">›</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||