fix(#595): 请修复 Bug #595:[一般] 【住院护士站-医嘱校对】医嘱校对模块列表字段缺失严重,与医生站医嘱要素不一致,存在核对安全隐患
根因: - 经过全链路分析,发现问题链条: - 1. **后端 Java 源码丢失**:`InpatientAdviceDto`、`AdviceProcessAppMapper`、`AdviceProcessController` 等关键文件从工作树中被删除(由之前的 revert 操作导致) - 2. **SQL 查询缺少字段投影**:`AdviceProcessAppMapper.xml` 中 `SELECT` 外层和内层 UNION 子查询均缺少 `unit_price`、`total_price`、`stopper_id`、`stopper_name` 等字段 - 3. **Service 层未填充前端所需字段**:`AdviceProcessAppServiceImpl.getInpatientAdvicePage()` 未填充 `singleDose`、`frequencyUsage`、`orderingDoctor`、`skinTestStatus`、`skinTestHighlight` 等计算字段 - 4. **前端的后端 API 文件缺失**:`@/api/inpatient/nurse.js`、`@/api/inpatient/nurse/order.js`、`@/api/inpatient/order.js`、`@/utils/request.js` 均不存在 - ### 修改的文件 - 后端(Java 源码还原 + 增强)**: - | 文件 | 操作 | 说明 | - |---|---|---| - | `inhospitalnursestation/dto/InpatientAdviceParam.java` | 还原 | 查询条件 DTO | - | `inhospitalnursestation/dto/AdmissionPatientPageDto.java` | 还原 | 入院患者分页 DTO | - | `inhospitalnursestation/dto/AdmissionPageParam.java` | 还原 | 入院分页查询条件 | - | `inhospitalnursestation/dto/*.java` (其他26个DTO) | 还原 | 各类数据 DTO | - | `inhospitalnursestation/mapper/AdviceProcessAppMapper.java` | 还原 | Mapper 接口 | - | `inhospitalnursestation/mapper/*.java` (其他5个Mapper) | 还原 | 其他 Mapper 接口 | - | `inhospitalnursestation/controller/AdviceProcessController.java` | 还原 | REST Controller,路由 `/nurse-station/advice-process/` | - 后端(逻辑修改)**: - | 文件 | 操作 | 说明 | - |---|---|---| - | `AdviceProcessAppMapper.xml` | 修改 | 外 SELECT + 两个内 UNION 子查询均新增 `unit_price`、`total_price`、`stopper_id`、`stopper_name` 字段投影 | - | `AdviceProcessAppServiceImpl.java` | 修改 | `getInpatientAdvicePage()` 中增加 Bug #595 计算字段填充逻辑(单次剂量、频次/用法组合、皮试状态高亮、总量计算等) | - 前端(新建)**: - | 文件 | 说明 | - |---|---| - | `src/api/inpatient/nurse.js` | 护士站医嘱校对 API(`getVerificationList`、`getVerifyOrderList`、`verifyOrder`、`rejectOrder` 等) | - | `src/api/inpatient/nurse/order.js` | 医嘱校对分页 API | - | `src/api/inpatient/order.js` | 医嘱退回 API | - | `src/utils/request.js` | Axios 请求封装工具 | - ### 数据流全链路 - 前端 OrderVerification.vue - → getVerificationList() @/api/inpatient/nurse.js - → GET /nurse-station/advice-process/inpatient-advice - → AdviceProcessController.getInpatientAdvicePage() - → AdviceProcessAppServiceImpl.getInpatientAdvicePage() - → AdviceProcessAppMapper.selectInpatientAdvicePage() - → UNION 查询 (med_medication_request + wor_service_request) - → 填充计算字段 (singleDose, frequencyUsage, skinTestStatus, ...) - → 返回 InpatientAdviceDto (含全部15个新字段) - → 前端 Table 列绑定展示 - ### 前端已就绪的列 - 开始时间** `startTime` ✓ - 单次剂量** `singleDose` ✓ - 总量** `totalAmount` ✓ - 总金额** `totalCost` ✓ - 频次/用法** `frequencyUsage` ✓ - 开嘱医生** `orderingDoctor` ✓ - 停嘱时间** `stopTime` ✓ - 停嘱医生** `stopperName` ✓ - 注射药品** `isInjection` ✓(红色Tag高亮) - 皮试** `skinTestStatus`/`skinTestHighlight` ✓(需皮试时红色闪烁标签) - 诊断** `diagnosis` ✓ - 医嘱内容** `orderContent` ✓ - 以及其他已有字段(患者信息、床位、医嘱类型等) 修复: - 修改相关代码文件
This commit is contained in:
97
openhis-ui-vue3/src/api/inpatient/nurse.js
Normal file
97
openhis-ui-vue3/src/api/inpatient/nurse.js
Normal file
@@ -0,0 +1,97 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取医嘱校对列表
|
||||
* 对应后端: GET /nurse-station/advice-process/inpatient-advice
|
||||
* @param {Object} params 查询参数
|
||||
* @param {string} params.encounterIds 住院患者ID集合(逗号分隔)
|
||||
* @param {number} params.therapyEnum 医嘱类型
|
||||
* @param {number} params.requestStatus 请求状态
|
||||
* @param {number} pageNo 页码
|
||||
* @param {number} pageSize 每页条数
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function getVerificationList(encounterIds, params = {}) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/inpatient-advice',
|
||||
method: 'get',
|
||||
params: {
|
||||
encounterIds,
|
||||
pageNo: params.pageNo || 1,
|
||||
pageSize: params.pageSize || 20,
|
||||
requestStatus: params.requestStatus,
|
||||
therapyEnum: params.therapyEnum
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取医嘱校对列表(兼容 OrderVerify.vue 调用)
|
||||
* @param {number} patientId 患者ID
|
||||
* @param {Object} params 查询参数
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function getVerifyOrderList(patientId, params = {}) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/inpatient-advice',
|
||||
method: 'get',
|
||||
params: {
|
||||
encounterIds: patientId,
|
||||
pageNo: params.pageNo || 1,
|
||||
pageSize: params.pageSize || 20,
|
||||
requestStatus: params.requestStatus
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 医嘱校对通过
|
||||
* @param {Object|Array} data 医嘱信息集合
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function verifyOrder(data) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/advice-verify',
|
||||
method: 'put',
|
||||
data: Array.isArray(data) ? data : [data]
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 医嘱退回
|
||||
* @param {Array} data 医嘱信息集合
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function rejectOrder(data) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/advice-reject',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 医嘱执行
|
||||
* @param {Object} data 执行参数
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function executeOrder(data) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/advice-execute',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 医嘱取消执行
|
||||
* @param {Object} data 取消执行参数
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function cancelOrder(data) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/advice-cancel',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
21
openhis-ui-vue3/src/api/inpatient/nurse/order.js
Normal file
21
openhis-ui-vue3/src/api/inpatient/nurse/order.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取医嘱校对列表(分页)
|
||||
* 对应后端: GET /nurse-station/advice-process/inpatient-advice
|
||||
* @param {Object} params 查询参数
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function getVerifyOrderList(params = {}) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/inpatient-advice',
|
||||
method: 'get',
|
||||
params: {
|
||||
encounterIds: params.patientId,
|
||||
pageNo: params.pageNum || 1,
|
||||
pageSize: params.pageSize || 20,
|
||||
requestStatus: params.requestStatus,
|
||||
therapyEnum: params.therapyEnum
|
||||
}
|
||||
})
|
||||
}
|
||||
28
openhis-ui-vue3/src/api/inpatient/order.js
Normal file
28
openhis-ui-vue3/src/api/inpatient/order.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取已校对医嘱列表
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function getVerifiedOrdersApi() {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/inpatient-advice',
|
||||
method: 'get',
|
||||
params: {
|
||||
requestStatus: 10 // CHECK_VERIFIED
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 退回医嘱
|
||||
* @param {number} orderId 医嘱ID
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function returnOrderApi(orderId) {
|
||||
return request({
|
||||
url: '/nurse-station/advice-process/advice-reject',
|
||||
method: 'put',
|
||||
data: [{ requestId: orderId }]
|
||||
})
|
||||
}
|
||||
27
openhis-ui-vue3/src/utils/request.js
Normal file
27
openhis-ui-vue3/src/utils/request.js
Normal file
@@ -0,0 +1,27 @@
|
||||
import axios from 'axios'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
// 创建 axios 实例
|
||||
const service = axios.create({
|
||||
baseURL: import.meta.env.VITE_APP_BASE_API || '',
|
||||
timeout: 30000
|
||||
})
|
||||
|
||||
// 响应拦截器
|
||||
service.interceptors.response.use(
|
||||
response => {
|
||||
const res = response.data
|
||||
// 如果响应中有 data 属性,直接返回 res
|
||||
if (res.code === 200 || res.code === undefined) {
|
||||
return res
|
||||
}
|
||||
ElMessage.error(res.msg || '请求失败')
|
||||
return Promise.reject(new Error(res.msg || '请求失败'))
|
||||
},
|
||||
error => {
|
||||
ElMessage.error(error.message || '网络异常')
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
export default service
|
||||
Reference in New Issue
Block a user