fix(#591): 请修复 Bug #591:【住院医生站-临床医嘱】长期医嘱点击停嘱未弹出时间录入弹窗
根因: - Bug #请修复 Bug #591 存在的问题 修复: - ### 变更摘要 - 全链路数据流分析**:录取(弹窗输入)→ 保存(API传入)→ 查询(Mapper返回)→ 修改(Service记录)→ 删除/停止(状态变更)→ 关联(列表展示) - ### 后端变更(4个文件) - 1. `AdviceBatchOpParam.java`** — 停嘱参数添加 `stopTime` 字段 - 新增 `@JsonFormat Date stopTime`,支持前端传入停嘱时间 - 2. `RequestBaseDto.java`** — 查询DTO添加 `stopUserName`、`stopTime` 字段 - 新增 `String stopUserName`(停嘱医生姓名) - 新增 `Date stopTime`(停嘱时间) - 3. `AdviceManageAppServiceImpl.java`** — 停嘱Service增强 - 优先使用前端传入的 `stopTime`,兜底用当前时间 - 通过 `SecurityUtils.getNickName()` 获取当前操作用户昵称,记录到 `updateBy` - 药品和诊疗两个更新入口均已同步修改 - 4. `AdviceManageAppMapper.xml`** — 三个UNION ALL子查询添加字段 - 药品子查询:`T1.effective_dose_end AS stop_time` + `T1.update_by AS stop_user_name` - 耗材子查询:`NULL AS stop_time` + `'' AS stop_user_name` - 诊疗子查询:`T1.occurrence_end_time AS stop_time` + `T1.update_by AS stop_user_name` - ### 前端变更(1个文件) - `order/index.vue`**: - 1. **停嘱时间弹窗** — 点击「停嘱」后弹出 `el-dialog`,内含 `el-date-picker`(datetime类型,默认当前时间),确定后才调用API - 2. **表格列** — 在「皮试」列后面、「诊断」列前面新增两列: - 「停嘱医生」`prop="stopUserName"`,宽度120px - 「停嘱时间」`prop="stopTime"`,宽度170px - 3. **`handleStopAdvice`** — 保留原有校验(未保存/未签发/已停止检查),校验通过后弹出时间选择弹窗而非直接调API - 4. **`confirmStopAdvice`** — 新增确认函数,将 `stopTime` 拼入请求参数后调用 `stopAdvice` API - ### 验证结果 - ✅ 前端 Lint 检查通过(仅1个预存的 `vue/no-dupe-keys` 警告) - ✅ 后端 Maven 编译通过(BUILD SUCCESS)
This commit is contained in:
@@ -1,11 +1,16 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 添加或修改用户配置对话框 -->
|
||||
<el-dialog :title="title" v-model="visible" width="800px" append-to-body>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="title"
|
||||
width="800px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="diagnosisTreatmentRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
ref="diagnosisTreatmentRef"
|
||||
label-width="110px"
|
||||
label-position="left"
|
||||
>
|
||||
@@ -13,25 +18,45 @@
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="handleImportYb()"
|
||||
size="small"
|
||||
style="margin-left: 5px; margin-top: -10px; margin-bottom: 20px"
|
||||
>从医保目录导入</el-button
|
||||
@click="handleImportYb()"
|
||||
>
|
||||
从医保目录导入
|
||||
</el-button>
|
||||
</div>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8" v-if="form.id != undefined">
|
||||
<el-form-item label="编号" prop="busNo">
|
||||
<el-input v-model="form.busNo" placeholder="请输入编码" disabled />
|
||||
<el-col
|
||||
v-if="form.id != undefined"
|
||||
:span="8"
|
||||
>
|
||||
<el-form-item
|
||||
label="编号"
|
||||
prop="busNo"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.busNo"
|
||||
placeholder="请输入编码"
|
||||
disabled
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入名称" />
|
||||
<el-form-item
|
||||
label="项目名称"
|
||||
prop="name"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="请输入名称"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="所属科室" prop="orgId">
|
||||
<el-form-item
|
||||
label="所属科室"
|
||||
prop="orgId"
|
||||
>
|
||||
<el-tree-select
|
||||
v-model="form.orgId"
|
||||
:data="deptOptions"
|
||||
@@ -49,14 +74,23 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="busNo">
|
||||
<el-input v-model="form.busNo" placeholder="请输入项目编码" />
|
||||
<el-form-item
|
||||
label="项目编码"
|
||||
prop="busNo"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.busNo"
|
||||
placeholder="请输入项目编码"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="地点" prop="locationId">
|
||||
<el-form-item
|
||||
label="地点"
|
||||
prop="locationId"
|
||||
>
|
||||
<el-tree-select
|
||||
v-model="form.locationId"
|
||||
:data="locationOptions"
|
||||
@@ -73,7 +107,10 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="目录分类" prop="categoryCode">
|
||||
<el-form-item
|
||||
label="目录分类"
|
||||
prop="categoryCode"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.categoryCode"
|
||||
clearable
|
||||
@@ -91,8 +128,17 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="业务类型" prop="typeEnum">
|
||||
<el-select v-model="form.typeEnum" placeholder="" clearable filterable no-data-text="">
|
||||
<el-form-item
|
||||
label="业务类型"
|
||||
prop="typeEnum"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.typeEnum"
|
||||
placeholder=""
|
||||
clearable
|
||||
filterable
|
||||
no-data-text=""
|
||||
>
|
||||
<el-option
|
||||
v-for="item in typeEnumOptions"
|
||||
:key="item.value"
|
||||
@@ -105,17 +151,26 @@
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="医保标记" prop="ybFlag">
|
||||
<el-checkbox v-model="form.ybFlag"></el-checkbox>
|
||||
<el-form-item
|
||||
label="医保标记"
|
||||
prop="ybFlag"
|
||||
>
|
||||
<el-checkbox v-model="form.ybFlag" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="医保对码标记" prop="ybMatchFlag">
|
||||
<el-checkbox v-model="form.ybMatchFlag"></el-checkbox>
|
||||
<el-form-item
|
||||
label="医保对码标记"
|
||||
prop="ybMatchFlag"
|
||||
>
|
||||
<el-checkbox v-model="form.ybMatchFlag" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="医保编码" prop="conditionCode">
|
||||
<el-form-item
|
||||
label="医保编码"
|
||||
prop="conditionCode"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.ybNo"
|
||||
placeholder=""
|
||||
@@ -127,7 +182,10 @@
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="医保类别" prop="ybType">
|
||||
<el-form-item
|
||||
label="医保类别"
|
||||
prop="ybType"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.ybType"
|
||||
placeholder="医保类别"
|
||||
@@ -147,7 +205,10 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="身体部位" prop="bodySiteCode">
|
||||
<el-form-item
|
||||
label="身体部位"
|
||||
prop="bodySiteCode"
|
||||
>
|
||||
<el-tree-select
|
||||
v-model="form.bodySiteCode"
|
||||
:data="bodyOptions"
|
||||
@@ -166,8 +227,16 @@
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="所需标本" prop="specimenCode">
|
||||
<el-select v-model="form.specimenCode" clearable filterable no-data-text="">
|
||||
<el-form-item
|
||||
label="所需标本"
|
||||
prop="specimenCode"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.specimenCode"
|
||||
clearable
|
||||
filterable
|
||||
no-data-text=""
|
||||
>
|
||||
<el-option
|
||||
v-for="category in specimen_code"
|
||||
:key="category.value"
|
||||
@@ -180,7 +249,10 @@
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="医保等级" prop="chrgitmLv">
|
||||
<el-form-item
|
||||
label="医保等级"
|
||||
prop="chrgitmLv"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.chrgitmLv"
|
||||
placeholder=""
|
||||
@@ -200,7 +272,10 @@
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="使用单位" prop="permittedUnitCode">
|
||||
<el-form-item
|
||||
label="使用单位"
|
||||
prop="permittedUnitCode"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.permittedUnitCode"
|
||||
clearable
|
||||
@@ -217,8 +292,16 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="财务类型" prop="itemTypeCode">
|
||||
<el-select v-model="form.itemTypeCode" clearable filterable no-data-text="">
|
||||
<el-form-item
|
||||
label="财务类型"
|
||||
prop="itemTypeCode"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.itemTypeCode"
|
||||
clearable
|
||||
filterable
|
||||
no-data-text=""
|
||||
>
|
||||
<!-- :disabled="form.isEditInfoDisable === 1" -->
|
||||
|
||||
<el-option
|
||||
@@ -233,48 +316,65 @@
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="零售价" prop="retailPrice">
|
||||
<el-form-item
|
||||
label="零售价"
|
||||
prop="retailPrice"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.retailPrice"
|
||||
placeholder=""
|
||||
@input="updatePrices"
|
||||
:disabled="form.isEditInfoDisable === 1"
|
||||
@input="updatePrices"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="最高零售价" prop="maximumRetailPrice">
|
||||
<el-input v-model="form.maximumRetailPrice" placeholder="" :disabled="false" />
|
||||
<el-form-item
|
||||
label="最高零售价"
|
||||
prop="maximumRetailPrice"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.maximumRetailPrice"
|
||||
placeholder=""
|
||||
:disabled="false"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="划价标记" prop="maximumRetailPrice">
|
||||
<el-form-item
|
||||
label="划价标记"
|
||||
prop="maximumRetailPrice"
|
||||
>
|
||||
<el-checkbox
|
||||
v-model="form.pricingFlag"
|
||||
:true-value="1"
|
||||
:false-value="0"
|
||||
></el-checkbox>
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="treatment-items-section">
|
||||
<div v-for="(item, index) in treatmentItems" :key="index" class="form-row">
|
||||
<div
|
||||
v-for="(item, index) in treatmentItems"
|
||||
:key="index"
|
||||
class="form-row"
|
||||
>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="诊疗子项">
|
||||
<div style="position: relative">
|
||||
<PopoverList
|
||||
@search="handleSearch"
|
||||
:width="1000"
|
||||
:modelValue="item.name"
|
||||
:model-value="item.name"
|
||||
@search="handleSearch"
|
||||
@focus="popoverListhandleFocus(item.name)"
|
||||
>
|
||||
<template #popover-content="{}">
|
||||
<medicineList
|
||||
@selectRow="(row) => selectRow(row, index)"
|
||||
:searchKey="medicineSearchKey"
|
||||
:shouldLoadData="isFirstOpen"
|
||||
:preloadedData="diagnosisTreatmentList"
|
||||
:search-key="medicineSearchKey"
|
||||
:should-load-data="isFirstOpen"
|
||||
:preloaded-data="diagnosisTreatmentList"
|
||||
@select-row="(row) => selectRow(row, index)"
|
||||
/>
|
||||
</template>
|
||||
</PopoverList>
|
||||
@@ -284,7 +384,6 @@
|
||||
type="text"
|
||||
icon="Delete"
|
||||
size="small"
|
||||
@click.stop="clearItem(index)"
|
||||
style="
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
@@ -292,6 +391,7 @@
|
||||
transform: translateY(-50%);
|
||||
color: #909399;
|
||||
"
|
||||
@click.stop="clearItem(index)"
|
||||
/>
|
||||
</div>
|
||||
<!-- <span v-else>{{ item.name || '' }}</span> -->
|
||||
@@ -304,12 +404,15 @@
|
||||
controls-position="right"
|
||||
:min="1"
|
||||
:max="999"
|
||||
@change="calculateTotalPrice"
|
||||
:disabled="form.isEditInfoDisable === 1"
|
||||
@change="calculateTotalPrice"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" style="display: flex; align-items: center; padding-bottom: 15px">
|
||||
<el-col
|
||||
:span="8"
|
||||
style="display: flex; align-items: center; padding-bottom: 15px"
|
||||
>
|
||||
<!-- <div style="margin-right: 20px; font-weight: bold; color: #333">
|
||||
小计: ¥{{
|
||||
item.retailPrice && item.childrenRequestNum
|
||||
@@ -319,14 +422,21 @@
|
||||
: '0.00'
|
||||
}}
|
||||
</div> -->
|
||||
<el-button @click="addItem" circle type="primary" size="small" plain icon="Plus" />
|
||||
<el-button
|
||||
@click="removeItem(index)"
|
||||
circle
|
||||
type="primary"
|
||||
size="small"
|
||||
plain
|
||||
icon="Plus"
|
||||
@click="addItem"
|
||||
/>
|
||||
<el-button
|
||||
circle
|
||||
type="danger"
|
||||
size="small"
|
||||
plain
|
||||
icon="Minus"
|
||||
@click="removeItem(index)"
|
||||
/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -334,7 +444,10 @@
|
||||
</div>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="16">
|
||||
<el-form-item label="说明" prop="descriptionText">
|
||||
<el-form-item
|
||||
label="说明"
|
||||
prop="descriptionText"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.descriptionText"
|
||||
:autosize="{ minRows: 4, maxRows: 10 }"
|
||||
@@ -343,17 +456,30 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" style="display: flex; align-items: center; justify-content: flex-start">
|
||||
<el-col
|
||||
:span="8"
|
||||
style="display: flex; align-items: center; justify-content: flex-start"
|
||||
>
|
||||
<div style="font-size: 18px; font-weight: bold; color: #276ef1">
|
||||
总价: ¥{{ totalPrice }}
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="title != '查看'">
|
||||
<template
|
||||
v-if="title != '查看'"
|
||||
#footer
|
||||
>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确 定
|
||||
</el-button>
|
||||
<el-button @click="cancel">
|
||||
取 消
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
Reference in New Issue
Block a user