Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# HealthLink-HIS 代码模块索引
|
||||
|
||||
> 供 LLM 快速定位代码。每个模块列出 Controller → Service → Mapper 关键文件。
|
||||
> 最后更新: 2026-06-17 12:00 (301 个 Controller)
|
||||
> 最后更新: 2026-06-18 06:00 (309 个 Controller)
|
||||
|
||||
## 关键词 → 模块速查
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ public class OrdersGroupPackageDto {
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private String Name;
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 明细集合
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- V66: 修复 Bug#723 — 删除 sys_menu 中重复的"住院医生增强"菜单条目
|
||||
-- 根因:sys_menu 表中存在两条 menu_name = '住院医生增强' 且 parent_id 相同的记录
|
||||
-- 修复:保留 menu_id 最小的一条(20171),删除其余重复记录
|
||||
DELETE FROM sys_menu
|
||||
WHERE menu_name = '住院医生增强'
|
||||
AND menu_id NOT IN (
|
||||
SELECT MIN(menu_id)
|
||||
FROM sys_menu
|
||||
WHERE menu_name = '住院医生增强'
|
||||
);
|
||||
@@ -68,6 +68,7 @@
|
||||
"vue-plugin-hiprint": "^0.0.60",
|
||||
"vue-router": "^4.6.4",
|
||||
"vxe-table": "^4.19.6",
|
||||
"vxe-pc-ui": "^4.14.26",
|
||||
"xe-utils": "^4.0.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -9,3 +9,6 @@ export function listHqmsReports(homepageId) { return request({ url: "/api/v1/mr-
|
||||
export function trackStatus(homepageId) { return request({ url: "/api/v1/mr-homepage/tracking/" + homepageId, method: "get" }) }
|
||||
export function borrowRecord(data) { return request({ url: "/api/v1/mr-homepage/tracking/borrow", method: "post", data }) }
|
||||
export function returnRecord(borrowingId) { return request({ url: "/api/v1/mr-homepage/tracking/return", method: "post", params: { borrowingId } }) }
|
||||
export function saveDeathDiscussion(data) { return request({ url: "/api/v1/mr-homepage/death-discussion/save", method: "post", data }) }
|
||||
export function listDeathDiscussions(homepageId) { return request({ url: "/api/v1/mr-homepage/death-discussion/list/" + homepageId, method: "get" }) }
|
||||
export function getPendingDeadline() { return request({ url: "/api/v1/mr-homepage/death-discussion/pending-deadline", method: "get" }) }
|
||||
|
||||
@@ -243,11 +243,20 @@ export function tansParams(params) {
|
||||
var part = encodeURIComponent(propName) + '=';
|
||||
if (value !== null && value !== '' && typeof value !== 'undefined') {
|
||||
if (typeof value === 'object') {
|
||||
for (const key of Object.keys(value)) {
|
||||
if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') {
|
||||
let params = propName + '[' + key + ']';
|
||||
var subPart = encodeURIComponent(params) + '=';
|
||||
result += subPart + encodeURIComponent(value[key]) + '&';
|
||||
if (Array.isArray(value)) {
|
||||
// 数组:序列化为重复同名参数,兼容 Spring @RequestParam List 绑定
|
||||
for (const item of value) {
|
||||
if (item !== null && item !== '' && typeof item !== 'undefined') {
|
||||
result += part + encodeURIComponent(item) + '&';
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (const key of Object.keys(value)) {
|
||||
if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') {
|
||||
let params = propName + '[' + key + ']';
|
||||
var subPart = encodeURIComponent(params) + '=';
|
||||
result += subPart + encodeURIComponent(value[key]) + '&';
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -239,8 +239,8 @@
|
||||
align="center"
|
||||
field="totalVolume"
|
||||
show-overflow="title"
|
||||
min-width="200px"
|
||||
width="200px"
|
||||
min-width="200"
|
||||
width="200"
|
||||
/>
|
||||
<vxe-column
|
||||
key="statusEnum_enumText"
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
<vxe-column
|
||||
title="检验项目"
|
||||
field="itemName"
|
||||
min-width="170px"
|
||||
min-width="170"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
|
||||
@@ -14,17 +14,17 @@
|
||||
<vxe-column
|
||||
title="姓名"
|
||||
field="name"
|
||||
min-width="90px"
|
||||
min-width="90"
|
||||
/>
|
||||
<vxe-column
|
||||
title="年龄"
|
||||
field="age"
|
||||
width="60px"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
title="费别"
|
||||
field="feeType"
|
||||
width="60px"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
title="病区"
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
<vxe-table
|
||||
ref="tableRef"
|
||||
:data="treatHospitalizedData"
|
||||
min-width="1600px"
|
||||
min-width="1600"
|
||||
show-overflow="title"
|
||||
@radio-change="handleRadioChange"
|
||||
>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<div class="table-container">
|
||||
<vxe-table
|
||||
:data="treatHospitalizedData"
|
||||
min-width="900px"
|
||||
min-width="900"
|
||||
show-overflow="title"
|
||||
>
|
||||
<vxe-column
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
:disabled="hasUnsavedDiagnosis"
|
||||
@click="handleAddDiagnosis()"
|
||||
>
|
||||
新增诊断
|
||||
@@ -98,12 +99,19 @@
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
:disabled="hasUnsavedDiagnosis"
|
||||
@click="handleImport()"
|
||||
>
|
||||
导入慢性病诊断
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="hasUnsavedDiagnosis"
|
||||
class="unsaved-diagnosis-tip"
|
||||
>
|
||||
<el-icon><WarningFilled /></el-icon> 当前有未保存的诊断,请先保存后再新增
|
||||
</div>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
@@ -377,7 +385,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {getCurrentInstance, ref, watch} from 'vue'; // 添加 nextTick 导入
|
||||
import {getCurrentInstance, ref, computed, watch} from 'vue'; // 添加 nextTick 导入
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import {
|
||||
delEncounterDiagnosis,
|
||||
@@ -397,7 +405,7 @@ import {deleteTcmDiagnosis} from '@/views/doctorstation/components/api.js';
|
||||
import diagnosisdialog from '../diagnosis/diagnosisdialog.vue';
|
||||
import AddDiagnosisDialog from './addDiagnosisDialog.vue';
|
||||
import diagnosislist from '../diagnosis/diagnosislist.vue';
|
||||
import {patientInfo} from '../../store/patient.js';
|
||||
|
||||
import {ElMessage} from 'element-plus';
|
||||
// const diagnosisList = ref([]);
|
||||
const allowAdd = ref(false);
|
||||
@@ -414,6 +422,13 @@ const syndromeOptions = ref([]);
|
||||
const form = ref({
|
||||
diagnosisList: [],
|
||||
});
|
||||
|
||||
// 计算属性:是否有未保存的新诊断
|
||||
const hasUnsavedDiagnosis = computed(() => {
|
||||
return (form.value.diagnosisList || []).some(
|
||||
(item) => !item.conditionId && !item.encounterDiagnosisId
|
||||
);
|
||||
});
|
||||
const props = defineProps({
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
@@ -555,6 +570,7 @@ function getList() {
|
||||
conditionId: item.conditionId || '',
|
||||
encounterDiagnosisId: item.encounterDiagnosisId || '',
|
||||
syndromeGroupNo: item.syndromeGroupNo || res.data.symptom[index]?.syndromeGroupNo || '',
|
||||
illnessName: item.name, // 保存原始疾病名称,避免保存时发送合并名称
|
||||
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
|
||||
ybNo: item.ybNo,
|
||||
definitionId: item.definitionId || '',
|
||||
@@ -611,7 +627,22 @@ function handleImport() {
|
||||
if (!props.patientInfo || !props.patientInfo.encounterId) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 检查是否已填写病历
|
||||
if (!allowAdd.value) {
|
||||
proxy.$modal.msgWarning('请先填写病历');
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查当前列表是否有未保存的诊断,阻止重复新增
|
||||
const hasUnsaved = (form.value.diagnosisList || []).some(
|
||||
(item) => !item.conditionId && !item.encounterDiagnosisId
|
||||
);
|
||||
if (hasUnsaved) {
|
||||
proxy.$modal.msgWarning('请保存当前诊断');
|
||||
return;
|
||||
}
|
||||
|
||||
if (props.patientInfo.contractName != '自费') {
|
||||
// 获取患者慢性病信息
|
||||
getChronicDisease({ encounterId: props.patientInfo.encounterId }).then((res) => {
|
||||
@@ -710,7 +741,22 @@ function getTree() {
|
||||
*/
|
||||
function handleAddDiagnosis() {
|
||||
console.log('点击新增诊断按钮,allowAdd:', allowAdd.value);
|
||||
|
||||
|
||||
// 检查是否已填写病历(必须先于其他检查)
|
||||
if (!allowAdd.value) {
|
||||
proxy.$modal.msgWarning('请先填写病历');
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查当前列表是否已有未保存的诊断,阻止重复新增
|
||||
const hasUnsaved = (form.value.diagnosisList || []).some(
|
||||
(item) => !item.conditionId && !item.encounterDiagnosisId
|
||||
);
|
||||
if (hasUnsaved) {
|
||||
proxy.$modal.msgWarning('请保存当前诊断');
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查表单ref是否存在
|
||||
if (!proxy.$refs.formRef) {
|
||||
console.error('表单ref不存在');
|
||||
@@ -718,23 +764,20 @@ function handleAddDiagnosis() {
|
||||
addDiagnosisItem();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
proxy.$refs.formRef.validate((valid, fields) => {
|
||||
console.log('表单验证结果:', valid, '错误字段:', fields);
|
||||
if (valid) {
|
||||
if (!allowAdd.value) {
|
||||
proxy.$modal.msgWarning('请先填写病历');
|
||||
return;
|
||||
}
|
||||
addDiagnosisItem();
|
||||
} else {
|
||||
console.warn('表单验证失败:', fields);
|
||||
// 验证失败时也允许添加(因为是新增空行)
|
||||
if (allowAdd.value) {
|
||||
console.log('验证失败但允许添加,强制添加诊断');
|
||||
addDiagnosisItem();
|
||||
// 再次检查是否有未保存的诊断(防止 validate 异步回调的竞态条件)
|
||||
const hasUnsavedNow = (form.value.diagnosisList || []).some(
|
||||
(item) => !item.conditionId && !item.encounterDiagnosisId
|
||||
);
|
||||
if (!valid || hasUnsavedNow) {
|
||||
if (hasUnsavedNow) {
|
||||
proxy.$modal.msgWarning('请保存当前诊断');
|
||||
}
|
||||
return;
|
||||
}
|
||||
addDiagnosisItem();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -982,9 +1025,14 @@ function handleSaveDiagnosis() {
|
||||
|
||||
// 再逐个保存中医诊断(只追加,不清空)
|
||||
for (const item of tcmList) {
|
||||
const syndromeGroupNo = item.conditionId
|
||||
? `${item.conditionId}-${item.tcmSyndromeCode || Date.now()}`
|
||||
: `${Date.now()}-${item.tcmSyndromeCode || '0'}`;
|
||||
// 优先使用已有的 syndromeGroupNo,避免每次保存生成新值导致重复创建
|
||||
const syndromeGroupNo = item.syndromeGroupNo || (
|
||||
item.conditionId
|
||||
? `${item.conditionId}-${item.tcmSyndromeCode || Date.now()}`
|
||||
: `${Date.now()}-${item.tcmSyndromeCode || '0'}`
|
||||
);
|
||||
// 使用原始疾病名称(illnessName),而非合并后的名称(如"感冒-风寒证")
|
||||
const illnessName = item.illnessName || item.name;
|
||||
await saveTcmDiagnosis({
|
||||
patientId: props.patientInfo.patientId,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
@@ -992,7 +1040,8 @@ function handleSaveDiagnosis() {
|
||||
// 病(illness)
|
||||
{
|
||||
conditionId: item.conditionId || null,
|
||||
name: item.name,
|
||||
encounterDiagnosisId: item.encounterDiagnosisId || null,
|
||||
name: illnessName,
|
||||
ybNo: item.ybNo,
|
||||
definitionId: item.definitionId || null,
|
||||
diagSrtNo: item.diagSrtNo,
|
||||
@@ -1085,10 +1134,22 @@ function handleNodeClick(data) {
|
||||
// 如果是根节点,不执行任何操作
|
||||
return;
|
||||
}
|
||||
// if (!allowAdd.value) {
|
||||
// proxy.$modal.msgWarning('请先填写病历');
|
||||
// return;
|
||||
// }
|
||||
|
||||
// 检查是否已填写病历
|
||||
if (!allowAdd.value) {
|
||||
proxy.$modal.msgWarning('请先填写病历');
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查当前列表是否有未保存的诊断,阻止重复新增
|
||||
const hasUnsaved = (form.value.diagnosisList || []).some(
|
||||
(item) => !item.conditionId && !item.encounterDiagnosisId
|
||||
);
|
||||
if (hasUnsaved) {
|
||||
proxy.$modal.msgWarning('请保存当前诊断');
|
||||
return;
|
||||
}
|
||||
|
||||
const isDuplicate = form.value.diagnosisList.some(
|
||||
(diagnosis) => diagnosis.ybNo === data.ybNo || diagnosis.name === data.name
|
||||
);
|
||||
@@ -1099,13 +1160,20 @@ function handleNodeClick(data) {
|
||||
form.value.diagnosisList.push({
|
||||
ybNo: data.ybNo,
|
||||
name: data.name,
|
||||
showPopover: false,
|
||||
diagnosisSystem: '西医',
|
||||
tcmSyndromeCode: '',
|
||||
tcmSyndromeName: '',
|
||||
syndromeDefinitionId: '',
|
||||
syndromeGroupNo: '',
|
||||
verificationStatusEnum: 4,
|
||||
medTypeCode: undefined,
|
||||
diagSrtNo: form.value.diagnosisList.length + 1,
|
||||
definitionId: data.definitionId,
|
||||
iptDiseTypeCode: 2,
|
||||
diagnosisDesc: '',
|
||||
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
||||
diagnosisTime: new Date().toLocaleString('zh-CN'),
|
||||
// 添加 patientId
|
||||
patientId: props.patientInfo.patientId
|
||||
});
|
||||
if (form.value.diagnosisList.length == 1) {
|
||||
@@ -1132,4 +1200,13 @@ defineExpose({ getList, getDetail, handleSaveDiagnosis });
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
||||
.unsaved-diagnosis-tip {
|
||||
margin-bottom: 10px;
|
||||
color: #E6A23C;
|
||||
font-size: 13px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
</style>
|
||||
@@ -348,6 +348,12 @@ function getCurrentDate() {
|
||||
}
|
||||
|
||||
function addNewDiagnosis() {
|
||||
// Bug #783: 存在未保存的新诊断时,不允许继续新增
|
||||
const hasUnsavedRow = diagnoseData.value.some(item => item.isNew && !item.conditionId)
|
||||
if (hasUnsavedRow) {
|
||||
ElMessage.warning('请先保存已新增的诊断,再添加新诊断')
|
||||
return
|
||||
}
|
||||
const maxSortNo = diagnoseData.value.length > 0
|
||||
? Math.max(...diagnoseData.value.map(item => item.sortNo || 0))
|
||||
: 0
|
||||
@@ -374,6 +380,12 @@ function addNewDiagnosis() {
|
||||
}
|
||||
|
||||
function addNewChinese() {
|
||||
// Bug #783: 存在未保存的新诊断时,不允许继续新增
|
||||
const hasUnsavedRow = diagnoseData.value.some(item => item.isNew && !item.conditionId)
|
||||
if (hasUnsavedRow) {
|
||||
ElMessage.warning('请先保存已新增的诊断,再添加新诊断')
|
||||
return
|
||||
}
|
||||
chineseMedicineDialogVisible.value = true
|
||||
}
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
<vxe-column
|
||||
title="类型"
|
||||
field="name"
|
||||
min-width=" 60px"
|
||||
min-width="60"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<span v-if="!row.children">长期</span>
|
||||
@@ -134,7 +134,7 @@
|
||||
<vxe-column
|
||||
title="医嘱内容"
|
||||
field="content"
|
||||
min-width="220px"
|
||||
min-width="220"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.children">{{ row.content }}</span>
|
||||
@@ -144,9 +144,9 @@
|
||||
v-if="searchForm.drugType == '1' || searchForm.drugType == '3'"
|
||||
title="用法/频次"
|
||||
field="gender"
|
||||
min-width="120px"
|
||||
min-width="120"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template #default>
|
||||
<span>注射/qd</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
@@ -154,7 +154,7 @@
|
||||
v-if="searchForm.drugType == '3'"
|
||||
title="领药数量"
|
||||
field="gender"
|
||||
min-width="120px"
|
||||
min-width="120"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
@@ -169,27 +169,27 @@
|
||||
v-if="searchForm.drugType == '1' || searchForm.drugType == '2'"
|
||||
title="领药总量"
|
||||
field="gender"
|
||||
min-width="100px"
|
||||
min-width="100"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template #default>
|
||||
<span>2 支</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="参考金额"
|
||||
field="gender"
|
||||
min-width="100px"
|
||||
min-width="100"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template #default>
|
||||
<span>20.00</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="取药科室"
|
||||
field="gender"
|
||||
min-width="140px"
|
||||
min-width="140"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template #default>
|
||||
<span>儿科</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
@@ -198,7 +198,7 @@
|
||||
title="领药次数"
|
||||
field="gender"
|
||||
fixed="right"
|
||||
min-width="340px"
|
||||
min-width="340"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template v-if="!row.children">
|
||||
@@ -235,7 +235,7 @@
|
||||
<vxe-column
|
||||
title="医嘱内容"
|
||||
field="content"
|
||||
min-width="220px"
|
||||
min-width="220"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<span v-if="!row.children">{{ row.content }}</span>
|
||||
@@ -247,27 +247,27 @@
|
||||
<vxe-column
|
||||
title="领药数量"
|
||||
field="gender"
|
||||
min-width="120px"
|
||||
min-width="120"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template #default>
|
||||
<span>2 支</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="单价"
|
||||
field="gender"
|
||||
min-width="100px"
|
||||
min-width="100"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template #default>
|
||||
<span>20.00</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="参考金额"
|
||||
field="gender"
|
||||
min-width="140px"
|
||||
min-width="140"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template #default>
|
||||
<span>40.00</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
<vxe-column
|
||||
title="执行时间"
|
||||
field="gender"
|
||||
min-width="200px"
|
||||
min-width="200"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template v-if="!row.children">
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
style="width: 200px"
|
||||
/>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="handleGetPrescription"
|
||||
>
|
||||
@@ -52,19 +51,37 @@
|
||||
v-model="chooseAll"
|
||||
@change="handelSwitchChange"
|
||||
/>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleCheck"
|
||||
>
|
||||
核对通过
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
:disabled="hasDispensedSelected"
|
||||
@click="handleCancel"
|
||||
>
|
||||
退回
|
||||
</el-button>
|
||||
<!-- 未校对tab:显示核对通过/退回 -->
|
||||
<template v-if="activeTab === 'unverified'">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleCheck"
|
||||
>
|
||||
核对通过
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
:disabled="hasDispensedSelected"
|
||||
@click="handleCancel"
|
||||
>
|
||||
退回
|
||||
</el-button>
|
||||
</template>
|
||||
<!-- 已校对tab:显示执行/不执行 -->
|
||||
<template v-else-if="activeTab === 'verified'">
|
||||
<el-button
|
||||
type="success"
|
||||
@click="handleExecute"
|
||||
>
|
||||
执行
|
||||
</el-button>
|
||||
<el-button
|
||||
type="warning"
|
||||
@click="handleVoid"
|
||||
>
|
||||
不执行
|
||||
</el-button>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
@@ -680,6 +697,11 @@ function getSelectRows() {
|
||||
requestId: item.requestId,
|
||||
requestTable: item.adviceTable,
|
||||
dispenseStatus: item.dispenseStatus,
|
||||
encounterId: item.encounterId,
|
||||
patientId: item.patientId,
|
||||
accountId: item.accountId,
|
||||
therapyEnum: item.therapyEnum,
|
||||
exePerformRecordList: item.exePerformRecordList,
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -723,6 +745,90 @@ function getDateRange(startDate, endDate) {
|
||||
// 处理后端返回的时间集合
|
||||
function handleTime() {}
|
||||
|
||||
/**
|
||||
* 执行医嘱
|
||||
*/
|
||||
function handleExecute() {
|
||||
let list = getSelectRows();
|
||||
if (list.length === 0) {
|
||||
proxy.$message.warning('请先选择医嘱信息');
|
||||
return;
|
||||
}
|
||||
// 检查是否已有执行记录(已执行的不需要再执行)
|
||||
let executedItems = list.filter(item => item.exePerformRecordList && item.exePerformRecordList.length > 0);
|
||||
if (executedItems.length > 0) {
|
||||
proxy.$message.warning('选中医嘱中包含已执行的医嘱,请取消勾选后重试');
|
||||
return;
|
||||
}
|
||||
const now = new Date();
|
||||
const exeDate = now.getFullYear() + '-' +
|
||||
String(now.getMonth() + 1).padStart(2, '0') + '-' +
|
||||
String(now.getDate()).padStart(2, '0') + ' ' +
|
||||
String(now.getHours()).padStart(2, '0') + ':' +
|
||||
String(now.getMinutes()).padStart(2, '0') + ':' +
|
||||
String(now.getSeconds()).padStart(2, '0');
|
||||
const adviceExecuteDetailList = list.map(item => ({
|
||||
requestId: item.requestId,
|
||||
encounterId: item.encounterId,
|
||||
patientId: item.patientId,
|
||||
accountId: item.accountId,
|
||||
therapyEnum: item.therapyEnum,
|
||||
adviceTable: item.requestTable,
|
||||
executeTimes: [exeDate],
|
||||
}));
|
||||
adviceExecute({
|
||||
exeDate: exeDate,
|
||||
adviceExecuteDetailList: adviceExecuteDetailList,
|
||||
}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess(res.msg);
|
||||
handleGetPrescription();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 不执行医嘱
|
||||
*/
|
||||
function handleVoid() {
|
||||
let list = getSelectRows();
|
||||
if (list.length === 0) {
|
||||
proxy.$message.warning('请先选择医嘱信息');
|
||||
return;
|
||||
}
|
||||
// 检查是否已有执行记录(已执行的不能标记为不执行)
|
||||
let executedItems = list.filter(item => item.exePerformRecordList && item.exePerformRecordList.length > 0);
|
||||
if (executedItems.length > 0) {
|
||||
proxy.$message.warning('选中医嘱中包含已执行的医嘱,请取消勾选后重试');
|
||||
return;
|
||||
}
|
||||
const now = new Date();
|
||||
const exeDate = now.getFullYear() + '-' +
|
||||
String(now.getMonth() + 1).padStart(2, '0') + '-' +
|
||||
String(now.getDate()).padStart(2, '0') + ' ' +
|
||||
String(now.getHours()).padStart(2, '0') + ':' +
|
||||
String(now.getMinutes()).padStart(2, '0') + ':' +
|
||||
String(now.getSeconds()).padStart(2, '0');
|
||||
const adviceExecuteDetailList = list.map(item => ({
|
||||
requestId: item.requestId,
|
||||
encounterId: item.encounterId,
|
||||
patientId: item.patientId,
|
||||
accountId: item.accountId,
|
||||
therapyEnum: item.therapyEnum,
|
||||
adviceTable: item.requestTable,
|
||||
executeTimes: [exeDate],
|
||||
}));
|
||||
adviceNoExecute({
|
||||
exeDate: exeDate,
|
||||
adviceExecuteDetailList: adviceExecuteDetailList,
|
||||
}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess(res.msg);
|
||||
handleGetPrescription();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
handleGetPrescription,
|
||||
});
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
<vxe-column
|
||||
title="医嘱内容"
|
||||
field="content"
|
||||
min-width="300px"
|
||||
min-width="300"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.children">{{ row.content }}</span>
|
||||
|
||||
@@ -1,31 +1,10 @@
|
||||
<!--
|
||||
* @Author: sjjh
|
||||
* @Date: 2025-09-09 13:49:40
|
||||
* @Description:
|
||||
* @Description: 护士工作站 - 退药管理(复用住院退药组件)
|
||||
-->
|
||||
<template>
|
||||
<div class="container" />
|
||||
<ReturnDrug />
|
||||
</template>
|
||||
<script setup>
|
||||
import {getCurrentInstance, onBeforeMount, onMounted, reactive} from 'vue'
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const emits = defineEmits([])
|
||||
const props = defineProps({
|
||||
|
||||
})
|
||||
const state = reactive({
|
||||
|
||||
})
|
||||
onBeforeMount(() => {
|
||||
|
||||
})
|
||||
onMounted(() => {
|
||||
|
||||
})
|
||||
defineExpose({ state })
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
</style>
|
||||
<script setup>
|
||||
import ReturnDrug from '@/views/drug/inpatientMedicationDispensing/components/ReturnDrug.vue';
|
||||
</script>
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
placeholder="请选择"
|
||||
clearable
|
||||
filterable
|
||||
@change=""
|
||||
>
|
||||
<el-option
|
||||
v-for="item in temOptions"
|
||||
@@ -220,7 +219,7 @@
|
||||
</el-form-item>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<!-- <vxe-column width="200px" title="血氧">
|
||||
<!-- <vxe-column width="200" title="血氧">
|
||||
<template #default="scoped">
|
||||
<el-form-item size="normal" :prop="`fillTableData.${scoped.rowIndex}.bloodOxygen`">
|
||||
<div style="margin-left: -80px">
|
||||
@@ -232,7 +231,7 @@
|
||||
</el-form-item>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column width="200px" title="血糖">
|
||||
<vxe-column width="200" title="血糖">
|
||||
<template #default="scoped">
|
||||
<el-form-item size="normal" :prop="`fillTableData.${scoped.rowIndex}.bloodGlucose`">
|
||||
<div style="margin-left: -80px">
|
||||
@@ -241,7 +240,7 @@
|
||||
</el-form-item>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column width="200px" title="物理降温">
|
||||
<vxe-column width="200" title="物理降温">
|
||||
<template #default="scoped">
|
||||
<el-form-item size="normal" :prop="`fillTableData.${scoped.rowIndex}.physicalCooling`">
|
||||
<div style="margin-left: -80px">
|
||||
@@ -250,7 +249,7 @@
|
||||
</el-form-item>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column width="200px" title="CCU心率">
|
||||
<vxe-column width="200" title="CCU心率">
|
||||
<template #default="scoped">
|
||||
<el-form-item size="normal" :prop="`fillTableData.${scoped.rowIndex}.ccuHeartRate`">
|
||||
<div style="margin-left: -80px">
|
||||
@@ -259,7 +258,7 @@
|
||||
</el-form-item>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column width="200px" title="新生儿箱温">
|
||||
<vxe-column width="200" title="新生儿箱温">
|
||||
<template #default="scoped">
|
||||
<el-form-item
|
||||
size="normal"
|
||||
@@ -271,7 +270,7 @@
|
||||
</el-form-item>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column width="200px" title="血酮">
|
||||
<vxe-column width="200" title="血酮">
|
||||
<template #default="scoped">
|
||||
<el-form-item size="normal" :prop="`fillTableData.${scoped.rowIndex}.bloodKetone`">
|
||||
<div style="margin-left: -80px">
|
||||
|
||||
@@ -171,14 +171,14 @@
|
||||
>
|
||||
<vxe-column
|
||||
type="checkbox"
|
||||
width="50px"
|
||||
width="50"
|
||||
align="center"
|
||||
/>
|
||||
<vxe-column
|
||||
key="busNo"
|
||||
title="门诊号"
|
||||
align="center"
|
||||
min-width="150px"
|
||||
min-width="150"
|
||||
show-overflow="title"
|
||||
resizable
|
||||
>
|
||||
@@ -204,7 +204,7 @@
|
||||
title="姓名"
|
||||
align="center"
|
||||
field="name"
|
||||
width="90px"
|
||||
width="90"
|
||||
show-overflow="title"
|
||||
resizable
|
||||
/>
|
||||
@@ -213,7 +213,7 @@
|
||||
title="医保号"
|
||||
align="center"
|
||||
field="ybCode"
|
||||
min-width="200px"
|
||||
min-width="200"
|
||||
show-overflow="title"
|
||||
resizable
|
||||
/>
|
||||
@@ -230,7 +230,7 @@
|
||||
title="医保码"
|
||||
align="center"
|
||||
field="ybNo"
|
||||
min-width="250px"
|
||||
min-width="250"
|
||||
show-overflow="title"
|
||||
resizable
|
||||
/>
|
||||
|
||||
@@ -23,17 +23,17 @@
|
||||
<vxe-column
|
||||
title="序号"
|
||||
type="seq"
|
||||
min-width="5%"
|
||||
width="5%"
|
||||
/>
|
||||
<vxe-column
|
||||
title="字段列名"
|
||||
field="columnName"
|
||||
min-width="10%"
|
||||
width="10%"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
title="字段描述"
|
||||
min-width="10%"
|
||||
width="10%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.columnComment" />
|
||||
@@ -42,12 +42,12 @@
|
||||
<vxe-column
|
||||
title="物理类型"
|
||||
field="columnType"
|
||||
min-width="10%"
|
||||
width="10%"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
title="Java类型"
|
||||
min-width="11%"
|
||||
width="11%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-select v-model="scope.row.javaType">
|
||||
@@ -84,7 +84,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="java属性"
|
||||
min-width="10%"
|
||||
width="10%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.javaField" />
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
<vxe-column
|
||||
title="插入"
|
||||
min-width="5%"
|
||||
width="5%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-checkbox
|
||||
@@ -105,7 +105,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="编辑"
|
||||
min-width="5%"
|
||||
width="5%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-checkbox
|
||||
@@ -117,7 +117,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="列表"
|
||||
min-width="5%"
|
||||
width="5%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-checkbox
|
||||
@@ -129,7 +129,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="查询"
|
||||
min-width="5%"
|
||||
width="5%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-checkbox
|
||||
@@ -141,7 +141,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="查询方式"
|
||||
min-width="10%"
|
||||
width="10%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-select v-model="scope.row.queryType">
|
||||
@@ -182,7 +182,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="必填"
|
||||
min-width="5%"
|
||||
width="5%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-checkbox
|
||||
@@ -194,7 +194,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="显示类型"
|
||||
min-width="12%"
|
||||
width="12%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-select v-model="scope.row.htmlType">
|
||||
@@ -239,7 +239,7 @@
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="字典类型"
|
||||
min-width="12%"
|
||||
width="12%"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-select
|
||||
|
||||
Reference in New Issue
Block a user