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:
2026-05-29 00:39:26 +08:00
parent b149cc3f3e
commit 3e7d27ee61
564 changed files with 69505 additions and 23137 deletions

View File

@@ -1,13 +1,16 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
ref="queryRef"
:model="queryParams"
:inline="true"
label-width="90px"
>
<el-form-item label="服务名称:" prop="searchKey">
<el-form-item
label="服务名称:"
prop="searchKey"
>
<el-input
v-model="queryParams.searchKey"
placeholder="服务名称"
@@ -16,7 +19,11 @@
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="是否需要预约:" prop="appointmentRequiredFlag" label-width="120px">
<el-form-item
label="是否需要预约:"
prop="appointmentRequiredFlag"
label-width="120px"
>
<el-select
v-model="queryParams.appointmentRequiredFlag"
placeholder=""
@@ -31,8 +38,16 @@
/>
</el-select>
</el-form-item>
<el-form-item label="活动标记:" prop="activeFlag">
<el-select v-model="queryParams.activeFlag" placeholder="" clearable style="width: 240px">
<el-form-item
label="活动标记:"
prop="activeFlag"
>
<el-select
v-model="queryParams.activeFlag"
placeholder=""
clearable
style="width: 240px"
>
<el-option
v-for="dict in activeFlagOptions"
:key="dict.value"
@@ -43,20 +58,50 @@
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-row
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd">添加</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
>删除</el-button
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>
添加
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Search" @click="getList">查询</el-button>
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
>
删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="CircleClose" @click="handleClear">清空条件</el-button>
<el-button
type="primary"
plain
icon="Search"
@click="getList"
>
查询
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="CircleClose"
@click="handleClear"
>
清空条件
</el-button>
</el-col>
</el-row>
@@ -65,58 +110,93 @@
:data="registrationfeeList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="服务名称" align="center" key="name" prop="name" />
<el-table-column
type="selection"
width="50"
align="center"
/>
<el-table-column
key="name"
label="服务名称"
align="center"
prop="name"
/>
<el-table-column
key="activeFlag_enumText"
label="活动标记"
align="center"
key="activeFlag_enumText"
prop="activeFlag_enumText"
/>
<el-table-column
key="offeredOrgId_dictText"
label="提供部门"
align="center"
key="offeredOrgId_dictText"
prop="offeredOrgId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
key="categoryCode_dictText"
label="服务分类"
align="center"
key="categoryCode_dictText"
prop="categoryCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
key="typeCode_dictText"
label="服务类型 "
align="center"
key="typeCode_dictText"
prop="typeCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
key="specialtyCode_dictText"
label="服务专业"
align="center"
key="specialtyCode_dictText"
prop="specialtyCode_dictText"
/>
<el-table-column
label="地点"
align="center"
key="locationId_dictText"
label="地点"
align="center"
prop="locationId_dictText"
/>
<el-table-column label="说明" align="center" key="comment" prop="comment" />
<el-table-column label="额外细节" align="center" key="extraDetails" prop="extraDetails" />
<el-table-column label="联系方式" align="center" key="contact" prop="contact" width="120" />
<el-table-column
key="comment"
label="说明"
align="center"
prop="comment"
/>
<el-table-column
key="extraDetails"
label="额外细节"
align="center"
prop="extraDetails"
/>
<el-table-column
key="contact"
label="联系方式"
align="center"
prop="contact"
width="120"
/>
<el-table-column
key="appointmentRequiredFlag_enumText"
label="预约要求"
align="center"
key="appointmentRequiredFlag_enumText"
prop="appointmentRequiredFlag_enumText"
/>
<el-table-column label="名称" align="center" key="chargeName" prop="chargeName" />
<el-table-column label="基础价格" align="center" key="price" prop="price" />
<el-table-column
key="chargeName"
label="名称"
align="center"
prop="chargeName"
/>
<el-table-column
key="price"
label="基础价格"
align="center"
prop="price"
/>
<el-table-column
label="操作"
align="center"
@@ -124,28 +204,55 @@
class-name="small-padding fixed-width"
>
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
>编辑</el-button
<el-button
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
>
<el-button link type="primary" icon="View" @click="handleView(scope.row)">查看</el-button>
编辑
</el-button>
<el-button
link
type="primary"
icon="View"
@click="handleView(scope.row)"
>
查看
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
<!-- 添加或修改服务管理对话框 -->
<el-dialog :title="title" v-model="open" width="800px" append-to-body>
<el-form :model="form" :rules="rules" ref="registrationfeeRef" label-width="100px">
<div class="title">服务管理</div>
<el-dialog
v-model="open"
:title="title"
width="800px"
append-to-body
>
<el-form
ref="registrationfeeRef"
:model="form"
:rules="rules"
label-width="100px"
>
<div class="title">
服务管理
</div>
<el-row>
<el-col :span="8">
<el-form-item label="诊疗项目" prop="name">
<el-form-item
label="诊疗项目"
prop="name"
>
<el-select
v-model="form.name"
placeholder="请选择诊疗项目"
@@ -169,26 +276,40 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="服务分类" prop="categoryCode">
<el-select v-model="form.categoryCode" placeholder="请选择" clearable>
<el-form-item
label="服务分类"
prop="categoryCode"
>
<el-select
v-model="form.categoryCode"
placeholder="请选择"
clearable
>
<el-option
v-for="dict in category_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="服务类型" prop="fwTypeCode">
<el-select v-model="form.fwTypeCode" placeholder="请选择" clearable>
<el-form-item
label="服务类型"
prop="fwTypeCode"
>
<el-select
v-model="form.fwTypeCode"
placeholder="请选择"
clearable
>
<el-option
v-for="dict in service_type_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
/>
</el-select>
</el-form-item>
</el-col>
@@ -220,7 +341,10 @@
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="科室" prop="offeredOrgId">
<el-form-item
label="科室"
prop="offeredOrgId"
>
<el-tree-select
v-model="form.offeredOrgId"
:data="deptOptions"
@@ -234,26 +358,40 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="活动标记" prop="activeFlag">
<el-select v-model="form.activeFlag" placeholder="请选择" clearable>
<el-form-item
label="活动标记"
prop="activeFlag"
>
<el-select
v-model="form.activeFlag"
placeholder="请选择"
clearable
>
<el-option
v-for="item in activeFlagOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预约要求" prop="appointmentRequiredFlag">
<el-select v-model="form.appointmentRequiredFlag" placeholder="请选择" clearable>
<el-form-item
label="预约要求"
prop="appointmentRequiredFlag"
>
<el-select
v-model="form.appointmentRequiredFlag"
placeholder="请选择"
clearable
>
<el-option
v-for="item in appointmentRequiredFlagOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
/>
</el-select>
</el-form-item>
</el-col>
@@ -272,7 +410,10 @@
</el-row>
<el-row :gutter="24">
<el-col :span="16">
<el-form-item label="服务说明" prop="comment">
<el-form-item
label="服务说明"
prop="comment"
>
<el-input
v-model="form.comment"
:autosize="{ minRows: 4, maxRows: 10 }"
@@ -282,51 +423,80 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出诊医生:" prop="practitionerId">
<el-form-item
label="出诊医生:"
prop="practitionerId"
>
<el-select
ref="doctorRef"
v-model="form.practitionerId"
placeholder="医生"
clearable
style="width: 240px"
@change="setInfo"
ref="doctorRef"
>
<el-option
v-for="doctor in doctorList"
:key="doctor.id"
:label="`${doctor.name}${doctor.qualification ? ' - '+doctor.qualification : ''}${doctor.department ? ' - '+doctor.department : ''}`"
:value="doctor.id"
></el-option>
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<div class="title">费用管理</div>
<div class="title">
费用管理
</div>
<el-row>
<el-col :span="8">
<el-form-item label="名称" prop="chargeName;">
<el-input v-model="form.chargeName" :disabled="form.id != undefined" />
<el-form-item
label="名称"
prop="chargeName;"
>
<el-input
v-model="form.chargeName"
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="基础价格" prop="price">
<el-input v-model="form.price" :disabled="form.id != undefined" />
<el-form-item
label="基础价格"
prop="price"
>
<el-input
v-model="form.price"
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="医保编码" prop="price">
<el-input v-model="form.ybNo" :disabled="form.id != undefined" />
<el-form-item
label="医保编码"
prop="price"
>
<el-input
v-model="form.ybNo"
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.id == undefined">
<el-col :span="8">
<el-form-item label="收费项目标题" prop="title">
<el-form-item
label="收费项目标题"
prop="title"
>
<el-input v-model="form.title" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="医保类别" prop="ybType">
<el-form-item
label="医保类别"
prop="ybType"
>
<el-select
v-model="form.ybType"
placeholder="医保类别"
@@ -343,21 +513,35 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="财务类型" prop="cwTypeCode">
<el-select v-model="form.cwTypeCode" placeholder="请选择" clearable disabled>
<el-form-item
label="财务类型"
prop="cwTypeCode"
>
<el-select
v-model="form.cwTypeCode"
placeholder="请选择"
clearable
disabled
>
<el-option
v-for="dict in fin_type_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="form.id == undefined">
<el-row
v-if="form.id == undefined"
:gutter="24"
>
<el-col :span="16">
<el-form-item label="收费说明" prop="description">
<el-form-item
label="收费说明"
prop="description"
>
<el-input
v-model="form.description"
:autosize="{ minRows: 4, maxRows: 10 }"
@@ -368,10 +552,20 @@
</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>