feat(health): Phase 4 跨模块集成与架构优化 — 通知/标签/待办/数据录入
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

后端:
- erp-message: 添加 appointment.created/confirmed/cancelled 事件监听,自动发送站内通知
- erp-health: 新增 GET /health/patient-tags 标签列表端点 + list_tags service
- wechat-templates: 添加 isTemplateConfigured 运行时校验

前端:
- 新增 Zustand useHealthStore 共享患者/医生名称缓存
- PatientTagManage: UUID 输入替换为 Checkbox 标签选择器
- VitalSignsTab: 添加体征数据录入 Modal (血压/心率/体重/血糖)
- LabReportsTab: 添加化验报告创建 Modal
- HealthRecordsTab: 添加健康记录创建 Modal
- patients API: 添加 TagItem 类型 + listTags 方法

小程序:
- 首页待办事项接入预约和随访 API,替换硬编码 EmptyState
This commit is contained in:
iven
2026-04-25 20:10:50 +08:00
parent 5b520a168c
commit d2baacae7e
14 changed files with 667 additions and 222 deletions

View File

@@ -760,3 +760,27 @@ fn model_to_resp_decrypted(crypto: &crate::crypto::HealthCrypto, m: patient::Mod
}
}
pub async fn list_tags(
state: &crate::state::HealthState,
tenant_id: Uuid,
) -> HealthResult<Vec<crate::dto::patient_dto::TagResp>> {
use crate::entity::patient_tag;
let tags = patient_tag::Entity::find()
.filter(patient_tag::Column::TenantId.eq(tenant_id))
.filter(patient_tag::Column::DeletedAt.is_null())
.order_by_asc(patient_tag::Column::Name)
.all(&state.db)
.await
.map_err(|e| crate::error::HealthError::DbError(e.to_string()))?;
Ok(tags
.into_iter()
.map(|t| crate::dto::patient_dto::TagResp {
id: t.id,
name: t.name,
color: t.color,
description: t.description,
})
.collect())
}