diff --git a/employee-app/weight-management/basic-info.html b/employee-app/weight-management/basic-info.html index 0995081..66954df 100644 --- a/employee-app/weight-management/basic-info.html +++ b/employee-app/weight-management/basic-info.html @@ -209,13 +209,12 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: diff --git a/employee-app/weight-management/weight-ranking.html b/employee-app/weight-management/weight-ranking.html index d34e45f..0116642 100644 --- a/employee-app/weight-management/weight-ranking.html +++ b/employee-app/weight-management/weight-ranking.html @@ -79,6 +79,12 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .rank-item__score-unit { font-size: 10px; color: #999; margin-left: 1px; } .rank-item__score-sub { font-size: 10px; color: #bbb; } +/* 排名变化趋势 */ +.rank-item__trend { margin-left: 3px; font-size: 12px; font-weight: 700; } +.rank-item__trend--up { color: #16a34a; } +.rank-item__trend--down { color: #ef4444; } +.rank-item__trend--same { color: #ccc; } + /* 减重量 tab 的额外数据列 */ .rank-item__extra { width: 42px; text-align: right; flex-shrink: 0; font-size: 12px; color: #999; } @@ -298,7 +304,9 @@ function switchRankTab(tab) { /* ===== 渲染排行榜列表 ===== */ function renderRankList(data) { var html = ''; - data.forEach(function(item, idx) { + // 个人目标模式(未参加活动)下列表不含"我" + var list = (rankMode === 'personal') ? data.filter(function(item) { return !item.isMe; }) : data; + list.forEach(function(item, idx) { var numHtml = ''; if (item.rank === 1) { numHtml = '
'; @@ -310,6 +318,16 @@ function renderRankList(data) { numHtml = '' + item.rank + ''; } + // 排名变化趋势 + var trendHtml = ''; + if (item.trend === 'up') { + trendHtml = ''; + } else if (item.trend === 'down') { + trendHtml = ''; + } else { + trendHtml = ''; + } + var rowCls = item.isMe ? 'rank-item rank-item--my' : 'rank-item'; html += '
'; @@ -319,7 +337,7 @@ function renderRankList(data) { html += '
' + item.org + ' · ' + item.dept + '
'; html += '
'; html += '
'; - html += '
' + item.val + '' + item.unit + '
'; + html += '
' + item.val + '' + item.unit + '' + trendHtml + '
'; html += '
' + item.sub + '
'; html += '
'; html += ''; @@ -330,19 +348,23 @@ function renderRankList(data) { /* 根据 type 参数处理页面状态 */ var isNoOrg = false; +var rankMode = 'hasact'; (function(){ var params = new URLSearchParams(location.search); var type = params.get('type') || 'hasact'; + rankMode = type; if (type === 'none') { - // 未组织活动:提示 + 隐藏活动标题和我的排名 + 列表为空 + // 未组织活动:提示 + 隐藏活动标题、我的排名和排行列表 isNoOrg = true; var notice = document.getElementById('noOrgNotice'); var header = document.querySelector('.activity-header'); var myCard = document.getElementById('myRankCard'); + var rankBox = document.querySelector('.rank-container'); if (notice) notice.classList.add('show'); if (header) header.style.display = 'none'; if (myCard) myCard.style.display = 'none'; + if (rankBox) rankBox.style.display = 'none'; } else if (type === 'personal') { // 已设置个人目标:仅隐藏我的排名卡片 var myCard = document.getElementById('myRankCard'); diff --git a/web-admin/weight-management/archive-unit-report.html b/web-admin/weight-management/archive-unit-report.html index b7fd5cf..6cfe283 100644 --- a/web-admin/weight-management/archive-unit-report.html +++ b/web-admin/weight-management/archive-unit-report.html @@ -58,6 +58,9 @@ thead th{background:#FAFAFA;padding:10px 12px;text-align:center;font-size:var(-- tbody td{padding:12px 12px;text-align:center;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);white-space:nowrap;} tbody tr:last-child td{border-bottom:none;} tbody tr:hover{background:#F8FBFF;} +/* 统计行 */ +tbody tr.stat-row{background:#F0F5FF;font-weight:500;} +tbody tr.stat-row:hover{background:#E6F0FF;} /* 标签 */ .tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);} .tag-green{background:#F6FFED;color:var(--success);} @@ -99,6 +102,11 @@ tbody tr:hover{background:#F8FBFF;} #tab-0 tbody tr:hover td.sticky-r, #tab-1 tbody tr:hover td.sticky-r{background:#F8FBFF;} .sticky-l3,.sticky-l4,.sticky-r{box-shadow:-2px 0 4px rgba(0,0,0,0.06);} +/* 统计行固定列背景 */ +#tab-0 tbody tr.stat-row td[class*=sticky], +#tab-1 tbody tr.stat-row td[class*=sticky]{background:#F0F5FF;} +#tab-0 tbody tr.stat-row:hover td[class*=sticky], +#tab-1 tbody tr.stat-row:hover td[class*=sticky]{background:#E6F0FF;} /* 组织机构二级联动 */ .org-select-wrap{position:relative;display:inline-block;} .org-select-trigger{height:36px;min-width:160px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;cursor:pointer;display:flex;align-items:center;user-select:none;white-space:nowrap;} @@ -228,6 +236,9 @@ tbody tr:hover{background:#F8FBFF;} + + 统计行34204313.94.92.31.74.75350352315858080 + 1第四采油厂123482.352255410354115708686详细数据 @@ -278,6 +289,9 @@ tbody tr:hover{background:#F8FBFF;} + + 统计行23344893.44.11.81.84.15232345915598078 + 1第四采油厂作业一区123433.241.82.045300350016008482详细数据 diff --git a/web-admin/weight-management/doc/CHANGELOG.md b/web-admin/weight-management/doc/CHANGELOG.md index a285633..43a7707 100644 --- a/web-admin/weight-management/doc/CHANGELOG.md +++ b/web-admin/weight-management/doc/CHANGELOG.md @@ -1,5 +1,23 @@ # CHANGELOG | 体重管理 Web 管理端 +## 2026-08-19 | 全模块弹窗截图补全 + PRD 弹窗文档完善 + +### 弹窗截图补全(screenshot.js) +- **`doc/screenshot.js`**:MODALS 列表从 6 个扩展至 38 个,覆盖全部菜单组的内嵌弹窗;PAGES 列表新增 4 个新增设备独立弹窗页(scale/bluetooth/fat/sport-device-add.html) +- 依赖前置状态的弹窗在 setup 中造数:员工选择弹窗预设组织机构、累计行动弹窗预设 selectedPlanId、单位详情/统计弹窗预设日期范围、食谱新增弹窗预填表单示例值、添加成员弹窗预选员工 +- 弹窗非空校验增强:表格数据行 / 信息卡(.ec-value)/ 详情值(.dialog-cell__val 等)/ 表单项填充四级判定,38 张弹窗截图全部通过非空校验 +- 用法:`node doc/screenshot.js`(全量)/ `modals`(仅弹窗)/ `<关键字>`(按文件名过滤) + +### PRD 弹窗文档完善(PRD.md) +- **报名管理**:承诺书预览弹窗、目标体重审核弹窗补截图 +- **过程管理·行动记录**:弹窗列表补"打卡记录弹窗"行(此前文档缺失),12 个弹窗全部配截图;交互说明补打卡次数入口 +- **过程管理·食堂食谱**:新增记录弹窗配截图 +- **历史活动**:人员范围弹窗 + 历史活动详情 5 个弹窗(饮食/运动/体重记录、承诺书、大病人员)配截图 +- **人员数据·三测记录**:补 3 张代表弹窗截图(其余与行动记录结构一致) +- **设备管理**:4 个新增设备弹窗页配截图;蓝牙称成员管理弹窗/添加成员弹窗补文档(此前清单与说明均缺失),含清单行、导航树、操作列说明;体重秤/蓝牙称/体脂仪监测详情身体成分分析弹窗配截图(运动器械无弹窗,维持原说明) +- **公共统计**:测量记录身体成分分析弹窗、单位详情弹窗(含按指标切换的明细表说明)、使用记录弹窗(含按设备类型切换的表头说明)配截图 +- 页面清单:行动记录/三测记录弹窗行更新为完整弹窗枚举;蓝牙称新增成员管理弹窗行 + ## 2026-06-18 | 异常事件页面补全 ### 页面补全 diff --git a/web-admin/weight-management/doc/PRD.md b/web-admin/weight-management/doc/PRD.md index 5ca4e82..e082ddb 100644 --- a/web-admin/weight-management/doc/PRD.md +++ b/web-admin/weight-management/doc/PRD.md @@ -2,18 +2,21 @@ ## 模块概述 -体重管理管理端为管理人员提供员工体重健康的全方位干预管理能力,涵盖干预计划创建与管理、员工报名跟踪与目标体重审核、过程数据监测(行动记录/详细数据/体重排名/活动总览/食谱记录)、历史干预数据归档、个人体重目标管理、多类型体重测量设备管理以及异常事件汇总等功能。 +体重管理管理端为管理人员提供员工体重健康的全方位干预管理能力,涵盖干预活动创建与管理、员工报名跟踪与目标体重审核、过程数据监测(行动记录/体重排名/活动总览/活动统计/食堂食谱)、历史活动数据归档、人员数据查询(三测记录/总览记录)、个人体重目标管理、多类型体重测量设备管理以及异常事件汇总等功能。 ### 页面导航结构 +顶部导航栏(所有页面共用)共 9 个一级菜单:**档案、活动管理、报名管理、过程管理、历史活动、人员数据、个人体重管理、设备管理、异常事件**。 + ``` 体重管理(管理端) ├── 顶部导航栏(所有页面共用) │ ├── 档案 -│ ├── 计划管理 +│ ├── 活动管理 │ ├── 报名管理 │ ├── 过程管理 -│ ├── 历史干预 +│ ├── 历史活动 +│ ├── 人员数据 │ ├── 个人体重管理 │ ├── 设备管理 │ └── 异常事件 @@ -25,61 +28,67 @@ │ │ └── 单位报表详情(内Tab:二级单位/三级单位) │ └── 算法模型(占位页面) │ -├── 计划管理(侧边栏) -│ └── 计划列表 -│ └── 新增/编辑计划(表单页) -│ ├── 人员筛选弹窗 +├── 活动管理(侧边栏) +│ └── 活动列表 +│ ├── 人员筛选弹窗(内含新增人员弹窗) +│ ├── 审核人员弹窗(内含新增审核人员弹窗) +│ └── 新增/编辑活动(表单页) │ ├── 员工选择弹窗 -│ └── 审核人员选择弹窗 +│ └── 大病人员列表弹窗 │ ├── 报名管理(侧边栏) │ ├── 报名跟踪 -│ │ └── 内Tab:未提交任务书/已提交待审核/已通过待签署/已签署 +│ │ └── 内Tab:全部/未提交任务书/已提交待审核/已通过待签署/已签署 +│ │ └── 承诺书预览弹窗 │ └── 目标体重审核 -│ ├── 内Tab:待审核/已通过/已通过待签署/已驳回 -│ ├── 审核弹窗(通过/驳回) -│ └── 承诺书预览弹窗 -│ -├── 设备管理(侧边栏,×4种设备类型,每组含设备管理+设备监测) -│ ├── 体重秤 -│ │ ├── 设备管理 -│ │ │ └── 新增设备(弹窗) -│ │ └── 设备监测(使用频次统计) -│ │ └── 监测详情(弹窗) -│ ├── 蓝牙称(同上结构) -│ ├── 体脂仪(同上结构) -│ ├── 运动器械(同上结构) -│ ├── 员工监测数据 -│ │ └── 测量记录(含身体成分分析弹窗) -│ ├── 单位数据统计 -│ │ └── 内Tab:二级单位/三级单位 -│ └── 员工数据统计 +│ ├── 内Tab:全部/待审核/已通过/已通过待签署/已驳回 +│ └── 审核弹窗(通过/驳回) │ ├── 过程管理(侧边栏) │ ├── 行动记录 │ │ ├── 员工数据(Tab:体重/饮食/运动,含已记录/未记录弹窗) │ │ └── 单位数据(Tab) -│ ├── 详细数据 -│ │ └── 体重报告弹窗 │ ├── 体重排名 │ │ ├── 个人排名(Tab) │ │ └── 单位排名(Tab,内分段:二级单位/三级单位) │ ├── 活动总览 │ │ └── 赛况明细 │ ├── 活动统计 -│ └── 食谱记录 +│ └── 食堂食谱 │ └── 新增记录弹窗 │ -├── 历史干预(侧边栏) -│ ├── 计划列表 -│ │ ├── 人员范围弹窗 -│ │ └── 计划详情(5个Tab:报名管理/每日行动/总览数据/活动排名/活动信息) -│ └── 人员列表 +├── 历史活动(侧边栏) +│ └── 活动列表 +│ ├── 人员范围弹窗 +│ └── 活动详情(5个Tab:报名管理/每日行动/总览数据/活动排名/活动信息) +│ └── 人员详情(3个Tab:饮食记录/运动记录/体重记录) +│ +├── 人员数据(侧边栏) +│ ├── 三测记录 +│ │ ├── 员工数据(Tab:体重/饮食/运动,含已记录/未记录弹窗) +│ │ └── 单位数据(Tab) +│ └── 总览记录 │ └── 人员详情(3个Tab:饮食记录/运动记录/体重记录) │ ├── 个人体重管理(侧边栏) │ └── 个人目标数据 -│ └── 个人目标详情(含体重趋势图) +│ └── 个人目标详情(含每日记录明细) +│ +├── 设备管理(侧边栏,×4种设备类型,每组含设备管理+设备监测) +│ ├── 体重秤 +│ │ ├── 设备管理 +│ │ │ └── 新增设备(弹窗) +│ │ └── 设备监测(使用频次统计) +│ │ └── 监测详情(含身体成分分析弹窗) +│ ├── 蓝牙称(同上结构,设备管理额外含成员管理弹窗/添加成员弹窗) +│ ├── 体脂仪(同上结构) +│ ├── 运动器械(同上结构) +│ ├── 员工监测数据 +│ │ └── 测量记录(含身体成分分析弹窗) +│ ├── 单位数据统计 +│ │ └── 内Tab:二级单位/三级单位,数值可点击查看详情 +│ └── 员工数据统计 +│ └── 使用记录弹窗 │ └── 异常事件(侧边栏) ├── 系统脏数据 @@ -91,6 +100,7 @@ ## 页面清单 + ### 档案(侧边栏组:"档案") | 序号 | 菜单项 | 页面/弹窗 | 文件 | 类型 | @@ -101,15 +111,16 @@ | | | 单位报表详情 | archive-unit-report-detail.html | 页面 | | 3 | 算法模型 | 算法模型(占位) | archive-algorithm-model.html | 页面 | -### 计划管理(侧边栏组:"计划管理") +### 活动管理(侧边栏组:"活动管理") | 序号 | 菜单项 | 页面/弹窗 | 文件 | 类型 | |------|--------|-----------|------|------| -| 4 | 计划列表 | 计划列表 | plan-list.html | 页面 | -| | | 新增/编辑计划 | plan-edit.html | 页面 | -| | | 人员筛选弹窗 | (内嵌弹窗) | 弹窗 | +| 4 | 活动列表 | 活动列表 | plan-list.html | 页面 | +| | | 人员筛选弹窗(内含新增人员弹窗) | (内嵌弹窗) | 弹窗 | +| | | 审核人员弹窗(内含新增审核人员弹窗) | (内嵌弹窗) | 弹窗 | +| | | 新增/编辑活动 | plan-edit.html | 页面 | | | | 员工选择弹窗 | (内嵌弹窗) | 弹窗 | -| | | 审核人员弹窗 | (内嵌弹窗) | 弹窗 | +| | | 大病人员列表弹窗 | (内嵌弹窗) | 弹窗 | ### 报名管理(侧边栏组:"报名管理") @@ -119,67 +130,71 @@ | | | 承诺书预览弹窗 | (内嵌弹窗) | 弹窗 | | 6 | 目标体重审核 | 目标体重审核列表 | target-weight-review.html | 页面 | | | | 审核弹窗(含指标对比) | (内嵌弹窗) | 弹窗 | -| | | 承诺书预览弹窗 | (内嵌弹窗) | 弹窗 | - -### 设备管理(侧边栏组:设备管理,×4设备类型 + 3个公共统计页) - -| 序号 | 设备类型 | 菜单项 | 页面/弹窗 | 文件 | 类型 | -|------|---------|--------|-----------|------|------| -| 7 | 体重秤 | 设备管理 | 体重秤设备列表 | scale-device.html | 页面 | -| | | | 新增设备 | scale-device-add.html | 弹窗 | -| | | 设备监测 | 体重秤监测数据 | scale-monitor.html | 页面 | -| | | | 监测详情 | scale-monitor-detail.html | 页面 | -| 8 | 蓝牙称 | 设备管理 | 蓝牙称设备列表 | bluetooth-device.html | 页面 | -| | | | 新增设备 | bluetooth-device-add.html | 弹窗 | -| | | 设备监测 | 蓝牙称监测数据 | bluetooth-monitor.html | 页面 | -| | | | 监测详情 | bluetooth-monitor-detail.html | 页面 | -| 9 | 体脂仪 | 设备管理 | 体脂仪设备列表 | fat-device.html | 页面 | -| | | | 新增设备 | fat-device-add.html | 弹窗 | -| | | 设备监测 | 体脂仪监测数据 | fat-monitor.html | 页面 | -| | | | 监测详情 | fat-monitor-detail.html | 页面 | -| 10 | 运动器械 | 设备管理 | 运动器械设备列表 | sport-device.html | 页面 | -| | | | 新增设备 | sport-device-add.html | 弹窗 | -| | | 设备监测 | 运动器械监测数据 | sport-monitor.html | 页面 | -| | | | 监测详情 | sport-monitor-detail.html | 页面 | -| 11 | (公共) | 员工监测数据 | 员工监测数据列表 | employee-data.html | 页面 | -| | | | 测量记录详情 | employee-data-record.html | 页面 | -| 12 | (公共) | 单位数据统计 | 单位数据统计列表 | dept-stat.html | 页面 | -| 13 | (公共) | 员工数据统计 | 员工数据统计列表 | employee-stat.html | 页面 | ### 过程管理(侧边栏组:"过程管理") | 序号 | 菜单项 | 页面/弹窗 | 文件 | 类型 | |------|--------|-----------|------|------| -| 14 | 行动记录 | 行动记录列表 | action-record.html | 页面 | -| | | 个人详情抽屉 | (内嵌抽屉弹窗) | 弹窗 | -| | | 饮食记录弹窗 | (内嵌弹窗) | 弹窗 | -| | | 运动记录弹窗 | (内嵌弹窗) | 弹窗 | -| 15 | 详细数据 | 详细数据列表 | detail-data.html | 页面 | -| | | 个人指标详情抽屉 | (内嵌抽屉弹窗) | 弹窗 | -| 16 | 体重排名 | 体重排名列表 | weight-ranking.html | 页面 | -| 17 | 活动总览 | 活动总览列表 | action-overview.html | 页面 | +| 7 | 行动记录 | 行动记录列表 | action-record.html | 页面 | +| | | 打卡记录/饮食/运动/体重记录弹窗、今日已/未记录员工弹窗、活动期间累计行动员工弹窗、单位详情弹窗 | (内嵌弹窗) | 弹窗 | +| 8 | 体重排名 | 体重排名列表 | weight-ranking.html | 页面 | +| 9 | 活动总览 | 活动总览列表 | action-overview.html | 页面 | | | | 赛况明细 | action-overview-detail.html | 页面 | -| 18 | 活动统计 | 活动统计列表 | activity-statistics.html | 页面 | -| 19 | 食谱记录 | 食谱记录列表 | recipe-record.html | 页面 | -| | | 餐品详情弹窗 | (内嵌弹窗) | 弹窗 | +| 10 | 活动统计 | 活动统计列表 | activity-statistics.html | 页面 | +| 11 | 食堂食谱 | 食堂食谱列表 | recipe-record.html | 页面 | +| | | 新增记录弹窗 | (内嵌弹窗) | 弹窗 | -### 历史干预(侧边栏组:"历史干预") +### 历史活动(侧边栏组:"历史活动") | 序号 | 菜单项 | 页面/弹窗 | 文件 | 类型 | |------|--------|-----------|------|------| -| 20 | 计划列表 | 历史计划列表 | history-plan-list.html | 页面 | +| 12 | 活动列表 | 历史活动列表 | history-plan-list.html | 页面 | | | | 人员范围弹窗 | (内嵌弹窗) | 弹窗 | -| | | 计划详情 | history-plan-detail.html | 页面 | -| 21 | 人员列表 | 历史人员列表 | history-personnel-list.html | 页面 | +| | | 活动详情 | history-plan-detail.html | 页面 | +| | | 人员详情 | history-personnel-detail.html | 页面 | + +### 人员数据(侧边栏组:"人员数据") + +| 序号 | 菜单项 | 页面/弹窗 | 文件 | 类型 | +|------|--------|-----------|------|------| +| 13 | 三测记录 | 三测记录列表 | personnel-measure-record.html | 页面 | +| | | 打卡记录/饮食/运动/体重记录弹窗、今日已/未记录员工弹窗、活动期间累计行动员工弹窗、单位详情弹窗(同行动记录) | (内嵌弹窗) | 弹窗 | +| 14 | 总览记录 | 总览记录列表 | personnel-overview-record.html | 页面 | | | | 人员详情 | history-personnel-detail.html | 页面 | ### 个人体重管理(侧边栏组:"个人体重管理") | 序号 | 菜单项 | 页面/弹窗 | 文件 | 类型 | |------|--------|-----------|------|------| -| 22 | 个人目标数据 | 个人目标数据列表 | personal-target-data.html | 页面 | +| 15 | 个人目标数据 | 个人目标数据列表 | personal-target-data.html | 页面 | | | | 个人目标详情 | personal-target-detail.html | 页面 | +### 设备管理(侧边栏组:"设备管理",×4设备类型 + 3个公共统计页) + +| 序号 | 设备类型 | 菜单项 | 页面/弹窗 | 文件 | 类型 | +|------|---------|--------|-----------|------|------| +| 16 | 体重秤 | 设备管理 | 体重秤设备列表 | scale-device.html | 页面 | +| | | | 新增设备 | scale-device-add.html | 弹窗 | +| | | 设备监测 | 体重秤监测数据 | scale-monitor.html | 页面 | +| | | | 监测详情 | scale-monitor-detail.html | 页面 | +| 17 | 蓝牙称 | 设备管理 | 蓝牙称设备列表 | bluetooth-device.html | 页面 | +| | | | 新增设备 | bluetooth-device-add.html | 弹窗 | +| | | | 成员管理弹窗(内含添加成员弹窗) | (内嵌弹窗) | 弹窗 | +| | | 设备监测 | 蓝牙称监测数据 | bluetooth-monitor.html | 页面 | +| | | | 监测详情 | bluetooth-monitor-detail.html | 页面 | +| 18 | 体脂仪 | 设备管理 | 体脂仪设备列表 | fat-device.html | 页面 | +| | | | 新增设备 | fat-device-add.html | 弹窗 | +| | | 设备监测 | 体脂仪监测数据 | fat-monitor.html | 页面 | +| | | | 监测详情 | fat-monitor-detail.html | 页面 | +| 19 | 运动器械 | 设备管理 | 运动器械设备列表 | sport-device.html | 页面 | +| | | | 新增设备 | sport-device-add.html | 弹窗 | +| | | 设备监测 | 运动器械监测数据 | sport-monitor.html | 页面 | +| | | | 监测详情 | sport-monitor-detail.html | 页面 | +| 20 | (公共) | 员工监测数据 | 员工监测数据列表 | employee-data.html | 页面 | +| | | | 测量记录详情 | employee-data-record.html | 页面 | +| 21 | (公共) | 单位数据统计 | 单位数据统计列表 | dept-stat.html | 页面 | +| 22 | (公共) | 员工数据统计 | 员工数据统计列表 | employee-stat.html | 页面 | + ### 异常事件(侧边栏组:"异常事件") | 序号 | 菜单项 | 页面/弹窗 | 文件 | 类型 | @@ -201,10 +216,10 @@ **功能说明:** 以员工为维度展示个人体重管理相关数据的汇总列表,支持按姓名、单位等多维筛选。 -**筛选条件:** 姓名(输入框)、员工编号(输入框)、单位部门(二级联动下拉)、年份(下拉,默认当年) +**筛选条件:** 姓名(输入框)、员工编号(输入框)、单位部门(二级联动面板)、年份(下拉,默认当年) **表格列(多级表头):** -- 第一级:姓名、员工编号、性别、年龄、单位、部门、体重(kg)(3子列)、BMI(3子列)、体脂(%)(3子列)、腰围(cm)(3子列)、饮食记录次数、运动记录次数、体重记录次数、详细数据 +- 第一级:序号、姓名、员工编号、性别、年龄、单位、部门、体重(kg)(3子列)、BMI(3子列)、体脂(%)(3子列)、腰围(cm)(3子列)、饮食记录次数、运动记录次数、体重记录次数、详细数据 - 体重子列:初始、最终、变化 - BMI子列:初始、最终、变化 - 体脂(%)子列:初始、最终、变化 @@ -257,7 +272,7 @@ **Tab切换:** 二级单位 / 三级单位 -**筛选条件:** 组织机构(二级联动下拉)、年份(下拉,默认当年) +**筛选条件:** 组织机构(支持多选。二级单位tab时,只选择二级单位,三级单位tab时,二级联动面板,可选择部门)、年份(下拉,默认当年) **二级单位表格列:** - 序号、单位、总人数、组织活动次数、人均减重(kg)、人均减重率(%)、人均BMI降低、人均体脂率降低(%)、人均腰围减少(cm)、人均每日摄入热量(kcal)、人均每日消耗热量(kcal)、人均每日热量缺口、人均综合得分、人均行动得分、操作 @@ -266,6 +281,7 @@ **业务规则:** - 表格列较多,序号、单位、总人数三列做左侧固定,操作列右侧固定 +- 表格首行为统计行(汇总当前维度全部数据的合计/人均值):统计行"单位""部门"列仅显示对应维度个数的数字(二级单位tab单位列显示单位个数,如"3";三级单位tab单位列显示单位个数、部门列显示部门个数) - 所有数据列支持排序 **交互说明:** @@ -278,7 +294,7 @@ ![页面截图](screenshots/archive-unit-report-detail.jpg) -**功能说明:** 展示指定单位/部门的干预计划维度的详细数据,汇总该单位下各干预计划的执行情况和效果指标。 +**功能说明:** 展示指定单位/部门的干预活动维度的详细数据,汇总该单位下各干预活动的执行情况和效果指标。 **面包屑导航:** 体重管理 / 档案 / 单位报表数据 / 详情 @@ -286,10 +302,10 @@ - 单位信息卡片:单位名称标签(二级单位/三级单位)、总人数、组织活动次数、参与活动总人次、活动覆盖比例 - 指标统计网格(5×2):人均减重(kg)、人均减重率(%)、人均BMI降低、人均体脂率降低(%)、人均腰围减少(cm)、人均每日摄入热量(kcal)、人均每日消耗热量(kcal)、人均每日热量缺口、人均综合得分、人均行动得分 -**筛选条件:** 计划名称(输入框)、年份(下拉) +**筛选条件:** 活动名称(输入框)、年份(下拉) **表格列(标题"组织活动列表"):** -- 干预计划、组织机构、组织部门、起止日期、人员范围、应参加人数、已参加人数、未参加人数、完成体重目标人数、完成体脂目标人数、完成腰围目标人数、人均减重(kg)、人均减重率(%)、人均腰围减少(cm)、人均每日摄入(千卡)、人均每日消耗(千卡)、人均每日热量缺口、人均综合得分、人均行动得分、负责人 +- 干预活动、组织机构、组织部门、起止日期、人员范围、应参加人数、已参加人数、未参加人数、完成体重目标人数、完成体脂目标人数、完成腰围目标人数、人均减重(kg)、人均减重率(%)、人均腰围减少(cm)、人均每日摄入(千卡)、人均每日消耗(千卡)、人均每日热量缺口、人均综合得分、人均行动得分、负责人 **交互说明:** - 面包屑导航支持点击跳回上级页面 @@ -303,49 +319,86 @@ ![页面截图](screenshots/archive-algorithm-model.jpg) -**功能说明:** 与之前做好的其他模块功能一致 +**功能说明:** 与之前做好的其他模块的算法模型菜单功能一致 --- -## 二、计划管理 +## 二、活动管理 -### 4. 计划列表(plan-list.html) +### 4. 活动列表(plan-list.html) ![页面截图](screenshots/plan-list.jpg) -**功能说明:** 体重管理干预计划的增删改查管理,管理员在此创建和管理各单位/部门的体重干预计划。 +**功能说明:** 体重管理干预活动的增删改查管理,管理员在此创建和管理各单位/部门的体重干预活动。 -**筛选条件:** 计划名称(输入框)、组织机构(二级联动下拉)、活动状态(下拉:全部/进行中/未开始)、年份选择(下拉) +**筛选条件:** 组织机构(二级联动面板)、活动名称(输入框)、活动状态(下拉:全部/进行中/未开始)、年份选择(下拉) -**表格列:** 序号、组织机构、计划名称、起止日期、人员筛选(可点击数字)、审核人员(可点击数字)、活动状态(标签)、组织部门、负责人、负责人电话、操作 +**表格列:** 序号、组织机构、活动名称、起止日期、人员筛选(可点击数字)、审核人员(可点击数字)、活动状态(标签)、组织部门、负责人、负责人电话、操作 **业务规则:** - 活动状态标签:进行中、未开始 -- 已结束的干预计划不在本列表展示,统一归入"历史干预"模块管理 -- 进行中的计划,编辑按钮置灰不可点击(保护进行中数据不被修改) +- 已结束的干预活动不在本列表展示,统一归入"历史活动"模块管理 +- 进行中的活动,编辑按钮置灰不可点击(保护进行中数据不被修改) - 人员筛选列显示参与人数,点击弹出人员筛选弹窗 - 审核人员列显示审核人数,点击弹出审核人员明细弹窗 -- 操作列包含编辑和删除,删除需二次确认,有员工报名参加的活动,不允许删除,提示“该计划已有员工报名参加,无法删除” +- 操作列包含编辑和删除,删除需二次确认,有员工报名参加的活动,不允许删除,提示"该活动已有员工报名参加,无法删除" + +**弹窗列表:** + +**人员筛选弹窗:** + +![弹窗截图](screenshots/plan-list-modal-person-filter.jpg) + +- 标题:人员筛选 - **活动名称**;顶部统计:应参加人数、已报名人数、未报名人数 +- 筛选条件:单位/部门(下拉)、姓名(输入框)、员工编号(输入框)、是否报名(下拉:全部/已报名/未报名)、性别(下拉)、年龄(运算符筛选)、身高(运算符筛选)、体重(运算符筛选)、BMI(运算符筛选) +- 表格列:序号、单位、部门、姓名、员工编号、性别、年龄、身高(cm)、体重(kg)、BMI、是否报名、操作 +- 分页:底部展示共N条数据与分页按钮 +- 点击"新增人员"按钮打开新增人员弹窗 + +**新增人员弹窗(二级弹窗,搜索选择):** + +![弹窗截图](screenshots/plan-list-modal-add-person.jpg) + +- 输入员工编号或姓名搜索,下拉展示匹配结果 +- 选中后展示员工基本信息卡片:单位、部门、姓名、员工编号、身高、体重、BMI +- 未选中人员时"确定"置灰不可点击;点击"确定"将选中人员加入活动人员列表并关闭弹窗 + +**审核人员弹窗:** + +![弹窗截图](screenshots/plan-list-modal-reviewer.jpg) + +- 标题:审核人员 - **活动名称** +- 表格列:序号、单位、姓名、所属医疗点、联系电话、职称、岗位、操作 +- 分页:底部展示共N条数据与分页按钮 +- 点击"新增"按钮打开新增审核人员弹窗 + +**新增审核人员弹窗(二级弹窗,搜索选择):** + +![弹窗截图](screenshots/plan-list-modal-add-reviewer.jpg) + +- 输入姓名搜索,下拉展示匹配结果 +- 选中后展示员工基本信息卡片:单位、所属医疗点、姓名、联系电话、岗位、职称 +- 未选中人员时"确定"置灰不可点击;点击"确定"将选中审核人员加入列表并关闭弹窗 **交互说明:** -- 点击"新增计划"跳转到新增计划页面 -- 未开始状态点击"编辑"跳转到编辑计划页面,回填数据;进行中状态编辑按钮置灰不可点击 -- 点击"删除"弹出确认提示后删除 +- 点击"新增活动"跳转到新增活动页面 +- 未开始状态点击"编辑"跳转到编辑活动页面,回填数据;进行中状态编辑按钮置灰不可点击 +- 点击"删除"弹出确认提示后删除(进行中&有人参加的活动无法删除) - 点击人员筛选数字打开人员筛选弹窗(展示指定/全部参与人员列表) - 点击审核人员数字打开审核人员弹窗 - 支持导出列表数据、查看导出任务 --- -### 4-1. 新增/编辑计划(plan-edit.html) +### 4-1. 新增/编辑活动(plan-edit.html) ![页面截图](screenshots/plan-edit.jpg) -**功能说明:** 完整的干预计划创建/编辑表单页面,包含组织机构选择、人员筛选、审核人指定等功能。 +**功能说明:** 完整的干预活动创建/编辑表单页面,包含组织机构选择、人员筛选、审核人指定等功能。 **页面布局:** 表单卡片式布局 -- 页面标题区:动态显示"新增计划"或"编辑计划" +- 页面标题区:动态显示"新增活动"或"编辑活动" - 表单区域:按照表单字段排列 - 底部保存栏:固定在页面底部,包含取消和保存按钮 @@ -354,34 +407,41 @@ | 字段名 | 类型 | 必填 | 校验规则 | |--------|------|------|------------------------| | 活动组织机构 | 树形选择器 | 是 | 选择单位→部门的树形结构 | -| 计划名称 | 文本输入框 | 是 | 不超过50字符 | +| 活动名称 | 文本输入框 | 是 | 不超过50字符 | | 人员筛选 | 单选按钮组 | 是 | "全体人员" / "指定人员" | | 指定部门 | 多选下拉 | 否 | 选择"指定人员"时显示,需先选组织机构 | | 指定员工 | 员工选择器 | 否 | 选择"指定人员"时显示,点击打开员工选择弹窗 | -| 大病员工过滤 | 复选框 | 否 | 可查看大病员工列表弹窗 | -| 计划起止日期 | 日期范围选择 | 是 | 结束日期不得早于开始日期 | +| 大病员工过滤 | 复选框 | 否 | 可查看大病人员列表弹窗 | +| 活动起止日期 | 日期范围选择 | 是 | 结束日期不得早于开始日期 | | 组织部门 | 下拉选择 | 是 | 从组织机构对应的部门列表中选择 | | 负责人 | 搜索下拉 | 是 | 支持搜索姓名,单选,从组织机构中进行搜索 | | 审核人 | 搜索下拉 | 否 | 支持搜索姓名,可多选,从医疗点中进行搜索 | -| 通知文件 | 拖拽上传区 | 是 | 支持PDF/Word,最大10MB | +| 通知文件 | 拖拽上传区 | 是 | 支持PDF/Word,最大20MB | | 奖励等级 | 多行文本域 | 否 | 自由文本,不超过200字符 | -**人员选择弹窗:** +**员工选择弹窗:** + +![弹窗截图](screenshots/plan-edit-modal-emp-select.jpg) + - 筛选条件:部门、姓名、工号、体重(运算符筛选)、BMI(运算符筛选) - 表格列:复选框、单位、部门、姓名、员工编号、性别、年龄、身高(cm)、体重(kg)、BMI - 已选员工以可移除标签形式展示在表单中 - 底部显示共N条/已选N条 **大病人员列表弹窗:** + +![弹窗截图](screenshots/plan-edit-modal-serious-list.jpg) + - 顶部警告提示"当前人员筛选中包含N位大病员工" -- 表格列:单位、部门、姓名、员工编号、性别、年龄、身高(cm)、体重(kg)、BMI、大病信息 +- 表格列:单位、部门、姓名、员工编号、性别、年龄、身高(cm)、体重(kg)、BMI、大病信息(疾病名称,多个逗号相隔) **交互说明:** - 选择组织机构后启用部门多选和员工选择器 - 人员筛选切换"全体人员"/"指定人员"时,展开/收起指定人员配置区 +- 选择制定人员后,自动查询大病员工信息并进行显示 - 已选员工以可移除标签列表展示 - 底部保存栏固定,滚动表单时始终可见 -- 点击"取消"返回计划列表页 +- 点击"取消"返回活动列表页 - 编辑模式下回填表单数据 --- @@ -392,30 +452,32 @@ ![页面截图](screenshots/registration-tracking.jpg) -**功能说明:** 跟踪干预计划中员工的报名和任务书提交流程,按不同的报名状态分Tab管理。 +**功能说明:** 跟踪干预活动中员工的报名和任务书提交流程,按不同的报名状态分Tab管理。 -**干预计划选择区:** 搜索下拉选择干预计划,选中后右侧展示计划基本信息(组织机构、起止日期、进行天数、应参加人数、实际参加人数) +**Tab切换:** 全部 / 未提交任务书 / 已提交待审核 / 已通过待签署 / 已签署(各Tab带数量角标) -**Tab切换:** 未提交任务书 / 已提交待审核 / 已通过待签署 / 已签署(各Tab带数量角标) - -**筛选条件:** 单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框)、体重(kg)(运算符+值输入,支持等于/大于/小于/大于等于/小于等于/范围)、BMI(运算符+值输入,同上) +**筛选条件:** 单位部门(二级联动面板)、活动名称(搜索下拉)、姓名(输入框)、员工编号(输入框)、体重(kg)(运算符+值输入,支持等于/大于/小于/大于等于/小于等于/范围)、BMI(运算符+值输入,同上) **各Tab表格列:** | Tab | 表格列 | |-----|-------| -| 未提交任务书 | 计划名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、初始体重(kg)、初始BMI、初始腰围(cm)、初始体脂(%) | -| 已提交待审核 | 同上 + 目标体重(kg)、目标BMI、目标腰围(cm)、目标体脂(%)、提交时间 | -| 已通过待签署 | 同上 + 审核时间 | -| 已签署 | 同上 + 签署时间、操作(承诺书) | +| 全部 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、体重(kg)、BMI、腰围(cm)、体脂(%)、提交时间、审核时间、签署时间、承诺书、状态 | +| 未提交任务书 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、体重(kg)、BMI、腰围(cm)、体脂(%) | +| 已提交待审核 | 同上 + 提交时间 | +| 已通过待签署 | 同上 + 提交时间、审核时间 | +| 已签署 | 同上 + 提交时间、审核时间、签署时间、承诺书 | **承诺书预览弹窗:** + +![弹窗截图](screenshots/registration-tracking-modal-promise.jpg) + - 展示承诺书正文内容,含员工信息、目标体重、承诺事项 - 包含承诺人签名和日期区域 - 仅查看模式 **交互说明:** -- 未选择干预计划时,查看所有进行中活动被纳入参加范围的员工,选择干预计划后,查看该计划内被纳入的员工 +- 未选择活动时,查看所有进行中活动被纳入参加范围的员工,选择活动后,查看该活动内被纳入的员工 - Tab切换筛选不同状态的报名记录 - 体重和BMI筛选支持自定义运算符(等于/大于/小于/大于等于/小于等于/范围),选择"范围"时展开第二个输入框 - 承诺书弹窗展示完整的承诺书内容 @@ -429,31 +491,31 @@ **功能说明:** 管理员审核员工提交的目标体重设置,支持通过/驳回操作,驳回时需填写原因。 -**干预计划选择区:** 与报名跟踪页面结构一致 +**Tab切换:** 全部 / 待审核 / 已通过 / 已通过待签署 / 已驳回(各Tab带数量角标) -**Tab切换:** 待审核 / 已通过 / 已通过待签署 / 已驳回(各Tab带数量角标) - -**筛选条件:** 单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框)、体重(kg)(运算符筛选)、BMI(运算符筛选) +**筛选条件:** 单位部门(二级联动面板)、活动名称(搜索下拉)、姓名(输入框)、员工编号(输入框)、体重(kg)(运算符筛选)、BMI(运算符筛选) **各Tab表格列:** | Tab | 表格列 | |-----|-------| -| 待审核 | 计划名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、初始体重(kg)、初始BMI、初始腰围(cm)、初始体脂(%)、目标体重(kg)、目标BMI、目标腰围(cm)、目标体脂(%)、提交时间、操作(审核) | +| 全部 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、体重(kg)、BMI、腰围(cm)、体脂(%)、提交时间、驳回时间、审核人、驳回原因、状态 | +| 待审核 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、体重(kg)、BMI、腰围(cm)、体脂(%)、提交时间、操作(审核) | | 已通过 | 同上 + 审核时间、审核人 | | 已通过待签署 | 同上(含审核时间、审核人) | | 已驳回 | 同上 + 驳回时间、审核人、驳回原因 | **审核弹窗:** -- 员工基本信息卡片:计划名称、姓名、员工编号、性别、年龄、身高、所属单位、所属部门、提交时间、活动起止日期 -- 指标对比表格:指标名称、干预前数值、箭头、目标数值、变化量(差值带颜色:达标绿色、未达标红色) + +![弹窗截图](screenshots/target-weight-review-modal-audit.jpg) + +- 员工基本信息卡片:活动名称、姓名、员工编号、性别、年龄、身高、所属单位、所属部门、提交时间、活动起止日期 +- 指标对比表格:指标名称、初始数值、箭头、目标数值、变化量(差值带颜色:达标绿色、未达标红色) - 对比指标:体重(kg)、BMI、腰围(cm)、体脂(%) - 审核决策按钮组:通过 / 驳回 - 选择"驳回"时展开驳回原因输入区: - 驳回原因文本域(必填) -**承诺书预览弹窗:** 与报名跟踪中的承诺书弹窗结构一致 - **业务规则:** - 指标对比表格中,变化量为正(增重)红色标注,变化量为负(减重)绿色标注 - 通过审核后员工状态变为"已通过",需员工签署承诺后变为"已签署" @@ -462,17 +524,521 @@ - 点击"审核"打开审核弹窗 - 审核弹窗中通过/驳回按钮为互斥选择,选中后高亮显示 - 选择驳回时必须填写驳回原因,否则无法提交 -- 查看模式下弹窗仅展示信息,无决策按钮 -- 承诺书预览弹窗展示完整承诺书 - 支持导出列表数据 --- -## 四、设备管理 +## 四、过程管理 -### 7-10. 四种设备类型的设备管理与设备监测 +> **说明:** 过程管理模块各页面查询数据时,只查询进行中的活动数据(选择活动下拉选择框也只能选择进行中的活动),已结束的直接归为历史活动中。 -体重管理模块支持四种设备类型:**体重秤、蓝牙称、体脂仪、运动器械**。每种设备类型均包含设备管理和设备监测两个子页面,功能结构完全一致。 +### 7. 行动记录(action-record.html) + +![页面截图](screenshots/action-record.jpg) + +**功能说明:** 监控干预活动中员工的体重管理行动执行情况,分为员工数据和单位数据两个维度。 + +**主Tab切换:** 员工数据 / 单位数据 + +**员工数据Tab:** + +**筛选条件:** 单位部门(二级联动面板)、活动名称(搜索下拉)、日期范围、姓名(输入框)、员工编号(输入框) + +**三测记录子Tab:** 体重 / 饮食 / 运动 + +**记录状态筛选:** 全部 / 已记录 / 未记录 + +**体重子Tab表格列(多级表头,18列):** +- 第一级:序号、活动名称、姓名、员工编号、性别、年龄、单位、部门、打卡次数(可排序)、打卡天数(可排序)、首次记录日期、末次记录日期、末次记录数据(6子列) +- 末次记录数据子列:身高、体重、BMI、体脂、腰围、记录来源 + +**饮食/运动子Tab表格列(单行表头,12列):** +- 序号、活动名称、姓名、员工编号、性别、年龄、单位、部门、打卡次数(可排序)、打卡天数(可排序)、首次记录日期、末次记录日期 + +**单位数据Tab:** + +**筛选条件:** 单位(下拉)、日期范围 + +**表格列:** 序号、单位、总人数、三测人数、三测率 + +**弹窗列表:** + +| 弹窗名称 | 表格列 | +|-------------------------|-------| +| 打卡记录弹窗(按体重/饮食/运动子Tab切换) | 序号、记录时间 + 按子Tab:体重(kg)、BMI、体脂率(%)、腰围(cm) / 餐次、总摄入(千卡) / 运动类型、运动数据、消耗(千卡),末列为数据来源 | +| 饮食记录弹窗 | 序号、记录时间、餐次、总摄入(千卡)、数据来源 | +| 运动记录弹窗 | 序号、记录时间、运动类型、运动数据、消耗(千卡)、来源 | +| 体重记录弹窗 | 序号、记录时间、体重(kg)、BMI、体脂率(%)、腰围(cm)、来源 | +| 今日饮食未记录员工 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门 | +| 今日饮食已记录员工 | 同上 + 身高(cm)、体重(kg)、BMI、行动餐次、总能量摄入(千卡)、数据来源 | +| 今日运动未记录员工 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门 | +| 今日运动已记录员工 | 同上 + 身高(cm)、体重(kg)、BMI、总消耗(千卡)、数据来源 | +| 今日体重未记录员工 | 序号、活动名称、姓名、员工编号、性别、年龄、所属单位、所属部门 | +| 今日体重已记录员工 | 同上 + 身高(cm)、体重(kg)、BMI、体脂(%)、腰围(cm)、最后记录时间、数据来源 | +| 活动期间累计行动员工 | 3个子Tab(饮食/运动/体重)+ 表格列:序号、单位、部门、姓名、员工编号、性别、年龄、联系方式、身高(cm)、体重(kg)、BMI、累计记录天数 | +| 单位活动人数/三测人数 | 序号、活动名称、姓名、员工编号、单位、部门、体重记录、饮食记录、运动记录、三测完成 | + +**弹窗截图:** + +**打卡记录弹窗(体重子Tab):** + +![弹窗截图](screenshots/action-record-modal-checkin.jpg) + +**饮食记录弹窗:** + +![弹窗截图](screenshots/action-record-modal-diet.jpg) + +**运动记录弹窗:** + +![弹窗截图](screenshots/action-record-modal-exercise.jpg) + +**体重记录弹窗:** + +![弹窗截图](screenshots/action-record-modal-weight.jpg) + +**今日饮食未记录员工弹窗(运动/体重未记录弹窗结构一致):** + +![弹窗截图](screenshots/action-record-modal-diet-unrecorded.jpg) + +**今日饮食已记录员工弹窗:** + +![弹窗截图](screenshots/action-record-modal-diet-recorded.jpg) + +**今日运动已记录员工弹窗:** + +![弹窗截图](screenshots/action-record-modal-exercise-recorded.jpg) + +**今日运动未记录员工弹窗:** + +![弹窗截图](screenshots/action-record-modal-exercise-unrecorded.jpg) + +**今日体重已记录员工弹窗:** + +![弹窗截图](screenshots/action-record-modal-weight-recorded.jpg) + +**今日体重未记录员工弹窗:** + +![弹窗截图](screenshots/action-record-modal-weight-unrecorded.jpg) + +**活动期间累计行动员工弹窗(3子Tab):** + +![弹窗截图](screenshots/action-record-modal-cumulative.jpg) + +**单位活动人数/三测人数弹窗:** + +![弹窗截图](screenshots/action-record-modal-unit-detail.jpg) + +**交互说明:** +- 员工数据Tab中点击统计卡片/记录状态可切换查看已记录/未记录 +- 点击"打卡次数"打开打卡记录弹窗(按当前子Tab展示体重/饮食/运动打卡记录) +- 点击表格行查看该员工的详细记录弹窗 +- 支持导出列表数据、查看导出任务 + +--- + +### 8. 体重排名(weight-ranking.html) + +![页面截图](screenshots/weight-ranking.jpg) + +**功能说明:** 在干预活动内按个人或单位进行体重管理效果的排名对比。 + +**主Tab切换:** 个人排名 / 单位排名 + +**个人排名Tab:** + +**筛选条件:** 单位部门(二级联动面板)、活动名称(搜索下拉)、姓名(输入框)、员工编号(输入框) + +**表格列(16列):** +- 序号、活动名称、姓名、员工编号、性别、年龄、单位、部门、减重量(kg)、减重率(%)、综合得分、行动得分、减重量排名(可排序)、减重率排名(可排序)、综合分排名(可排序)、行动分排名(可排序) + +**单位排名Tab:** + +**单位层级切换(分段控件):** 二级单位 / 三级单位 + +**筛选条件:** 单位筛选(多选下拉,支持全选/清空) + +**二级单位表格列(12列):** +- 序号、活动名称、单位、参与人数、人均减重量(kg)、人均减重率、人均综合得分、人均行动得分、减重量排名(可排序)、减重率排名(可排序)、综合分排名(可排序)、行动分排名(可排序) + +**三级单位表格列(13列):** 在二级单位基础上增加"部门"列(位于单位和参与人数之间) + +**业务规则:** +- 前2-4列左侧固定,后4列排名右侧固定 +- 各排名列支持点击表头切换升降序 + +**交互说明:** +- 点击表头排序列切换升降序 +- 支持导出列表数据、查看导出任务 + +--- + +### 9. 活动总览(action-overview.html) + +![页面截图](screenshots/action-overview.jpg) + +**功能说明:** 以员工为维度展示干预活动下所有参与人员的体重管理效果总览,包括初始/目标/当前指标、饮食运动总览和排名信息。 + +**筛选条件:** 单位部门(二级联动面板)、活动名称(搜索下拉)、姓名(输入框)、员工编号(输入框) + +**表格列(多级表头,36列):** +- 第一级(rowspan=2):序号、活动名称、姓名、员工编号、性别、年龄、单位、部门、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、现体重(kg)、现BMI、现体脂(%)、现腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm) +- 第一级(colspan=4):饮食总览 +- 第一级(colspan=4):运动总览 +- 第一级(rowspan=2):减重量排名、减重率排名、赛况明细 +- 饮食总览子列:缺天、缺餐、日均摄入(千卡)、累计摄入(千卡) +- 运动总览子列:缺天、日均步数、日均消耗(千卡)、累计消耗(千卡) +- 活动名称/姓名/员工编号列左侧固定,赛况明细列右侧固定 + +**交互说明:** +- 操作列点击"赛况明细"跳转到赛况明细页(action-overview-detail.html) +- 支持导出列表数据、查看导出任务 + +--- + +### 9-1. 赛况明细(action-overview-detail.html) + +![页面截图](screenshots/action-overview-detail.jpg) + +**功能说明:** 展示单个员工在干预活动中的每日详细数据,包括体重指标变化、摄入消耗和热量平衡。 + +**页面布局:** +- 面包屑导航:活动总览 / 赛况明细 +- 活动信息卡片:活动名称、起止日期 +- 员工信息卡片:姓名、员工编号、性别、年龄、单位、部门、身高 +- 日期筛选Tab:全部 / 选时(范围选择)/ 日 / 周 / 月 / 季 / 年 + +**表格列(单行表头,15列):** +- 序号、日期、身高(cm)、体重(kg)、BMI、体脂(%)、腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm)、摄入(千卡)、消耗(千卡)、吃动热量差(千卡)、当日减重排名 +- 日期列左侧固定 + +**交互说明:** +- 面包屑导航支持返回活动总览 +- 日期筛选支持多种粒度(全部/范围/日/周/月/季/年) +- 支持导出列表数据、查看导出任务 + +--- + +### 10. 活动统计(activity-statistics.html) + +![页面截图](screenshots/activity-statistics.jpg) + +**功能说明:** 以干预活动维度汇总各项活动的统计数据,包括参与人数、减重指标和摄入消耗数据。 + +**筛选条件:** 活动名称(搜索下拉)、单位(多选下拉,支持全选/清空) + +**表格列(19列):** +- 序号、活动名称、组织机构、起止日期、应参加人数、已参加人数、未参加人数、人均初始体重(kg)、人均初始BMI、人均现体重(kg)、人均现BMI、人均减重量(kg)、活动累计减重量(kg)、人均减重率、人均BMI下降、人均每日摄入(千卡)、累计摄入(千卡)、人均每日消耗(千卡)、累计消耗(千卡) +- 前2-3列左侧固定 + +**业务规则:** +- 减重量正值绿色(减重),负值红色(增重) + +**交互说明:** +- 支持导出列表数据、查看导出任务 + +--- + +### 11. 食堂食谱(recipe-record.html) + +![页面截图](screenshots/recipe-record.jpg) + +**功能说明:** 展示各食堂/供餐点的餐品供应记录,辅助管理人员了解员工的饮食营养摄入情况。 + +**筛选条件:** 食堂名称(输入框)、餐次(下拉:全部餐次/早餐/午餐/晚餐)、日期范围(默认当周周一至周日)、餐品名称(输入框) + +**表格列:** 序号、单位、食堂名称、用餐日期、餐次、餐品名称、操作 + +**新增记录弹窗:** + +![弹窗截图](screenshots/recipe-record-modal-add.jpg) + +- 表单字段:单位(下拉)、食堂名称(下拉)、用餐日期(日期选择)、餐次(下拉)、餐品名称(动态列表,可添加/删除多项) + +**操作按钮:** 新增记录、批量导入、查看导入任务、导出列表数据、查看导出任务 + +**交互说明:** +- 点击"新增记录"打开新增记录弹窗 +- 餐品名称支持动态添加多个输入项 +- 支持导出列表数据 + +--- + +## 五、历史活动 + +### 12. 历史活动列表(history-plan-list.html) + +![页面截图](screenshots/history-plan-list.jpg) + +**功能说明:** 查看所有已结束的历史干预活动及其执行效果统计数据。 + +**筛选条件:** 组织机构(二级联动面板)、年份(年份选择器) + +**表格列:** 序号、活动名称、组织机构、负责部门、起止日期、人员范围(可点击查看)、应参加人数、已参加人数、未参加人数、完成体重目标人数、完成体脂目标人数、完成腰围目标人数、人均减重(kg)、人均减重率(%)、人均腰围减少(cm)、人均每日摄入(千卡)、人均每日消耗(千卡)、人均每日热量缺口、人均综合得分、人均行动得分、负责人 + +**业务规则:** +- 表格列较多,前几列(序号、活动名称等)做左侧固定,支持横向滚动 +- 人员范围列显示人数,可点击查看人员明细 + +**交互说明:** +- 点击"人员范围"数字打开人员范围弹窗(展示参与人员列表) +- 操作列点击活动名称跳转到活动详情页(history-plan-detail.html) +- 支持导出列表数据、查看导出任务 + +**人员范围弹窗:** + +![弹窗截图](screenshots/history-plan-list-modal-staff.jpg) + +- 标题:人员范围 - **活动名称** +- 筛选:单位部门(二级联动面板)、姓名(输入框)、员工编号(输入框) +- 表格列:序号、姓名、员工编号、性别、年龄、单位、部门、身高(cm)、体重(kg)、BMI + +--- + +### 12-1. 历史活动详情(history-plan-detail.html) + +![页面截图](screenshots/history-plan-detail.jpg) + +**功能说明:** 展示历史干预活动的完整详情和效果分析数据,分为5个Tab模块。 + +**页面布局:** +- 面包屑导航:体重管理 / 历史活动 / **活动名称** +- 活动概览卡片:16项指标网格(应参加人数、实际参加人数、未参加人数、完成体重目标人数、完成体脂目标人数、完成腰围目标人数、人均减重(kg)、人均减重率(%)、人均BMI降低、人均体脂降低(%)、人均腰围减少(cm)、人均每日摄入热量(kcal)、人均每日消耗热量(kcal)、人均每日能量缺口、人均综合得分、人均行动得分) +- 5个主Tab:报名管理 / 每日行动 / 总览数据 / 活动排名 / 活动信息 + +**Tab 0 — 报名管理:** +- 状态分段Tab:全部 / 未提交任务书 / 已提交待审核 / 已通过待签署 / 已签署(带数量角标) +- 筛选:单位部门、姓名、员工编号 +- 表格列:序号、姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、初始体重(kg)、初始BMI、初始腰围(cm)、初始体脂(%) + - 状态 ≥ 已提交 增加:目标体重(kg)、目标BMI、目标腰围(cm)、目标体脂(%)、提交时间 + - 状态 ≥ 已通过 增加:审核时间 + - 状态 = 已签署 增加:签署时间、承诺书 + +**Tab 1 — 每日行动:** +- 子分段Tab:每日记录 / 三测记录 +- 每日记录筛选:日期范围、单位部门、姓名、员工编号 +- 每日记录表格(28列):序号、姓名、员工编号、性别、年龄、单位、部门、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、现体重(kg)、现BMI、现体脂(%)、现腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm)、日期、饮食记录、运动记录、体重记录 +- 三测记录子Tab:体重/饮食/运动 + 全部/已记录/未记录筛选 +- 三测记录表格:序号、姓名、员工编号、性别、年龄、单位、部门、首次记录日期、末次记录日期 + +**Tab 2 — 总览数据:** +- 筛选:单位部门、姓名、员工编号 +- 表格:序号、姓名、员工编号、性别、年龄、单位、部门、联系方式、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、最终体重(kg)、最终BMI、最终体脂(%)、最终腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm)、饮食记录天数、运动记录天数、体重记录天数、日均摄入(千卡)、日均消耗(千卡)、日均热量缺口、综合得分、行动得分、减重量排名(可排序)、减重率排名(可排序)、综合分排名(可排序)、行动分排名(可排序) + +**Tab 3 — 活动排名:** +- 主分段Tab:个人排名 / 单位排名 +- 个人排名表格(19列):序号、姓名、员工编号、性别、年龄、单位、部门、初始体重、初始BMI、现体重、现BMI、体重变化(kg)、减重率(%)、BMI变化、综合得分、行动得分、减重量排名、减重率排名、综合分排名、行动分排名(后4列可排序) +- 单位排名分段:二级单位 / 三级单位 +- 二级单位表格(12列):序号、单位、参与人数、人均减重量(kg)、人均减重率、人均综合得分、人均行动得分、减重量排名、减重率排名、综合分排名、行动分排名 +- 三级单位表格(13列):在二级单位基础上增加"部门"列 + +**Tab 4 — 活动信息:** +- 活动基本信息:干预活动名称、人员筛选、指定部门、指定员工、是否自动提醒签订承诺书、大病员工过滤(含查看链接)、活动起止日期、组织部门、负责人、审核人 +- 通知文件列表 +- 奖励等级信息 + +**弹窗:** +- 饮食记录弹窗:序号、餐次、摄入时间、总摄入(千卡)、数据来源 +- 运动记录弹窗:序号、运动类型、运动数据、消耗(千卡)、来源 +- 体重记录弹窗:序号、记录时间、体重(kg)、BMI、体脂率(%)、腰围(cm)、来源 +- 承诺书弹窗:承诺书样式证书卡片 +- 大病人员弹窗:序号、单位、部门、姓名、员工编号、性别、年龄、身高(cm)、体重(kg)、BMI、大病信息 + +**弹窗截图:** + +**饮食记录弹窗:** + +![弹窗截图](screenshots/history-plan-detail-modal-diet.jpg) + +**运动记录弹窗:** + +![弹窗截图](screenshots/history-plan-detail-modal-exercise.jpg) + +**体重记录弹窗:** + +![弹窗截图](screenshots/history-plan-detail-modal-weight.jpg) + +**承诺书弹窗:** + +![弹窗截图](screenshots/history-plan-detail-modal-promise.jpg) + +**大病人员弹窗:** + +![弹窗截图](screenshots/history-plan-detail-modal-serious.jpg) + +**交互说明:** +- 面包屑支持返回历史活动列表 +- 各Tab独立筛选和数据 +- 支持导出列表数据 + +--- + +### 12-2. 人员详情(history-personnel-detail.html) + +![页面截图](screenshots/history-personnel-detail.jpg) + +**功能说明:** 展示单个员工在所有历史干预活动中的完整数据和指标变化,由"总览记录"页面点击"查看"跳转进入。 + +**页面布局:** +- 返回链接 + 面包屑导航:历史活动 / **员工姓名** +- 员工信息卡片:头像(首字母)、姓名、员工编号、性别、年龄、单位、部门 + 日期范围筛选 +- 指标汇总卡片("体重管理指标变化"):4组指标(体重(kg)/BMI/体脂(%)/腰围(cm)),每组展示 初始 → 最终 → 变化 +- Tab切换:饮食记录 / 运动记录 / 体重记录 + +**饮食记录Tab表格列:** 时间、餐次、摄入热量(千卡)、来源(标签:智记/自记) + +**运动记录Tab表格列:** 时间、运动类型、运动时长/数据、消耗热量(千卡)、来源(标签:穿戴/微信/自记/器械) + +**体重记录Tab表格列:** 时间、体重(kg)、BMI、体脂率(%)、腰围(cm)、来源(标签:身高秤/体脂仪/蓝牙称/自记) + +**交互说明:** +- 面包屑支持返回总览记录 +- 日期范围支持按时间段筛选记录 +- 各Tab独立分页 + +--- + +## 六、人员数据 + +### 13. 三测记录(personnel-measure-record.html) + +![页面截图](screenshots/personnel-measure-record.jpg) + +**功能说明:** 以员工为维度查看参与干预活动人员的体重/饮食/运动三测记录执行情况,分为员工数据和单位数据两个维度。 + +**主Tab切换:** 员工数据 / 单位数据 + +**员工数据Tab:** + +**说明:** 默认近一周的全部员工的三测行动记录数据 + +**筛选条件:** 单位部门(二级联动面板)、活动名称(搜索下拉)、日期范围、姓名(输入框)、员工编号(输入框) + +**三测记录子Tab:** 体重 / 饮食 / 运动 + +**记录状态筛选:** 全部 / 已记录 / 未记录 + +**体重子Tab表格列(多级表头,18列):** +- 第一级:序号、活动名称、姓名、员工编号、性别、年龄、单位、部门、打卡次数(可排序)、打卡天数(可排序)、首次记录日期、末次记录日期、末次记录数据(6子列) +- 末次记录数据子列:身高、体重、BMI、体脂、腰围、记录来源 + +**饮食/运动子Tab表格列(单行表头,12列):** +- 序号、活动名称、姓名、员工编号、性别、年龄、单位、部门、打卡次数(可排序)、打卡天数(可排序)、首次记录日期、末次记录日期 + +**单位数据Tab:** + +**说明:** 默认近一周的单位行动记录统计数据 + +**筛选条件:** 单位(下拉)、日期范围 + +**表格列:** 序号、单位、总人数、三测人数、三测率 + +**弹窗列表:** 与"行动记录"页面一致(打卡记录/饮食/运动/体重记录弹窗、今日已/未记录员工弹窗、活动期间累计行动员工弹窗、单位详情弹窗) + +**弹窗截图(代表弹窗,其余与"行动记录"页面结构一致):** + +**饮食记录弹窗:** + +![弹窗截图](screenshots/personnel-measure-record-modal-diet.jpg) + +**今日饮食未记录员工弹窗:** + +![弹窗截图](screenshots/personnel-measure-record-modal-diet-unrecorded.jpg) + +**活动期间累计行动员工弹窗:** + +![弹窗截图](screenshots/personnel-measure-record-modal-cumulative.jpg) + +**交互说明:** +- 记录状态切换查看已记录/未记录 +- 点击表格行查看该员工的详细记录弹窗 +- 支持导出列表数据、查看导出任务 + +--- + +### 14. 总览记录(personnel-overview-record.html) + +![页面截图](screenshots/personnel-overview-record.jpg) + +**功能说明:** 以员工为维度汇总展示所有参与过干预活动人员的体重管理指标变化,点击"查看"跳转到人员详情。 + +**筛选条件:** 单位部门(二级联动面板)、姓名(输入框)、员工编号(输入框)、日期范围(默认近七日) + +**表格列(多级表头,23列):** +- 第一级:序号、姓名、员工编号、性别、年龄、单位、部门 +- 体重(kg)子列:初始、最终、变化 +- BMI子列:初始、最终、变化 +- 体脂(%)子列:初始、最终、变化 +- 腰围(cm)子列:初始、最终、变化 +- 饮食记录次数、运动记录次数、体重记录次数、详细数据 + +**业务规则:** +- 体重变化负值绿色(减重),正值红色(增重) +- 姓名列左侧固定,详细数据列右侧固定 + +**交互说明:** +- 操作列点击"查看"跳转到人员详情页(history-personnel-detail.html) +- 支持导出列表数据、查看导出任务 + +--- + +## 七、个人体重管理 + +### 15. 个人目标数据(personal-target-data.html) + +![页面截图](screenshots/personal-target-data.jpg) + +**功能说明:** 展示所有员工的个人体重管理目标设置情况和目标达成进度。 + +**筛选条件:** 单位部门(二级联动面板)、姓名(输入框)、员工编号(输入框)、是否设置个人目标(下拉:全部/已设置/未设置) + +**表格列(多级表头):** +- 第一级:姓名、员工编号、性别、年龄、单位、部门 +- 目标周期子列:目标起止日期、目标天数 +- 初始指标子列:身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm) +- 目标指标子列:目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm) +- 当前指标子列:现体重(kg)、现BMI、现体脂(%)、现腰围(cm) +- 变化子列:体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm) +- 详细数据列 + +**业务规则:** +- 变化列负值绿色(改善),正值红色(恶化) +- 未设置目标的员工,目标周期和目标指标列显示"-",仅当前指标有实际称重数据 +- 姓名和员工编号列做左侧固定 +- 详细数据列做右侧固定 + +**交互说明:** +- 操作列点击"查看"跳转到个人目标详情页 +- 支持导出列表数据、查看导出任务 + +--- + +### 15-1. 个人目标详情(personal-target-detail.html) + +![页面截图](screenshots/personal-target-detail.jpg) + +**功能说明:** 展示单个员工的目标设定详情、指标变化和每日记录明细。 + +**页面布局:** +- 返回链接 + 面包屑导航:体重管理 / 个人体重管理 / 个人目标数据 / **员工姓名** +- 概览卡片(三栏布局): + - 左:个人信息(姓名、员工编号、性别、年龄、单位、部门) + - 中:个人目标信息(干预活动搜索下拉,选中后展示起止日期、状态、目标指标:体重/BMI/体脂率/腰围) +- 筛选条件:日期范围 +- 指标变化卡片:4组(体重(kg)/BMI/体脂率(%)/腰围(cm))展示 初始 → 当前 → 变化 +- 每日记录表格:日期、饮食记录(千卡)、运动记录(千卡)、体重(kg)、BMI、体脂率(%)、腰围(cm) + +**交互说明:** +- 返回按钮跳转回个人目标数据列表页 +- 干预活动选择后展示对应目标信息 +- 支持导出列表数据、查看导出任务 + +--- + +## 八、设备管理 + +### 16-19. 四种设备类型的设备管理与设备监测 + +体重管理模块支持四种设备类型:**体重秤、蓝牙称、体脂仪、运动器械**。每种设备类型均包含设备管理和设备监测两个子页面(侧边栏以可折叠分组展示),功能结构基本一致,其中蓝牙称的设备管理额外提供成员管理功能。 #### 设备管理(以体重秤为例:scale-device.html) @@ -486,7 +1052,7 @@ **业务规则:** - 设备状态标签:正常(绿色)、维护中(橙色)、已停用(红色) -- 操作列包含详情、编辑、删除 +- 操作列包含详情、编辑、删除(蓝牙称额外包含"成员管理") **交互说明:** - 点击"新增设备"打开新增设备弹窗 @@ -507,6 +1073,40 @@ | 布放位置 | 文本输入框 | 是 | 地图选择,可修改详细地址 | | 入库日期 | 日期选择 | 是 | 不得晚于当前日期 | +**新增设备弹窗截图:** + +**体重秤(scale-device-add.html):** + +![弹窗截图](screenshots/scale-device-add.jpg) + +**蓝牙称(bluetooth-device-add.html,布放位置含详细地址):** + +![弹窗截图](screenshots/bluetooth-device-add.jpg) + +**体脂仪(fat-device-add.html):** + +![弹窗截图](screenshots/fat-device-add.jpg) + +**运动器械(sport-device-add.html):** + +![弹窗截图](screenshots/sport-device-add.jpg) + +**蓝牙称特有 — 成员管理弹窗:** + +![弹窗截图](screenshots/bluetooth-device-modal-member.jpg) + +- 设备信息卡(设备名称、设备编码、所属单位、设备型号)+ 成员列表 +- 表格列:序号、姓名、身份证、性别、年龄、身高、是否为CQ员工、员工编号、同步设备 +- 点击"添加成员"打开添加成员弹窗(二级弹窗) + +**添加成员弹窗(二级弹窗,搜索选择):** + +![弹窗截图](screenshots/bluetooth-device-modal-add-member.jpg) + +- 员工搜索输入框,按姓名/员工编号实时匹配,展示候选下拉 +- 选中后展示员工信息卡(姓名、员工编号、性别、年龄、单位、部门) +- 未选中员工时"确定"置灰不可点击,点击"确定"将员工加入设备成员列表 + --- #### 设备监测(4种设备类型各有独立监测页与监测详情页) @@ -547,6 +1147,10 @@ - **脂肪分析:** 皮下脂肪率(%)、内脏脂肪等级、去脂体重(kg) - **其他:** 无机盐量/矿物质量(kg)、细胞内液(kg)、细胞外液(kg)、健康评分 +**弹窗截图:** + +![弹窗截图](screenshots/scale-monitor-detail-modal-detail.jpg) + --- ##### 蓝牙称监测详情(bluetooth-monitor-detail.html) @@ -570,6 +1174,10 @@ - **细胞液:** 细胞外液量(L)、细胞外液率(%)、细胞内液量(L)、细胞内液率(%) - **其他:** 矿物质量(kg) +**弹窗截图:** + +![弹窗截图](screenshots/bluetooth-monitor-detail-modal-detail.jpg) + --- ##### 体脂仪监测详情(fat-monitor-detail.html) @@ -595,6 +1203,10 @@ - **节段脂肪:** 左上肢(kg)、左下肢(kg)、右上肢(kg)、右下肢(kg)、躯干(kg) - **节段肌肉:** 左上肢(kg)、左下肢(kg)、右上肢(kg)、右下肢(kg)、躯干(kg) +**弹窗截图:** + +![弹窗截图](screenshots/fat-monitor-detail-modal-detail.jpg) + --- ##### 运动器械监测详情(sport-monitor-detail.html) @@ -617,13 +1229,13 @@ --- -### 11. 员工监测数据(employee-data.html) +### 20. 员工监测数据(employee-data.html) ![页面截图](screenshots/employee-data.jpg) **功能说明:** 以员工为维度展示各设备采集的最新体重测量数据汇总。 -**筛选条件:** 姓名(输入框)、员工编号(输入框)、单位部门(二级联动下拉) +**筛选条件:** 姓名(输入框)、员工编号(输入框)、单位部门(二级联动面板) **表格列(多级表头):** - 第一级:姓名、员工编号、性别、年龄、所属单位、所属部门、最新测量数据(6列)、操作 @@ -639,7 +1251,7 @@ --- -### 11-1. 测量记录(employee-data-record.html) +### 20-1. 测量记录(employee-data-record.html) ![页面截图](screenshots/employee-data-record.jpg) @@ -657,6 +1269,10 @@ - 脂肪分析:皮下脂肪率(%)、内脏脂肪等级、去脂体重(kg) - 其他:无机盐量/矿物质量(kg)、细胞内液(kg)、细胞外液(kg)、健康评分 +**弹窗截图:** + +![弹窗截图](screenshots/employee-data-record-modal-detail.jpg) + **交互说明:** - 通过URL参数加载指定员工数据 - 表格支持按设备类型和日期范围筛选 @@ -665,7 +1281,7 @@ --- -### 12. 单位数据统计(dept-stat.html) +### 21. 单位数据统计(dept-stat.html) ![页面截图](screenshots/dept-stat.jpg) @@ -673,10 +1289,10 @@ **Tab切换:** 二级单位 / 三级单位 -**筛选条件:** 年份(下拉,默认当年)、所属单位(下拉);三级单位额外增加所属部门(下拉) +**筛选条件:** 单位(多选下拉,支持全选/清空)、日期范围;三级单位额外增加部门维度展示 **二级单位表格列(多级表头):** -- 第一级:单位、总人数 +- 第一级:序号、单位、总人数 - 体重秤子列:设备数量、使用次数、使用人数 - 蓝牙称子列:设备数量、使用次数、使用人数 - 体脂仪子列:设备数量、使用次数、使用人数 @@ -685,451 +1301,53 @@ **三级单位表格列:** 在二级单位基础上增加"部门"列(位于单位和总人数之间) **交互说明:** +- 每个设备数量/使用次数/使用人数数值可点击,打开对应的单位详情弹窗(展示该单位/部门下的设备明细、使用记录) - 支持导出列表数据、查看导出任务 +**单位详情弹窗:** + +![弹窗截图](screenshots/dept-stat-modal-unit-detail.jpg) + +- 顶部信息卡:单位、部门(三级单位时)、设备类型、指标名及数值、日期范围 +- 按指标展示明细表: + - 设备数量 → 设备明细:序号、设备名称、设备编码、布放位置、入库日期 + - 使用人数 → 人员列表:序号、姓名、员工编号、性别、年龄、使用次数 + - 使用次数 → 使用记录:序号、记录时间、姓名、员工编号、身高(cm)、体重(kg)、BMI、体脂率(%) + --- -### 13. 员工数据统计(employee-stat.html) +### 22. 员工数据统计(employee-stat.html) ![页面截图](screenshots/employee-stat.jpg) **功能说明:** 以员工为维度统计各类型设备的使用频次。 -**筛选条件:** 年份(下拉)、姓名(输入框)、员工编号(输入框)、单位部门(下拉) +**筛选条件:** 单位部门(下拉)、日期范围(默认近一个月)、姓名(输入框)、员工编号(输入框) **表格列:** -- 姓名、员工编号、性别、年龄、所属单位、所属部门 -- 体重秤使用次数(可排序) -- 蓝牙称使用次数(可排序) -- 体脂仪使用次数(可排序) -- 运动器械使用次数(可排序) +- 序号、姓名、员工编号、性别、年龄、所属单位、所属部门 +- 体重秤使用次数(可排序,可点击) +- 蓝牙称使用次数(可排序,可点击) +- 体脂仪使用次数(可排序,可点击) +- 运动器械使用次数(可排序,可点击) **交互说明:** - 各使用次数列支持点击表头排序 +- 点击使用次数打开"使用记录"弹窗(展示该员工在该设备类型下的使用记录明细) - 支持导出列表数据 ---- +**使用记录弹窗:** -## 五、过程管理 +![弹窗截图](screenshots/employee-stat-modal-usage.jpg) -> **说明:** 过程管理模块的所有页面均包含干预计划选择区,必须先选择干预计划才能查看数据。 - -### 14. 行动记录(action-record.html) - -![页面截图](screenshots/action-record.jpg) - -**功能说明:** 监控干预计划中员工的体重管理行动执行情况,分为员工数据和单位数据两个维度。 - -**干预计划选择区:** 搜索下拉选择干预计划,选中后右侧展示计划基本信息 - -**主Tab切换:** 员工数据 / 单位数据 +- 顶部信息卡:姓名、员工编号、单位、部门、日期范围 +- 使用记录表格按设备类型切换: + - 体重秤/蓝牙称/体脂仪 → 序号、记录时间、身高(cm)、体重(kg)、BMI、体脂率(%) + - 运动器械 → 序号、记录时间、运动类型、时长(分钟)、消耗(千卡) --- -**员工数据Tab:** - -**筛选条件:** 日期范围、单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框) - -**三测记录子Tab:** 体重 / 饮食 / 运动 - -**记录状态筛选:** 全部 / 已记录 / 未记录 - -**体重子Tab表格列(多级表头,17列):** -- 第一级:干预计划、姓名、员工编号、性别、年龄、单位、部门、打卡次数(可排序)、打卡天数(可排序)、首次记录日期、末次记录日期、末次记录数据(6子列) -- 末次记录数据子列:身高、体重、BMI、体脂、腰围、记录来源 - -**饮食/运动子Tab表格列(单行表头,11列):** -- 干预计划、姓名、员工编号、性别、年龄、单位、部门、打卡次数(可排序)、打卡天数(可排序)、首次记录日期、末次记录日期 - ---- - -**单位数据Tab:** - -**筛选条件:** 日期范围、单位(下拉) - -**表格列:** 单位、总人数、三测人数、三测率 - ---- - -**弹窗列表:** - -| 弹窗名称 | 表格列 | -|---------|-------| -| 饮食记录弹窗 | 序号、餐次、摄入时间、总摄入(千卡)、数据来源 | -| 运动记录弹窗 | 序号、运动类型、运动数据、消耗(千卡)、来源 | -| 体重记录弹窗 | 序号、记录时间、体重(kg)、BMI、体脂率(%)、腰围(cm)、来源 | -| 今日饮食未记录员工 | 干预计划、姓名、员工编号、性别、年龄、所属单位、所属部门 | -| 今日饮食已记录员工 | 同上 + 身高(cm)、体重(kg)、BMI、行动餐次、总能量摄入(千卡)、数据来源 | -| 今日运动已记录员工 | 同上 + 身高(cm)、体重(kg)、BMI、总消耗(千卡)、数据来源 | -| 今日体重已记录员工 | 同上 + 身高(cm)、体重(kg)、BMI、体脂(%)、腰围(cm)、最后记录时间、数据来源 | -| 累计行动员工 | 3个子Tab(饮食/运动/体重)+ 表格列:单位、部门、姓名、员工编号、性别、年龄、联系方式、身高(cm)、体重(kg)、BMI、累计记录天数 | - -**交互说明:** -- 必须先选择干预计划才能查看数据 -- 员工数据Tab中点击统计卡片上的数字打开对应的已记录/未记录弹窗 -- 点击表格行查看该员工的详细记录弹窗 -- 支持导出列表数据、查看导出任务 - ---- - -### 15. 详细数据(detail-data.html) - -![页面截图](screenshots/detail-data.jpg) - -**功能说明:** 以员工为维度展示干预计划中每人每日的详细指标数据,包括饮食摄入、运动消耗和体重记录。 - -**干预计划选择区:** 标准结构 - -**筛选条件:** 日期范围、单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框) - -**表格列(多级表头,19列):** -- 第一级:干预计划、姓名、员工编号、性别、年龄、单位、部门、日期、身高(cm)、饮食摄入(千卡)(4子列)、运动消耗(千卡)(2子列)、体重记录(3子列)、体重报告 -- 饮食摄入子列:早餐、午餐、晚餐、加餐 -- 运动消耗子列:基础消耗、其他消耗 -- 体重记录子列:体重、体脂、腰围 - -**业务规则:** -- 表格较宽(min-width: 1600px),支持横向滚动 - -**交互说明:** -- 操作列点击"体重报告"打开体重报告弹窗 -- 弹窗内含:已减重(kg)、减重率(%)、排名信息 + 报告明细表格(日期、体重(kg)、BMI、体脂率(%)、腰围(cm)、摄入(kcal)、消耗(kcal)) -- 支持导出列表数据、查看导出任务 - ---- - -### 16. 体重排名(weight-ranking.html) - -![页面截图](screenshots/weight-ranking.jpg) - -**功能说明:** 在干预计划内按个人或单位进行体重管理效果的排名对比。 - -**干预计划选择区:** 标准结构 - -**主Tab切换:** 个人排名 / 单位排名 - ---- - -**个人排名Tab:** - -**筛选条件:** 单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框) - -**表格列(30列):** -- 干预计划、姓名、员工编号、性别、年龄、单位、部门、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、现体重(kg)、现BMI、现体脂(%)、现腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm)、综合得分、行动得分、减重量排名(可排序)、减重率排名(可排序)、综合分排名(可排序)、行动分排名(可排序) -- 前3列(干预计划/姓名/员工编号)左侧固定,后4列(排名)右侧固定 - ---- - -**单位排名Tab:** - -**单位层级切换(分段控件):** 二级单位 / 三级单位 - -**筛选条件:** 单位多选下拉(支持全选/清空) - -**二级单位表格列(11列):** -- 干预计划、单位、参与人数、人均减重量(kg)、人均减重率、人均综合得分、人均行动得分、减重量排名(可排序)、减重率排名(可排序)、综合分排名(可排序)、行动分排名(可排序) - -**三级单位表格列(12列):** 在二级单位基础上增加"部门"列(位于单位和参与人数之间) - -**业务规则:** -- 前2-3列左侧固定,后4列排名右侧固定 -- 各排名列支持点击表头切换升降序 - -**交互说明:** -- 点击表头排序列切换升降序 -- 支持导出列表数据、查看导出任务 - ---- - -### 17. 活动总览(action-overview.html) - -![页面截图](screenshots/action-overview.jpg) - -**功能说明:** 以员工为维度展示干预计划下所有参与人员的体重管理效果总览,包括初始/目标/当前指标、饮食运动总览和排名信息。 - -**干预计划选择区:** 标准结构 - -**筛选条件:** 单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框) - -**表格列(多级表头,35列):** -- 第一级(rowspan=2):干预计划、姓名、员工编号、性别、年龄、单位、部门、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、现体重(kg)、现BMI、现体脂(%)、现腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm) -- 第一级(colspan=4):饮食总览 -- 第一级(colspan=4):运动总览 -- 第一级(rowspan=2):减重量排名、减重率排名、赛况明细 -- 饮食总览子列:缺天、缺餐、日均摄入(千卡)、累计摄入(千卡) -- 运动总览子列:缺天、日均步数、日均消耗(千卡)、累计消耗(千卡) -- 前3列左侧固定,赛况明细列右侧固定 - -**交互说明:** -- 操作列点击"赛况明细"跳转到赛况明细页(action-overview-detail.html) -- 支持导出列表数据、查看导出任务 - ---- - -### 17-1. 赛况明细(action-overview-detail.html) - -![页面截图](screenshots/action-overview-detail.jpg) - -**功能说明:** 展示单个员工在干预计划中的每日详细数据,包括体重指标变化、饮食摄入、运动消耗和热量平衡。 - -**页面布局:** -- 面包屑导航:活动总览 / 赛况明细 - 员工姓名 -- 干预计划信息卡片:计划名称、组织机构、起止日期、进行天数 -- 员工信息卡片:姓名、员工编号、性别、年龄、单位部门、身高 -- 日期筛选Tab:全部 / 选时(范围选择)/ 日 / 周 / 月 / 季 / 年 - -**表格列(多级表头,27列):** -- 第一级(rowspan=2):日期、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、现体重(kg)、现BMI、现体脂(%)、现腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm) -- 第一级(colspan=4):摄入数据(千卡) -- 第一级(colspan=3):消耗数据(千卡) -- 第一级(rowspan=2):吃动热量差(千卡)、当日减重排名 -- 摄入数据子列:早餐、午餐、晚餐、加餐 -- 消耗数据子列:基础消耗、步数、其他消耗 -- 日期列左侧固定 - -**交互说明:** -- 面包屑导航支持返回活动总览 -- 日期筛选支持多种粒度(全部/范围/日/周/月/季/年) -- 支持导出列表数据、查看导出任务 - ---- - -### 18. 活动统计(activity-statistics.html) - -![页面截图](screenshots/activity-statistics.jpg) - -**功能说明:** 以干预计划维度汇总各项活动的统计数据,包括参与人数、减重指标和摄入消耗数据。 - -**干预计划选择区:** 标准结构 - -**筛选条件:** 单位多选下拉(支持全选/清空) - -**表格列(18列):** -- 干预计划、组织机构、起止日期、应参加人数、已参加人数、未参加人数、人均初始体重(kg)、人均初始BMI、人均现体重(kg)、人均现BMI、人均减重量(kg)、活动累计减重量(kg)、人均减重率、人均BMI下降、人均每日摄入(千卡)、累计摄入(千卡)、人均每日消耗(千卡)、累计消耗(千卡) -- 前2列左侧固定 - -**业务规则:** -- 减重量正值绿色(减重),负值红色(增重) - -**交互说明:** -- 支持导出列表数据、查看导出任务 - ---- - -### 19. 食谱记录(recipe-record.html) - -![页面截图](screenshots/recipe-record.jpg) - -**功能说明:** 展示各食堂/供餐点的餐品供应记录,辅助管理人员了解员工的饮食营养摄入情况。 - -**筛选条件:** 食堂名称(输入框)、餐次(下拉:全部餐次/早餐/午餐/晚餐)、日期范围(默认当周周一至周日)、餐品名称(输入框) - -**表格列:** 单位、食堂名称、用餐日期、餐次、餐品名称 - -**新增记录弹窗:** -- 表单字段:单位(下拉)、食堂名称(下拉)、用餐日期(日期选择)、餐次(下拉)、餐品名称(动态列表,可添加/删除多项) - -**操作按钮:** 新增记录、批量导入、查看导入任务、导出列表数据、查看导出任务 - -**交互说明:** -- 点击"新增记录"打开新增记录弹窗 -- 餐品名称支持动态添加多个输入项 -- 支持导出列表数据 - ---- - -## 六、历史干预 - -### 20. 历史计划列表(history-plan-list.html) - -![页面截图](screenshots/history-plan-list.jpg) - -**功能说明:** 查看所有已结束的历史干预计划及其执行效果统计数据。 - -**筛选条件:** 组织机构(二级联动下拉)、年份(下拉:全部年份/2026/2025/2024) - -**表格列:** 干预计划、组织机构、组织部门、起止日期、人员范围(可点击查看)、应参加人数、已参加人数、未参加人数、完成体重目标人数、完成体脂目标人数、完成腰围目标人数、人均减重(kg)、人均减重率(%)、人均腰围减少(cm)、人均每日摄入(千卡)、人均每日消耗(千卡)、人均每日热量缺口、人均综合得分、人均行动得分、负责人 - -**业务规则:** -- 表格列较多,前几列(干预计划、组织机构等)做左侧固定,支持横向滚动 -- 人员范围列显示人数,可点击查看人员明细 - -**交互说明:** -- 点击"人员范围"数字打开人员范围弹窗(展示参与人员列表) -- 操作列点击"详情"跳转到计划详情页(history-plan-detail.html) -- 支持导出列表数据、查看导出任务 - -**人员范围弹窗:** -- 标题:人员范围 - **计划名称** -- 筛选:单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框) -- 表格列:姓名、员工编号、性别、年龄、单位、部门、身高(cm)、体重(kg)、BMI - ---- - -### 20-1. 历史计划详情(history-plan-detail.html) - -![页面截图](screenshots/history-plan-detail.jpg) - -**功能说明:** 展示历史干预计划的完整详情和效果分析数据,分为5个Tab模块。 - -**页面布局:** -- 面包屑导航:体重管理 / 历史干预 / **计划名称** -- 计划概览卡片:16项指标网格(应参加人数、实际参加人数、未参加人数、完成体重目标人数、完成体脂目标人数、完成腰围目标人数、人均减重(kg)、人均减重率(%)、人均BMI降低、人均体脂降低(%)、人均腰围减少(cm)、人均每日摄入热量(kcal)、人均每日消耗热量(kcal)、人均每日能量缺口、人均综合得分、人均行动得分) -- 5个主Tab:报名管理 / 每日行动 / 总览数据 / 活动排名 / 活动信息 - ---- - -**Tab 0 — 报名管理:** -- 状态分段Tab:未提交任务书 / 已提交待审核 / 已通过待签署 / 已签署(带数量角标) -- 筛选:单位部门、姓名、员工编号 -- 表格列:姓名、员工编号、性别、年龄、所属单位、所属部门、身高(cm)、初始体重(kg)、初始BMI、初始腰围(cm)、初始体脂(%) - - 状态 ≥ 已提交 增加:目标体重(kg)、目标BMI、目标腰围(cm)、目标体脂(%)、提交时间 - - 状态 ≥ 已通过 增加:审核时间 - - 状态 = 已签署 增加:签署时间、操作(承诺书) - -**Tab 1 — 每日行动:** -- 子分段Tab:每日记录 / 三测记录 -- 每日记录筛选:日期范围、单位部门、姓名、员工编号 -- 每日记录表格(28列):姓名、员工编号、性别、年龄、单位、部门、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、现体重(kg)、现BMI、现体脂(%)、现腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm)、日期、饮食记录、运动记录、体重记录 -- 三测记录子Tab:体重/饮食/运动 + 全部/已记录/未记录筛选 -- 三测记录表格:姓名、员工编号、性别、年龄、单位、部门、打卡次数(可排序)、首次记录日期、末次记录日期 - -**Tab 2 — 总览数据:** -- 筛选:单位部门、姓名、员工编号 -- 表格(36列):姓名、员工编号、性别、年龄、单位、部门、联系方式、身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm)、目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm)、最终体重(kg)、最终BMI、最终体脂(%)、最终腰围(cm)、体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm)、吃记录天数、动记录天数、体重记录天数、日均摄入(千卡)、日均消耗(千卡)、日均热量缺口、综合得分、行动得分、减重量排名(可排序)、减重率排名(可排序)、综合分排名(可排序)、行动分排名(可排序) - -**Tab 3 — 活动排名:** -- 主分段Tab:个人排名 / 单位排名 -- 个人排名筛选:姓名、员工编号 -- 个人排名表格(19列):姓名、员工编号、性别、年龄、单位、部门、初始体重、初始BMI、现体重、现BMI、体重变化(kg)、减重率(%)、BMI变化、综合得分、行动得分、减重量排名、减重率排名、综合分排名、行动分排名(后4列可排序) -- 单位排名分段:二级单位 / 三级单位 -- 二级单位表格(10列):单位、参与人数、人均减重量(kg)、人均减重率、人均综合得分、人均行动得分、减重量排名、减重率排名、综合分排名、行动分排名 -- 三级单位表格(11列):在二级单位基础上增加"部门"列 - -**Tab 4 — 活动信息:** -- 计划基本信息:干预计划名称、人员筛选、指定部门、指定员工、是否自动提醒签订承诺书、大病员工过滤(含查看链接)、计划起止日期、组织部门、负责人、审核人 -- 通知文件列表 -- 奖励等级信息 - -**弹窗:** -- 饮食记录弹窗:序号、餐次、摄入时间、总摄入(千卡)、数据来源 -- 运动记录弹窗:序号、运动类型、运动数据、消耗(千卡)、来源 -- 体重记录弹窗:序号、记录时间、体重(kg)、BMI、体脂率(%)、腰围(cm)、来源 -- 承诺书弹窗:承诺书样式证书卡片 -- 大病人员弹窗:单位、部门、姓名、员工编号、性别、年龄、身高(cm)、体重(kg)、BMI、大病信息 - -**交互说明:** -- 面包屑支持返回历史计划列表 -- 各Tab独立筛选和数据 -- 支持导出列表数据 - ---- - -### 21. 历史人员列表(history-personnel-list.html) - -![页面截图](screenshots/history-personnel-list.jpg) - -**功能说明:** 以员工为维度查看所有参与过历史干预计划的人员及其干预效果数据。 - -**筛选条件:** 姓名(输入框)、员工编号(输入框)、单位部门(二级联动下拉)、日期范围 - -**表格列(多级表头,22列):** -- 第一级:姓名、员工编号、性别、年龄、单位、部门 -- 体重(kg)子列:初始、最终、变化 -- BMI子列:初始、最终、变化 -- 体脂(%)子列:初始、最终、变化 -- 腰围(cm)子列:初始、最终、变化 -- 饮食记录次数、运动记录次数、体重记录次数、详细数据 - -**业务规则:** -- 体重变化负值绿色(减重),正值红色(增重) -- 姓名列左侧固定,详细数据列右侧固定 - -**交互说明:** -- 操作列点击"查看"跳转到人员详情页(history-personnel-detail.html) -- 支持导出列表数据、查看导出任务 - ---- - -### 21-1. 历史人员详情(history-personnel-detail.html) - -![页面截图](screenshots/history-personnel-detail.jpg) - -**功能说明:** 展示单个员工在所有历史干预计划中的完整数据和指标变化。 - -**页面布局:** -- 返回链接 + 面包屑导航:人员列表 / **员工姓名** -- 员工信息卡片:头像(首字母)、姓名、员工编号、性别、年龄、单位、部门 + 日期范围筛选 -- 指标汇总卡片("体重管理指标变化"):4组指标(体重(kg)/BMI/体脂(%)/腰围(cm)),每组展示 初始 → 最终 → 变化 -- Tab切换:饮食记录 / 运动记录 / 体重记录 - -**饮食记录Tab表格列:** 时间、餐次、摄入热量(千卡)、来源(标签:智记/自记) - -**运动记录Tab表格列:** 时间、运动类型、运动时长/数据、消耗热量(千卡)、来源(标签:穿戴/微信/自记/器械) - -**体重记录Tab表格列:** 时间、体重(kg)、BMI、体脂率(%)、腰围(cm)、来源(标签:身高秤/体脂仪/蓝牙称/自记) - -**交互说明:** -- 面包屑支持返回历史人员列表 -- 日期范围支持按时间段筛选记录 -- 各Tab独立分页 - ---- - -## 七、个人体重管理 - -### 22. 个人目标数据(personal-target-data.html) - -![页面截图](screenshots/personal-target-data.jpg) - -**功能说明:** 展示所有员工的个人体重管理目标设置情况和目标达成进度。 - -**筛选条件:** 单位部门(二级联动下拉)、姓名(输入框)、员工编号(输入框)、是否设置个人目标(下拉:全部/已设置/未设置) - -**表格列(多级表头):** -- 第一级:姓名、员工编号、性别、年龄、单位、部门 -- 目标周期子列:目标起止日期、目标天数 -- 初始指标子列:身高(cm)、初始体重(kg)、初始BMI、初始体脂(%)、初始腰围(cm) -- 目标指标子列:目标体重(kg)、目标BMI、目标体脂(%)、目标腰围(cm) -- 当前指标子列:现体重(kg)、现BMI、现体脂(%)、现腰围(cm) -- 变化子列:体重变化(kg)、BMI变化、体脂变化(%)、腰围变化(cm) -- 详细数据列 - -**业务规则:** -- 变化列负值绿色(改善),正值红色(恶化) -- 未设置目标的员工,目标周期和目标指标列显示"-",仅当前指标有实际称重数据 -- 姓名和员工编号列做左侧固定 -- 详细数据列做右侧固定 - -**交互说明:** -- 操作列点击"查看"跳转到个人目标详情页(personal-target-detail.html),通过URL参数传递员工ID -- 支持导出列表数据、查看导出任务 - ---- - -### 22-1. 个人目标详情(personal-target-detail.html) - -![页面截图](screenshots/personal-target-detail.jpg) - -**功能说明:** 展示单个员工的目标设定详情、指标变化和每日记录明细。 - -**页面布局:** -- 返回链接 + 面包屑导航:体重管理 / 个人体重管理 / 个人目标数据 / **员工姓名** -- 概览卡片(三栏布局): - - 左:个人信息(姓名、员工编号、性别、年龄、单位、部门) - - 中:个人目标信息(干预计划搜索下拉,选中后展示起止日期、状态、目标指标:体重/BMI/体脂率/腰围) -- 筛选条件:日期范围 -- 指标变化卡片:4组(体重(kg)/BMI/体脂率(%)/腰围(cm))展示 初始 → 当前 → 变化 -- 每日记录表格:日期、饮食记录(千卡)、运动记录(千卡)、体重(kg)、BMI、体脂率(%)、腰围(cm) - -**交互说明:** -- 返回按钮跳转回个人目标数据列表页 -- 干预计划选择后展示对应目标信息 -- 支持导出列表数据、查看导出任务 - ---- - -## 八、异常事件 +## 九、异常事件 ### 23. 系统脏数据(exception-system-dirty.html) @@ -1156,7 +1374,7 @@ **功能说明:** 汇总展示体重管理各业务模块产生的结果异常数据,支持多维度筛选。 -**筛选条件:** 员工名称(输入框)、员工编号(输入框)、单位部门(二级联动下拉)、业务模块(下拉:全部/档案管理/计划管理/报名管理/过程管理/历史干预/个人体重管理/设备管理)、异常等级(下拉:全部/严重/中等/轻微)、年份(下拉) +**筛选条件:** 员工名称(输入框)、员工编号(输入框)、单位部门(二级联动面板)、业务模块(下拉:全部/档案管理/活动管理/报名管理/过程管理/历史活动/个人体重管理/设备管理)、异常等级(下拉:全部/严重/中等/轻微)、年份(下拉) **表格列:** 员工、员工编号、单位名称、部门名称、业务模块、异常指标、异常值、异常等级(标签)、发现时间 diff --git a/web-admin/weight-management/doc/screenshot.js b/web-admin/weight-management/doc/screenshot.js index 76d0543..97837ea 100644 --- a/web-admin/weight-management/doc/screenshot.js +++ b/web-admin/weight-management/doc/screenshot.js @@ -7,7 +7,9 @@ * - JPEG 质量 85% * - 目标体积 ≤ 80KB * - * 用法: node doc/screenshot.js + * 用法: node doc/screenshot.js # 全量页面 + 弹窗截图 + * node doc/screenshot.js modals # 仅弹窗截图 + * node doc/screenshot.js <关键字> # 仅文件名含关键字的页面 */ const { chromium } = require('playwright'); const path = require('path'); @@ -16,7 +18,7 @@ const fs = require('fs'); const MODULE_DIR = __dirname.replace(/\\doc$/, ''); // weight-management/ const SCREENSHOTS_DIR = path.join(__dirname, 'screenshots'); -// 主页面列表(排除内嵌弹窗文件,弹窗无需单独截图) +// 主页面列表(弹窗见下方 MODALS 列表,通过 setup 打开后单独截图) const PAGES = [ // ===== 档案 ===== { file: 'archive-personal-weight-data.html', desc: '个人体重数据列表' }, @@ -25,9 +27,9 @@ const PAGES = [ { file: 'archive-unit-report-detail.html', desc: '单位报表详情' }, { file: 'archive-algorithm-model.html', desc: '算法模型(占位)' }, - // ===== 计划管理 ===== - { file: 'plan-list.html', desc: '计划列表' }, - { file: 'plan-edit.html', desc: '新增/编辑计划' }, + // ===== 活动管理 ===== + { file: 'plan-list.html', desc: '活动列表' }, + { file: 'plan-edit.html', desc: '新增/编辑活动' }, // ===== 报名管理 ===== { file: 'registration-tracking.html', desc: '报名跟踪' }, @@ -36,12 +38,22 @@ const PAGES = [ // ===== 设备管理 ===== { file: 'scale-device.html', desc: '体重秤-设备管理' }, { file: 'scale-monitor.html', desc: '体重秤-设备监测' }, + { file: 'scale-monitor-detail.html', desc: '体重秤-监测详情' }, { file: 'bluetooth-device.html', desc: '蓝牙称-设备管理' }, { file: 'bluetooth-monitor.html', desc: '蓝牙称-设备监测' }, + { file: 'bluetooth-monitor-detail.html', desc: '蓝牙称-监测详情' }, { file: 'fat-device.html', desc: '体脂仪-设备管理' }, { file: 'fat-monitor.html', desc: '体脂仪-设备监测' }, + { file: 'fat-monitor-detail.html', desc: '体脂仪-监测详情' }, { file: 'sport-device.html', desc: '运动器械-设备管理' }, { file: 'sport-monitor.html', desc: '运动器械-设备监测' }, + { file: 'sport-monitor-detail.html', desc: '运动器械-监测详情' }, + + // ===== 新增设备(独立弹窗页) ===== + { file: 'scale-device-add.html', desc: '体重秤-新增设备' }, + { file: 'bluetooth-device-add.html', desc: '蓝牙称-新增设备' }, + { file: 'fat-device-add.html', desc: '体脂仪-新增设备' }, + { file: 'sport-device-add.html', desc: '运动器械-新增设备' }, { file: 'employee-data.html', desc: '员工监测数据' }, { file: 'employee-data-record.html', desc: '测量记录详情' }, { file: 'dept-stat.html', desc: '单位数据统计' }, @@ -49,18 +61,20 @@ const PAGES = [ // ===== 过程管理 ===== { file: 'action-record.html', desc: '行动记录' }, - { file: 'detail-data.html', desc: '详细数据' }, { file: 'weight-ranking.html', desc: '体重排名' }, { file: 'action-overview.html', desc: '活动总览' }, - { file: 'action-overview-detail.html', desc: '活动详情' }, + { file: 'action-overview-detail.html', desc: '赛况明细' }, { file: 'activity-statistics.html', desc: '活动统计' }, - { file: 'recipe-record.html', desc: '食谱记录' }, + { file: 'recipe-record.html', desc: '食堂食谱' }, - // ===== 历史干预 ===== - { file: 'history-plan-list.html', desc: '历史计划列表' }, - { file: 'history-plan-detail.html', desc: '历史计划详情' }, - { file: 'history-personnel-list.html', desc: '历史人员列表' }, - { file: 'history-personnel-detail.html', desc: '历史人员详情' }, + // ===== 历史活动 ===== + { file: 'history-plan-list.html', desc: '历史活动列表' }, + { file: 'history-plan-detail.html', desc: '历史活动详情' }, + { file: 'history-personnel-detail.html', desc: '人员详情' }, + + // ===== 人员数据 ===== + { file: 'personnel-measure-record.html', desc: '三测记录' }, + { file: 'personnel-overview-record.html', desc: '总览记录' }, // ===== 个人体重管理 ===== { file: 'personal-target-data.html', desc: '个人目标数据列表' }, @@ -75,6 +89,290 @@ function getOutputName(file) { return file.replace('.html', '.jpg'); } +// 弹窗截图列表:setup 在页面上下文执行,负责打开弹窗并填充数据; +// 依赖前置状态/参数的弹窗(如 plan-edit 员工选择弹窗需先设置组织机构)在 setup 中造好数据,避免空弹窗 +const MODALS = [ + // ===== 活动管理 ===== + { + file: 'plan-list.html', + desc: '活动列表-人员筛选弹窗', + output: 'plan-list-modal-person-filter.jpg', + selector: '#personFilterModal .modal', + setup: '(() => { openPersonFilterDialog(1); })()', // planId=1,12条mock人员自动渲染 + }, + { + file: 'plan-list.html', + desc: '活动列表-新增人员弹窗(搜索选择)', + output: 'plan-list-modal-add-person.jpg', + selector: '#addPersonDialog .dialog', + setup: '(() => { openPersonFilterDialog(1); openAddPersonDialog(); searchPerson(); selectCandidate("CQ001250"); })()', // 选中候选人,填充信息卡 + }, + { + file: 'plan-list.html', + desc: '活动列表-审核人员弹窗', + output: 'plan-list-modal-reviewer.jpg', + selector: '#reviewerModal .modal', + setup: '(() => { openReviewerDialog(1); })()', // 7条mock审核人员自动渲染 + }, + { + file: 'plan-list.html', + desc: '活动列表-新增审核人员弹窗(搜索选择)', + output: 'plan-list-modal-add-reviewer.jpg', + selector: '#addReviewerDialog .dialog', + setup: '(() => { openReviewerDialog(1); openAddReviewerDialog(); searchReviewer(); selectReviewerCandidate("138-9210-8801"); })()', + }, + { + file: 'plan-edit.html', + desc: '新增/编辑活动-员工选择弹窗', + output: 'plan-edit-modal-emp-select.jpg', + selector: '#empModal .modal-emp', + setup: '(() => { document.getElementById("planOrg").value = "第四采油厂"; openEmpModal(); })()', // 需先设置组织机构(否则toast拦截),按单位过滤出6条员工 + }, + { + file: 'plan-edit.html', + desc: '新增/编辑活动-大病人员列表弹窗', + output: 'plan-edit-modal-serious-list.jpg', + selector: '#seriousModal .modal-emp', + setup: '(() => { openSeriousModal(); })()', // 8条mock大病人员自动渲染 + }, + + // ===== 报名管理 ===== + { + file: 'registration-tracking.html', + desc: '报名跟踪-承诺书预览弹窗', + output: 'registration-tracking-modal-promise.jpg', + selector: '#promiseOverlay .promise-dialog', + setup: '(() => { openPromise("张伟", "2026-03-05 10:23:41"); })()', // 传入姓名+签署时间,渲染承诺人/日期 + }, + { + file: 'target-weight-review.html', + desc: '目标体重审核-审核弹窗', + output: 'target-weight-review-modal-audit.jpg', + selector: '#auditOverlay .audit-dialog', + setup: '(() => { openAudit(tabData[1][0].empId); })()', // 取"待审核"Tab第一条,自动渲染基本信息卡+指标对比表 + }, + + // ===== 过程管理:行动记录(12个弹窗) ===== + { + file: 'action-record.html', + desc: '行动记录-体重打卡记录弹窗', + output: 'action-record-modal-checkin.jpg', + selector: '#checkinOverlay .record-dialog', + setup: '(() => { openCheckinDialog("CQ001234", "张伟", "第四采油厂", "健康管理部"); })()', // currentSubTab默认weight + }, + { + file: 'action-record.html', + desc: '行动记录-饮食记录弹窗', + output: 'action-record-modal-diet.jpg', + selector: '#dietOverlay .record-dialog', + setup: '(() => { openDietDialog("CQ001234", "张伟", "2026-06-10"); })()', // 基础信息卡+mock餐次记录 + }, + { + file: 'action-record.html', + desc: '行动记录-运动记录弹窗', + output: 'action-record-modal-exercise.jpg', + selector: '#exerciseOverlay .record-dialog', + setup: '(() => { openExerciseDialog("CQ001234", "张伟", "2026-06-10"); })()', + }, + { + file: 'action-record.html', + desc: '行动记录-体重记录弹窗', + output: 'action-record-modal-weight.jpg', + selector: '#weightOverlay .record-dialog', + setup: '(() => { openWeightDialog("CQ001234", "张伟", "2026-06-10"); })()', + }, + { + file: 'action-record.html', + desc: '行动记录-今日饮食未记录员工弹窗', + output: 'action-record-modal-diet-unrecorded.jpg', + selector: '#dietUnrecordedOverlay .record-dialog', + setup: '(() => { openDietUnrecordedDialog(); })()', // 从dailyData过滤hasDiet=false + }, + { + file: 'action-record.html', + desc: '行动记录-今日饮食已记录员工弹窗', + output: 'action-record-modal-diet-recorded.jpg', + selector: '#dietRecordedOverlay .record-dialog', + setup: '(() => { openDietRecordedDialog(); })()', + }, + { + file: 'action-record.html', + desc: '行动记录-今日运动未记录员工弹窗', + output: 'action-record-modal-exercise-unrecorded.jpg', + selector: '#exerciseUnrecordedOverlay .record-dialog', + setup: '(() => { openExerciseUnrecordedDialog(); })()', + }, + { + file: 'action-record.html', + desc: '行动记录-今日运动已记录员工弹窗', + output: 'action-record-modal-exercise-recorded.jpg', + selector: '#exerciseRecordedOverlay .record-dialog', + setup: '(() => { openExerciseRecordedDialog(); })()', + }, + { + file: 'action-record.html', + desc: '行动记录-今日体重未记录员工弹窗', + output: 'action-record-modal-weight-unrecorded.jpg', + selector: '#weightUnrecordedOverlay .record-dialog', + setup: '(() => { openWeightUnrecordedDialog(); })()', + }, + { + file: 'action-record.html', + desc: '行动记录-今日体重已记录员工弹窗', + output: 'action-record-modal-weight-recorded.jpg', + selector: '#weightRecordedOverlay .record-dialog', + setup: '(() => { openWeightRecordedDialog(); })()', + }, + { + file: 'action-record.html', + desc: '行动记录-活动期间累计行动员工弹窗', + output: 'action-record-modal-cumulative.jpg', + selector: '#cumulativeOverlay .record-dialog', + setup: '(() => { selectedPlanId = plans[0].id; openCumulativeDialog("diet"); })()', // 需先选活动(否则toast拦截),plans[0]=第四采油厂活动 + }, + { + file: 'action-record.html', + desc: '行动记录-单位详情弹窗', + output: 'action-record-modal-unit-detail.jpg', + selector: '#unitDetailOverlay .record-dialog', + setup: '(() => { document.getElementById("unitDateFrom").value = "2026-06-01"; document.getElementById("unitDateTo").value = "2026-06-30"; openUnitDetailDialog("第四采油厂", "total"); })()', // 造日期范围避免信息卡显示"-" + }, + + // ===== 过程管理:食堂食谱 ===== + { + file: 'recipe-record.html', + desc: '食堂食谱-新增记录弹窗(已造示例数据)', + output: 'recipe-record-modal-add.jpg', + selector: '#addOverlay .record-dialog', + setup: '(() => { openAddDialog(); document.getElementById("addUnit").value = "第四采油厂"; document.getElementById("addCanteen").value = "第一食堂"; document.getElementById("addMeal").value = "午餐"; var f = document.querySelector("#foodList .food-item .form-input"); if (f) f.value = "杂粮馒头"; })()', // 新增表单预填示例值 + }, + + // ===== 历史活动 ===== + { + file: 'history-plan-list.html', + desc: '历史活动列表-人员范围弹窗', + output: 'history-plan-list-modal-staff.jpg', + selector: '#staffModal .modal-dialog', + setup: '(() => { showStaffScope("unit", historyPlans[0].planName); })()', // 按活动名生成shouldCount条人员数据 + }, + { + file: 'history-plan-detail.html', + desc: '历史活动详情-饮食记录弹窗', + output: 'history-plan-detail-modal-diet.jpg', + selector: '#dietOverlay .record-dialog', + setup: '(() => { openDietDialog(actEmployees[0].empId, actEmployees[0].name, "2026-05-20"); })()', + }, + { + file: 'history-plan-detail.html', + desc: '历史活动详情-运动记录弹窗', + output: 'history-plan-detail-modal-exercise.jpg', + selector: '#exerciseOverlay .record-dialog', + setup: '(() => { openExerciseDialog(actEmployees[0].empId, actEmployees[0].name, "2026-05-20"); })()', + }, + { + file: 'history-plan-detail.html', + desc: '历史活动详情-体重记录弹窗', + output: 'history-plan-detail-modal-weight.jpg', + selector: '#weightOverlay .record-dialog', + setup: '(() => { openWeightDialog(actEmployees[0].empId, actEmployees[0].name, "2026-05-20"); })()', + }, + { + file: 'history-plan-detail.html', + desc: '历史活动详情-承诺书弹窗', + output: 'history-plan-detail-modal-promise.jpg', + selector: '#promiseOverlay .promise-dialog', + setup: '(() => { openPromise("张伟", "2026-04-12 09:30:15"); })()', + }, + { + file: 'history-plan-detail.html', + desc: '历史活动详情-大病人员弹窗', + output: 'history-plan-detail-modal-serious.jpg', + selector: '#seriousModal .modal-emp', + setup: '(() => { openSeriousModal(); })()', + }, + + // ===== 人员数据:三测记录(结构同行动记录,取代表弹窗) ===== + { + file: 'personnel-measure-record.html', + desc: '三测记录-饮食记录弹窗', + output: 'personnel-measure-record-modal-diet.jpg', + selector: '#dietOverlay .record-dialog', + setup: '(() => { openDietDialog("CQ001234", "张伟", "2026-06-10"); })()', + }, + { + file: 'personnel-measure-record.html', + desc: '三测记录-今日饮食未记录员工弹窗', + output: 'personnel-measure-record-modal-diet-unrecorded.jpg', + selector: '#dietUnrecordedOverlay .record-dialog', + setup: '(() => { openDietUnrecordedDialog(); })()', + }, + { + file: 'personnel-measure-record.html', + desc: '三测记录-活动期间累计行动员工弹窗', + output: 'personnel-measure-record-modal-cumulative.jpg', + selector: '#cumulativeOverlay .record-dialog', + setup: '(() => { selectedPlanId = plans[0].id; openCumulativeDialog("diet"); })()', + }, + + // ===== 设备管理 ===== + { + file: 'bluetooth-device.html', + desc: '蓝牙称设备管理-成员管理弹窗', + output: 'bluetooth-device-modal-member.jpg', + selector: '#memberModal .modal', + setup: '(() => { openMemberModal(0); })()', // 设备1的mock成员列表自动渲染 + }, + { + file: 'bluetooth-device.html', + desc: '蓝牙称设备管理-添加成员弹窗(搜索选择)', + output: 'bluetooth-device-modal-add-member.jpg', + selector: '#addMemberModal .modal', + setup: '(() => { openMemberModal(0); openAddMemberModal(); document.getElementById("employeeSearch").value = "赵"; searchEmployee(); selectEmployee("CQ10001"); })()', // 搜索并选中员工,填充员工信息卡 + }, + { + file: 'scale-monitor-detail.html', + desc: '体重秤监测详情-身体成分分析弹窗', + output: 'scale-monitor-detail-modal-detail.jpg', + selector: '#dialogMask .dialog', + setup: '(() => { document.querySelector(".tip-trigger").click(); })()', // 触发行内"查看",渲染data-tip JSON + }, + { + file: 'bluetooth-monitor-detail.html', + desc: '蓝牙称监测详情-身体成分分析弹窗', + output: 'bluetooth-monitor-detail-modal-detail.jpg', + selector: '#dialogMask .dialog', + setup: '(() => { document.querySelector(".tip-trigger").click(); })()', + }, + { + file: 'fat-monitor-detail.html', + desc: '体脂仪监测详情-身体成分分析弹窗', + output: 'fat-monitor-detail-modal-detail.jpg', + selector: '#dialogMask .dialog', + setup: '(() => { document.querySelector(".tip-trigger").click(); })()', + }, + { + file: 'employee-data-record.html', + desc: '测量记录-身体成分分析弹窗', + output: 'employee-data-record-modal-detail.jpg', + selector: '#detailModal .modal', + setup: '(() => { openModal(0); })()', // records[0]的测量详情分组渲染 + }, + { + file: 'dept-stat.html', + desc: '单位数据统计-单位详情弹窗', + output: 'dept-stat-modal-unit-detail.jpg', + selector: '#deptOverlay .record-dialog', + setup: '(() => { document.getElementById("filterDateFrom").value = "2026-06-01"; document.getElementById("filterDateTo").value = "2026-06-30"; openDeptDetail("第四采油厂", "体重秤", "设备数量", 5, ""); })()', // 造日期范围+传入设备类型/指标,渲染设备明细表 + }, + { + file: 'employee-stat.html', + desc: '员工数据统计-使用记录弹窗', + output: 'employee-stat-modal-usage.jpg', + selector: '#usageOverlay .record-dialog', + setup: '(() => { document.getElementById("filterDateFrom").value = "2026-06-01"; document.getElementById("filterDateTo").value = "2026-06-30"; openUsageDialog("张伟", "CQ001234", "第四采油厂", "健康管理部", "体重秤"); })()', // 造日期范围+员工/设备类型参数,渲染使用记录表 + }, +]; + async function screenshotPage(browser, entry, index, total) { const context = await browser.newContext({ viewport: { width: 1440, height: 900 }, @@ -147,12 +445,83 @@ async function screenshotPage(browser, entry, index, total) { } } +// 弹窗截图:执行 setup 打开弹窗并填充数据后,对 selector 元素截图; +// 截图前校验弹窗非空(表格有数据行 或 信息卡已填充),空数据弹窗在日志中告警 +async function captureModal(browser, entry, index, total) { + const context = await browser.newContext({ + viewport: { width: 1440, height: 900 }, + deviceScaleFactor: 1, + }); + const page = await context.newPage(); + const filePath = path.join(MODULE_DIR, entry.file); + const fileUrl = `file:///${filePath.replace(/\\/g, '/')}`; + + try { + await page.goto(fileUrl, { waitUntil: 'networkidle', timeout: 15000 }); + await page.waitForTimeout(500); + + // 注意:弹窗截图不注入隐藏弹窗层的样式 + await page.evaluate(entry.setup); + await page.waitForTimeout(300); + + const outPath = path.join(SCREENSHOTS_DIR, entry.output); + const locator = page.locator(entry.selector).first(); + await locator.waitFor({ state: 'visible', timeout: 5000 }); + + // 非空校验:统计表格数据行 / 信息卡 / 详情值填充状态 + const audit = await locator.evaluate((el) => { + const rows = el.querySelectorAll('tbody tr'); + const hasDataRows = Array.prototype.some.call(rows, (tr) => { + const t = (tr.textContent || '').trim(); + return t && t.indexOf('暂无') === -1 && t.indexOf('未找到') === -1; + }); + const cardValues = Array.prototype.map.call(el.querySelectorAll('.ec-value'), (v) => v.textContent.trim()); + const cardFilled = cardValues.length > 0 && cardValues.some((v) => v && v !== '-'); + const detailValues = Array.prototype.map.call( + el.querySelectorAll('.dialog-cell__val, .detail-item__value, .record-info__value'), + (v) => v.textContent.trim() + ); + const detailFilled = detailValues.length > 0 && detailValues.some((v) => v && v !== '-'); + const filledInputs = Array.prototype.filter.call( + el.querySelectorAll('input:not([type=checkbox]):not([type=radio]), select'), + (i) => i.value && String(i.value).trim() + ).length; + const contentLen = (el.textContent || '').replace(/\s/g, '').length; + return { rowCount: rows.length, hasDataRows, cardFilled, detailFilled, filledInputs, contentLen }; + }); + + await locator.screenshot({ path: outPath, type: 'jpeg', quality: 75 }); + + const stats = fs.statSync(outPath); + const sizeKB = (stats.size / 1024).toFixed(1); + const label = `[${String(index + 1).padStart(2, '0')}/${total}]`; + let dataFlag; + if (audit.rowCount > 0) dataFlag = audit.hasDataRows ? `${audit.rowCount}行数据` : '⚠表格无数据'; + else if (audit.cardFilled) dataFlag = '信息卡已填充'; + else if (audit.detailFilled) dataFlag = '详情值已填充'; + else if (audit.filledInputs > 0) dataFlag = `${audit.filledInputs}个表单项已填`; + else if (audit.contentLen > 120) dataFlag = '内容已渲染'; + else dataFlag = '⚠无数据'; + console.log(` ${label} ${entry.desc} → ${entry.output} (${sizeKB}KB, ${dataFlag})`); + } catch (err) { + console.error(` ${'✗'.padStart(9)} ${entry.desc}: ${err.message}`); + process.exitCode = 1; + } finally { + await context.close(); + } +} + (async () => { + // 无参数=全部页面+弹窗;"modals"=仅弹窗;其他字符串=文件名含该关键字的页面 + const arg = process.argv[2] || ''; + const pages = arg === 'modals' ? [] : (arg ? PAGES.filter(p => p.file.indexOf(arg) !== -1) : PAGES); + const modals = (!arg || arg === 'modals') ? MODALS : []; + console.log('Web管理端 - 体重管理模块 页面截图'); console.log(`模块目录: ${MODULE_DIR}`); console.log(`输出目录: ${SCREENSHOTS_DIR}`); console.log(`视口: 1440×900, 1x`); - console.log(`共 ${PAGES.length} 个页面\n`); + console.log(`页面 ${pages.length} 个,弹窗 ${modals.length} 个\n`); if (!fs.existsSync(SCREENSHOTS_DIR)) { fs.mkdirSync(SCREENSHOTS_DIR, { recursive: true }); @@ -161,10 +530,13 @@ async function screenshotPage(browser, entry, index, total) { const browser = await chromium.launch({ headless: true }); try { - for (let i = 0; i < PAGES.length; i++) { - await screenshotPage(browser, PAGES[i], i, PAGES.length); + for (let i = 0; i < pages.length; i++) { + await screenshotPage(browser, pages[i], i, pages.length); } - console.log(`\n✅ 全部完成!共 ${PAGES.length} 张截图`); + for (let i = 0; i < modals.length; i++) { + await captureModal(browser, modals[i], i, modals.length); + } + console.log(`\n✅ 全部完成!页面 ${pages.length} 张 + 弹窗 ${modals.length} 张`); console.log(` 输出目录: ${SCREENSHOTS_DIR}`); } catch (err) { console.error('执行出错:', err); diff --git a/web-admin/weight-management/doc/screenshots/action-overview-detail.jpg b/web-admin/weight-management/doc/screenshots/action-overview-detail.jpg index 8bfc7f1..1008c01 100644 Binary files a/web-admin/weight-management/doc/screenshots/action-overview-detail.jpg and b/web-admin/weight-management/doc/screenshots/action-overview-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-overview.jpg b/web-admin/weight-management/doc/screenshots/action-overview.jpg index 4017a7a..7883897 100644 Binary files a/web-admin/weight-management/doc/screenshots/action-overview.jpg and b/web-admin/weight-management/doc/screenshots/action-overview.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-checkin.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-checkin.jpg new file mode 100644 index 0000000..620ae43 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-checkin.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-cumulative.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-cumulative.jpg new file mode 100644 index 0000000..9f89d0f Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-cumulative.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-diet-recorded.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-diet-recorded.jpg new file mode 100644 index 0000000..bd16dac Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-diet-recorded.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-diet-unrecorded.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-diet-unrecorded.jpg new file mode 100644 index 0000000..9c07335 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-diet-unrecorded.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-diet.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-diet.jpg new file mode 100644 index 0000000..70e7d1b Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-diet.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-exercise-recorded.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-exercise-recorded.jpg new file mode 100644 index 0000000..a106ba2 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-exercise-recorded.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-exercise-unrecorded.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-exercise-unrecorded.jpg new file mode 100644 index 0000000..2d82fd5 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-exercise-unrecorded.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-exercise.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-exercise.jpg new file mode 100644 index 0000000..7d26def Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-exercise.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-unit-detail.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-unit-detail.jpg new file mode 100644 index 0000000..cce9de9 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-unit-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-weight-recorded.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-weight-recorded.jpg new file mode 100644 index 0000000..6fc17f1 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-weight-recorded.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-weight-unrecorded.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-weight-unrecorded.jpg new file mode 100644 index 0000000..7835df7 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-weight-unrecorded.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record-modal-weight.jpg b/web-admin/weight-management/doc/screenshots/action-record-modal-weight.jpg new file mode 100644 index 0000000..92b5cf9 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/action-record-modal-weight.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/action-record.jpg b/web-admin/weight-management/doc/screenshots/action-record.jpg index 7e54efa..bc611a9 100644 Binary files a/web-admin/weight-management/doc/screenshots/action-record.jpg and b/web-admin/weight-management/doc/screenshots/action-record.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/activity-statistics.jpg b/web-admin/weight-management/doc/screenshots/activity-statistics.jpg index 026ffd7..1158470 100644 Binary files a/web-admin/weight-management/doc/screenshots/activity-statistics.jpg and b/web-admin/weight-management/doc/screenshots/activity-statistics.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/archive-algorithm-model.jpg b/web-admin/weight-management/doc/screenshots/archive-algorithm-model.jpg index 5b3304d..75b1461 100644 Binary files a/web-admin/weight-management/doc/screenshots/archive-algorithm-model.jpg and b/web-admin/weight-management/doc/screenshots/archive-algorithm-model.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/archive-personal-weight-data.jpg b/web-admin/weight-management/doc/screenshots/archive-personal-weight-data.jpg index 969b808..86f75d7 100644 Binary files a/web-admin/weight-management/doc/screenshots/archive-personal-weight-data.jpg and b/web-admin/weight-management/doc/screenshots/archive-personal-weight-data.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/archive-personal-weight-detail.jpg b/web-admin/weight-management/doc/screenshots/archive-personal-weight-detail.jpg index 2ceb6df..a5c0169 100644 Binary files a/web-admin/weight-management/doc/screenshots/archive-personal-weight-detail.jpg and b/web-admin/weight-management/doc/screenshots/archive-personal-weight-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/archive-unit-report-detail.jpg b/web-admin/weight-management/doc/screenshots/archive-unit-report-detail.jpg index 013736b..462ae93 100644 Binary files a/web-admin/weight-management/doc/screenshots/archive-unit-report-detail.jpg and b/web-admin/weight-management/doc/screenshots/archive-unit-report-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/archive-unit-report.jpg b/web-admin/weight-management/doc/screenshots/archive-unit-report.jpg index 18d85ef..f81390b 100644 Binary files a/web-admin/weight-management/doc/screenshots/archive-unit-report.jpg and b/web-admin/weight-management/doc/screenshots/archive-unit-report.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/bluetooth-device-add.jpg b/web-admin/weight-management/doc/screenshots/bluetooth-device-add.jpg new file mode 100644 index 0000000..412fa44 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/bluetooth-device-add.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/bluetooth-device-modal-add-member.jpg b/web-admin/weight-management/doc/screenshots/bluetooth-device-modal-add-member.jpg new file mode 100644 index 0000000..27bf4a1 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/bluetooth-device-modal-add-member.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/bluetooth-device-modal-member.jpg b/web-admin/weight-management/doc/screenshots/bluetooth-device-modal-member.jpg new file mode 100644 index 0000000..7512540 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/bluetooth-device-modal-member.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/bluetooth-device.jpg b/web-admin/weight-management/doc/screenshots/bluetooth-device.jpg index 25f1683..bd1ab96 100644 Binary files a/web-admin/weight-management/doc/screenshots/bluetooth-device.jpg and b/web-admin/weight-management/doc/screenshots/bluetooth-device.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/bluetooth-monitor-detail-modal-detail.jpg b/web-admin/weight-management/doc/screenshots/bluetooth-monitor-detail-modal-detail.jpg new file mode 100644 index 0000000..92a1fcb Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/bluetooth-monitor-detail-modal-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/bluetooth-monitor-detail.jpg b/web-admin/weight-management/doc/screenshots/bluetooth-monitor-detail.jpg index 6b08e97..ac71d79 100644 Binary files a/web-admin/weight-management/doc/screenshots/bluetooth-monitor-detail.jpg and b/web-admin/weight-management/doc/screenshots/bluetooth-monitor-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/bluetooth-monitor.jpg b/web-admin/weight-management/doc/screenshots/bluetooth-monitor.jpg index 7b42449..22abcdc 100644 Binary files a/web-admin/weight-management/doc/screenshots/bluetooth-monitor.jpg and b/web-admin/weight-management/doc/screenshots/bluetooth-monitor.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/dept-stat-modal-unit-detail.jpg b/web-admin/weight-management/doc/screenshots/dept-stat-modal-unit-detail.jpg new file mode 100644 index 0000000..6473ba3 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/dept-stat-modal-unit-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/dept-stat.jpg b/web-admin/weight-management/doc/screenshots/dept-stat.jpg index 1673199..eeb1b41 100644 Binary files a/web-admin/weight-management/doc/screenshots/dept-stat.jpg and b/web-admin/weight-management/doc/screenshots/dept-stat.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/detail-data.jpg b/web-admin/weight-management/doc/screenshots/detail-data.jpg deleted file mode 100644 index 25d2bf5..0000000 Binary files a/web-admin/weight-management/doc/screenshots/detail-data.jpg and /dev/null differ diff --git a/web-admin/weight-management/doc/screenshots/employee-data-record-modal-detail.jpg b/web-admin/weight-management/doc/screenshots/employee-data-record-modal-detail.jpg new file mode 100644 index 0000000..2ab7e34 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/employee-data-record-modal-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/employee-data-record.jpg b/web-admin/weight-management/doc/screenshots/employee-data-record.jpg index 8845ad7..62b73ce 100644 Binary files a/web-admin/weight-management/doc/screenshots/employee-data-record.jpg and b/web-admin/weight-management/doc/screenshots/employee-data-record.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/employee-data.jpg b/web-admin/weight-management/doc/screenshots/employee-data.jpg index 656e333..a2f17a5 100644 Binary files a/web-admin/weight-management/doc/screenshots/employee-data.jpg and b/web-admin/weight-management/doc/screenshots/employee-data.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/employee-stat-modal-usage.jpg b/web-admin/weight-management/doc/screenshots/employee-stat-modal-usage.jpg new file mode 100644 index 0000000..65f317c Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/employee-stat-modal-usage.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/employee-stat.jpg b/web-admin/weight-management/doc/screenshots/employee-stat.jpg index eb0d420..6f54570 100644 Binary files a/web-admin/weight-management/doc/screenshots/employee-stat.jpg and b/web-admin/weight-management/doc/screenshots/employee-stat.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/exception-result-abnormal.jpg b/web-admin/weight-management/doc/screenshots/exception-result-abnormal.jpg index 3538b21..2f2e985 100644 Binary files a/web-admin/weight-management/doc/screenshots/exception-result-abnormal.jpg and b/web-admin/weight-management/doc/screenshots/exception-result-abnormal.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/exception-system-dirty.jpg b/web-admin/weight-management/doc/screenshots/exception-system-dirty.jpg index f909411..52980c9 100644 Binary files a/web-admin/weight-management/doc/screenshots/exception-system-dirty.jpg and b/web-admin/weight-management/doc/screenshots/exception-system-dirty.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/fat-device-add.jpg b/web-admin/weight-management/doc/screenshots/fat-device-add.jpg new file mode 100644 index 0000000..48a091c Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/fat-device-add.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/fat-device.jpg b/web-admin/weight-management/doc/screenshots/fat-device.jpg index 5d536e9..2b3bd27 100644 Binary files a/web-admin/weight-management/doc/screenshots/fat-device.jpg and b/web-admin/weight-management/doc/screenshots/fat-device.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/fat-monitor-detail-modal-detail.jpg b/web-admin/weight-management/doc/screenshots/fat-monitor-detail-modal-detail.jpg new file mode 100644 index 0000000..ec6534e Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/fat-monitor-detail-modal-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/fat-monitor-detail.jpg b/web-admin/weight-management/doc/screenshots/fat-monitor-detail.jpg index 7e26f55..9f6094e 100644 Binary files a/web-admin/weight-management/doc/screenshots/fat-monitor-detail.jpg and b/web-admin/weight-management/doc/screenshots/fat-monitor-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/fat-monitor.jpg b/web-admin/weight-management/doc/screenshots/fat-monitor.jpg index 43e9a6f..4da4312 100644 Binary files a/web-admin/weight-management/doc/screenshots/fat-monitor.jpg and b/web-admin/weight-management/doc/screenshots/fat-monitor.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-personnel-detail.jpg b/web-admin/weight-management/doc/screenshots/history-personnel-detail.jpg index 3ad2d5c..e6ba864 100644 Binary files a/web-admin/weight-management/doc/screenshots/history-personnel-detail.jpg and b/web-admin/weight-management/doc/screenshots/history-personnel-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-personnel-list.jpg b/web-admin/weight-management/doc/screenshots/history-personnel-list.jpg deleted file mode 100644 index 4fd9e8e..0000000 Binary files a/web-admin/weight-management/doc/screenshots/history-personnel-list.jpg and /dev/null differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-diet.jpg b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-diet.jpg new file mode 100644 index 0000000..2ce7676 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-diet.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-exercise.jpg b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-exercise.jpg new file mode 100644 index 0000000..9dfa2d9 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-exercise.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-promise.jpg b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-promise.jpg new file mode 100644 index 0000000..63d831a Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-promise.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-serious.jpg b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-serious.jpg new file mode 100644 index 0000000..570d971 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-serious.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-weight.jpg b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-weight.jpg new file mode 100644 index 0000000..8eb7fb0 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/history-plan-detail-modal-weight.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-detail.jpg b/web-admin/weight-management/doc/screenshots/history-plan-detail.jpg index e0d93c4..0be26dd 100644 Binary files a/web-admin/weight-management/doc/screenshots/history-plan-detail.jpg and b/web-admin/weight-management/doc/screenshots/history-plan-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-list-modal-staff.jpg b/web-admin/weight-management/doc/screenshots/history-plan-list-modal-staff.jpg new file mode 100644 index 0000000..0a77717 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/history-plan-list-modal-staff.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/history-plan-list.jpg b/web-admin/weight-management/doc/screenshots/history-plan-list.jpg index 4fcc388..458ff42 100644 Binary files a/web-admin/weight-management/doc/screenshots/history-plan-list.jpg and b/web-admin/weight-management/doc/screenshots/history-plan-list.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/personal-target-data.jpg b/web-admin/weight-management/doc/screenshots/personal-target-data.jpg index 16fadaf..e7bcf8a 100644 Binary files a/web-admin/weight-management/doc/screenshots/personal-target-data.jpg and b/web-admin/weight-management/doc/screenshots/personal-target-data.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/personal-target-detail.jpg b/web-admin/weight-management/doc/screenshots/personal-target-detail.jpg index 0a19248..06d334e 100644 Binary files a/web-admin/weight-management/doc/screenshots/personal-target-detail.jpg and b/web-admin/weight-management/doc/screenshots/personal-target-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-cumulative.jpg b/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-cumulative.jpg new file mode 100644 index 0000000..4330374 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-cumulative.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-diet-unrecorded.jpg b/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-diet-unrecorded.jpg new file mode 100644 index 0000000..bb73fb6 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-diet-unrecorded.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-diet.jpg b/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-diet.jpg new file mode 100644 index 0000000..ea4d09f Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/personnel-measure-record-modal-diet.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/personnel-measure-record.jpg b/web-admin/weight-management/doc/screenshots/personnel-measure-record.jpg new file mode 100644 index 0000000..62d7fa4 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/personnel-measure-record.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/personnel-overview-record.jpg b/web-admin/weight-management/doc/screenshots/personnel-overview-record.jpg new file mode 100644 index 0000000..968e044 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/personnel-overview-record.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-edit-modal-emp-select.jpg b/web-admin/weight-management/doc/screenshots/plan-edit-modal-emp-select.jpg new file mode 100644 index 0000000..a555875 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/plan-edit-modal-emp-select.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-edit-modal-serious-list.jpg b/web-admin/weight-management/doc/screenshots/plan-edit-modal-serious-list.jpg new file mode 100644 index 0000000..b07b246 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/plan-edit-modal-serious-list.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-edit.jpg b/web-admin/weight-management/doc/screenshots/plan-edit.jpg index 0bcd3a4..ee87863 100644 Binary files a/web-admin/weight-management/doc/screenshots/plan-edit.jpg and b/web-admin/weight-management/doc/screenshots/plan-edit.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-list-modal-add-person.jpg b/web-admin/weight-management/doc/screenshots/plan-list-modal-add-person.jpg new file mode 100644 index 0000000..291958d Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/plan-list-modal-add-person.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-list-modal-add-reviewer.jpg b/web-admin/weight-management/doc/screenshots/plan-list-modal-add-reviewer.jpg new file mode 100644 index 0000000..be7e1bb Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/plan-list-modal-add-reviewer.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-list-modal-person-filter.jpg b/web-admin/weight-management/doc/screenshots/plan-list-modal-person-filter.jpg new file mode 100644 index 0000000..f27b3f6 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/plan-list-modal-person-filter.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-list-modal-reviewer.jpg b/web-admin/weight-management/doc/screenshots/plan-list-modal-reviewer.jpg new file mode 100644 index 0000000..25616f6 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/plan-list-modal-reviewer.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/plan-list.jpg b/web-admin/weight-management/doc/screenshots/plan-list.jpg index f3621d6..1c0ac2c 100644 Binary files a/web-admin/weight-management/doc/screenshots/plan-list.jpg and b/web-admin/weight-management/doc/screenshots/plan-list.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/recipe-record-modal-add.jpg b/web-admin/weight-management/doc/screenshots/recipe-record-modal-add.jpg new file mode 100644 index 0000000..034b25d Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/recipe-record-modal-add.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/recipe-record.jpg b/web-admin/weight-management/doc/screenshots/recipe-record.jpg index b82fc77..f95e299 100644 Binary files a/web-admin/weight-management/doc/screenshots/recipe-record.jpg and b/web-admin/weight-management/doc/screenshots/recipe-record.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/registration-tracking-modal-promise.jpg b/web-admin/weight-management/doc/screenshots/registration-tracking-modal-promise.jpg new file mode 100644 index 0000000..2feffcb Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/registration-tracking-modal-promise.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/registration-tracking.jpg b/web-admin/weight-management/doc/screenshots/registration-tracking.jpg index 6221de9..ae24039 100644 Binary files a/web-admin/weight-management/doc/screenshots/registration-tracking.jpg and b/web-admin/weight-management/doc/screenshots/registration-tracking.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/scale-device-add.jpg b/web-admin/weight-management/doc/screenshots/scale-device-add.jpg new file mode 100644 index 0000000..67b70f9 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/scale-device-add.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/scale-device.jpg b/web-admin/weight-management/doc/screenshots/scale-device.jpg index 70ce066..326ad26 100644 Binary files a/web-admin/weight-management/doc/screenshots/scale-device.jpg and b/web-admin/weight-management/doc/screenshots/scale-device.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/scale-monitor-detail-modal-detail.jpg b/web-admin/weight-management/doc/screenshots/scale-monitor-detail-modal-detail.jpg new file mode 100644 index 0000000..99787f2 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/scale-monitor-detail-modal-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/scale-monitor-detail.jpg b/web-admin/weight-management/doc/screenshots/scale-monitor-detail.jpg index 6f549d9..26bb96e 100644 Binary files a/web-admin/weight-management/doc/screenshots/scale-monitor-detail.jpg and b/web-admin/weight-management/doc/screenshots/scale-monitor-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/scale-monitor.jpg b/web-admin/weight-management/doc/screenshots/scale-monitor.jpg index aca53fb..583ddbd 100644 Binary files a/web-admin/weight-management/doc/screenshots/scale-monitor.jpg and b/web-admin/weight-management/doc/screenshots/scale-monitor.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/sport-device-add.jpg b/web-admin/weight-management/doc/screenshots/sport-device-add.jpg new file mode 100644 index 0000000..1306768 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/sport-device-add.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/sport-device.jpg b/web-admin/weight-management/doc/screenshots/sport-device.jpg index c7adf27..0f8f75c 100644 Binary files a/web-admin/weight-management/doc/screenshots/sport-device.jpg and b/web-admin/weight-management/doc/screenshots/sport-device.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/sport-monitor-detail.jpg b/web-admin/weight-management/doc/screenshots/sport-monitor-detail.jpg index b38ba18..ad93f2b 100644 Binary files a/web-admin/weight-management/doc/screenshots/sport-monitor-detail.jpg and b/web-admin/weight-management/doc/screenshots/sport-monitor-detail.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/sport-monitor.jpg b/web-admin/weight-management/doc/screenshots/sport-monitor.jpg index 99f84b6..6c52f75 100644 Binary files a/web-admin/weight-management/doc/screenshots/sport-monitor.jpg and b/web-admin/weight-management/doc/screenshots/sport-monitor.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/target-weight-review-modal-audit.jpg b/web-admin/weight-management/doc/screenshots/target-weight-review-modal-audit.jpg new file mode 100644 index 0000000..537d418 Binary files /dev/null and b/web-admin/weight-management/doc/screenshots/target-weight-review-modal-audit.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/target-weight-review.jpg b/web-admin/weight-management/doc/screenshots/target-weight-review.jpg index 196969f..86026ae 100644 Binary files a/web-admin/weight-management/doc/screenshots/target-weight-review.jpg and b/web-admin/weight-management/doc/screenshots/target-weight-review.jpg differ diff --git a/web-admin/weight-management/doc/screenshots/weight-ranking.jpg b/web-admin/weight-management/doc/screenshots/weight-ranking.jpg index 573ce03..8151ae2 100644 Binary files a/web-admin/weight-management/doc/screenshots/weight-ranking.jpg and b/web-admin/weight-management/doc/screenshots/weight-ranking.jpg differ