feat(health): Phase 4 跨模块集成与架构优化 — 通知/标签/待办/数据录入
后端: - 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:
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user