feat: 体重管理原型更新(管理端方案编辑审核人分组、员工端目标/打卡调整及PRD、截图同步)
- 管理端:方案编辑审核人按医疗点/管理员人员分组且均可添加多个;体重排行、设备添加页及监测页调整 - 员工端:历史计划更名为历史目标;目标详情新增编辑态;吃/动打卡新增成功与已记录态;体重记录成功提示 - PRD 与截图同步更新
@@ -12,7 +12,7 @@
|
||||
--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-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.10);
|
||||
}
|
||||
.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;}
|
||||
@@ -68,6 +68,26 @@
|
||||
.btn{height:36px;padding:0 20px;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;text-decoration:none;}
|
||||
.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);}
|
||||
/* 树形选择器(所属单位二级联动) */
|
||||
.tree-select{position:relative;width:100%;}
|
||||
.tree-select__trigger{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 32px 0 12px;font-size:var(--font-sm);background:#fff;cursor:pointer;display:flex;align-items:center;user-select:none;transition:border-color .2s;box-sizing:border-box;position:relative;}
|
||||
.tree-select__trigger:hover{border-color:var(--primary);}
|
||||
.tree-select__trigger::after{content:'';position:absolute;right:12px;top:50%;transform:translateY(-50%);border:4px solid transparent;border-top:5px solid #999;pointer-events:none;}
|
||||
.tree-select__text{color:var(--text-placeholder);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tree-select__text.has-value{color:var(--text-primary);}
|
||||
.tree-select__panel{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:500;display:none;max-height:320px;overflow-y:auto;}
|
||||
.tree-select__panel.show{display:block;}
|
||||
.tree-select__group{border-bottom:1px solid #F5F5F5;}
|
||||
.tree-select__group:last-child{border-bottom:none;}
|
||||
.tree-select__group-header{display:flex;align-items:center;gap:6px;padding:9px 16px;font-size:var(--font-sm);font-weight:500;color:var(--text-primary);cursor:pointer;transition:background .1s;user-select:none;}
|
||||
.tree-select__group-header:hover{background:#F5F7FA;}
|
||||
.tree-select__group-arrow{width:16px;height:16px;display:flex;align-items:center;justify-content:center;transition:transform .2s;flex-shrink:0;color:var(--text-placeholder);}
|
||||
.tree-select__group-arrow.expanded{transform:rotate(90deg);}
|
||||
.tree-select__group-label{flex:1;}
|
||||
.tree-select__option{padding:8px 16px 8px 38px;font-size:var(--font-sm);cursor:pointer;transition:background .1s;display:none;color:var(--text-secondary);}
|
||||
.tree-select__option.show{display:block;}
|
||||
.tree-select__option:hover{background:#F5F7FA;}
|
||||
.tree-select__option.selected{color:var(--primary);background:var(--primary-light);}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -136,7 +156,65 @@
|
||||
<div class="form-grid">
|
||||
<div class="form-item"><label>设备名称<span class="required">*</span></label><input class="form-input" placeholder="请输入设备名称"></div>
|
||||
<div class="form-item"><label>设备编码<span class="required">*</span></label><input class="form-input" placeholder="请输入设备编码"></div>
|
||||
<div class="form-item"><label>所属单位<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>采油一厂</option><option>采油二厂</option><option>采气厂</option></select></div>
|
||||
<div class="form-item">
|
||||
<label>所属单位<span class="required">*</span></label>
|
||||
<div class="tree-select" id="orgTreeSelect">
|
||||
<input type="hidden" id="deviceOrg" value="">
|
||||
<div class="tree-select__trigger" onclick="toggleOrgTree()">
|
||||
<span class="tree-select__text" id="orgTreeText">请选择所属单位</span>
|
||||
</div>
|
||||
<div class="tree-select__panel" id="orgTreePanel">
|
||||
<div class="tree-select__group" data-unit="第四采油厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">第四采油厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|健康管理部" onclick="selectOrgOption(this,'第四采油厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|安全环保科" onclick="selectOrgOption(this,'第四采油厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|工会办公室" onclick="selectOrgOption(this,'第四采油厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|生产技术部" onclick="selectOrgOption(this,'第四采油厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|财务部" onclick="selectOrgOption(this,'第四采油厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|信息中心" onclick="selectOrgOption(this,'第四采油厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|健康管理部" onclick="selectOrgOption(this,'采油一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|安全环保科" onclick="selectOrgOption(this,'采油一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|工会办公室" onclick="selectOrgOption(this,'采油一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|生产技术部" onclick="selectOrgOption(this,'采油一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|财务部" onclick="selectOrgOption(this,'采油一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|信息中心" onclick="selectOrgOption(this,'采油一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油二厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油二厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|健康管理部" onclick="selectOrgOption(this,'采油二厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|安全环保科" onclick="selectOrgOption(this,'采油二厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|工会办公室" onclick="selectOrgOption(this,'采油二厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|生产技术部" onclick="selectOrgOption(this,'采油二厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|财务部" onclick="selectOrgOption(this,'采油二厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|信息中心" onclick="selectOrgOption(this,'采油二厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采气一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采气一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|健康管理部" onclick="selectOrgOption(this,'采气一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|安全环保科" onclick="selectOrgOption(this,'采气一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|工会办公室" onclick="selectOrgOption(this,'采气一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|生产技术部" onclick="selectOrgOption(this,'采气一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|财务部" onclick="selectOrgOption(this,'采气一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|信息中心" onclick="selectOrgOption(this,'采气一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item"><label>设备厂商<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>蚁熊</option></select></div>
|
||||
<div class="form-item"><label>设备型号<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>HW-S100</option><option>MI-Scale2</option><option>LX-Pro</option></select></div>
|
||||
<div class="form-item"><label>入库日期<span class="required">*</span></label><input class="form-input" type="date"></div>
|
||||
@@ -160,5 +238,61 @@
|
||||
</div>
|
||||
</main>
|
||||
<script>function toggleSubgroup(h){var p=h.parentElement;var sidebar=p.closest("aside");if(sidebar)sidebar.querySelectorAll(".sidebar-subgroup.open").forEach(function(g){if(g!==p)g.classList.remove("open");});p.classList.toggle("open");}(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var sidebar=document.querySelector('aside');if(sidebar)sidebar.querySelectorAll('.sidebar-subgroup.open').forEach(function(g){g.classList.remove('open');});var s=a.closest('.sidebar-subgroup');if(s)s.classList.add('open');})();</script>
|
||||
<script>
|
||||
function toggleOrgTree(){
|
||||
var panel = document.getElementById('orgTreePanel');
|
||||
var isShow = panel.classList.contains('show');
|
||||
if(isShow){ panel.classList.remove('show'); }
|
||||
else { panel.classList.add('show'); }
|
||||
}
|
||||
|
||||
function toggleOrgGroup(headerEl, event){
|
||||
event.stopPropagation();
|
||||
var arrow = headerEl.querySelector('.tree-select__group-arrow');
|
||||
var group = headerEl.parentElement;
|
||||
var options = group.querySelectorAll('.tree-select__option');
|
||||
var isExpanded = arrow.classList.contains('expanded');
|
||||
if(isExpanded){
|
||||
arrow.classList.remove('expanded');
|
||||
options.forEach(function(opt){ opt.classList.remove('show'); });
|
||||
var unitName = group.getAttribute('data-unit');
|
||||
selectOrgOptionInner(unitName, unitName);
|
||||
} else {
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__group-arrow.expanded').forEach(function(a){ a.classList.remove('expanded'); });
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.show').forEach(function(o){ o.classList.remove('show'); });
|
||||
arrow.classList.add('expanded');
|
||||
options.forEach(function(opt){ opt.classList.add('show'); });
|
||||
}
|
||||
}
|
||||
|
||||
function selectOrgOption(el, displayText){
|
||||
var val = el.getAttribute('data-val');
|
||||
selectOrgOptionInner(val, displayText);
|
||||
}
|
||||
|
||||
function selectOrgOptionInner(val, displayText){
|
||||
var hidden = document.getElementById('deviceOrg');
|
||||
var oldVal = hidden.value;
|
||||
hidden.value = val;
|
||||
var textEl = document.getElementById('orgTreeText');
|
||||
textEl.textContent = displayText;
|
||||
textEl.className = 'tree-select__text has-value';
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.selected').forEach(function(o){ o.classList.remove('selected'); });
|
||||
var targetOpt = document.querySelector('#orgTreePanel .tree-select__option[data-val="' + val + '"]');
|
||||
if(targetOpt){ targetOpt.classList.add('selected'); }
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
if(oldVal !== val){
|
||||
var evt = document.createEvent('HTMLEvents');
|
||||
evt.initEvent('change', true, false);
|
||||
hidden.dispatchEvent(evt);
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(e){
|
||||
if(!e.target.closest('#orgTreeSelect')){
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -139,14 +139,14 @@
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>序号</th><th>设备名称</th><th>设备编码</th><th>设备所属单位</th><th>布放位置</th>
|
||||
<th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
<th>最近一次使用时间</th><th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td>1</td><td>蓝牙体脂称A01</td><td>BT-2024-001</td><td>采油一厂</td><td>办公楼1层大厅</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">48</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">205</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">1,180</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">3,210</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>蓝牙体脂称A02</td><td>BT-2024-002</td><td>采油一厂</td><td>健身房</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">72</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">312</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">1,860</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">4,580</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>蓝牙体脂称B01</td><td>BT-2024-003</td><td>采油二厂</td><td>职工活动中心</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">35</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">156</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">890</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">1,920</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>蓝牙体脂称B02</td><td>BT-2024-004</td><td>采油二厂</td><td>办公楼2层</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">28</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">128</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">760</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">1,650</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>蓝牙体脂称C01</td><td>BT-2024-005</td><td>采气厂</td><td>综合楼1层</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">58</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">245</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">1,420</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">3,560</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>1</td><td>蓝牙体脂称A01</td><td>BT-2024-001</td><td>采油一厂</td><td>办公楼1层大厅</td><td>2026-08-26 09:15</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">48</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">205</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">1,180</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">3,210</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>蓝牙体脂称A02</td><td>BT-2024-002</td><td>采油一厂</td><td>健身房</td><td>2026-08-26 08:42</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">72</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">312</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">1,860</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">4,580</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>蓝牙体脂称B01</td><td>BT-2024-003</td><td>采油二厂</td><td>职工活动中心</td><td>2026-08-25 18:20</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">35</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">156</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">890</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">1,920</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>蓝牙体脂称B02</td><td>BT-2024-004</td><td>采油二厂</td><td>办公楼2层</td><td>2026-08-25 16:05</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">28</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">128</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">760</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">1,650</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>蓝牙体脂称C01</td><td>BT-2024-005</td><td>采气厂</td><td>综合楼1层</td><td>2026-08-24 11:30</td><td><a class="link" href="bluetooth-monitor-detail.html?period=week">58</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=month">245</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=year">1,420</a></td><td><a class="link" href="bluetooth-monitor-detail.html?period=all">3,560</a></td><td><a class="link" href="bluetooth-monitor-detail.html">数据明细</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
│
|
||||
├── 报名管理(侧边栏)
|
||||
│ ├── 报名跟踪
|
||||
│ │ └── 内Tab:全部/未提交任务书/已提交待审核/已通过待签署/已签署
|
||||
│ │ └── 内Tab:全部/未提交目标/已提交待审核/已通过待签署/已签署
|
||||
│ │ └── 承诺书预览弹窗
|
||||
│ └── 目标体重审核
|
||||
│ ├── 内Tab:全部/待审核/已通过/已通过待签署/已驳回
|
||||
@@ -332,7 +332,7 @@
|
||||
|
||||
**功能说明:** 体重管理干预活动的增删改查管理,管理员在此创建和管理各单位/部门的体重干预活动。
|
||||
|
||||
**筛选条件:** 组织机构(二级联动面板)、活动名称(输入框)、活动状态(下拉:全部/进行中/未开始)、年份选择(下拉)
|
||||
**筛选条件:** 组织机构(二级联动面板)、活动名称(输入框)、活动状态(下拉:全部/进行中/未开始)
|
||||
|
||||
**表格列:** 序号、组织机构、活动名称、起止日期、人员筛选(可点击数字)、审核人员(可点击数字)、活动状态(标签)、组织部门、负责人、负责人电话、操作
|
||||
|
||||
@@ -369,7 +369,7 @@
|
||||

|
||||
|
||||
- 标题:审核人员 - **活动名称**
|
||||
- 表格列:序号、单位、姓名、所属医疗点、联系电话、职称、岗位、操作
|
||||
- 表格列:序号、单位、姓名、类型、所属医疗点/部门、联系电话、岗位、操作
|
||||
- 分页:底部展示共N条数据与分页按钮
|
||||
- 点击"新增"按钮打开新增审核人员弹窗
|
||||
|
||||
@@ -378,7 +378,7 @@
|
||||

|
||||
|
||||
- 输入姓名搜索,下拉展示匹配结果
|
||||
- 选中后展示员工基本信息卡片:单位、所属医疗点、姓名、联系电话、岗位、职称
|
||||
- 选中后展示员工基本信息卡片:单位、姓名、类型、所属医疗点/部门、联系电话、岗位、职称
|
||||
- 未选中人员时"确定"置灰不可点击;点击"确定"将选中审核人员加入列表并关闭弹窗
|
||||
|
||||
**交互说明:**
|
||||
@@ -415,7 +415,7 @@
|
||||
| 活动起止日期 | 日期范围选择 | 是 | 结束日期不得早于开始日期 |
|
||||
| 组织部门 | 下拉选择 | 是 | 从组织机构对应的部门列表中选择 |
|
||||
| 负责人 | 搜索下拉 | 是 | 支持搜索姓名,单选,从组织机构中进行搜索 |
|
||||
| 审核人 | 搜索下拉 | 否 | 支持搜索姓名,可多选,从医疗点中进行搜索 |
|
||||
| 审核人 | 分类多选(医疗点医护人员/管理员) | 是 | 分为医疗点医护人员和管理员两类,每类可添加多个 |
|
||||
| 通知文件 | 拖拽上传区 | 是 | 支持PDF/Word,最大20MB |
|
||||
| 奖励等级 | 多行文本域 | 否 | 自由文本,不超过200字符 |
|
||||
|
||||
@@ -443,7 +443,9 @@
|
||||
- 底部保存栏固定,滚动表单时始终可见
|
||||
- 点击"取消"返回活动列表页
|
||||
- 编辑模式下回填表单数据
|
||||
|
||||
- 在活动进入进行中状态时,需将已参加活动的员工自动参加到本次活动中,承诺书沿用之前的。
|
||||
- 新增活动时,如开始日期是当日,需立即将之前已参加活动的员工自动参加到本次活动中来。
|
||||
- 一个员工同时只能参加一个单位组织的活动
|
||||
---
|
||||
|
||||
## 三、报名管理
|
||||
@@ -454,7 +456,7 @@
|
||||
|
||||
**功能说明:** 跟踪干预活动中员工的报名和任务书提交流程,按不同的报名状态分Tab管理。
|
||||
|
||||
**Tab切换:** 全部 / 未提交任务书 / 已提交待审核 / 已通过待签署 / 已签署(各Tab带数量角标)
|
||||
**Tab切换:** 全部 / 未提交目标 / 已提交待审核 / 已通过待签署 / 已签署(各Tab带数量角标)
|
||||
|
||||
**筛选条件:** 单位部门(二级联动面板)、活动名称(搜索下拉)、姓名(输入框)、员工编号(输入框)
|
||||
|
||||
@@ -463,7 +465,7 @@
|
||||
| Tab | 表格列 |
|
||||
|-----|-------|
|
||||
| 全部 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、体重(kg)、BMI、腰围(cm)、体脂(%)、提交时间、审核时间、签署时间、承诺书、状态 |
|
||||
| 未提交任务书 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、体重(kg)、BMI、腰围(cm)、体脂(%) |
|
||||
| 未提交目标 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、体重(kg)、BMI、腰围(cm)、体脂(%) |
|
||||
| 已提交待审核 | 同上 + 提交时间 |
|
||||
| 已通过待签署 | 同上 + 提交时间、审核时间 |
|
||||
| 已签署 | 同上 + 提交时间、审核时间、签署时间、承诺书 |
|
||||
@@ -659,7 +661,7 @@
|
||||
|
||||
**单位层级切换(分段控件):** 二级单位 / 三级单位
|
||||
|
||||
**筛选条件:** 单位筛选(多选下拉,支持全选/清空)
|
||||
**筛选条件:** 单位筛选(多选下拉,支持全选/清空)、活动名称(搜索下拉,默认选中一个活动)
|
||||
|
||||
**二级单位表格列(12列):**
|
||||
- 序号、活动名称、单位、参与人数、人均减重量(kg)、人均减重率、人均综合得分、人均行动得分、减重量排名(可排序)、减重率排名(可排序)、综合分排名(可排序)、行动分排名(可排序)
|
||||
@@ -687,7 +689,7 @@
|
||||
**表格列(多级表头,38列):**
|
||||
- 第一级(rowspan=2):序号、活动名称、姓名、员工编号、性别、年龄、单位、部门、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、现体重(kg)、现BMI、现体脂(%)、现腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm)
|
||||
- 第一级(colspan=4):饮食总览
|
||||
- 第一级(colspan=4):运动总览
|
||||
- 第一级(colspan=4):运动总览.
|
||||
- 第一级(rowspan=2,可排序):减重量排名、减重率排名、综合分排名、行动分排名
|
||||
- 第一级(rowspan=2):赛况明细
|
||||
- 饮食总览子列:缺天、缺餐、日均摄入(千卡)、累计摄入(千卡)
|
||||
@@ -928,7 +930,7 @@
|
||||
|
||||
**说明:** 默认近一周的单位行动记录统计数据
|
||||
|
||||
**筛选条件:** 单位(下拉)、日期范围
|
||||
**筛选条件:** 单位(下拉)、日期范围(日期范围只影响三测完成人数,总人数只查当下最新)
|
||||
|
||||
**表格列:** 序号、单位、总人数、三测人数、三测率
|
||||
|
||||
@@ -1069,7 +1071,7 @@
|
||||
| 设备名称 | 文本输入框 | 是 | 不超过30字符 |
|
||||
| 设备厂商 | 下拉选择 | 是 | 预设厂商列表(当前为:蚁熊) |
|
||||
| 设备型号 | 文本输入框 | 是 | 预设设备型号,与厂商联动 |
|
||||
| 所属单位 | 下拉选择 | 是 | 从组织机构选择 |
|
||||
| 所属单位 | 二级联动选择 | 是 | 单位→部门二级联动,可选到部门 |
|
||||
| 布放位置 | 文本输入框 | 是 | 地图选择,可修改详细地址 |
|
||||
| 入库日期 | 日期选择 | 是 | 不得晚于当前日期 |
|
||||
|
||||
@@ -1117,7 +1119,7 @@
|
||||
|
||||
**筛选条件:** 设备编码(输入框)、所属单位(下拉)
|
||||
|
||||
**表格列:** 设备名称、设备编码、设备所属单位、布放位置、本周使用次数(可排序)、本月使用次数(可排序)、本年使用次数(可排序)、累计使用次数(可排序)、操作
|
||||
**表格列:** 设备名称、设备编码、设备所属单位、布放位置、最近一次使用时间、本周使用次数(可排序)、本月使用次数(可排序)、本年使用次数(可排序)、累计使用次数(可排序)、操作
|
||||
|
||||
**交互说明:**
|
||||
- 点击操作列"详情"跳转到对应的监测详情页
|
||||
|
||||
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 214 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 79 KiB |
@@ -12,7 +12,7 @@
|
||||
--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-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.10);
|
||||
}
|
||||
.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;}
|
||||
@@ -68,6 +68,26 @@
|
||||
.btn{height:36px;padding:0 20px;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;text-decoration:none;}
|
||||
.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);}
|
||||
/* 树形选择器(所属单位二级联动) */
|
||||
.tree-select{position:relative;width:100%;}
|
||||
.tree-select__trigger{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 32px 0 12px;font-size:var(--font-sm);background:#fff;cursor:pointer;display:flex;align-items:center;user-select:none;transition:border-color .2s;box-sizing:border-box;position:relative;}
|
||||
.tree-select__trigger:hover{border-color:var(--primary);}
|
||||
.tree-select__trigger::after{content:'';position:absolute;right:12px;top:50%;transform:translateY(-50%);border:4px solid transparent;border-top:5px solid #999;pointer-events:none;}
|
||||
.tree-select__text{color:var(--text-placeholder);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tree-select__text.has-value{color:var(--text-primary);}
|
||||
.tree-select__panel{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:500;display:none;max-height:320px;overflow-y:auto;}
|
||||
.tree-select__panel.show{display:block;}
|
||||
.tree-select__group{border-bottom:1px solid #F5F5F5;}
|
||||
.tree-select__group:last-child{border-bottom:none;}
|
||||
.tree-select__group-header{display:flex;align-items:center;gap:6px;padding:9px 16px;font-size:var(--font-sm);font-weight:500;color:var(--text-primary);cursor:pointer;transition:background .1s;user-select:none;}
|
||||
.tree-select__group-header:hover{background:#F5F7FA;}
|
||||
.tree-select__group-arrow{width:16px;height:16px;display:flex;align-items:center;justify-content:center;transition:transform .2s;flex-shrink:0;color:var(--text-placeholder);}
|
||||
.tree-select__group-arrow.expanded{transform:rotate(90deg);}
|
||||
.tree-select__group-label{flex:1;}
|
||||
.tree-select__option{padding:8px 16px 8px 38px;font-size:var(--font-sm);cursor:pointer;transition:background .1s;display:none;color:var(--text-secondary);}
|
||||
.tree-select__option.show{display:block;}
|
||||
.tree-select__option:hover{background:#F5F7FA;}
|
||||
.tree-select__option.selected{color:var(--primary);background:var(--primary-light);}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -136,7 +156,65 @@
|
||||
<div class="form-grid">
|
||||
<div class="form-item"><label>设备名称<span class="required">*</span></label><input class="form-input" placeholder="请输入设备名称"></div>
|
||||
<div class="form-item"><label>设备编码<span class="required">*</span></label><input class="form-input" placeholder="请输入设备编码"></div>
|
||||
<div class="form-item"><label>所属单位<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>采油一厂</option><option>采油二厂</option><option>采气厂</option></select></div>
|
||||
<div class="form-item">
|
||||
<label>所属单位<span class="required">*</span></label>
|
||||
<div class="tree-select" id="orgTreeSelect">
|
||||
<input type="hidden" id="deviceOrg" value="">
|
||||
<div class="tree-select__trigger" onclick="toggleOrgTree()">
|
||||
<span class="tree-select__text" id="orgTreeText">请选择所属单位</span>
|
||||
</div>
|
||||
<div class="tree-select__panel" id="orgTreePanel">
|
||||
<div class="tree-select__group" data-unit="第四采油厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">第四采油厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|健康管理部" onclick="selectOrgOption(this,'第四采油厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|安全环保科" onclick="selectOrgOption(this,'第四采油厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|工会办公室" onclick="selectOrgOption(this,'第四采油厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|生产技术部" onclick="selectOrgOption(this,'第四采油厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|财务部" onclick="selectOrgOption(this,'第四采油厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|信息中心" onclick="selectOrgOption(this,'第四采油厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|健康管理部" onclick="selectOrgOption(this,'采油一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|安全环保科" onclick="selectOrgOption(this,'采油一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|工会办公室" onclick="selectOrgOption(this,'采油一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|生产技术部" onclick="selectOrgOption(this,'采油一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|财务部" onclick="selectOrgOption(this,'采油一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|信息中心" onclick="selectOrgOption(this,'采油一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油二厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油二厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|健康管理部" onclick="selectOrgOption(this,'采油二厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|安全环保科" onclick="selectOrgOption(this,'采油二厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|工会办公室" onclick="selectOrgOption(this,'采油二厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|生产技术部" onclick="selectOrgOption(this,'采油二厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|财务部" onclick="selectOrgOption(this,'采油二厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|信息中心" onclick="selectOrgOption(this,'采油二厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采气一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采气一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|健康管理部" onclick="selectOrgOption(this,'采气一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|安全环保科" onclick="selectOrgOption(this,'采气一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|工会办公室" onclick="selectOrgOption(this,'采气一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|生产技术部" onclick="selectOrgOption(this,'采气一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|财务部" onclick="selectOrgOption(this,'采气一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|信息中心" onclick="selectOrgOption(this,'采气一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item"><label>设备厂商<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>InBody</option></select></div>
|
||||
<div class="form-item"><label>设备型号<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>HW-S100</option><option>MI-Scale2</option><option>LX-Pro</option></select></div>
|
||||
<div class="form-item"><label>入库日期<span class="required">*</span></label><input class="form-input" type="date"></div>
|
||||
@@ -160,5 +238,61 @@
|
||||
</div>
|
||||
</main>
|
||||
<script>function toggleSubgroup(h){var p=h.parentElement;var sidebar=p.closest("aside");if(sidebar)sidebar.querySelectorAll(".sidebar-subgroup.open").forEach(function(g){if(g!==p)g.classList.remove("open");});p.classList.toggle("open");}(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var sidebar=document.querySelector('aside');if(sidebar)sidebar.querySelectorAll('.sidebar-subgroup.open').forEach(function(g){g.classList.remove('open');});var s=a.closest('.sidebar-subgroup');if(s)s.classList.add('open');})();</script>
|
||||
<script>
|
||||
function toggleOrgTree(){
|
||||
var panel = document.getElementById('orgTreePanel');
|
||||
var isShow = panel.classList.contains('show');
|
||||
if(isShow){ panel.classList.remove('show'); }
|
||||
else { panel.classList.add('show'); }
|
||||
}
|
||||
|
||||
function toggleOrgGroup(headerEl, event){
|
||||
event.stopPropagation();
|
||||
var arrow = headerEl.querySelector('.tree-select__group-arrow');
|
||||
var group = headerEl.parentElement;
|
||||
var options = group.querySelectorAll('.tree-select__option');
|
||||
var isExpanded = arrow.classList.contains('expanded');
|
||||
if(isExpanded){
|
||||
arrow.classList.remove('expanded');
|
||||
options.forEach(function(opt){ opt.classList.remove('show'); });
|
||||
var unitName = group.getAttribute('data-unit');
|
||||
selectOrgOptionInner(unitName, unitName);
|
||||
} else {
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__group-arrow.expanded').forEach(function(a){ a.classList.remove('expanded'); });
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.show').forEach(function(o){ o.classList.remove('show'); });
|
||||
arrow.classList.add('expanded');
|
||||
options.forEach(function(opt){ opt.classList.add('show'); });
|
||||
}
|
||||
}
|
||||
|
||||
function selectOrgOption(el, displayText){
|
||||
var val = el.getAttribute('data-val');
|
||||
selectOrgOptionInner(val, displayText);
|
||||
}
|
||||
|
||||
function selectOrgOptionInner(val, displayText){
|
||||
var hidden = document.getElementById('deviceOrg');
|
||||
var oldVal = hidden.value;
|
||||
hidden.value = val;
|
||||
var textEl = document.getElementById('orgTreeText');
|
||||
textEl.textContent = displayText;
|
||||
textEl.className = 'tree-select__text has-value';
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.selected').forEach(function(o){ o.classList.remove('selected'); });
|
||||
var targetOpt = document.querySelector('#orgTreePanel .tree-select__option[data-val="' + val + '"]');
|
||||
if(targetOpt){ targetOpt.classList.add('selected'); }
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
if(oldVal !== val){
|
||||
var evt = document.createEvent('HTMLEvents');
|
||||
evt.initEvent('change', true, false);
|
||||
hidden.dispatchEvent(evt);
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(e){
|
||||
if(!e.target.closest('#orgTreeSelect')){
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -139,14 +139,14 @@
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>序号</th><th>设备名称</th><th>设备编码</th><th>设备所属单位</th><th>布放位置</th>
|
||||
<th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
<th>最近一次使用时间</th><th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td>1</td><td>智能体脂仪A01</td><td>FT-2024-001</td><td>采油一厂</td><td>办公楼1层大厅</td><td><a class="link" href="fat-monitor-detail.html?period=week">48</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">205</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">1,230</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">3,420</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>智能体脂仪A02</td><td>FT-2024-002</td><td>采油一厂</td><td>健身房</td><td><a class="link" href="fat-monitor-detail.html?period=week">76</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">312</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">1,890</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">4,680</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>智能体脂仪B01</td><td>FT-2024-003</td><td>采油二厂</td><td>职工活动中心</td><td><a class="link" href="fat-monitor-detail.html?period=week">38</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">162</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">920</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">1,985</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>智能体脂仪B02</td><td>FT-2024-004</td><td>采油二厂</td><td>办公楼2层</td><td><a class="link" href="fat-monitor-detail.html?period=week">27</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">128</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">756</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">1,650</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>智能体脂仪C01</td><td>FT-2024-005</td><td>采气厂</td><td>综合楼1层</td><td><a class="link" href="fat-monitor-detail.html?period=week">59</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">256</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">1,520</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">3,780</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>1</td><td>智能体脂仪A01</td><td>FT-2024-001</td><td>采油一厂</td><td>办公楼1层大厅</td><td>2026-08-26 09:15</td><td><a class="link" href="fat-monitor-detail.html?period=week">48</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">205</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">1,230</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">3,420</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>智能体脂仪A02</td><td>FT-2024-002</td><td>采油一厂</td><td>健身房</td><td>2026-08-26 08:42</td><td><a class="link" href="fat-monitor-detail.html?period=week">76</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">312</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">1,890</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">4,680</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>智能体脂仪B01</td><td>FT-2024-003</td><td>采油二厂</td><td>职工活动中心</td><td>2026-08-25 18:20</td><td><a class="link" href="fat-monitor-detail.html?period=week">38</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">162</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">920</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">1,985</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>智能体脂仪B02</td><td>FT-2024-004</td><td>采油二厂</td><td>办公楼2层</td><td>2026-08-25 16:05</td><td><a class="link" href="fat-monitor-detail.html?period=week">27</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">128</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">756</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">1,650</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>智能体脂仪C01</td><td>FT-2024-005</td><td>采气厂</td><td>综合楼1层</td><td>2026-08-24 11:30</td><td><a class="link" href="fat-monitor-detail.html?period=week">59</a></td><td><a class="link" href="fat-monitor-detail.html?period=month">256</a></td><td><a class="link" href="fat-monitor-detail.html?period=year">1,520</a></td><td><a class="link" href="fat-monitor-detail.html?period=all">3,780</a></td><td><a class="link" href="fat-monitor-detail.html">数据明细</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -149,6 +149,17 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
.search-select__option:hover{background:#F5F7FA;}
|
||||
.search-select__option.selected{color:var(--primary);background:var(--primary-light);}
|
||||
.search-select__avatar{width:28px;height:28px;border-radius:50%;background:#E6F7FF;display:flex;align-items:center;justify-content:center;color:var(--primary);font-size:var(--font-xs);flex-shrink:0;}
|
||||
/* 审核人分组(医疗点 / 管理员人员,均可添加多个) */
|
||||
.reviewer-group{flex:1;min-width:0;}
|
||||
.reviewer-group__label{font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;margin-bottom:6px;}
|
||||
.reviewer-tag-list{display:flex;flex-wrap:wrap;gap:6px;min-height:32px;margin-bottom:8px;align-items:center;}
|
||||
.reviewer-empty{font-size:var(--font-xs);color:var(--text-placeholder);}
|
||||
.reviewer-tag{display:inline-flex;align-items:center;gap:2px;background:var(--primary-light);color:var(--primary);padding:2px 8px;border-radius:var(--radius-sm);font-size:var(--font-xs);line-height:1.8;}
|
||||
.reviewer-tag .tag-x{cursor:pointer;font-size:12px;line-height:1;margin-left:2px;}
|
||||
.reviewer-tag .tag-x:hover{color:var(--danger);}
|
||||
.search-select__option.added{color:var(--text-placeholder);background:#FAFAFA;cursor:default;}
|
||||
.search-select__option.added:hover{background:#FAFAFA;}
|
||||
.search-select__option.added .search-select__avatar{background:#F0F0F0;color:#999;}
|
||||
|
||||
/* 树形选择器(组织机构) */
|
||||
.tree-select{position:relative;width:100%;}
|
||||
@@ -392,23 +403,48 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
<input type="hidden" id="leaderEmpId">
|
||||
</div>
|
||||
|
||||
<!-- 审核人 -->
|
||||
<div class="form-group">
|
||||
<label>审核人</label>
|
||||
<div class="search-select" id="reviewerSelect2">
|
||||
<!-- [交互] 按姓名搜索审核人 -->
|
||||
<input class="search-select__input" id="reviewerInput" placeholder="搜索审核人姓名" oninput="searchReviewer2()" onfocus="showReviewerPanel()" autocomplete="off">
|
||||
<div class="search-select__panel" id="reviewerPanel">
|
||||
<div class="search-select__option" onclick="selectReviewer2(this,'李健康','第四采油厂卫生所','138-9210-1111')"><span class="search-select__avatar">李</span><div><div>李健康</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">第四采油厂 / 第四采油厂卫生所</div></div></div>
|
||||
<div class="search-select__option" onclick="selectReviewer2(this,'王体检','第四采油厂卫生所','138-9210-2222')"><span class="search-select__avatar">王</span><div><div>王体检</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">第四采油厂 / 第四采油厂卫生所</div></div></div>
|
||||
<div class="search-select__option" onclick="selectReviewer2(this,'张体检','采油一厂医务室','139-8521-3333')"><span class="search-select__avatar">张</span><div><div>张体检</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油一厂 / 采油一厂医务室</div></div></div>
|
||||
<div class="search-select__option" onclick="selectReviewer2(this,'赵预防','采油一厂医务室','139-8521-4444')"><span class="search-select__avatar">赵</span><div><div>赵预防</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油一厂 / 采油一厂医务室</div></div></div>
|
||||
<div class="search-select__option" onclick="selectReviewer2(this,'陈管理','采油二厂医疗点','137-6523-5555')"><span class="search-select__avatar">陈</span><div><div>陈管理</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油二厂 / 采油二厂医疗点</div></div></div>
|
||||
<div class="search-select__option" onclick="selectReviewer2(this,'杨体检','采油二厂医疗点','137-6523-6666')"><span class="search-select__avatar">杨</span><div><div>杨体检</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油二厂 / 采油二厂医疗点</div></div></div>
|
||||
<div class="search-select__option" onclick="selectReviewer2(this,'冯审核','采气一厂卫生站','136-8901-7777')"><span class="search-select__avatar">冯</span><div><div>冯审核</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采气一厂 / 采气一厂卫生站</div></div></div>
|
||||
<!-- 审核人 -->
|
||||
<div class="form-group">
|
||||
<label>审核人 <span class="req">*</span></label>
|
||||
<div style="display:flex;gap:20px;">
|
||||
<!-- 医疗点审核人(可添加多个) -->
|
||||
<div class="reviewer-group">
|
||||
<div class="reviewer-group__label">医疗点医护人员</div>
|
||||
<div class="reviewer-tag-list" id="medicalReviewerList">
|
||||
<span class="reviewer-empty">请进行选择</span>
|
||||
</div>
|
||||
<div class="search-select" id="medicalReviewerSelect">
|
||||
<!-- [交互] 按姓名搜索医疗点审核人,选中后添加到上方标签 -->
|
||||
<input class="search-select__input" id="medicalReviewerInput" placeholder="搜索医疗点审核人姓名" oninput="searchReviewer('medical')" onfocus="showReviewerPanel('medical')" autocomplete="off">
|
||||
<div class="search-select__panel" id="medicalReviewerPanel">
|
||||
<div class="search-select__option" data-name="李健康" data-site="第四采油厂卫生所" data-phone="138-9210-1111" onclick="addReviewer(this)"><span class="search-select__avatar">李</span><div><div>李健康</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">第四采油厂 / 第四采油厂卫生所</div></div></div>
|
||||
<div class="search-select__option" data-name="王体检" data-site="第四采油厂卫生所" data-phone="138-9210-2222" onclick="addReviewer(this)"><span class="search-select__avatar">王</span><div><div>王体检</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">第四采油厂 / 第四采油厂卫生所</div></div></div>
|
||||
<div class="search-select__option" data-name="张体检" data-site="采油一厂医务室" data-phone="139-8521-3333" onclick="addReviewer(this)"><span class="search-select__avatar">张</span><div><div>张体检</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油一厂 / 采油一厂医务室</div></div></div>
|
||||
<div class="search-select__option" data-name="赵预防" data-site="采油一厂医务室" data-phone="139-8521-4444" onclick="addReviewer(this)"><span class="search-select__avatar">赵</span><div><div>赵预防</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油一厂 / 采油一厂医务室</div></div></div>
|
||||
<div class="search-select__option" data-name="陈管理" data-site="采油二厂医疗点" data-phone="137-6523-5555" onclick="addReviewer(this)"><span class="search-select__avatar">陈</span><div><div>陈管理</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油二厂 / 采油二厂医疗点</div></div></div>
|
||||
<div class="search-select__option" data-name="杨体检" data-site="采油二厂医疗点" data-phone="137-6523-6666" onclick="addReviewer(this)"><span class="search-select__avatar">杨</span><div><div>杨体检</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油二厂 / 采油二厂医疗点</div></div></div>
|
||||
<div class="search-select__option" data-name="冯审核" data-site="采气一厂卫生站" data-phone="136-8901-7777" onclick="addReviewer(this)"><span class="search-select__avatar">冯</span><div><div>冯审核</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采气一厂 / 采气一厂卫生站</div></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 管理员人员审核人(可添加多个) -->
|
||||
<div class="reviewer-group">
|
||||
<div class="reviewer-group__label">管理员</div>
|
||||
<div class="reviewer-tag-list" id="adminReviewerList">
|
||||
<span class="reviewer-empty">请进行选择</span>
|
||||
</div>
|
||||
<div class="search-select" id="adminReviewerSelect">
|
||||
<!-- [交互] 按姓名搜索管理员审核人,选中后添加到上方标签 -->
|
||||
<input class="search-select__input" id="adminReviewerInput" placeholder="搜索管理员审核人姓名" oninput="searchReviewer('admin')" onfocus="showReviewerPanel('admin')" autocomplete="off">
|
||||
<div class="search-select__panel" id="adminReviewerPanel">
|
||||
<div class="search-select__option" data-name="赵管理员" data-site="健康管理部" data-phone="138-9210-8888" onclick="addReviewer(this)"><span class="search-select__avatar">赵</span><div><div>赵管理员</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">第四采油厂 / 健康管理部</div></div></div>
|
||||
<div class="search-select__option" data-name="钱干事" data-site="工会办公室" data-phone="139-8521-9999" onclick="addReviewer(this)"><span class="search-select__avatar">钱</span><div><div>钱干事</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油一厂 / 工会办公室</div></div></div>
|
||||
<div class="search-select__option" data-name="孙主任" data-site="安全环保科" data-phone="137-6523-6666" onclick="addReviewer(this)"><span class="search-select__avatar">孙</span><div><div>孙主任</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采油二厂 / 安全环保科</div></div></div>
|
||||
<div class="search-select__option" data-name="周专员" data-site="生产技术部" data-phone="136-8901-5555" onclick="addReviewer(this)"><span class="search-select__avatar">周</span><div><div>周专员</div><div style="font-size:var(--font-xs);color:var(--text-placeholder);">采气一厂 / 生产技术部</div></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="reviewerInfo">
|
||||
</div>
|
||||
|
||||
<!-- 通知文件 -->
|
||||
@@ -1010,33 +1046,77 @@ function selectLeader(el, name, empId){
|
||||
el.classList.add('selected');
|
||||
}
|
||||
|
||||
/* ===== 审核人搜索选择 ===== */
|
||||
var selectedReviewer = null;
|
||||
/* ===== 审核人选择(医疗点 / 管理员人员,均可添加多个) ===== */
|
||||
var selectedMedicalReviewers = [];
|
||||
var selectedAdminReviewers = [];
|
||||
|
||||
function searchReviewer2(){
|
||||
var keyword = document.getElementById('reviewerInput').value.trim().toLowerCase();
|
||||
var options = document.querySelectorAll('#reviewerPanel .search-select__option');
|
||||
function searchReviewer(type){
|
||||
var input = document.getElementById(type+'ReviewerInput');
|
||||
var keyword = input.value.trim().toLowerCase();
|
||||
var options = document.querySelectorAll('#'+type+'ReviewerPanel .search-select__option');
|
||||
options.forEach(function(opt){
|
||||
// 按姓名搜索
|
||||
var nameEl = opt.querySelector('div > div:first-child');
|
||||
var nameText = nameEl ? nameEl.textContent.toLowerCase() : '';
|
||||
opt.style.display = nameText.indexOf(keyword) > -1 ? '' : 'none';
|
||||
var name = opt.getAttribute('data-name') || '';
|
||||
opt.style.display = name.toLowerCase().indexOf(keyword) > -1 ? '' : 'none';
|
||||
});
|
||||
showReviewerPanel();
|
||||
showReviewerPanel(type);
|
||||
}
|
||||
|
||||
function showReviewerPanel(){
|
||||
function showReviewerPanel(type){
|
||||
closeAllPanels();
|
||||
document.getElementById('reviewerPanel').classList.add('show');
|
||||
updateReviewerOptionStates(type);
|
||||
document.getElementById(type+'ReviewerPanel').classList.add('show');
|
||||
}
|
||||
|
||||
function selectReviewer2(el, name, site, phone){
|
||||
selectedReviewer = {name:name, site:site, phone:phone};
|
||||
document.getElementById('reviewerInput').value = name;
|
||||
document.getElementById('reviewerInfo').value = site + ' | ' + phone;
|
||||
document.getElementById('reviewerPanel').classList.remove('show');
|
||||
document.querySelectorAll('#reviewerPanel .search-select__option').forEach(function(o){o.classList.remove('selected');});
|
||||
el.classList.add('selected');
|
||||
function addReviewer(el){
|
||||
var panel = el.closest('.search-select__panel');
|
||||
var type = panel.id === 'medicalReviewerPanel' ? 'medical' : 'admin';
|
||||
var name = el.getAttribute('data-name');
|
||||
var site = el.getAttribute('data-site');
|
||||
var phone = el.getAttribute('data-phone');
|
||||
var arr = type==='medical' ? selectedMedicalReviewers : selectedAdminReviewers;
|
||||
if(!arr.some(function(r){return r.name===name;})){
|
||||
arr.push({name:name, site:site, phone:phone});
|
||||
}
|
||||
renderReviewerTags(type);
|
||||
var input = document.getElementById(type+'ReviewerInput');
|
||||
if(input) input.value = '';
|
||||
document.getElementById(type+'ReviewerPanel').classList.remove('show');
|
||||
}
|
||||
|
||||
function removeReviewer(btn){
|
||||
var type = btn.getAttribute('data-type');
|
||||
var idx = parseInt(btn.getAttribute('data-idx'), 10);
|
||||
if(type==='medical'){ selectedMedicalReviewers.splice(idx,1); }
|
||||
else { selectedAdminReviewers.splice(idx,1); }
|
||||
renderReviewerTags(type);
|
||||
}
|
||||
|
||||
function renderReviewerTags(type){
|
||||
var arr = type==='medical' ? selectedMedicalReviewers : selectedAdminReviewers;
|
||||
var listId = type==='medical' ? 'medicalReviewerList' : 'adminReviewerList';
|
||||
var list = document.getElementById(listId);
|
||||
if(arr.length===0){
|
||||
list.innerHTML = '<span class="reviewer-empty">请进行选择</span>';
|
||||
return;
|
||||
}
|
||||
var html = '';
|
||||
arr.forEach(function(r, i){
|
||||
html += '<span class="reviewer-tag">'+esc(r.name)+'<span class="tag-x" data-type="'+type+'" data-idx="'+i+'" onclick="removeReviewer(this)">×</span></span>';
|
||||
});
|
||||
list.innerHTML = html;
|
||||
}
|
||||
|
||||
function updateReviewerOptionStates(type){
|
||||
var arr = type==='medical' ? selectedMedicalReviewers : selectedAdminReviewers;
|
||||
var options = document.querySelectorAll('#'+type+'ReviewerPanel .search-select__option');
|
||||
options.forEach(function(opt){
|
||||
var name = opt.getAttribute('data-name');
|
||||
if(arr.some(function(r){return r.name===name;})){
|
||||
opt.classList.add('added');
|
||||
} else {
|
||||
opt.classList.remove('added');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* ===== 文件上传 ===== */
|
||||
@@ -1086,7 +1166,8 @@ function removeFile(idx){
|
||||
/* ===== 关闭所有面板 ===== */
|
||||
function closeAllPanels(){
|
||||
document.getElementById('leaderPanel').classList.remove('show');
|
||||
document.getElementById('reviewerPanel').classList.remove('show');
|
||||
document.getElementById('medicalReviewerPanel').classList.remove('show');
|
||||
document.getElementById('adminReviewerPanel').classList.remove('show');
|
||||
document.getElementById('deptPanel').classList.remove('show');
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
}
|
||||
@@ -1107,6 +1188,7 @@ function savePlan(){
|
||||
var dept = document.getElementById('planDept').value.trim();
|
||||
if(!dept){showToast('请选择组织部门');return;}
|
||||
if(!selectedLeader){showToast('请选择负责人');return;}
|
||||
if(selectedMedicalReviewers.length===0 && selectedAdminReviewers.length===0){showToast('请选择审核人');return;}
|
||||
if(uploadedFiles.length === 0){showToast('请上传通知文件');return;}
|
||||
|
||||
showToast('保存成功!');
|
||||
@@ -1123,7 +1205,8 @@ function showToast(msg){
|
||||
/* 点击外部关闭面板 */
|
||||
document.addEventListener('click',function(e){
|
||||
if(!e.target.closest('#leaderSelect')) document.getElementById('leaderPanel').classList.remove('show');
|
||||
if(!e.target.closest('#reviewerSelect2')) document.getElementById('reviewerPanel').classList.remove('show');
|
||||
if(!e.target.closest('#medicalReviewerSelect')) document.getElementById('medicalReviewerPanel').classList.remove('show');
|
||||
if(!e.target.closest('#adminReviewerSelect')) document.getElementById('adminReviewerPanel').classList.remove('show');
|
||||
if(!e.target.closest('#deptSelect')) document.getElementById('deptPanel').classList.remove('show');
|
||||
if(!e.target.closest('#orgTreeSelect')) document.getElementById('orgTreePanel').classList.remove('show');
|
||||
});
|
||||
@@ -1177,16 +1260,17 @@ document.getElementById('empModal').addEventListener('click',function(e){
|
||||
selectedLeader = {name:data.leader, empId:leaderOpt.getAttribute('onclick').match(/'(CQ\d+)'/)[1]};
|
||||
}
|
||||
|
||||
// 回显审核人
|
||||
document.getElementById('reviewerInput').value = data.reviewer;
|
||||
var reviewerOpts = document.querySelectorAll('#reviewerPanel .search-select__option');
|
||||
reviewerOpts.forEach(function(opt){
|
||||
if(opt.textContent.indexOf(data.reviewer) > -1){
|
||||
opt.classList.add('selected');
|
||||
var m = opt.getAttribute('onclick').match(/selectReviewer2\(this,'([^']+)','([^']+)','([^']+)'\)/);
|
||||
if(m) selectedReviewer = {name:m[1], site:m[2], phone:m[3]};
|
||||
}
|
||||
});
|
||||
// 回显审核人(医疗点)
|
||||
var medOpt = document.querySelector('#medicalReviewerPanel .search-select__option[data-name="'+data.reviewer+'"]');
|
||||
if(medOpt){
|
||||
selectedMedicalReviewers.push({
|
||||
name: medOpt.getAttribute('data-name'),
|
||||
site: medOpt.getAttribute('data-site'),
|
||||
phone: medOpt.getAttribute('data-phone')
|
||||
});
|
||||
}
|
||||
renderReviewerTags('medical');
|
||||
renderReviewerTags('admin');
|
||||
|
||||
// 激活部门/员工选择器
|
||||
updateOrgDependent();
|
||||
|
||||
@@ -163,7 +163,7 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
.emp-card__header{font-size:var(--font-sm);font-weight:600;color:var(--primary);margin-bottom:12px;padding-bottom:8px;border-bottom:1px dashed var(--border);}
|
||||
.emp-card__grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 24px;}
|
||||
.emp-card__item{display:flex;font-size:var(--font-sm);}
|
||||
.emp-card__item .ec-label{color:var(--text-secondary);width:70px;flex-shrink:0;}
|
||||
.emp-card__item .ec-label{color:var(--text-secondary);width:92px;flex-shrink:0;}
|
||||
.emp-card__item .ec-value{color:var(--text-primary);}
|
||||
</style>
|
||||
</head>
|
||||
@@ -232,15 +232,6 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<option>未开始</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>年份选择</label>
|
||||
<select class="filter-select">
|
||||
<option selected>2026年</option>
|
||||
<option>2025年</option>
|
||||
<option>2024年</option>
|
||||
<option>2023年</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="btn btn-primary">查询</button>
|
||||
<button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
@@ -639,9 +630,9 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<th>序号</th>
|
||||
<th>单位</th>
|
||||
<th>姓名</th>
|
||||
<th>所属医疗点</th>
|
||||
<th>类型</th>
|
||||
<th>所属医疗点/部门</th>
|
||||
<th>联系电话</th>
|
||||
<th>职称</th>
|
||||
<th>岗位</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
@@ -718,8 +709,9 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<div class="emp-card__header">员工基本信息</div>
|
||||
<div class="emp-card__grid">
|
||||
<div class="emp-card__item"><span class="ec-label">单位</span><span class="ec-value" id="arUnit">-</span></div>
|
||||
<div class="emp-card__item"><span class="ec-label">所属医疗点</span><span class="ec-value" id="arSite">-</span></div>
|
||||
<div class="emp-card__item"><span class="ec-label">姓名</span><span class="ec-value" id="arName">-</span></div>
|
||||
<div class="emp-card__item"><span class="ec-label">类型</span><span class="ec-value" id="arType">-</span></div>
|
||||
<div class="emp-card__item"><span class="ec-label">所属医疗点/部门</span><span class="ec-value" id="arSite">-</span></div>
|
||||
<div class="emp-card__item"><span class="ec-label">联系电话</span><span class="ec-value" id="arPhone">-</span></div>
|
||||
<div class="emp-card__item"><span class="ec-label">岗位</span><span class="ec-value" id="arPost">-</span></div>
|
||||
<div class="emp-card__item"><span class="ec-label">职称</span><span class="ec-value" id="arTitle">-</span></div>
|
||||
@@ -1097,13 +1089,17 @@ renderPersonTable(allPersons);
|
||||
|
||||
/* 审核人员模拟数据 */
|
||||
var allReviewers = [
|
||||
{org:'第四采油厂',name:'李健康',site:'第四采油厂卫生所',phone:'138-9210-1111',title:'主任医师',post:'医生'},
|
||||
{org:'第四采油厂',name:'王体检',site:'第四采油厂卫生所',phone:'138-9210-2222',title:'健康管理师',post:'护士'},
|
||||
{org:'采油一厂',name:'张体检',site:'采油一厂医务室',phone:'139-8521-3333',title:'副主任医师',post:'医生'},
|
||||
{org:'采油一厂',name:'赵预防',site:'采油一厂医务室',phone:'139-8521-4444',title:'健康管理师',post:'护士'},
|
||||
{org:'采油二厂',name:'陈管理',site:'采油二厂医疗点',phone:'137-6523-5555',title:'主治医师',post:'医生'},
|
||||
{org:'采油二厂',name:'杨体检',site:'采油二厂医疗点',phone:'137-6523-6666',title:'健康管理师',post:'护士'},
|
||||
{org:'采气一厂',name:'冯审核',site:'采气一厂卫生站',phone:'136-8901-7777',title:'执业医师',post:'医生'}
|
||||
{org:'第四采油厂',name:'李健康',site:'第四采油厂卫生所',phone:'138-9210-1111',title:'主任医师',post:'医生',type:'医疗点医护人员'},
|
||||
{org:'第四采油厂',name:'王体检',site:'第四采油厂卫生所',phone:'138-9210-2222',title:'健康管理师',post:'护士',type:'医疗点医护人员'},
|
||||
{org:'采油一厂',name:'张体检',site:'采油一厂医务室',phone:'139-8521-3333',title:'副主任医师',post:'医生',type:'医疗点医护人员'},
|
||||
{org:'采油一厂',name:'赵预防',site:'采油一厂医务室',phone:'139-8521-4444',title:'健康管理师',post:'护士',type:'医疗点医护人员'},
|
||||
{org:'采油二厂',name:'陈管理',site:'采油二厂医疗点',phone:'137-6523-5555',title:'主治医师',post:'医生',type:'医疗点医护人员'},
|
||||
{org:'采油二厂',name:'杨体检',site:'采油二厂医疗点',phone:'137-6523-6666',title:'健康管理师',post:'护士',type:'医疗点医护人员'},
|
||||
{org:'采气一厂',name:'冯审核',site:'采气一厂卫生站',phone:'136-8901-7777',title:'执业医师',post:'医生',type:'医疗点医护人员'},
|
||||
{org:'第四采油厂',name:'赵管理员',site:'健康管理部',phone:'138-9210-8888',title:'—',post:'管理员',type:'管理员'},
|
||||
{org:'采油一厂',name:'钱干事',site:'工会办公室',phone:'139-8521-9999',title:'—',post:'管理员',type:'管理员'},
|
||||
{org:'采油二厂',name:'孙主任',site:'安全环保科',phone:'137-6523-8888',title:'—',post:'管理员',type:'管理员'},
|
||||
{org:'采气一厂',name:'周专员',site:'生产技术部',phone:'136-8901-5555',title:'—',post:'管理员',type:'管理员'}
|
||||
];
|
||||
|
||||
/* 打开审核人员弹窗 */
|
||||
@@ -1136,9 +1132,9 @@ function renderReviewerTable(data) {
|
||||
html += '<td>'+(i+1)+'</td>';
|
||||
html += '<td>' + esc(r.org) + '</td>';
|
||||
html += '<td>' + esc(r.name) + '</td>';
|
||||
html += '<td><span class="tag ' + (r.type==='管理员' ? 'tag-orange' : 'tag-blue') + '">' + esc(r.type) + '</span></td>';
|
||||
html += '<td>' + esc(r.site) + '</td>';
|
||||
html += '<td>' + r.phone + '</td>';
|
||||
html += '<td>' + esc(r.title) + '</td>';
|
||||
html += '<td>' + esc(r.post) + '</td>';
|
||||
html += '<td><a class="link" style="color:var(--danger);" onclick="removeReviewer(' + i + ')">移除</a></td>';
|
||||
html += '</tr>';
|
||||
@@ -1290,12 +1286,14 @@ document.addEventListener('click', function(e) {
|
||||
/* ===== 新增审核人员弹窗 ===== */
|
||||
|
||||
var candidateReviewers = [
|
||||
{org:'第四采油厂',name:'孙健',site:'第四采油厂卫生所',phone:'138-9210-8801',post:'医生',title:'主治医师'},
|
||||
{org:'第四采油厂',name:'周芳',site:'第四采油厂卫生所',phone:'138-9210-8802',post:'护士',title:'主管护师'},
|
||||
{org:'采油一厂',name:'吴刚',site:'采油一厂医务室',phone:'139-8521-8803',post:'医生',title:'执业医师'},
|
||||
{org:'采油一厂',name:'郑洁',site:'采油一厂医务室',phone:'139-8521-8804',post:'护士',title:'护师'},
|
||||
{org:'采油二厂',name:'钱辉',site:'采油二厂医疗点',phone:'137-6523-8805',post:'医生',title:'副主任医师'},
|
||||
{org:'采气一厂',name:'沈敏',site:'采气一厂卫生站',phone:'136-8901-8806',post:'护士',title:'健康管理师'}
|
||||
{org:'第四采油厂',name:'孙健',site:'第四采油厂卫生所',phone:'138-9210-8801',post:'医生',title:'主治医师',type:'医疗点医护人员'},
|
||||
{org:'第四采油厂',name:'周芳',site:'第四采油厂卫生所',phone:'138-9210-8802',post:'护士',title:'主管护师',type:'医疗点医护人员'},
|
||||
{org:'采油一厂',name:'吴刚',site:'采油一厂医务室',phone:'139-8521-8803',post:'医生',title:'执业医师',type:'医疗点医护人员'},
|
||||
{org:'采油一厂',name:'郑洁',site:'采油一厂医务室',phone:'139-8521-8804',post:'护士',title:'护师',type:'医疗点医护人员'},
|
||||
{org:'采油二厂',name:'钱辉',site:'采油二厂医疗点',phone:'137-6523-8805',post:'医生',title:'副主任医师',type:'医疗点医护人员'},
|
||||
{org:'采气一厂',name:'沈敏',site:'采气一厂卫生站',phone:'136-8901-8806',post:'护士',title:'健康管理师',type:'医疗点医护人员'},
|
||||
{org:'第四采油厂',name:'吴主任',site:'财务部',phone:'138-9210-8807',post:'管理员',title:'—',type:'管理员'},
|
||||
{org:'采油二厂',name:'郑干事',site:'信息中心',phone:'137-6523-8808',post:'管理员',title:'—',type:'管理员'}
|
||||
];
|
||||
|
||||
var selectedReviewer = null;
|
||||
@@ -1335,7 +1333,7 @@ function renderReviewerDropdown(data) {
|
||||
data.forEach(function(p) {
|
||||
html += '<div class="search-dropdown__item" onclick="selectReviewerCandidate(\'' + p.phone + '\')">';
|
||||
html += '<span class="emp-info">' + esc(p.name) + '</span>';
|
||||
html += '<span class="emp-meta">' + esc(p.org) + ' / ' + esc(p.site) + '</span>';
|
||||
html += '<span class="emp-meta">' + esc(p.type) + ' · ' + esc(p.org) + ' / ' + esc(p.site) + '</span>';
|
||||
html += '</div>';
|
||||
});
|
||||
dropdown.innerHTML = html;
|
||||
@@ -1352,6 +1350,7 @@ function selectReviewerCandidate(phone) {
|
||||
document.getElementById('arUnit').textContent = selectedReviewer.org;
|
||||
document.getElementById('arSite').textContent = selectedReviewer.site;
|
||||
document.getElementById('arName').textContent = selectedReviewer.name;
|
||||
document.getElementById('arType').textContent = selectedReviewer.type;
|
||||
document.getElementById('arPhone').textContent = selectedReviewer.phone;
|
||||
document.getElementById('arPost').textContent = selectedReviewer.post;
|
||||
document.getElementById('arTitle').textContent = selectedReviewer.title;
|
||||
@@ -1368,7 +1367,8 @@ function confirmAddReviewer() {
|
||||
site: selectedReviewer.site,
|
||||
phone: selectedReviewer.phone,
|
||||
title: selectedReviewer.title,
|
||||
post: selectedReviewer.post
|
||||
post: selectedReviewer.post,
|
||||
type: selectedReviewer.type
|
||||
});
|
||||
candidateReviewers = candidateReviewers.filter(function(p) { return p.phone !== selectedReviewer.phone; });
|
||||
closeAddReviewerDialog();
|
||||
|
||||
@@ -236,7 +236,7 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
全部<span class="tab-item__badge" id="tabBadge0">0</span>
|
||||
</div>
|
||||
<div class="tab-item" data-tab="1" onclick="switchTab(1)">
|
||||
未提交任务书<span class="tab-item__badge" id="tabBadge1">0</span>
|
||||
未提交目标<span class="tab-item__badge" id="tabBadge1">0</span>
|
||||
</div>
|
||||
<div class="tab-item" data-tab="2" onclick="switchTab(2)">
|
||||
已提交待审核<span class="tab-item__badge" id="tabBadge2">0</span>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
--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-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.10);
|
||||
}
|
||||
.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;}
|
||||
@@ -68,6 +68,26 @@
|
||||
.btn{height:36px;padding:0 20px;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;text-decoration:none;}
|
||||
.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);}
|
||||
/* 树形选择器(所属单位二级联动) */
|
||||
.tree-select{position:relative;width:100%;}
|
||||
.tree-select__trigger{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 32px 0 12px;font-size:var(--font-sm);background:#fff;cursor:pointer;display:flex;align-items:center;user-select:none;transition:border-color .2s;box-sizing:border-box;position:relative;}
|
||||
.tree-select__trigger:hover{border-color:var(--primary);}
|
||||
.tree-select__trigger::after{content:'';position:absolute;right:12px;top:50%;transform:translateY(-50%);border:4px solid transparent;border-top:5px solid #999;pointer-events:none;}
|
||||
.tree-select__text{color:var(--text-placeholder);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tree-select__text.has-value{color:var(--text-primary);}
|
||||
.tree-select__panel{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:500;display:none;max-height:320px;overflow-y:auto;}
|
||||
.tree-select__panel.show{display:block;}
|
||||
.tree-select__group{border-bottom:1px solid #F5F5F5;}
|
||||
.tree-select__group:last-child{border-bottom:none;}
|
||||
.tree-select__group-header{display:flex;align-items:center;gap:6px;padding:9px 16px;font-size:var(--font-sm);font-weight:500;color:var(--text-primary);cursor:pointer;transition:background .1s;user-select:none;}
|
||||
.tree-select__group-header:hover{background:#F5F7FA;}
|
||||
.tree-select__group-arrow{width:16px;height:16px;display:flex;align-items:center;justify-content:center;transition:transform .2s;flex-shrink:0;color:var(--text-placeholder);}
|
||||
.tree-select__group-arrow.expanded{transform:rotate(90deg);}
|
||||
.tree-select__group-label{flex:1;}
|
||||
.tree-select__option{padding:8px 16px 8px 38px;font-size:var(--font-sm);cursor:pointer;transition:background .1s;display:none;color:var(--text-secondary);}
|
||||
.tree-select__option.show{display:block;}
|
||||
.tree-select__option:hover{background:#F5F7FA;}
|
||||
.tree-select__option.selected{color:var(--primary);background:var(--primary-light);}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -136,7 +156,65 @@
|
||||
<div class="form-grid">
|
||||
<div class="form-item"><label>设备名称<span class="required">*</span></label><input class="form-input" placeholder="请输入设备名称"></div>
|
||||
<div class="form-item"><label>设备编码<span class="required">*</span></label><input class="form-input" placeholder="请输入设备编码"></div>
|
||||
<div class="form-item"><label>所属单位<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>采油一厂</option><option>采油二厂</option><option>采气厂</option></select></div>
|
||||
<div class="form-item">
|
||||
<label>所属单位<span class="required">*</span></label>
|
||||
<div class="tree-select" id="orgTreeSelect">
|
||||
<input type="hidden" id="deviceOrg" value="">
|
||||
<div class="tree-select__trigger" onclick="toggleOrgTree()">
|
||||
<span class="tree-select__text" id="orgTreeText">请选择所属单位</span>
|
||||
</div>
|
||||
<div class="tree-select__panel" id="orgTreePanel">
|
||||
<div class="tree-select__group" data-unit="第四采油厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">第四采油厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|健康管理部" onclick="selectOrgOption(this,'第四采油厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|安全环保科" onclick="selectOrgOption(this,'第四采油厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|工会办公室" onclick="selectOrgOption(this,'第四采油厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|生产技术部" onclick="selectOrgOption(this,'第四采油厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|财务部" onclick="selectOrgOption(this,'第四采油厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|信息中心" onclick="selectOrgOption(this,'第四采油厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|健康管理部" onclick="selectOrgOption(this,'采油一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|安全环保科" onclick="selectOrgOption(this,'采油一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|工会办公室" onclick="selectOrgOption(this,'采油一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|生产技术部" onclick="selectOrgOption(this,'采油一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|财务部" onclick="selectOrgOption(this,'采油一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|信息中心" onclick="selectOrgOption(this,'采油一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油二厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油二厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|健康管理部" onclick="selectOrgOption(this,'采油二厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|安全环保科" onclick="selectOrgOption(this,'采油二厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|工会办公室" onclick="selectOrgOption(this,'采油二厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|生产技术部" onclick="selectOrgOption(this,'采油二厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|财务部" onclick="selectOrgOption(this,'采油二厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|信息中心" onclick="selectOrgOption(this,'采油二厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采气一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采气一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|健康管理部" onclick="selectOrgOption(this,'采气一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|安全环保科" onclick="selectOrgOption(this,'采气一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|工会办公室" onclick="selectOrgOption(this,'采气一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|生产技术部" onclick="selectOrgOption(this,'采气一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|财务部" onclick="selectOrgOption(this,'采气一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|信息中心" onclick="selectOrgOption(this,'采气一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item"><label>设备厂商<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>数字味道</option><option>图讯</option><option>上禾电子</option></select></div>
|
||||
<div class="form-item"><label>设备型号<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>HW-S100</option><option>MI-Scale2</option><option>LX-Pro</option></select></div>
|
||||
<div class="form-item"><label>入库日期<span class="required">*</span></label><input class="form-input" type="date"></div>
|
||||
@@ -160,5 +238,61 @@
|
||||
</div>
|
||||
</main>
|
||||
<script>function toggleSubgroup(h){var p=h.parentElement;var sidebar=p.closest("aside");if(sidebar)sidebar.querySelectorAll(".sidebar-subgroup.open").forEach(function(g){if(g!==p)g.classList.remove("open");});p.classList.toggle("open");}(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var sidebar=document.querySelector('aside');if(sidebar)sidebar.querySelectorAll('.sidebar-subgroup.open').forEach(function(g){g.classList.remove('open');});var s=a.closest('.sidebar-subgroup');if(s)s.classList.add('open');})();</script>
|
||||
<script>
|
||||
function toggleOrgTree(){
|
||||
var panel = document.getElementById('orgTreePanel');
|
||||
var isShow = panel.classList.contains('show');
|
||||
if(isShow){ panel.classList.remove('show'); }
|
||||
else { panel.classList.add('show'); }
|
||||
}
|
||||
|
||||
function toggleOrgGroup(headerEl, event){
|
||||
event.stopPropagation();
|
||||
var arrow = headerEl.querySelector('.tree-select__group-arrow');
|
||||
var group = headerEl.parentElement;
|
||||
var options = group.querySelectorAll('.tree-select__option');
|
||||
var isExpanded = arrow.classList.contains('expanded');
|
||||
if(isExpanded){
|
||||
arrow.classList.remove('expanded');
|
||||
options.forEach(function(opt){ opt.classList.remove('show'); });
|
||||
var unitName = group.getAttribute('data-unit');
|
||||
selectOrgOptionInner(unitName, unitName);
|
||||
} else {
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__group-arrow.expanded').forEach(function(a){ a.classList.remove('expanded'); });
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.show').forEach(function(o){ o.classList.remove('show'); });
|
||||
arrow.classList.add('expanded');
|
||||
options.forEach(function(opt){ opt.classList.add('show'); });
|
||||
}
|
||||
}
|
||||
|
||||
function selectOrgOption(el, displayText){
|
||||
var val = el.getAttribute('data-val');
|
||||
selectOrgOptionInner(val, displayText);
|
||||
}
|
||||
|
||||
function selectOrgOptionInner(val, displayText){
|
||||
var hidden = document.getElementById('deviceOrg');
|
||||
var oldVal = hidden.value;
|
||||
hidden.value = val;
|
||||
var textEl = document.getElementById('orgTreeText');
|
||||
textEl.textContent = displayText;
|
||||
textEl.className = 'tree-select__text has-value';
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.selected').forEach(function(o){ o.classList.remove('selected'); });
|
||||
var targetOpt = document.querySelector('#orgTreePanel .tree-select__option[data-val="' + val + '"]');
|
||||
if(targetOpt){ targetOpt.classList.add('selected'); }
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
if(oldVal !== val){
|
||||
var evt = document.createEvent('HTMLEvents');
|
||||
evt.initEvent('change', true, false);
|
||||
hidden.dispatchEvent(evt);
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(e){
|
||||
if(!e.target.closest('#orgTreeSelect')){
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -139,14 +139,14 @@
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>序号</th><th>设备名称</th><th>设备编码</th><th>设备所属单位</th><th>布放位置</th>
|
||||
<th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
<th>最近一次使用时间</th><th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td>1</td><td>智能体重秤A01</td><td>SC-2024-001</td><td>采油一厂</td><td>办公楼1层大厅</td><td><a class="link" href="scale-monitor-detail.html?period=week">56</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">238</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">1,420</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">3,856</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>智能体重秤A02</td><td>SC-2024-002</td><td>采油一厂</td><td>健身房</td><td><a class="link" href="scale-monitor-detail.html?period=week">89</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">356</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">2,105</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">5,230</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>智能体重秤B01</td><td>SC-2024-003</td><td>采油二厂</td><td>职工活动中心</td><td><a class="link" href="scale-monitor-detail.html?period=week">42</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">178</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">980</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">2,145</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>智能体重秤B02</td><td>SC-2024-004</td><td>采油二厂</td><td>办公楼2层</td><td><a class="link" href="scale-monitor-detail.html?period=week">31</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">145</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">876</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">1,920</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>智能体重秤C01</td><td>SC-2024-005</td><td>采气厂</td><td>综合楼1层</td><td><a class="link" href="scale-monitor-detail.html?period=week">67</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">289</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">1,680</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">4,102</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>1</td><td>智能体重秤A01</td><td>SC-2024-001</td><td>采油一厂</td><td>办公楼1层大厅</td><td>2026-08-26 09:15</td><td><a class="link" href="scale-monitor-detail.html?period=week">56</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">238</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">1,420</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">3,856</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>智能体重秤A02</td><td>SC-2024-002</td><td>采油一厂</td><td>健身房</td><td>2026-08-26 08:42</td><td><a class="link" href="scale-monitor-detail.html?period=week">89</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">356</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">2,105</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">5,230</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>智能体重秤B01</td><td>SC-2024-003</td><td>采油二厂</td><td>职工活动中心</td><td>2026-08-25 18:20</td><td><a class="link" href="scale-monitor-detail.html?period=week">42</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">178</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">980</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">2,145</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>智能体重秤B02</td><td>SC-2024-004</td><td>采油二厂</td><td>办公楼2层</td><td>2026-08-25 16:05</td><td><a class="link" href="scale-monitor-detail.html?period=week">31</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">145</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">876</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">1,920</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>智能体重秤C01</td><td>SC-2024-005</td><td>采气厂</td><td>综合楼1层</td><td>2026-08-24 11:30</td><td><a class="link" href="scale-monitor-detail.html?period=week">67</a></td><td><a class="link" href="scale-monitor-detail.html?period=month">289</a></td><td><a class="link" href="scale-monitor-detail.html?period=year">1,680</a></td><td><a class="link" href="scale-monitor-detail.html?period=all">4,102</a></td><td><a class="link" href="scale-monitor-detail.html">数据明细</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
--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-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.10);
|
||||
}
|
||||
.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;}
|
||||
@@ -68,6 +68,26 @@
|
||||
.btn{height:36px;padding:0 20px;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;text-decoration:none;}
|
||||
.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);}
|
||||
/* 树形选择器(所属单位二级联动) */
|
||||
.tree-select{position:relative;width:100%;}
|
||||
.tree-select__trigger{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 32px 0 12px;font-size:var(--font-sm);background:#fff;cursor:pointer;display:flex;align-items:center;user-select:none;transition:border-color .2s;box-sizing:border-box;position:relative;}
|
||||
.tree-select__trigger:hover{border-color:var(--primary);}
|
||||
.tree-select__trigger::after{content:'';position:absolute;right:12px;top:50%;transform:translateY(-50%);border:4px solid transparent;border-top:5px solid #999;pointer-events:none;}
|
||||
.tree-select__text{color:var(--text-placeholder);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.tree-select__text.has-value{color:var(--text-primary);}
|
||||
.tree-select__panel{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:500;display:none;max-height:320px;overflow-y:auto;}
|
||||
.tree-select__panel.show{display:block;}
|
||||
.tree-select__group{border-bottom:1px solid #F5F5F5;}
|
||||
.tree-select__group:last-child{border-bottom:none;}
|
||||
.tree-select__group-header{display:flex;align-items:center;gap:6px;padding:9px 16px;font-size:var(--font-sm);font-weight:500;color:var(--text-primary);cursor:pointer;transition:background .1s;user-select:none;}
|
||||
.tree-select__group-header:hover{background:#F5F7FA;}
|
||||
.tree-select__group-arrow{width:16px;height:16px;display:flex;align-items:center;justify-content:center;transition:transform .2s;flex-shrink:0;color:var(--text-placeholder);}
|
||||
.tree-select__group-arrow.expanded{transform:rotate(90deg);}
|
||||
.tree-select__group-label{flex:1;}
|
||||
.tree-select__option{padding:8px 16px 8px 38px;font-size:var(--font-sm);cursor:pointer;transition:background .1s;display:none;color:var(--text-secondary);}
|
||||
.tree-select__option.show{display:block;}
|
||||
.tree-select__option:hover{background:#F5F7FA;}
|
||||
.tree-select__option.selected{color:var(--primary);background:var(--primary-light);}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -136,7 +156,65 @@
|
||||
<div class="form-grid">
|
||||
<div class="form-item"><label>设备名称<span class="required">*</span></label><input class="form-input" placeholder="请输入设备名称"></div>
|
||||
<div class="form-item"><label>设备编码<span class="required">*</span></label><input class="form-input" placeholder="请输入设备编码"></div>
|
||||
<div class="form-item"><label>所属单位<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>采油一厂</option><option>采油二厂</option><option>采气厂</option></select></div>
|
||||
<div class="form-item">
|
||||
<label>所属单位<span class="required">*</span></label>
|
||||
<div class="tree-select" id="orgTreeSelect">
|
||||
<input type="hidden" id="deviceOrg" value="">
|
||||
<div class="tree-select__trigger" onclick="toggleOrgTree()">
|
||||
<span class="tree-select__text" id="orgTreeText">请选择所属单位</span>
|
||||
</div>
|
||||
<div class="tree-select__panel" id="orgTreePanel">
|
||||
<div class="tree-select__group" data-unit="第四采油厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">第四采油厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|健康管理部" onclick="selectOrgOption(this,'第四采油厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|安全环保科" onclick="selectOrgOption(this,'第四采油厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|工会办公室" onclick="selectOrgOption(this,'第四采油厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|生产技术部" onclick="selectOrgOption(this,'第四采油厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|财务部" onclick="selectOrgOption(this,'第四采油厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="第四采油厂|信息中心" onclick="selectOrgOption(this,'第四采油厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|健康管理部" onclick="selectOrgOption(this,'采油一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|安全环保科" onclick="selectOrgOption(this,'采油一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|工会办公室" onclick="selectOrgOption(this,'采油一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|生产技术部" onclick="selectOrgOption(this,'采油一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|财务部" onclick="selectOrgOption(this,'采油一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油一厂|信息中心" onclick="selectOrgOption(this,'采油一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采油二厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采油二厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|健康管理部" onclick="selectOrgOption(this,'采油二厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|安全环保科" onclick="selectOrgOption(this,'采油二厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|工会办公室" onclick="selectOrgOption(this,'采油二厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|生产技术部" onclick="selectOrgOption(this,'采油二厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|财务部" onclick="selectOrgOption(this,'采油二厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采油二厂|信息中心" onclick="selectOrgOption(this,'采油二厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
<div class="tree-select__group" data-unit="采气一厂">
|
||||
<div class="tree-select__group-header" onclick="toggleOrgGroup(this, event)">
|
||||
<span class="tree-select__group-arrow">▶</span>
|
||||
<span class="tree-select__group-label">采气一厂</span>
|
||||
</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|健康管理部" onclick="selectOrgOption(this,'采气一厂 / 健康管理部')">健康管理部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|安全环保科" onclick="selectOrgOption(this,'采气一厂 / 安全环保科')">安全环保科</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|工会办公室" onclick="selectOrgOption(this,'采气一厂 / 工会办公室')">工会办公室</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|生产技术部" onclick="selectOrgOption(this,'采气一厂 / 生产技术部')">生产技术部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|财务部" onclick="selectOrgOption(this,'采气一厂 / 财务部')">财务部</div>
|
||||
<div class="tree-select__option" data-val="采气一厂|信息中心" onclick="selectOrgOption(this,'采气一厂 / 信息中心')">信息中心</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item"><label>设备厂商<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>舒华</option><option>岱宇</option><option>康乐佳</option></select></div>
|
||||
<div class="form-item"><label>设备型号<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>SH-T5170</option><option>DY-E600</option><option>KLJ-R800</option><option>SH-G6560</option><option>KLJ-F800</option></select></div>
|
||||
<div class="form-item"><label>设备类型<span class="required">*</span></label><select class="form-select"><option value="">请选择</option><option>有氧器械</option><option>力量器械</option></select></div>
|
||||
@@ -161,5 +239,61 @@
|
||||
</div>
|
||||
</main>
|
||||
<script>function toggleSubgroup(h){var p=h.parentElement;var sidebar=p.closest("aside");if(sidebar)sidebar.querySelectorAll(".sidebar-subgroup.open").forEach(function(g){if(g!==p)g.classList.remove("open");});p.classList.toggle("open");}(function(){var a=document.querySelector('.sidebar-item.active');if(!a)return;var sidebar=document.querySelector('aside');if(sidebar)sidebar.querySelectorAll('.sidebar-subgroup.open').forEach(function(g){g.classList.remove('open');});var s=a.closest('.sidebar-subgroup');if(s)s.classList.add('open');})();</script>
|
||||
<script>
|
||||
function toggleOrgTree(){
|
||||
var panel = document.getElementById('orgTreePanel');
|
||||
var isShow = panel.classList.contains('show');
|
||||
if(isShow){ panel.classList.remove('show'); }
|
||||
else { panel.classList.add('show'); }
|
||||
}
|
||||
|
||||
function toggleOrgGroup(headerEl, event){
|
||||
event.stopPropagation();
|
||||
var arrow = headerEl.querySelector('.tree-select__group-arrow');
|
||||
var group = headerEl.parentElement;
|
||||
var options = group.querySelectorAll('.tree-select__option');
|
||||
var isExpanded = arrow.classList.contains('expanded');
|
||||
if(isExpanded){
|
||||
arrow.classList.remove('expanded');
|
||||
options.forEach(function(opt){ opt.classList.remove('show'); });
|
||||
var unitName = group.getAttribute('data-unit');
|
||||
selectOrgOptionInner(unitName, unitName);
|
||||
} else {
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__group-arrow.expanded').forEach(function(a){ a.classList.remove('expanded'); });
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.show').forEach(function(o){ o.classList.remove('show'); });
|
||||
arrow.classList.add('expanded');
|
||||
options.forEach(function(opt){ opt.classList.add('show'); });
|
||||
}
|
||||
}
|
||||
|
||||
function selectOrgOption(el, displayText){
|
||||
var val = el.getAttribute('data-val');
|
||||
selectOrgOptionInner(val, displayText);
|
||||
}
|
||||
|
||||
function selectOrgOptionInner(val, displayText){
|
||||
var hidden = document.getElementById('deviceOrg');
|
||||
var oldVal = hidden.value;
|
||||
hidden.value = val;
|
||||
var textEl = document.getElementById('orgTreeText');
|
||||
textEl.textContent = displayText;
|
||||
textEl.className = 'tree-select__text has-value';
|
||||
document.querySelectorAll('#orgTreePanel .tree-select__option.selected').forEach(function(o){ o.classList.remove('selected'); });
|
||||
var targetOpt = document.querySelector('#orgTreePanel .tree-select__option[data-val="' + val + '"]');
|
||||
if(targetOpt){ targetOpt.classList.add('selected'); }
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
if(oldVal !== val){
|
||||
var evt = document.createEvent('HTMLEvents');
|
||||
evt.initEvent('change', true, false);
|
||||
hidden.dispatchEvent(evt);
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(e){
|
||||
if(!e.target.closest('#orgTreeSelect')){
|
||||
document.getElementById('orgTreePanel').classList.remove('show');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -139,14 +139,14 @@
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>序号</th><th>设备名称</th><th>设备编码</th><th>设备所属单位</th><th>布放位置</th>
|
||||
<th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
<th>最近一次使用时间</th><th class="sortable">本周使用次数</th><th class="sortable">本月使用次数</th><th class="sortable">本年使用次数</th><th class="sortable">累计使用次数</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td>1</td><td>智能跑步机A01</td><td>SP-2024-001</td><td>采油一厂</td><td>健身房</td><td><a class="link" href="sport-monitor-detail.html?period=week">120</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">485</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">2,860</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">6,320</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>智能跑步机A02</td><td>SP-2024-002</td><td>采油一厂</td><td>职工活动中心</td><td><a class="link" href="sport-monitor-detail.html?period=week">98</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">412</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">2,350</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">5,180</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>智能椭圆机B01</td><td>SP-2024-003</td><td>采油二厂</td><td>健身房</td><td><a class="link" href="sport-monitor-detail.html?period=week">65</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">278</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">1,560</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">3,420</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>智能动感单车B02</td><td>SP-2024-004</td><td>采油二厂</td><td>职工活动中心</td><td><a class="link" href="sport-monitor-detail.html?period=week">78</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">320</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">1,890</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">4,150</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>智能划船机C01</td><td>SP-2024-005</td><td>采气厂</td><td>综合楼健身房</td><td><a class="link" href="sport-monitor-detail.html?period=week">45</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">198</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">1,120</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">2,560</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>1</td><td>智能跑步机A01</td><td>SP-2024-001</td><td>采油一厂</td><td>健身房</td><td>2026-08-26 09:15</td><td><a class="link" href="sport-monitor-detail.html?period=week">120</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">485</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">2,860</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">6,320</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>2</td><td>智能跑步机A02</td><td>SP-2024-002</td><td>采油一厂</td><td>职工活动中心</td><td>2026-08-26 08:42</td><td><a class="link" href="sport-monitor-detail.html?period=week">98</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">412</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">2,350</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">5,180</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>3</td><td>智能椭圆机B01</td><td>SP-2024-003</td><td>采油二厂</td><td>健身房</td><td>2026-08-25 18:20</td><td><a class="link" href="sport-monitor-detail.html?period=week">65</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">278</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">1,560</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">3,420</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>4</td><td>智能动感单车B02</td><td>SP-2024-004</td><td>采油二厂</td><td>职工活动中心</td><td>2026-08-25 16:05</td><td><a class="link" href="sport-monitor-detail.html?period=week">78</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">320</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">1,890</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">4,150</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
<tr><td>5</td><td>智能划船机C01</td><td>SP-2024-005</td><td>采气厂</td><td>综合楼健身房</td><td>2026-08-24 11:30</td><td><a class="link" href="sport-monitor-detail.html?period=week">45</a></td><td><a class="link" href="sport-monitor-detail.html?period=month">198</a></td><td><a class="link" href="sport-monitor-detail.html?period=year">1,120</a></td><td><a class="link" href="sport-monitor-detail.html?period=all">2,560</a></td><td><a class="link" href="sport-monitor-detail.html">数据明细</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -407,6 +407,13 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<label>活动名称</label>
|
||||
<div class="search-select" id="unitPlanSelect" style="width:280px;">
|
||||
<input class="search-select__input" id="unitPlanSearchInput" placeholder="输入活动名称" onfocus="showUnitPlanPanel()" autocomplete="off" readonly>
|
||||
<div class="search-select__panel" id="unitPlanPanel"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- [交互] 操作按钮区 -->
|
||||
@@ -725,6 +732,7 @@ function selectPlan(planId){
|
||||
var plan = plans.find(function(p){return p.id === planId;});
|
||||
if(!plan) return;
|
||||
document.getElementById('planSearchInput').value = plan.name;
|
||||
document.getElementById('unitPlanSearchInput').value = plan.name;
|
||||
document.getElementById('planPanel').classList.remove('show');
|
||||
if(mainTab === 'person'){ applyPersonFilter(); }
|
||||
else { applyUnitFilter(); }
|
||||
@@ -734,6 +742,46 @@ function clearPlan(){
|
||||
// 活动筛选为必选,不允许清空
|
||||
}
|
||||
|
||||
/* ===== 单位排名 - 活动搜索选择 ===== */
|
||||
function showUnitPlanPanel(){
|
||||
searchUnitPlan();
|
||||
document.getElementById('unitPlanPanel').classList.add('show');
|
||||
}
|
||||
|
||||
function searchUnitPlan(){
|
||||
var keyword = document.getElementById('unitPlanSearchInput').value.trim().toLowerCase();
|
||||
var panel = document.getElementById('unitPlanPanel');
|
||||
var filtered = plans;
|
||||
if(keyword){
|
||||
filtered = plans.filter(function(p){
|
||||
return p.name.toLowerCase().indexOf(keyword) > -1 || p.org.toLowerCase().indexOf(keyword) > -1;
|
||||
});
|
||||
}
|
||||
if(filtered.length === 0){
|
||||
panel.innerHTML = '<div class="search-select__empty">无匹配活动</div>';
|
||||
} else {
|
||||
var html = '';
|
||||
filtered.forEach(function(p){
|
||||
var sel = selectedPlanId === p.id ? ' selected' : '';
|
||||
html += '<div class="search-select__option'+sel+'" onclick="selectUnitPlan('+p.id+')">';
|
||||
html += '<div style="font-weight:500;">'+esc(p.name)+'</div>';
|
||||
html += '<div class="ss-org">'+esc(p.org)+' | '+p.dateFrom+' ~ '+p.dateTo+'</div>';
|
||||
html += '</div>';
|
||||
});
|
||||
panel.innerHTML = html;
|
||||
}
|
||||
}
|
||||
|
||||
function selectUnitPlan(planId){
|
||||
selectedPlanId = planId;
|
||||
var plan = plans.find(function(p){return p.id === planId;});
|
||||
if(!plan) return;
|
||||
document.getElementById('unitPlanSearchInput').value = plan.name;
|
||||
document.getElementById('planSearchInput').value = plan.name;
|
||||
document.getElementById('unitPlanPanel').classList.remove('show');
|
||||
applyUnitFilter();
|
||||
}
|
||||
|
||||
/* ===== 单位部门双列面板 ===== */
|
||||
var deptMap = {
|
||||
'第四采油厂':['健康管理部','安全环保科','工会办公室','生产技术部','财务部','信息中心'],
|
||||
@@ -1153,6 +1201,9 @@ document.addEventListener('click',function(e){
|
||||
if(!e.target.closest('#planSelect')){
|
||||
document.getElementById('planPanel').classList.remove('show');
|
||||
}
|
||||
if(!e.target.closest('#unitPlanSelect')){
|
||||
document.getElementById('unitPlanPanel').classList.remove('show');
|
||||
}
|
||||
var orgWrap = document.getElementById('orgWrap');
|
||||
if(orgWrap && !orgWrap.contains(e.target)){
|
||||
document.getElementById('orgPanel').classList.remove('open');
|
||||
@@ -1176,6 +1227,14 @@ document.addEventListener('click',function(e){
|
||||
html += '</div>';
|
||||
});
|
||||
document.getElementById('planPanel').innerHTML = html;
|
||||
var unitHtml = '';
|
||||
plans.forEach(function(p){
|
||||
unitHtml += '<div class="search-select__option" onclick="selectUnitPlan('+p.id+')">';
|
||||
unitHtml += '<div style="font-weight:500;">'+esc(p.name)+'</div>';
|
||||
unitHtml += '<div class="ss-org">'+esc(p.org)+' | '+p.dateFrom+' ~ '+p.dateTo+'</div>';
|
||||
unitHtml += '</div>';
|
||||
});
|
||||
document.getElementById('unitPlanPanel').innerHTML = unitHtml;
|
||||
selectPlan(1);
|
||||
renderPersonTable();
|
||||
renderUnitTable();
|
||||
|
||||