diff --git a/employee-app/health-checkup/consult.html b/employee-app/health-checkup/consult.html index f4aa8f4..5d9ec7a 100644 --- a/employee-app/health-checkup/consult.html +++ b/employee-app/health-checkup/consult.html @@ -162,6 +162,8 @@ .consult-table thead th:nth-child(2) { width: 22%; } .consult-table thead th:nth-child(3) { width: 20%; } .consult-table thead th:nth-child(4) { width: 24%; } + .consult-table--gastro thead th:first-child { width: 30%; } + .consult-table--gastro thead th:nth-child(2) { width: 70%; } .is-abnormal { color: var(--danger); font-weight: 600; } .consult-table tbody td:nth-child(2) { color: var(--danger); font-weight: 600; } @@ -310,6 +312,44 @@ + + +
+
肠胃镜检查
+ + +
+
+
胃镜
+ 专家库一键咨询> +
+ + + + + + + + +
名称结果
食管黏膜光滑,未见异常
胃窦黏膜轻度充血水肿
十二指肠黏膜光滑,未见异常
诊断结果慢性非萎缩性胃炎(胃窦)
+
+ + +
+
+
肠镜
+ 专家库一键咨询> +
+ + + + + + + +
名称结果
结肠全结肠黏膜光滑,未见异常
诊断结果全结肠黏膜未见明显异常
病理诊断黏膜慢性炎
+
+
diff --git a/employee-app/health-checkup/report-gastro.html b/employee-app/health-checkup/report-gastro.html new file mode 100644 index 0000000..9956242 --- /dev/null +++ b/employee-app/health-checkup/report-gastro.html @@ -0,0 +1,477 @@ + + + + + + 胃肠镜体检报告 + + + +
+
+ 12:00 +
+ + +
+
+ +
+
+
+ +
+
+
+
2025年体检报告
+
姓名:张旭 +
性别:男 +
年龄:32 +
身份证号:430626198503250024 +
体检日期:2025-03-21 +
体检医院:CQ星龙园医院 +
+
+ 胃肠镜体检 +
+
+ + +
+
胃镜检查
+
+
+
食管
+
+
食管黏膜光滑,色泽正常,血管纹理清晰,未见静脉曲张及占位性病变。贲门开闭良好。
+
+ +
+
+
+
+
+
胃底、胃体黏膜光滑,色泽橘红,黏液湖清亮。胃角切迹光滑,胃窦黏膜轻度充血水肿,未见糜烂及溃疡。幽门口圆,开闭良好。
+
+ +
+
+
+
十二指肠
+
+
十二指肠球部及降部黏膜光滑,未见溃疡、糜烂及占位性病变。乳头形态正常。
+
+ +
+
+
+
诊断结果
+
+
慢性非萎缩性胃炎(胃窦)
+
+ +
+
+
+
+ + +
+ + +
+ +
+ + +
+
肠镜检查
+
+
+
结肠
+
+
全结肠黏膜光滑,血管纹理清晰,未见充血、水肿、糜烂、溃疡及占位性病变。回盲瓣呈唇形,阑尾开口形态正常。结肠袋形态规整,蠕动良好。
+
+ +
+
+
+
诊断结果
+
+
全结肠黏膜未见明显异常
+
+ +
+
+
+
病理诊断
+
+
(降结肠活检)送检肠黏膜组织,腺体排列整齐,间质少量淋巴细胞浸润,未见异型增生及癌细胞。病理诊断:黏膜慢性炎。
+
+ +
+
+
+
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+
+
+
+
+ + + diff --git a/employee-app/health-checkup/report-query.html b/employee-app/health-checkup/report-query.html index a47da5e..8fb55de 100644 --- a/employee-app/health-checkup/report-query.html +++ b/employee-app/health-checkup/report-query.html @@ -144,6 +144,21 @@ font-weight: 700; flex-shrink: 0; } + .report-tag--regular { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 62px; + height: 28px; + padding: 0 10px; + border-radius: 14px; + background: #e6f7ff; + color: #096dd9; + border: 1px solid #91d5ff; + font-size: 12px; + font-weight: 700; + flex-shrink: 0; + } .summary-strip { display: grid; grid-template-columns: repeat(3, 1fr); @@ -404,7 +419,7 @@ -
已出报告
+ 常规体检 diff --git a/employee-app/health-checkup/reports.html b/employee-app/health-checkup/reports.html index 9498e24..7fd4523 100644 --- a/employee-app/health-checkup/reports.html +++ b/employee-app/health-checkup/reports.html @@ -69,6 +69,14 @@ .report-item__content { flex: 1; min-width: 0; } .report-item__title { font-size: 15px; font-weight: 600; color: #1a1a1a; margin-bottom: 4px; } .report-item__meta { font-size: 12px; color: #8c8c8c; } + .report-item__header { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; } + /* 标签 */ + .report-tag { + display: inline-flex; align-items: center; height: 22px; padding: 0 8px; + border-radius: 11px; font-size: 11px; font-weight: 600; white-space: nowrap; flex-shrink: 0; + } + .report-tag--gastro { background: #e6fffb; color: #08979c; border: 1px solid #87e8de; } + .report-tag--regular { background: #e6f7ff; color: #096dd9; border: 1px solid #91d5ff; } .report-item__arrow { font-size: 18px; color: #c6c6c6; flex-shrink: 0; } .bottom-spacer { height: 28px; } @@ -104,46 +112,58 @@
我的历年报告
- -
-
- + +
+
+
-
2025年度胃肠镜体检报告
+
+ 2025年度体检报告 + 胃肠镜体检 +
CQ星龙园医院
- +
-
+
-
2025年度常规体检报告
+
+ 2025年度体检报告 + 常规体检 +
CQ星龙园医院
- +
-
+
-
2024年度常规体检报告
+
+ 2024年度体检报告 + 常规体检 +
CQ星龙园医院
- +
-
+
-
2023年度常规体检报告
+
+ 2023年度体检报告 + 常规体检 +
CQ星龙园医院
diff --git a/employee-app/health-monitor/environment/index.html b/employee-app/health-monitor/environment/index.html index d3bfe80..114e7a9 100644 --- a/employee-app/health-monitor/environment/index.html +++ b/employee-app/health-monitor/environment/index.html @@ -240,9 +240,10 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: font-size: 11px; font-weight: 700; padding: 3px 10px; border-radius: 12px; color: #fff; white-space: nowrap; } -.device-card__metrics { display: flex; flex-wrap: wrap; gap: 8px; } -.metric-chip { font-size: 11px; color: #666; background: #f5f7fa; border-radius: 8px; padding: 3px 8px; } -.metric-chip strong { color: #333; } + .device-card__metrics { display: flex; flex-wrap: wrap; gap: 8px; } + .metric-chip { font-size: 11px; color: #666; background: #f5f7fa; border-radius: 8px; padding: 3px 8px; } + .metric-chip strong { color: #333; } + .device-card__distance { text-align: right; font-size: 11px; color: #999; margin-top: 8px; } /* ===== 底部弹窗 ===== */ .bottom-sheet-mask { @@ -420,12 +421,12 @@ const DATA = { 'lvl-severe': '健康人群运动耐受力降低,有明显强烈症状,提前出现某些疾病', }, devices: [ - { id:'OA001', name:'空气质量监测站-A01', code:'OA-2024-001', unit:'采油一厂', loc:'厂区大门东侧', time:'14:30', level:'lvl-excellent', levelLabel:'优', x:200, y:100, metrics:[{k:'温度',v:'32.5',u:'℃'},{k:'湿度',v:'45',u:'%'},{k:'太阳辐射',v:'680',u:'W/m²'},{k:'PM2.5',v:'28',u:'μg/m³'},{k:'PM10',v:'52',u:'μg/m³'},{k:'照度',v:'65000',u:'lm/m²'},{k:'风速',v:'3.2',u:'m/s'}] }, - { id:'OA002', name:'PM10检测仪-B02', code:'OA-2024-002', unit:'采油一厂', loc:'生产区北围栏', time:'14:28', level:'lvl-good', levelLabel:'良', x:120, y:180, metrics:[{k:'温度',v:'33.1',u:'℃'},{k:'湿度',v:'42',u:'%'},{k:'太阳辐射',v:'720',u:'W/m²'},{k:'PM2.5',v:'38',u:'μg/m³'},{k:'PM10',v:'68',u:'μg/m³'},{k:'照度',v:'72000',u:'lm/m²'},{k:'风速',v:'4.1',u:'m/s'}] }, - { id:'OA003', name:'臭氧检测仪-C01', code:'OA-2024-003', unit:'采油二厂', loc:'办公楼楼顶', time:'14:25', level:'lvl-light', levelLabel:'轻度污染', x:260, y:210, metrics:[{k:'温度',v:'31.8',u:'℃'},{k:'湿度',v:'50',u:'%'},{k:'太阳辐射',v:'580',u:'W/m²'},{k:'PM2.5',v:'55',u:'μg/m³'},{k:'PM10',v:'92',u:'μg/m³'},{k:'照度',v:'58000',u:'lm/m²'},{k:'风速',v:'2.8',u:'m/s'}] }, - { id:'OA004', name:'气象参数监测仪-D01', code:'OA-2024-004', unit:'采油三厂', loc:'气象观测场', time:'14:20', level:'lvl-moderate', levelLabel:'中度污染', x:80, y:300, metrics:[{k:'温度',v:'34.2',u:'℃'},{k:'湿度',v:'38',u:'%'},{k:'太阳辐射',v:'850',u:'W/m²'},{k:'PM2.5',v:'82',u:'μg/m³'},{k:'PM10',v:'135',u:'μg/m³'},{k:'照度',v:'85000',u:'lm/m²'},{k:'风速',v:'5.6',u:'m/s'}] }, - { id:'OA005', name:'空气质量监测站-A03', code:'OA-2024-005', unit:'采油三厂', loc:'储油罐区南侧', time:'14:15', level:'lvl-heavy', levelLabel:'重度污染', x:210, y:340, metrics:[{k:'温度',v:'35.0',u:'℃'},{k:'湿度',v:'35',u:'%'},{k:'太阳辐射',v:'920',u:'W/m²'},{k:'PM2.5',v:'125',u:'μg/m³'},{k:'PM10',v:'190',u:'μg/m³'},{k:'照度',v:'92000',u:'lm/m²'},{k:'风速',v:'6.3',u:'m/s'}] }, - { id:'OA006', name:'VOC检测仪-E01', code:'OA-2024-006', unit:'采油三厂', loc:'化工装置区', time:'14:10', level:'lvl-severe', levelLabel:'严重污染', x:310, y:280, metrics:[{k:'温度',v:'36.2',u:'℃'},{k:'湿度',v:'30',u:'%'},{k:'太阳辐射',v:'950',u:'W/m²'},{k:'PM2.5',v:'180',u:'μg/m³'},{k:'PM10',v:'260',u:'μg/m³'},{k:'照度',v:'95000',u:'lm/m²'},{k:'风速',v:'7.1',u:'m/s'}] }, + { id:'OA001', name:'空气质量监测站-A01', code:'OA-2024-001', unit:'采油一厂', loc:'厂区大门东侧', time:'14:30', level:'lvl-excellent', levelLabel:'优', dist:0.8, x:200, y:100, metrics:[{k:'温度',v:'32.5',u:'℃'},{k:'湿度',v:'45',u:'%'},{k:'太阳辐射',v:'680',u:'W/m²'},{k:'PM2.5',v:'28',u:'μg/m³'},{k:'PM10',v:'52',u:'μg/m³'},{k:'照度',v:'65000',u:'lm/m²'},{k:'风速',v:'3.2',u:'m/s'}] }, + { id:'OA002', name:'PM10检测仪-B02', code:'OA-2024-002', unit:'采油一厂', loc:'生产区北围栏', time:'14:28', level:'lvl-good', levelLabel:'良', dist:1.2, x:120, y:180, metrics:[{k:'温度',v:'33.1',u:'℃'},{k:'湿度',v:'42',u:'%'},{k:'太阳辐射',v:'720',u:'W/m²'},{k:'PM2.5',v:'38',u:'μg/m³'},{k:'PM10',v:'68',u:'μg/m³'},{k:'照度',v:'72000',u:'lm/m²'},{k:'风速',v:'4.1',u:'m/s'}] }, + { id:'OA003', name:'臭氧检测仪-C01', code:'OA-2024-003', unit:'采油二厂', loc:'办公楼楼顶', time:'14:25', level:'lvl-light', levelLabel:'轻度污染', dist:2.5, x:260, y:210, metrics:[{k:'温度',v:'31.8',u:'℃'},{k:'湿度',v:'50',u:'%'},{k:'太阳辐射',v:'580',u:'W/m²'},{k:'PM2.5',v:'55',u:'μg/m³'},{k:'PM10',v:'92',u:'μg/m³'},{k:'照度',v:'58000',u:'lm/m²'},{k:'风速',v:'2.8',u:'m/s'}] }, + { id:'OA004', name:'气象参数监测仪-D01', code:'OA-2024-004', unit:'采油三厂', loc:'气象观测场', time:'14:20', level:'lvl-moderate', levelLabel:'中度污染', dist:3.1, x:80, y:300, metrics:[{k:'温度',v:'34.2',u:'℃'},{k:'湿度',v:'38',u:'%'},{k:'太阳辐射',v:'850',u:'W/m²'},{k:'PM2.5',v:'82',u:'μg/m³'},{k:'PM10',v:'135',u:'μg/m³'},{k:'照度',v:'85000',u:'lm/m²'},{k:'风速',v:'5.6',u:'m/s'}] }, + { id:'OA005', name:'空气质量监测站-A03', code:'OA-2024-005', unit:'采油三厂', loc:'储油罐区南侧', time:'14:15', level:'lvl-heavy', levelLabel:'重度污染', dist:4.0, x:210, y:340, metrics:[{k:'温度',v:'35.0',u:'℃'},{k:'湿度',v:'35',u:'%'},{k:'太阳辐射',v:'920',u:'W/m²'},{k:'PM2.5',v:'125',u:'μg/m³'},{k:'PM10',v:'190',u:'μg/m³'},{k:'照度',v:'92000',u:'lm/m²'},{k:'风速',v:'6.3',u:'m/s'}] }, + { id:'OA006', name:'VOC检测仪-E01', code:'OA-2024-006', unit:'采油三厂', loc:'化工装置区', time:'14:10', level:'lvl-severe', levelLabel:'严重污染', dist:5.2, x:310, y:280, metrics:[{k:'温度',v:'36.2',u:'℃'},{k:'湿度',v:'30',u:'%'},{k:'太阳辐射',v:'950',u:'W/m²'},{k:'PM2.5',v:'180',u:'μg/m³'},{k:'PM10',v:'260',u:'μg/m³'},{k:'照度',v:'95000',u:'lm/m²'},{k:'风速',v:'7.1',u:'m/s'}] }, ] }, indoor: { @@ -445,11 +446,11 @@ const DATA = { 'lvl-heavy': '空气质量较差,敏感人群应离开该区域', }, devices: [ - { id:'IA001', name:'综合空气监测仪-A01', code:'IA-2024-001', unit:'采油一厂', loc:'办公楼1层大厅', time:'14:30', level:'lvl-clean', levelLabel:'清洁', x:200, y:100, metrics:[{k:'温度',v:'24.5',u:'℃'},{k:'湿度',v:'52',u:'%'},{k:'CO₂',v:'456',u:'ppm'},{k:'甲醛',v:'0.03',u:'mg/m³'},{k:'PM2.5',v:'35',u:'μg/m³'},{k:'PM10',v:'68',u:'μg/m³'}] }, - { id:'IA002', name:'PM2.5检测仪-B03', code:'IA-2024-002', unit:'采油一厂', loc:'办公楼2层会议室', time:'14:28', level:'lvl-good', levelLabel:'未污染', x:130, y:185, metrics:[{k:'温度',v:'25.1',u:'℃'},{k:'湿度',v:'58',u:'%'},{k:'CO₂',v:'512',u:'ppm'},{k:'甲醛',v:'0.05',u:'mg/m³'},{k:'PM2.5',v:'42',u:'μg/m³'},{k:'PM10',v:'76',u:'μg/m³'}] }, - { id:'IA003', name:'甲醛检测仪-C02', code:'IA-2024-003', unit:'采油二厂', loc:'新装修办公室3层', time:'14:25', level:'lvl-light', levelLabel:'轻污染', x:270, y:220, metrics:[{k:'温度',v:'26.3',u:'℃'},{k:'湿度',v:'61',u:'%'},{k:'CO₂',v:'680',u:'ppm'},{k:'甲醛',v:'0.09',u:'mg/m³'},{k:'PM2.5',v:'58',u:'μg/m³'},{k:'PM10',v:'95',u:'μg/m³'}] }, - { id:'IA004', name:'CO₂检测仪-D01', code:'IA-2024-004', unit:'采油二厂', loc:'地下车库B1层', time:'14:20', level:'lvl-moderate', levelLabel:'中污染', x:90, y:305, metrics:[{k:'温度',v:'22.8',u:'℃'},{k:'湿度',v:'72',u:'%'},{k:'CO₂',v:'920',u:'ppm'},{k:'甲醛',v:'0.07',u:'mg/m³'},{k:'PM2.5',v:'82',u:'μg/m³'},{k:'PM10',v:'128',u:'μg/m³'}] }, - { id:'IA005', name:'综合空气监测仪-A05', code:'IA-2024-005', unit:'采油三厂', loc:'生产车间1号', time:'14:15', level:'lvl-heavy', levelLabel:'重污染', x:210, y:340, metrics:[{k:'温度',v:'28.6',u:'℃'},{k:'湿度',v:'78',u:'%'},{k:'CO₂',v:'1050',u:'ppm'},{k:'甲醛',v:'0.12',u:'mg/m³'},{k:'PM2.5',v:'120',u:'μg/m³'},{k:'PM10',v:'185',u:'μg/m³'}] }, + { id:'IA001', name:'综合空气监测仪-A01', code:'IA-2024-001', unit:'采油一厂', loc:'办公楼1层大厅', time:'14:30', level:'lvl-clean', levelLabel:'清洁', dist:0.5, x:200, y:100, metrics:[{k:'温度',v:'24.5',u:'℃'},{k:'湿度',v:'52',u:'%'},{k:'CO₂',v:'456',u:'ppm'},{k:'甲醛',v:'0.03',u:'mg/m³'},{k:'PM2.5',v:'35',u:'μg/m³'},{k:'PM10',v:'68',u:'μg/m³'}] }, + { id:'IA002', name:'PM2.5检测仪-B03', code:'IA-2024-002', unit:'采油一厂', loc:'办公楼2层会议室', time:'14:28', level:'lvl-good', levelLabel:'未污染', dist:0.7, x:130, y:185, metrics:[{k:'温度',v:'25.1',u:'℃'},{k:'湿度',v:'58',u:'%'},{k:'CO₂',v:'512',u:'ppm'},{k:'甲醛',v:'0.05',u:'mg/m³'},{k:'PM2.5',v:'42',u:'μg/m³'},{k:'PM10',v:'76',u:'μg/m³'}] }, + { id:'IA003', name:'甲醛检测仪-C02', code:'IA-2024-003', unit:'采油二厂', loc:'新装修办公室3层', time:'14:25', level:'lvl-light', levelLabel:'轻污染', dist:1.8, x:270, y:220, metrics:[{k:'温度',v:'26.3',u:'℃'},{k:'湿度',v:'61',u:'%'},{k:'CO₂',v:'680',u:'ppm'},{k:'甲醛',v:'0.09',u:'mg/m³'},{k:'PM2.5',v:'58',u:'μg/m³'},{k:'PM10',v:'95',u:'μg/m³'}] }, + { id:'IA004', name:'CO₂检测仪-D01', code:'IA-2024-004', unit:'采油二厂', loc:'地下车库B1层', time:'14:20', level:'lvl-moderate', levelLabel:'中污染', dist:2.2, x:90, y:305, metrics:[{k:'温度',v:'22.8',u:'℃'},{k:'湿度',v:'72',u:'%'},{k:'CO₂',v:'920',u:'ppm'},{k:'甲醛',v:'0.07',u:'mg/m³'},{k:'PM2.5',v:'82',u:'μg/m³'},{k:'PM10',v:'128',u:'μg/m³'}] }, + { id:'IA005', name:'综合空气监测仪-A05', code:'IA-2024-005', unit:'采油三厂', loc:'生产车间1号', time:'14:15', level:'lvl-heavy', levelLabel:'重污染', dist:3.5, x:210, y:340, metrics:[{k:'温度',v:'28.6',u:'℃'},{k:'湿度',v:'78',u:'%'},{k:'CO₂',v:'1050',u:'ppm'},{k:'甲醛',v:'0.12',u:'mg/m³'},{k:'PM2.5',v:'120',u:'μg/m³'},{k:'PM10',v:'185',u:'μg/m³'}] }, ] }, water: { @@ -463,11 +464,11 @@ const DATA = { 'lvl-fail': '水质存在超标项目,需检查处理', }, devices: [ - { id:'WQ001', name:'多参数水质分析仪-A01', code:'WQ-2024-001', unit:'采油一厂', loc:'生活区供水站', time:'14:30', level:'lvl-pass', levelLabel:'达标', x:180, y:110, metrics:[{k:'温度',v:'18.5',u:'℃'},{k:'电导率',v:'320',u:'μS/cm'},{k:'PH',v:'7.2',u:''},{k:'盐度',v:'180',u:'mg/L'},{k:'电阻率',v:'3125',u:'Ω·m'},{k:'TDS',v:'160',u:'mg/L'}] }, - { id:'WQ002', name:'在线PH计-B02', code:'WQ-2024-002', unit:'采油一厂', loc:'污水处理站出口', time:'14:28', level:'lvl-pass', levelLabel:'达标', x:110, y:200, metrics:[{k:'温度',v:'20.3',u:'℃'},{k:'电导率',v:'580',u:'μS/cm'},{k:'PH',v:'6.8',u:''},{k:'盐度',v:'320',u:'mg/L'},{k:'电阻率',v:'1724',u:'Ω·m'},{k:'TDS',v:'290',u:'mg/L'}] }, - { id:'WQ003', name:'电导率监测仪-C01', code:'WQ-2024-003', unit:'采油二厂', loc:'注水站入口', time:'14:25', level:'lvl-fail', levelLabel:'未达标', x:260, y:215, metrics:[{k:'温度',v:'22.1',u:'℃'},{k:'电导率',v:'1250',u:'μS/cm'},{k:'PH',v:'8.5',u:''},{k:'盐度',v:'680',u:'mg/L'},{k:'电阻率',v:'800',u:'Ω·m'},{k:'TDS',v:'625',u:'mg/L'}] }, - { id:'WQ004', name:'TDS检测仪-D01', code:'WQ-2024-004', unit:'采油二厂', loc:'生产区储水池', time:'14:20', level:'lvl-pass', levelLabel:'达标', x:80, y:310, metrics:[{k:'温度',v:'19.8',u:'℃'},{k:'电导率',v:'450',u:'μS/cm'},{k:'PH',v:'7.0',u:''},{k:'盐度',v:'240',u:'mg/L'},{k:'电阻率',v:'2222',u:'Ω·m'},{k:'TDS',v:'225',u:'mg/L'}] }, - { id:'WQ005', name:'多参数水质分析仪-A03', code:'WQ-2024-005', unit:'采油三厂', loc:'排污口监测点', time:'14:15', level:'lvl-fail', levelLabel:'未达标', x:220, y:345, metrics:[{k:'温度',v:'23.5',u:'℃'},{k:'电导率',v:'1680',u:'μS/cm'},{k:'PH',v:'9.2',u:''},{k:'盐度',v:'920',u:'mg/L'},{k:'电阻率',v:'595',u:'Ω·m'},{k:'TDS',v:'840',u:'mg/L'}] }, + { id:'WQ001', name:'多参数水质分析仪-A01', code:'WQ-2024-001', unit:'采油一厂', loc:'生活区供水站', time:'14:30', level:'lvl-pass', levelLabel:'达标', dist:0.6, x:180, y:110, metrics:[{k:'温度',v:'18.5',u:'℃'},{k:'电导率',v:'320',u:'μS/cm'},{k:'PH',v:'7.2',u:''},{k:'盐度',v:'180',u:'mg/L'},{k:'电阻率',v:'3125',u:'Ω·m'},{k:'TDS',v:'160',u:'mg/L'}] }, + { id:'WQ002', name:'在线PH计-B02', code:'WQ-2024-002', unit:'采油一厂', loc:'污水处理站出口', time:'14:28', level:'lvl-pass', levelLabel:'达标', dist:1.1, x:110, y:200, metrics:[{k:'温度',v:'20.3',u:'℃'},{k:'电导率',v:'580',u:'μS/cm'},{k:'PH',v:'6.8',u:''},{k:'盐度',v:'320',u:'mg/L'},{k:'电阻率',v:'1724',u:'Ω·m'},{k:'TDS',v:'290',u:'mg/L'}] }, + { id:'WQ003', name:'电导率监测仪-C01', code:'WQ-2024-003', unit:'采油二厂', loc:'注水站入口', time:'14:25', level:'lvl-fail', levelLabel:'未达标', dist:2.0, x:260, y:215, metrics:[{k:'温度',v:'22.1',u:'℃'},{k:'电导率',v:'1250',u:'μS/cm'},{k:'PH',v:'8.5',u:''},{k:'盐度',v:'680',u:'mg/L'},{k:'电阻率',v:'800',u:'Ω·m'},{k:'TDS',v:'625',u:'mg/L'}] }, + { id:'WQ004', name:'TDS检测仪-D01', code:'WQ-2024-004', unit:'采油二厂', loc:'生产区储水池', time:'14:20', level:'lvl-pass', levelLabel:'达标', dist:2.8, x:80, y:310, metrics:[{k:'温度',v:'19.8',u:'℃'},{k:'电导率',v:'450',u:'μS/cm'},{k:'PH',v:'7.0',u:''},{k:'盐度',v:'240',u:'mg/L'},{k:'电阻率',v:'2222',u:'Ω·m'},{k:'TDS',v:'225',u:'mg/L'}] }, + { id:'WQ005', name:'多参数水质分析仪-A03', code:'WQ-2024-005', unit:'采油三厂', loc:'排污口监测点', time:'14:15', level:'lvl-fail', levelLabel:'未达标', dist:3.6, x:220, y:345, metrics:[{k:'温度',v:'23.5',u:'℃'},{k:'电导率',v:'1680',u:'μS/cm'},{k:'PH',v:'9.2',u:''},{k:'盐度',v:'920',u:'mg/L'},{k:'电阻率',v:'595',u:'Ω·m'},{k:'TDS',v:'840',u:'mg/L'}] }, ] }, pollen: { @@ -487,11 +488,11 @@ const DATA = { 'lvl-vhigh': '花粉浓度极高,过敏人群应尽量避免外出', }, devices: [ - { id:'PL001', name:'花粉采样器-A01', code:'PL-2024-001', unit:'采油一厂', loc:'办公区绿化带', time:'14:30', level:'lvl-vlow', levelLabel:'很低', x:190, y:105, metrics:[{k:'榆属',v:'12',u:'粒/千mm²'},{k:'松属',v:'8',u:'粒/千mm²'},{k:'杨属',v:'15',u:'粒/千mm²'},{k:'柏科',v:'6',u:'粒/千mm²'},{k:'柳属',v:'10',u:'粒/千mm²'},{k:'蒿属',v:'5',u:'粒/千mm²'},{k:'藜科',v:'3',u:'粒/千mm²'},{k:'苋科',v:'2',u:'粒/千mm²'},{k:'花粉总数',v:'61',u:'粒/千mm²'}] }, - { id:'PL002', name:'花粉浓度监测仪-B01', code:'PL-2024-002', unit:'采油一厂', loc:'厂区东侧林带', time:'14:28', level:'lvl-low', levelLabel:'低', x:120, y:195, metrics:[{k:'榆属',v:'35',u:'粒/千mm²'},{k:'松属',v:'22',u:'粒/千mm²'},{k:'杨属',v:'48',u:'粒/千mm²'},{k:'柏科',v:'18',u:'粒/千mm²'},{k:'柳属',v:'28',u:'粒/千mm²'},{k:'蒿属',v:'15',u:'粒/千mm²'},{k:'藜科',v:'8',u:'粒/千mm²'},{k:'苋科',v:'6',u:'粒/千mm²'},{k:'花粉总数',v:'180',u:'粒/千mm²'}] }, - { id:'PL003', name:'花粉自动计数仪-C01', code:'PL-2024-003', unit:'采油二厂', loc:'生活区花园', time:'14:25', level:'lvl-medium', levelLabel:'中等', x:265, y:220, metrics:[{k:'榆属',v:'68',u:'粒/千mm²'},{k:'松属',v:'45',u:'粒/千mm²'},{k:'杨属',v:'82',u:'粒/千mm²'},{k:'柏科',v:'35',u:'粒/千mm²'},{k:'柳属',v:'52',u:'粒/千mm²'},{k:'蒿属',v:'30',u:'粒/千mm²'},{k:'藜科',v:'18',u:'粒/千mm²'},{k:'苋科',v:'12',u:'粒/千mm²'},{k:'花粉总数',v:'342',u:'粒/千mm²'}] }, - { id:'PL004', name:'综合气象花粉站-D01', code:'PL-2024-004', unit:'采油二厂', loc:'气象观测场', time:'14:20', level:'lvl-high', levelLabel:'高', x:80, y:305, metrics:[{k:'榆属',v:'120',u:'粒/千mm²'},{k:'松属',v:'85',u:'粒/千mm²'},{k:'杨属',v:'150',u:'粒/千mm²'},{k:'柏科',v:'65',u:'粒/千mm²'},{k:'柳属',v:'95',u:'粒/千mm²'},{k:'蒿属',v:'55',u:'粒/千mm²'},{k:'藜科',v:'32',u:'粒/千mm²'},{k:'苋科',v:'22',u:'粒/千mm²'},{k:'花粉总数',v:'624',u:'粒/千mm²'}] }, - { id:'PL005', name:'花粉采样器-A03', code:'PL-2024-005', unit:'采油三厂', loc:'杨树林防护带', time:'14:15', level:'lvl-vhigh', levelLabel:'很高', x:215, y:345, metrics:[{k:'榆属',v:'210',u:'粒/千mm²'},{k:'松属',v:'145',u:'粒/千mm²'},{k:'杨属',v:'280',u:'粒/千mm²'},{k:'柏科',v:'110',u:'粒/千mm²'},{k:'柳属',v:'168',u:'粒/千mm²'},{k:'蒿属',v:'92',u:'粒/千mm²'},{k:'藜科',v:'55',u:'粒/千mm²'},{k:'苋科',v:'38',u:'粒/千mm²'},{k:'花粉总数',v:'1098',u:'粒/千mm²'}] }, + { id:'PL001', name:'花粉采样器-A01', code:'PL-2024-001', unit:'采油一厂', loc:'办公区绿化带', time:'14:30', level:'lvl-vlow', levelLabel:'很低', dist:0.4, x:190, y:105, metrics:[{k:'榆属',v:'12',u:'粒/千mm²'},{k:'松属',v:'8',u:'粒/千mm²'},{k:'杨属',v:'15',u:'粒/千mm²'},{k:'柏科',v:'6',u:'粒/千mm²'},{k:'柳属',v:'10',u:'粒/千mm²'},{k:'蒿属',v:'5',u:'粒/千mm²'},{k:'藜科',v:'3',u:'粒/千mm²'},{k:'苋科',v:'2',u:'粒/千mm²'},{k:'花粉总数',v:'61',u:'粒/千mm²'}] }, + { id:'PL002', name:'花粉浓度监测仪-B01', code:'PL-2024-002', unit:'采油一厂', loc:'厂区东侧林带', time:'14:28', level:'lvl-low', levelLabel:'低', dist:0.9, x:120, y:195, metrics:[{k:'榆属',v:'35',u:'粒/千mm²'},{k:'松属',v:'22',u:'粒/千mm²'},{k:'杨属',v:'48',u:'粒/千mm²'},{k:'柏科',v:'18',u:'粒/千mm²'},{k:'柳属',v:'28',u:'粒/千mm²'},{k:'蒿属',v:'15',u:'粒/千mm²'},{k:'藜科',v:'8',u:'粒/千mm²'},{k:'苋科',v:'6',u:'粒/千mm²'},{k:'花粉总数',v:'180',u:'粒/千mm²'}] }, + { id:'PL003', name:'花粉自动计数仪-C01', code:'PL-2024-003', unit:'采油二厂', loc:'生活区花园', time:'14:25', level:'lvl-medium', levelLabel:'中等', dist:1.6, x:265, y:220, metrics:[{k:'榆属',v:'68',u:'粒/千mm²'},{k:'松属',v:'45',u:'粒/千mm²'},{k:'杨属',v:'82',u:'粒/千mm²'},{k:'柏科',v:'35',u:'粒/千mm²'},{k:'柳属',v:'52',u:'粒/千mm²'},{k:'蒿属',v:'30',u:'粒/千mm²'},{k:'藜科',v:'18',u:'粒/千mm²'},{k:'苋科',v:'12',u:'粒/千mm²'},{k:'花粉总数',v:'342',u:'粒/千mm²'}] }, + { id:'PL004', name:'综合气象花粉站-D01', code:'PL-2024-004', unit:'采油二厂', loc:'气象观测场', time:'14:20', level:'lvl-high', levelLabel:'高', dist:2.4, x:80, y:305, metrics:[{k:'榆属',v:'120',u:'粒/千mm²'},{k:'松属',v:'85',u:'粒/千mm²'},{k:'杨属',v:'150',u:'粒/千mm²'},{k:'柏科',v:'65',u:'粒/千mm²'},{k:'柳属',v:'95',u:'粒/千mm²'},{k:'蒿属',v:'55',u:'粒/千mm²'},{k:'藜科',v:'32',u:'粒/千mm²'},{k:'苋科',v:'22',u:'粒/千mm²'},{k:'花粉总数',v:'624',u:'粒/千mm²'}] }, + { id:'PL005', name:'花粉采样器-A03', code:'PL-2024-005', unit:'采油三厂', loc:'杨树林防护带', time:'14:15', level:'lvl-vhigh', levelLabel:'很高', dist:3.3, x:215, y:345, metrics:[{k:'榆属',v:'210',u:'粒/千mm²'},{k:'松属',v:'145',u:'粒/千mm²'},{k:'杨属',v:'280',u:'粒/千mm²'},{k:'柏科',v:'110',u:'粒/千mm²'},{k:'柳属',v:'168',u:'粒/千mm²'},{k:'蒿属',v:'92',u:'粒/千mm²'},{k:'藜科',v:'55',u:'粒/千mm²'},{k:'苋科',v:'38',u:'粒/千mm²'},{k:'花粉总数',v:'1098',u:'粒/千mm²'}] }, ] } }; @@ -584,6 +585,7 @@ function renderListCards() {
${dev.levelLabel}
+
距离${dev.dist}km
`; }).join(''); } diff --git a/employee-app/health-monitor/health-status.html b/employee-app/health-monitor/health-status.html index 390222f..68ba5db 100644 --- a/employee-app/health-monitor/health-status.html +++ b/employee-app/health-monitor/health-status.html @@ -27,14 +27,33 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .gauge-badge { position: absolute; top: 10px; right: -10px; width: 40px; height: 40px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: 800; color: #fff; } .gauge-badge--A { background: #ff4d4f; } -/* 人群标签 */ -.crowd-tag { display: inline-flex; align-items: center; padding: 6px 16px; border-radius: 20px; font-size: 15px; font-weight: 700; margin-bottom: 8px; } -.crowd-tag--A { color: #ff4d4f; background: #fff1f0; border: 1px solid #ffccc7; } -.crowd-tag--B { color: #fa8c16; background: #fff7e6; border: 1px solid #ffd591; } -.crowd-tag--C { color: #faad14; background: #fffbe6; border: 1px solid #ffe58f; } -.crowd-tag--D { color: #1890ff; background: #e6f7ff; border: 1px solid #91d5ff; } -.crowd-tag--E { color: #52c41a; background: #f6ffed; border: 1px solid #b7eb8f; } -.update-time { font-size: 12px; color: #999; } + /* 人群标签 */ + .crowd-row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; } + .crowd-tag { display: inline-flex; align-items: center; padding: 6px 16px; border-radius: 20px; font-size: 15px; font-weight: 700; } + .crowd-tag--A { color: #ff4d4f; background: #fff1f0; border: 1px solid #ffccc7; } + .crowd-tag--B { color: #fa8c16; background: #fff7e6; border: 1px solid #ffd591; } + .crowd-tag--C { color: #faad14; background: #fffbe6; border: 1px solid #ffe58f; } + .crowd-tag--D { color: #1890ff; background: #e6f7ff; border: 1px solid #91d5ff; } + .crowd-tag--E { color: #52c41a; background: #f6ffed; border: 1px solid #b7eb8f; } + .crowd-help-btn { width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid #d9d9d9; background: #fff; color: #999; font-size: 13px; font-weight: 700; display: flex; align-items: center; justify-content: center; cursor: pointer; flex-shrink: 0; } + .update-time { font-size: 12px; color: #999; } + + /* 弹窗遮罩 */ + .popup-mask { position: absolute; inset: 0; background: rgba(0,0,0,0.4); z-index: 30; display: none; align-items: center; justify-content: center; } + .popup-mask.active { display: flex; } + .popup-dialog { width: 300px; background: #fff; border-radius: 16px; padding: 20px; box-shadow: 0 12px 40px rgba(0,0,0,0.2); animation: popIn 0.2s ease; } + @keyframes popIn { from { transform: scale(0.9); opacity: 0; } to { transform: scale(1); opacity: 1; } } + .popup-dialog__title { font-size: 16px; font-weight: 700; color: #1a1a1a; margin-bottom: 14px; text-align: center; } + .popup-dialog__list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 18px; } + .popup-dialog__item { display: flex; align-items: center; gap: 10px; font-size: 13px; color: #333; } + .popup-dialog__letter { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; color: #fff; flex-shrink: 0; } + .popup-dialog__letter--A { background: #ff4d4f; } + .popup-dialog__letter--B { background: #fa8c16; } + .popup-dialog__letter--C { background: #faad14; } + .popup-dialog__letter--D { background: #1890ff; } + .popup-dialog__letter--E { background: #52c41a; } + .popup-dialog__desc { flex: 1; line-height: 1.5; } + .popup-dialog__close { width: 100%; height: 40px; border: none; border-radius: 20px; background: #f5f5f5; color: #666; font-size: 14px; font-weight: 600; cursor: pointer; } /* 说明区 */ .note-section { padding: 16px; } @@ -102,15 +121,34 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items:
A
-
A类人群
+
+
A类人群
+ +
更新时间:2026-03-26 14:36
- -
-
-
💬 说明
-
现状评估的人群分类按A、B、C、D、E五个分类进行分类。
E类:健康人群 | D类:风险人群 | C类:异常人群 | B类:慢病人群 | A类:大病人群
+ +
+
分类信息(大病信息)
+
+
肺癌
+
+ 确诊年份 + 2022年 +
+
+ 确诊医院 + 宁夏宝石花医院 +
+
+ 大病状态 + 可控 +
+
+ 治疗情况 + 目前属于血糖偏高,可控阶段,按时服药,定期复诊。 +
@@ -141,32 +179,49 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items:
- -
-
分类信息(大病信息)
-
-
肺癌
-
- 确诊年份 - 2022年 -
-
- 确诊医院 - 宁夏宝石花医院 -
-
- 大病状态 - 可控 -
-
- 治疗情况 - 目前属于血糖偏高,可控阶段,按时服药,定期复诊。 -
-
-
-
+ + + + + diff --git a/employee-app/weight-management/eat-checkin.html b/employee-app/weight-management/eat-checkin.html index c39b67a..dbc036e 100644 --- a/employee-app/weight-management/eat-checkin.html +++ b/employee-app/weight-management/eat-checkin.html @@ -71,8 +71,7 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .type-card__kcal { font-size: 11px; color: #666; } .type-card__kcal em { font-style: normal; font-weight: 700; color: #1a1a1a; } .type-card__empty { font-size: 11px; color: #bbb; } -.type-card__arrow { color: #ccc; flex-shrink: 0; margin-left: 4px; } -.type-card__arrow svg { width: 16px; height: 16px; } + .type-card__arrow { display: none; } /* ===== 自记餐品选择区 ===== */ .self-record { margin: 0 12px 12px; } diff --git a/employee-app/weight-management/exercise-checkin.html b/employee-app/weight-management/exercise-checkin.html index fc9e4b2..d811017 100644 --- a/employee-app/weight-management/exercise-checkin.html +++ b/employee-app/weight-management/exercise-checkin.html @@ -289,7 +289,7 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items:
周二
08-11
-
10200
+
523千卡
推荐12000
穿戴
@@ -359,7 +359,7 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items:
穿戴设备
-
尚未自动记录
+
尚未记录
diff --git a/employee-app/weight-management/exercise-history.html b/employee-app/weight-management/exercise-history.html index 5255df6..e4c030c 100644 --- a/employee-app/weight-management/exercise-history.html +++ b/employee-app/weight-management/exercise-history.html @@ -115,6 +115,10 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .source-badge--manual { background: #fff7e6; color: #fa8c16; } .source-badge--mixed { background: #f9f0ff; color: #722ed1; } +.record-section-title { font-size: 13px; font-weight: 700; color: #1a1a1a; padding: 4px 4px 0; display: flex; align-items: center; gap: 6px; } +.record-section-title::before { content: ''; width: 3px; height: 14px; background: #ff8a3d; border-radius: 2px; flex-shrink: 0; } +.record-section-title--steps::before { background: #1890ff; } + .record-empty { text-align: center; padding: 40px 20px; color: #ccc; font-size: 14px; } .bottom-safe { height: 20px; flex-shrink: 0; } @@ -468,6 +472,10 @@ function getTabDateRange() { } /* ===== 渲染记录列表 ===== */ +function isStepRecord(r) { + return r.name === '快走' || r.name === '散步' || r.name === '徒步'; +} + function renderRecordList() { var filtered; if (selectedDate) { @@ -486,6 +494,56 @@ function renderRecordList() { return; } + // 选中具体日期时,分组展示:当日步数 + 运动记录 + if (selectedDate) { + var stepRecords = filtered.filter(function(r) { return isStepRecord(r); }); + var exerciseRecords = filtered.filter(function(r) { return !isStepRecord(r); }); + + var html = ''; + + // 当日步数(最多一条) + if (stepRecords.length > 0) { + html += '
当日步数
'; + var sr = stepRecords[0]; + var src = SOURCE_TYPES[sr.source]; + html += '
'; + html += '
'; + html += '' + sr.name + ''; + html += '' + sr.date + ' ' + sr.time + ''; + html += '
'; + html += '
'; + html += '
消耗热量
' + sr.kcal + '千卡
'; + html += '
运动时长
' + sr.duration + '分钟
'; + html += '
' + src.label + '
'; + html += '
'; + html += '
'; + } + + // 运动记录 + if (exerciseRecords.length > 0) { + html += '
运动记录
'; + for (var i = 0; i < exerciseRecords.length; i++) { + var r = exerciseRecords[i]; + var src2 = SOURCE_TYPES[r.source]; + html += '
'; + html += '
'; + html += '' + r.name + ''; + html += '' + r.date + ' ' + r.time + ''; + html += '
'; + html += '
'; + html += '
消耗热量
' + r.kcal + '千卡
'; + html += '
运动时长
' + r.duration + '分钟
'; + html += '
' + src2.label + '
'; + html += '
'; + html += '
'; + } + } + + container.innerHTML = html; + return; + } + + // Tab 模式:扁平列表 var html = ''; for (var i = 0; i < filtered.length; i++) { var r = filtered[i]; diff --git a/employee-app/weight-management/weight-checkin.html b/employee-app/weight-management/weight-checkin.html index 8651908..e2f060e 100644 --- a/employee-app/weight-management/weight-checkin.html +++ b/employee-app/weight-management/weight-checkin.html @@ -232,38 +232,38 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items:
- - - -
-
周一
-
08-10
-
62.8kg
-
推荐56-68kg
- 蓝牙 -
+ + + +
+
周一
+
08-10
+
62.8kg
+
体脂率 --%
+ 蓝牙 +
- - - -
-
周二
-
08-11
-
62.7kg
-
推荐56-68kg
- 体脂仪 -
+ + + +
+
周二
+
08-11
+
62.7kg
+
体脂率 20.2%
+ 体脂仪 +
- - - -
-
周三
-
今天
-
62.6kg
-
推荐56-68kg
- 身高秤 -
+ + + +
+
周三
+
今天
+
62.6kg
+
体脂率 20.0%
+ 身高秤 +
@@ -800,53 +800,74 @@ function confirmSubmit() { showToast('记录成功!'); } -/* 更新日期卡片显示 */ -function updateDayCard(day) { - var card = document.querySelector('.day-card[data-day="' + day + '"]'); - if (!card) return; + /* 更新日期卡片显示 */ + function updateDayCard(day) { + var card = document.querySelector('.day-card[data-day="' + day + '"]'); + if (!card) return; - var rec = dayRecords[day] || {}; - var weightData = rec.weight; + var rec = dayRecords[day] || {}; + var weightData = rec.weight; - card.classList.remove('day-card--empty'); + card.classList.remove('day-card--empty'); - // 更新体重显示 - var weightEl = card.querySelector('.day-card__weight'); - if (!weightEl) { - weightEl = document.createElement('div'); - weightEl.className = 'day-card__weight'; - var recEl = card.querySelector('.day-card__recommend, .day-card__empty-rec'); - if (recEl) { - card.insertBefore(weightEl, recEl); - } else { - card.appendChild(weightEl); - } - } - if (weightData) { - weightEl.innerHTML = weightData.val + 'kg'; - } else { - weightEl.innerHTML = '--kg'; - } + // 更新体重显示 + var weightEl = card.querySelector('.day-card__weight'); + if (!weightEl) { + weightEl = document.createElement('div'); + weightEl.className = 'day-card__weight'; + var recEl = card.querySelector('.day-card__recommend, .day-card__empty-rec'); + if (recEl) { + card.insertBefore(weightEl, recEl); + } else { + card.appendChild(weightEl); + } + } + if (weightData) { + weightEl.innerHTML = weightData.val + 'kg'; + } else { + weightEl.innerHTML = '--kg'; + } - // 移除空状态提示 - var emptyHint = card.querySelector('.day-card__empty-hint'); - if (emptyHint) emptyHint.remove(); + // 更新体脂率显示(替换推荐体重) + var fatEl = card.querySelector('.day-card__recommend'); + var emptyRecEl = card.querySelector('.day-card__empty-rec'); + if (weightData) { + // 有体重数据:显示体脂率 + if (!fatEl) { + fatEl = document.createElement('div'); + fatEl.className = 'day-card__recommend'; + // 插入到 weight 和 badge 之间 + var badgeEl = card.querySelector('.day-card__badge'); + if (badgeEl) { + card.insertBefore(fatEl, badgeEl); + } else { + card.appendChild(fatEl); + } + } + if (emptyRecEl) emptyRecEl.remove(); + var fatVal = (rec.fatVal !== undefined) ? rec.fatVal.toFixed(1) : '--'; + fatEl.innerHTML = '体脂率 ' + fatVal + '%'; + } - // 更新标签 - var oldBadge = card.querySelector('.day-card__badge'); - if (oldBadge) oldBadge.remove(); + // 移除空状态提示 + var emptyHint = card.querySelector('.day-card__empty-hint'); + if (emptyHint) emptyHint.remove(); - if (weightData) { - var badge = document.createElement('span'); - var typeMap = { height: 'day-card__badge--height', bluetooth: 'day-card__badge--bluetooth', fat: 'day-card__badge--fat', manual: 'day-card__badge--manual' }; - var labelMap = { height: '身高秤', bluetooth: '蓝牙', fat: '体脂仪', manual: '自记' }; - badge.className = 'day-card__badge ' + (typeMap[weightData.type] || 'day-card__badge--manual'); - badge.textContent = labelMap[weightData.type] || '自记'; - card.appendChild(badge); - } + // 更新标签 + var oldBadge = card.querySelector('.day-card__badge'); + if (oldBadge) oldBadge.remove(); - updateSummaryBar(); -} + if (weightData) { + var badge = document.createElement('span'); + var typeMap = { height: 'day-card__badge--height', bluetooth: 'day-card__badge--bluetooth', fat: 'day-card__badge--fat', manual: 'day-card__badge--manual' }; + var labelMap = { height: '身高秤', bluetooth: '蓝牙', fat: '体脂仪', manual: '自记' }; + badge.className = 'day-card__badge ' + (typeMap[weightData.type] || 'day-card__badge--manual'); + badge.textContent = labelMap[weightData.type] || '自记'; + card.appendChild(badge); + } + + updateSummaryBar(); + } /* 更新摘要栏 */ function updateSummaryBar() { diff --git a/index.html b/index.html index 7d59d5a..3fde717 100644 --- a/index.html +++ b/index.html @@ -572,6 +572,7 @@ const SITE_MAP = [ { file:'hospital-checkin.html', label:'到院体检' }, { file:'reports.html', label:'体检报告' }, { file:'report-query.html', label:'报告查询详情' }, + { file:'report-gastro.html', label:'胃肠镜报告详情' }, { file:'project-detail.html', label:'体检项目详情' } ] }, { name:'体重管理', dir:'employee-app/weight-management', entry:'weight-main.html', pages:[ diff --git a/web-admin/weight-management/action-record.html b/web-admin/weight-management/action-record.html index 608ff8b..34d562f 100644 --- a/web-admin/weight-management/action-record.html +++ b/web-admin/weight-management/action-record.html @@ -1175,6 +1175,7 @@ function buildMeasureData(){ types.forEach(function(t){ var hasRecord = i % 5 !== 4; var count = hasRecord ? (t==='weight' ? Math.floor(Math.random()*12)+2 : Math.floor(Math.random()*50)+10) : 0; + var days = hasRecord ? Math.min(count, Math.floor(Math.random()*daysSinceStart)+1) : 0; var firstDay = new Date(today); firstDay.setDate(firstDay.getDate()-daysSinceStart); var lastDay = hasRecord ? new Date(today) : null; var fd = firstDay.getFullYear()+'-'+('0'+(firstDay.getMonth()+1)).slice(-2)+'-'+('0'+firstDay.getDate()).slice(-2); @@ -1187,7 +1188,7 @@ function buildMeasureData(){ data[t].push({ planId: planIdVal, planName: planNameVal, org: e.org, dept: e.dept, name: e.name, empId: e.empId, gender: e.gender, age: e.age, - measureType: t, checkinCount: count, firstDate: fd, lastDate: ld, hasRecord: hasRecord, source: source + measureType: t, checkinCount: count, checkinDays: days, firstDate: fd, lastDate: ld, hasRecord: hasRecord, source: source }); }); }); @@ -1199,6 +1200,7 @@ var measureData = buildMeasureData(); var currentTab = 1; var currentSubTab = 'weight'; var sortAsc = false; +var sortField = 'count'; var pageSize = 10; var currentPage = 0; var filteredData = []; @@ -1435,7 +1437,8 @@ function applyFilter1(){ return true; }); // 排序 - filteredData.sort(function(a,b){ return sortAsc ? a.checkinCount - b.checkinCount : b.checkinCount - a.checkinCount; }); + var fieldKey = sortField === 'days' ? 'checkinDays' : 'checkinCount'; + filteredData.sort(function(a,b){ return sortAsc ? a[fieldKey] - b[fieldKey] : b[fieldKey] - a[fieldKey]; }); currentPage = 0; renderOverviewTable(); updateTabBadges(); @@ -1460,8 +1463,9 @@ function resetFilter1(){ document.getElementById('filterDateFrom1').value = mon.getFullYear()+'-'+('0'+(mon.getMonth()+1)).slice(-2)+'-'+('0'+mon.getDate()).slice(-2); document.getElementById('filterDateTo1').value = sun.getFullYear()+'-'+('0'+(sun.getMonth()+1)).slice(-2)+'-'+('0'+sun.getDate()).slice(-2); document.querySelectorAll('.sub-tab-status .sub-tab-item').forEach(function(el){el.classList.toggle('active', el.dataset.status === 'all');}); - sortAsc = false; - document.getElementById('sortCount').classList.remove('asc','desc'); + sortAsc = false; sortField = 'count'; + var sc = document.getElementById('sortCount'); if(sc){ sc.classList.remove('asc','desc'); var a = sc.querySelector('.sort-arrow'); if(a) a.textContent = '↕'; } + var sd = document.getElementById('sortDays'); if(sd){ sd.classList.remove('asc','desc'); var a = sd.querySelector('.sort-arrow'); if(a) a.textContent = '↕'; } applyFilter1(); } @@ -1623,7 +1627,8 @@ function renderDailyTable(){ /* ===== 渲染三测记录表头(体重tab为分组两行表头) ===== */ function renderOverviewHeader(){ var thead = document.getElementById('overviewThead'); - var sortTh = '打卡次数 '; + var sortCountTh = '打卡次数 '; + var sortDaysTh = '打卡天数 '; var html = ''; if(currentSubTab === 'weight'){ html += ''; @@ -1634,7 +1639,8 @@ function renderOverviewHeader(){ html += '年龄'; html += '单位'; html += '部门'; - html += sortTh; + html += sortCountTh; + html += sortDaysTh; html += '首次记录日期'; html += '末次记录日期'; html += '末次记录数据'; @@ -1656,7 +1662,8 @@ function renderOverviewHeader(){ html += '年龄'; html += '单位'; html += '部门'; - html += sortTh; + html += sortCountTh; + html += '打卡天数 '; html += '首次记录日期'; html += '末次记录日期'; html += ''; @@ -1673,7 +1680,7 @@ function renderOverviewTable(){ document.getElementById('pageInfo1').textContent = '显示 ' + pageData.length + ' 条,共 ' + filteredData.length + ' 条记录'; document.getElementById('pageNum1').textContent = '第 ' + (currentPage + 1) + '/' + totalPages + ' 页'; var isWeight = currentSubTab === 'weight'; - var colCount = isWeight ? 16 : 10; + var colCount = isWeight ? 17 : 11; if(filteredData.length === 0){ tbody.innerHTML = '暂无匹配数据'; return; @@ -1689,6 +1696,7 @@ function renderOverviewTable(){ html += ''+esc(d.org)+''; html += ''+esc(d.dept)+''; html += ''+d.checkinCount+''; + html += ''+d.checkinDays+''; html += ''+esc(d.firstDate)+''; html += ''+esc(d.lastDate)+''; if(isWeight){ @@ -1713,9 +1721,11 @@ function switchSubTab(type){ }); // 体重tab为分组两行表头,其余为单行表头 renderOverviewHeader(); - sortAsc = false; + sortAsc = false; sortField = 'count'; var sortTh = document.getElementById('sortCount'); if(sortTh){ sortTh.classList.remove('asc','desc'); var arrow = sortTh.querySelector('.sort-arrow'); if(arrow){ arrow.textContent = '↕'; } } + var sortDays = document.getElementById('sortDays'); + if(sortDays){ sortDays.classList.remove('asc','desc'); var arrow = sortDays.querySelector('.sort-arrow'); if(arrow){ arrow.textContent = '↕'; } } // 重置记录状态为全部 document.querySelectorAll('.sub-tab-status .sub-tab-item').forEach(function(el){el.classList.toggle('active', el.dataset.status === 'all');}); applyFilter1(); @@ -1729,13 +1739,18 @@ function switchRecordStatus(status){ applyFilter1(); } -/* [交互] 打卡次数排序切换 */ -function toggleSort(){ - sortAsc = !sortAsc; - var th = document.getElementById('sortCount'); - th.classList.remove('asc','desc'); - th.classList.add(sortAsc ? 'asc' : 'desc'); - th.querySelector('.sort-arrow').textContent = sortAsc ? '↑' : '↓'; +/* [交互] 打卡次数/天数排序切换 */ +function toggleSort(field){ + if(sortField !== field){ sortField = field; sortAsc = false; } + else { sortAsc = !sortAsc; } + // 清除两个排序列的样式 + var thCount = document.getElementById('sortCount'); + var thDays = document.getElementById('sortDays'); + if(thCount){ thCount.classList.remove('asc','desc'); var a = thCount.querySelector('.sort-arrow'); if(a) a.textContent = '↕'; } + if(thDays){ thDays.classList.remove('asc','desc'); var a = thDays.querySelector('.sort-arrow'); if(a) a.textContent = '↕'; } + // 设置当前排序列样式 + var th = document.getElementById(field === 'count' ? 'sortCount' : 'sortDays'); + if(th){ th.classList.add(sortAsc ? 'asc' : 'desc'); th.querySelector('.sort-arrow').textContent = sortAsc ? '↑' : '↓'; } applyFilter1(); } diff --git a/web-admin/weight-management/archive-personal-weight-data.html b/web-admin/weight-management/archive-personal-weight-data.html index 5201af5..dc1b9ec 100644 --- a/web-admin/weight-management/archive-personal-weight-data.html +++ b/web-admin/weight-management/archive-personal-weight-data.html @@ -160,7 +160,7 @@ tbody tr:hover td:last-child{background:#F8FBFF;}
体重管理 / 档案 / 个人体重数据
- +
@@ -190,12 +190,16 @@ tbody tr:hover td:last-child{background:#F8FBFF;}
-
- - - - -
+
+ + +
@@ -225,50 +226,50 @@ -11.3-3.5-6.3-13 查看 - + 孙磊EMP-10101男29采油一厂生产运行科 -- - 17278.026.424.592 + ----- ---- 77.526.224.091 - -0.5-0.2-0.5-1 + ---- 查看 周婷EMP-10102女33采油二厂安全环保科 -- - 15865.226.131.080 + ----- ---- 64.525.830.278 - -0.7-0.3-0.8-2 + ---- 查看 吴刚EMP-10103男45采气厂综合管理科 -- - 16890.532.133.5108 + ----- ---- 91.232.334.2110 - +0.7+0.2+0.7+2 + ---- 查看 陈静EMP-10104女26采油一厂综合管理科 -- - 16558.021.325.072 + ----- ---- 57.321.024.271 - -0.7-0.3-0.8-1 + ---- 查看 郑飞EMP-10105男40采油二厂生产运行科 -- - 17586.228.128.598 + ----- ---- 85.527.928.096 - -0.7-0.2-0.5-2 + ---- 查看 diff --git a/web-admin/weight-management/plan-edit.html b/web-admin/weight-management/plan-edit.html index a66627b..9f30691 100644 --- a/web-admin/weight-management/plan-edit.html +++ b/web-admin/weight-management/plan-edit.html @@ -150,7 +150,28 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei .search-select__option.selected{color:var(--primary);background:var(--primary-light);} .search-select__avatar{width:28px;height:28px;border-radius:50%;background:#E6F7FF;display:flex;align-items:center;justify-content:center;color:var(--primary);font-size:var(--font-xs);flex-shrink:0;} -/* 文件上传 */ + /* 树形选择器(组织机构) */ + .tree-select{position:relative;width:100%;} + .tree-select__trigger{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 32px 0 12px;font-size:var(--font-sm);background:#fff;cursor:pointer;display:flex;align-items:center;user-select:none;transition:border-color .2s;box-sizing:border-box;position:relative;} + .tree-select__trigger:hover{border-color:var(--primary);} + .tree-select__trigger::after{content:'';position:absolute;right:12px;top:50%;transform:translateY(-50%);border:4px solid transparent;border-top:5px solid #999;pointer-events:none;} + .tree-select__text{color:var(--text-placeholder);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} + .tree-select__text.has-value{color:var(--text-primary);} + .tree-select__panel{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:500;display:none;max-height:320px;overflow-y:auto;} + .tree-select__panel.show{display:block;} + .tree-select__group{border-bottom:1px solid #F5F5F5;} + .tree-select__group:last-child{border-bottom:none;} + .tree-select__group-header{display:flex;align-items:center;gap:6px;padding:9px 16px;font-size:var(--font-sm);font-weight:500;color:var(--text-primary);cursor:pointer;transition:background .1s;user-select:none;} + .tree-select__group-header:hover{background:#F5F7FA;} + .tree-select__group-arrow{width:16px;height:16px;display:flex;align-items:center;justify-content:center;transition:transform .2s;flex-shrink:0;color:var(--text-placeholder);} + .tree-select__group-arrow.expanded{transform:rotate(90deg);} + .tree-select__group-label{flex:1;} + .tree-select__option{padding:8px 16px 8px 38px;font-size:var(--font-sm);cursor:pointer;transition:background .1s;display:none;color:var(--text-secondary);} + .tree-select__option.show{display:block;} + .tree-select__option:hover{background:#F5F7FA;} + .tree-select__option.selected{color:var(--primary);background:var(--primary-light);} + + /* 文件上传 */ .upload-area{border:2px dashed var(--border);border-radius:var(--radius-md);padding:32px;text-align:center;cursor:pointer;transition:all .2s;background:#FAFAFA;} .upload-area:hover{border-color:var(--primary);background:var(--primary-light);} .upload-area svg{width:40px;height:40px;color:var(--text-placeholder);margin-bottom:8px;} @@ -208,17 +229,66 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei 新增计划 - -
- - -
+ +
+ +
+ +
+ 请选择组织机构 +
+
+
+
+ + 第四采油厂 +
+
健康管理部
+
安全环保科
+
工会办公室
+
生产技术部
+
财务部
+
信息中心
+
+
+
+ + 采油一厂 +
+
健康管理部
+
安全环保科
+
工会办公室
+
生产技术部
+
财务部
+
信息中心
+
+
+
+ + 采油二厂 +
+
健康管理部
+
安全环保科
+
工会办公室
+
生产技术部
+
财务部
+
信息中心
+
+
+
+ + 采气一厂 +
+
健康管理部
+
安全环保科
+
工会办公室
+
生产技术部
+
财务部
+
信息中心
+
+
+
+
@@ -245,7 +315,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
指定部门
-
请先选择组织单位
+
请先选择组织机构
健康管理部
安全环保科
@@ -260,7 +330,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
指定员工
- 请先选择组织单位 + 请先选择组织机构
@@ -321,9 +391,9 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
- -
- + +
+
@@ -340,9 +410,9 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
- -
- + +
+
点击或拖拽文件到此区域上传
@@ -528,14 +598,14 @@ function togglePersonPanel(){ /* ===== 部门多选 ===== */ var selectedDepts = []; -function toggleDeptPanel(){ - var org = document.getElementById('planOrg').value; - if(!org){showToast('请先选择组织单位');return;} - var panel = document.getElementById('deptPanel'); - var isShow = panel.classList.contains('show'); - closeAllPanels(); - if(!isShow) panel.classList.add('show'); -} + function toggleDeptPanel(){ + var orgVal = document.getElementById('planOrg').value; + if(!orgVal){showToast('请先选择组织机构');return;} + var panel = document.getElementById('deptPanel'); + var isShow = panel.classList.contains('show'); + closeAllPanels(); + if(!isShow) panel.classList.add('show'); + } function toggleDeptOpt(el, val){ var cb = el.querySelector('.multi-select__cb'); @@ -594,73 +664,157 @@ var mockEmployees = [ {org:'采气一厂',dept:'信息中心',name:'马超',id:'CQ001248',gender:'男',age:36,height:179,weight:95,bmi:29.6} ]; -// 监听组织单位变化,同步更新部门和员工选择器状态 -document.getElementById('planOrg').addEventListener('change', updateOrgDependent); + // 从组织机构值中提取单位名称(兼容"单位|部门"格式) + function getOrgUnit(val){ + var idx = val.indexOf('|'); + return idx > -1 ? val.substring(0, idx) : val; + } + + // 从组织机构值中提取部门名称(兼容"单位|部门"格式) + function getOrgDept(val){ + var idx = val.indexOf('|'); + return idx > -1 ? val.substring(idx + 1) : ''; + } -function updateOrgDependent(){ - var org = document.getElementById('planOrg').value; - var deptTrigger = document.getElementById('deptTrigger'); - if(org){ - deptTrigger.classList.remove('disabled'); - if(selectedDepts.length===0){ - deptTrigger.textContent = '请选择部门(可多选)'; - } - } else { - deptTrigger.classList.add('disabled'); - deptTrigger.textContent = '请先选择组织单位'; - selectedDepts = []; - updateDeptTrigger(); - } - var empTrigger = document.getElementById('empTrigger'); - var text = document.getElementById('empTriggerText'); - if(org){ - empTrigger.classList.remove('disabled'); - text.className = 'emp-trigger__text'; - text.textContent = '点击选择员工'; - } else { - empTrigger.classList.add('disabled'); - text.className = 'emp-trigger__text'; - text.textContent = '请先选择组织单位'; - selectedEmployees = []; - renderSelectedPersons(); - } -} + /* ===== 组织机构树形选择器 ===== */ + // [交互] 点击触发器展开/收起下拉面板 + function toggleOrgTree(){ + var panel = document.getElementById('orgTreePanel'); + var isShow = panel.classList.contains('show'); + closeAllPanels(); + if(!isShow) panel.classList.add('show'); + } -function openEmpModal(){ - var org = document.getElementById('planOrg').value; - if(!org){showToast('请先选择组织单位');return;} - tempSelectedEmps = selectedEmployees.slice(); - renderEmpTable(); - document.getElementById('empModal').classList.add('show'); -} + // [交互] 点击单位标题展开/收起部门列表 + function toggleOrgGroup(headerEl, event){ + event.stopPropagation(); + var arrow = headerEl.querySelector('.tree-select__group-arrow'); + var group = headerEl.parentElement; + var options = group.querySelectorAll('.tree-select__option'); + var isExpanded = arrow.classList.contains('expanded'); + if(isExpanded){ + // 收起:隐藏部门选项,并选中该单位 + arrow.classList.remove('expanded'); + options.forEach(function(opt){ opt.classList.remove('show'); }); + var unitName = group.getAttribute('data-unit'); + selectOrgOptionInner(unitName, unitName); + } else { + // 收起其他已展开的分组 + document.querySelectorAll('.tree-select__group-arrow.expanded').forEach(function(a){ + a.classList.remove('expanded'); + }); + document.querySelectorAll('.tree-select__option.show').forEach(function(o){ + o.classList.remove('show'); + }); + // 展开当前分组 + arrow.classList.add('expanded'); + options.forEach(function(opt){ opt.classList.add('show'); }); + } + } + + // [交互] 点击部门选项选中 + function selectOrgOption(el, displayText){ + var val = el.getAttribute('data-val'); + selectOrgOptionInner(val, displayText); + } + + // 内部选中逻辑 + function selectOrgOptionInner(val, displayText){ + // 更新隐藏域 + var hidden = document.getElementById('planOrg'); + var oldVal = hidden.value; + hidden.value = val; + // 更新触发器显示 + var textEl = document.getElementById('orgTreeText'); + textEl.textContent = displayText; + textEl.className = 'tree-select__text has-value'; + // 更新面板选中态 + document.querySelectorAll('#orgTreePanel .tree-select__option.selected').forEach(function(o){ + o.classList.remove('selected'); + }); + var targetOpt = document.querySelector('#orgTreePanel .tree-select__option[data-val="' + val + '"]'); + if(targetOpt){ targetOpt.classList.add('selected'); } + // 关闭面板 + document.getElementById('orgTreePanel').classList.remove('show'); + // 触发change事件 + if(oldVal !== val){ + var evt = document.createEvent('HTMLEvents'); + evt.initEvent('change', true, false); + hidden.dispatchEvent(evt); + } + } + + // 监听组织机构变化,同步更新部门和员工选择器状态 + document.getElementById('planOrg').addEventListener('change', updateOrgDependent); + + function updateOrgDependent(){ + var orgVal = document.getElementById('planOrg').value; + var orgUnit = getOrgUnit(orgVal); + var deptTrigger = document.getElementById('deptTrigger'); + if(orgUnit){ + deptTrigger.classList.remove('disabled'); + if(selectedDepts.length===0){ + deptTrigger.textContent = '请选择部门(可多选)'; + } + } else { + deptTrigger.classList.add('disabled'); + deptTrigger.textContent = '请先选择组织机构'; + selectedDepts = []; + updateDeptTrigger(); + } + var empTrigger = document.getElementById('empTrigger'); + var text = document.getElementById('empTriggerText'); + if(orgUnit){ + empTrigger.classList.remove('disabled'); + text.className = 'emp-trigger__text'; + text.textContent = '点击选择员工'; + } else { + empTrigger.classList.add('disabled'); + text.className = 'emp-trigger__text'; + text.textContent = '请先选择组织机构'; + selectedEmployees = []; + renderSelectedPersons(); + } + } + + function openEmpModal(){ + var orgVal = document.getElementById('planOrg').value; + if(!orgVal){showToast('请先选择组织机构');return;} + tempSelectedEmps = selectedEmployees.slice(); + renderEmpTable(); + document.getElementById('empModal').classList.add('show'); + } function closeEmpModal(){ document.getElementById('empModal').classList.remove('show'); } -function renderEmpTable(){ - var org = document.getElementById('planOrg').value; - var filterDept = document.getElementById('empFilterDept').value; - var filterName = document.getElementById('empFilterName').value.trim().toLowerCase(); - var filterId = document.getElementById('empFilterId').value.trim().toLowerCase(); + function renderEmpTable(){ + var orgVal = document.getElementById('planOrg').value; + var orgUnit = getOrgUnit(orgVal); + var orgDept = getOrgDept(orgVal); + var filterDept = document.getElementById('empFilterDept').value; + var filterName = document.getElementById('empFilterName').value.trim().toLowerCase(); + var filterId = document.getElementById('empFilterId').value.trim().toLowerCase(); - var weightOp = document.getElementById('empFilterWeightOp').value; - var weightV1 = document.getElementById('empFilterWeightVal1').value; - var weightV2 = document.getElementById('empFilterWeightVal2').value; + var weightOp = document.getElementById('empFilterWeightOp').value; + var weightV1 = document.getElementById('empFilterWeightVal1').value; + var weightV2 = document.getElementById('empFilterWeightVal2').value; - var bmiOp = document.getElementById('empFilterBmiOp').value; - var bmiV1 = document.getElementById('empFilterBmiVal1').value; - var bmiV2 = document.getElementById('empFilterBmiVal2').value; + var bmiOp = document.getElementById('empFilterBmiOp').value; + var bmiV1 = document.getElementById('empFilterBmiVal1').value; + var bmiV2 = document.getElementById('empFilterBmiVal2').value; - var filtered = mockEmployees.filter(function(e){ - if(e.org !== org) return false; - if(filterDept && e.dept !== filterDept) return false; - if(filterName && e.name.indexOf(filterName) === -1) return false; - if(filterId && e.id.toLowerCase().indexOf(filterId) === -1) return false; - if(!applyEmpOpFilter(e.weight, weightOp, weightV1, weightV2)) return false; - if(!applyEmpOpFilter(e.bmi, bmiOp, bmiV1, bmiV2)) return false; - return true; - }); + var filtered = mockEmployees.filter(function(e){ + if(e.org !== orgUnit) return false; + if(orgDept && e.dept !== orgDept) return false; + if(filterDept && e.dept !== filterDept) return false; + if(filterName && e.name.indexOf(filterName) === -1) return false; + if(filterId && e.id.toLowerCase().indexOf(filterId) === -1) return false; + if(!applyEmpOpFilter(e.weight, weightOp, weightV1, weightV2)) return false; + if(!applyEmpOpFilter(e.bmi, bmiOp, bmiV1, bmiV2)) return false; + return true; + }); var tbody = document.getElementById('empTableBody'); if(filtered.length===0){ @@ -933,12 +1087,13 @@ function closeAllPanels(){ document.getElementById('leaderPanel').classList.remove('show'); document.getElementById('reviewerPanel').classList.remove('show'); document.getElementById('deptPanel').classList.remove('show'); + document.getElementById('orgTreePanel').classList.remove('show'); } /* ===== 保存 ===== */ function savePlan(){ var org = document.getElementById('planOrg').value.trim(); - if(!org){showToast('请选择活动组织单位');return;} + if(!org){showToast('请选择活动组织机构');return;} var name = document.getElementById('planName').value.trim(); if(!name){showToast('请输入计划名称');return;} var personType = document.querySelector('input[name="personType"]:checked').value; @@ -950,8 +1105,8 @@ function savePlan(){ if(!dateFrom||!dateTo){showToast('请选择计划起止日期');return;} var dept = document.getElementById('planDept').value.trim(); if(!dept){showToast('请选择组织部门');return;} - if(!selectedLeader){showToast('请选择负责人');return;} - if(!selectedReviewer){showToast('请选择审核人');return;} + if(!selectedLeader){showToast('请选择负责人');return;} + if(uploadedFiles.length === 0){showToast('请上传通知文件');return;} showToast('保存成功!'); setTimeout(function(){window.location.href='plan-list.html';},1000); @@ -969,6 +1124,7 @@ document.addEventListener('click',function(e){ if(!e.target.closest('#leaderSelect')) document.getElementById('leaderPanel').classList.remove('show'); if(!e.target.closest('#reviewerSelect2')) document.getElementById('reviewerPanel').classList.remove('show'); if(!e.target.closest('#deptSelect')) document.getElementById('deptPanel').classList.remove('show'); + if(!e.target.closest('#orgTreeSelect')) document.getElementById('orgTreePanel').classList.remove('show'); }); /* 点击遮罩关闭员工弹窗 */ @@ -1000,9 +1156,9 @@ document.getElementById('empModal').addEventListener('click',function(e){ var data = editData[id]; if(!data) return; - // 回显表单字段 - document.getElementById('planOrg').value = data.org; - document.getElementById('planName').value = data.name; + // 回显表单字段 + selectOrgOptionInner(data.org, data.org); + document.getElementById('planName').value = data.name; // 人员筛选 — 编辑时默认选中全体人员 var radioAll = document.querySelector('input[name="personType"][value="all"]'); diff --git a/web-admin/weight-management/target-weight-review.html b/web-admin/weight-management/target-weight-review.html index eaf02ad..ac2ef0b 100644 --- a/web-admin/weight-management/target-weight-review.html +++ b/web-admin/weight-management/target-weight-review.html @@ -673,26 +673,34 @@ function showToast(msg){var t=document.getElementById('toast');t.textContent=msg /* ===== 审核操作 ===== */ -/* 渲染基本信息卡片 */ -function renderBasicInfoCard(row){ - var items = [ - {label:'计划名称',value:row.planName,span:4}, - {label:'姓名',value:row.name}, - {label:'员工编号',value:row.empId}, - {label:'性别',value:row.gender}, - {label:'年龄',value:row.age+' 岁'}, - {label:'身高',value:row.height+' cm'}, - {label:'所属单位',value:row.org}, - {label:'所属部门',value:row.dept}, - {label:'提交时间',value:row.submitTime} - ]; - var html=''; - items.forEach(function(item){ - var s = item.span ? ' style="grid-column:span '+item.span+'"' : ''; - html+='
'+item.label+''+esc(item.value)+'
'; - }); - document.getElementById('auditInfoGrid').innerHTML=html; -} + /* 渲染基本信息卡片 */ + function renderBasicInfoCard(row){ + var plan = plans.find(function(p){return p.id===row.planId;}); + var dateRange = ''; + if(plan){ + var f = new Date(plan.dateFrom), e = new Date(plan.dateTo); + var totalDays = Math.ceil((e - f) / 86400000) + 1; + dateRange = plan.dateFrom + ' ~ ' + plan.dateTo + ' (' + totalDays + '天)'; + } + var items = [ + {label:'计划名称',value:row.planName,span:4}, + {label:'姓名',value:row.name}, + {label:'员工编号',value:row.empId}, + {label:'性别',value:row.gender}, + {label:'年龄',value:row.age+' 岁'}, + {label:'身高',value:row.height+' cm'}, + {label:'所属单位',value:row.org}, + {label:'所属部门',value:row.dept}, + {label:'提交时间',value:row.submitTime}, + {label:'活动起止日期',value:dateRange,span:2} + ]; + var html=''; + items.forEach(function(item){ + var s = item.span ? ' style="grid-column:span '+item.span+'"' : ''; + html+='
'+item.label+''+esc(item.value)+'
'; + }); + document.getElementById('auditInfoGrid').innerHTML=html; + } /* 渲染指标对比表 */ function renderCmpTable(row){