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

@@ -31,21 +31,22 @@
prop="minUnitCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column label="规格"
<el-table-column
label="规格"
align="center"
prop="volume"
:show-overflow-tooltip="true"
/>
<el-table-column
<el-table-column
label="产品批号"
align="center"
prop="lotNumber"
/>
<el-table-column
label="包装单位"
align="center"
prop="unitCode_dictText"
:show-overflow-tooltip="true"
<el-table-column
label="包装单位"
align="center"
prop="unitCode_dictText"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column label="用法" align="center" prop="methodCode_dictText" />
<el-table-column label="单次剂量" align="center" prop="dose" />
@@ -54,7 +55,11 @@
align="center"
prop="doseUnitCode_dictText"
/> -->
<el-table-column label="生产厂家" align="center" prop="manufacturerText" />
<el-table-column
label="生产厂家"
align="center"
prop="manufacturerText"
/>
<el-table-column
label="编码"
align="center"

View File

@@ -1,10 +1,24 @@
<template>
<div class="app-container" v-loading="pageLoading" loading-text="审批中。。。">
<el-row :gutter="10" class="mb8" v-if="viewStatus">
<div
v-loading="pageLoading"
class="app-container"
loading-text="审批中"
>
<el-row
v-if="viewStatus"
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button v-if="viewStatus != 'view'" plain type="primary" icon="Edit" @click="handelApply"
>审批通过</el-button
<el-button
v-if="viewStatus != 'view'"
plain
type="primary"
icon="Edit"
@click="handelApply"
>
审批通过
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -13,46 +27,84 @@
plain
icon="Edit"
@click="handleReject"
>驳回</el-button
>
驳回
</el-button>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8" v-else>
<el-row
v-else
:gutter="10"
class="mb8"
>
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="submitSave">保存</el-button>
</el-col> -->
<el-col :span="1.5">
<!-- v-if="scope.row.statusEnum == '1' || scope.row.statusEnum == '9'" -->
<el-button plain type="primary" icon="Plus" @click="handleSubmitApproval()"
>提交审核</el-button
<el-button
plain
type="primary"
icon="Plus"
@click="handleSubmitApproval()"
>
提交审核
</el-button>
<!-- <el-button type="primary" plain icon="Plus" @click="submitAudit"
>提交审核</el-button
> -->
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Printer" :disabled="multiple" @click="handleDelete"
>打印</el-button
<el-button
type="primary"
plain
icon="Printer"
:disabled="multiple"
@click="handleDelete"
>
打印
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="EditPen" @click="handleTotalAmount"
>计算金额</el-button
<el-button
type="primary"
plain
icon="EditPen"
@click="handleTotalAmount"
>
计算金额
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleSave">批量保存</el-button>
<el-button
type="primary"
plain
icon="Plus"
@click="handleSave"
>
批量保存
</el-button>
</el-col>
</el-row>
<el-button type="primary" plain @click="handleExport" v-if="viewStatus == 'view'">导出</el-button>
<el-button
v-if="viewStatus == 'view'"
type="primary"
plain
@click="handleExport"
>
导出
</el-button>
<el-form
:model="receiptHeaderForm"
ref="receiptHeaderRef"
:model="receiptHeaderForm"
:inline="true"
label-width="100px"
:rules="rules"
>
<el-form-item label="单据号:" prop="busNo">
<el-form-item
label="单据号:"
prop="busNo"
>
<el-input
v-model="receiptHeaderForm.busNo"
placeholder="单据号:"
@@ -69,7 +121,10 @@
:disabled="data.isEdit || viewStatus == 'view'"
/>
</el-form-item>
<el-form-item label="仓库类型:" prop="lossTypeEnum">
<el-form-item
label="仓库类型:"
prop="lossTypeEnum"
>
<el-select
v-model="receiptHeaderForm.lossTypeEnum"
placeholder=""
@@ -87,7 +142,11 @@
</el-select>
</el-form-item>
<!-- sourceLocationName -->
<el-form-item label="报损仓库:" prop="lossLocationId" required>
<el-form-item
label="报损仓库:"
prop="lossLocationId"
required
>
<el-select
v-model="receiptHeaderForm.lossLocationId"
placeholder=""
@@ -105,7 +164,10 @@
</el-select>
</el-form-item>
<!-- sourceLocationStoreName -->
<el-form-item label="货位:" prop="lossLocationStoreId">
<el-form-item
label="货位:"
prop="lossLocationStoreId"
>
<el-select
v-model="receiptHeaderForm.lossLocationStoreId"
placeholder=""
@@ -121,7 +183,11 @@
/>
</el-select>
</el-form-item>
<el-form-item label="药品类型:" prop="medicationType" label-width="115px">
<el-form-item
label="药品类型:"
prop="medicationType"
label-width="115px"
>
<el-select
v-model="receiptHeaderForm.medicationType"
placeholder=""
@@ -146,9 +212,20 @@
</el-form>
<el-tabs type="border-card">
<el-tab-pane label="报损单据明细">
<el-row :gutter="10" class="mb8" v-if="!viewStatus">
<el-row
v-if="!viewStatus"
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="addNewRow">添加行</el-button>
<el-button
type="primary"
plain
icon="Plus"
@click="addNewRow"
>
添加行
</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="confirmCurrentRow"
@@ -172,20 +249,37 @@
icon="Delete"
:disabled="multiple"
@click="deleteSelectedRows"
>删除行</el-button
>
删除行
</el-button>
</el-col>
</el-row>
<el-form :model="form" :rules="tableRules" ref="formRef" :disabled="viewStatus == 'view'">
<el-form
ref="formRef"
:model="form"
:rules="tableRules"
:disabled="viewStatus == 'view'"
>
<el-table
ref="tableRef"
v-loading="loading"
:data="form.purchaseinventoryList"
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
ref="tableRef"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="项目" align="center" key="name" prop="name" width="200" fixed>
<el-table-column
type="selection"
width="50"
align="center"
/>
<el-table-column
key="name"
label="项目"
align="center"
prop="name"
width="200"
fixed
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.name`"
@@ -200,36 +294,46 @@
/>
<PopoverList
v-else
@search="handleSearch"
:width="1000"
:modelValue="scope.row.name"
:model-value="scope.row.name"
@search="handleSearch"
>
<template #popover-content="{}">
<transferManagement
@selectRow="(row) => selectRow(row, scope.$index)"
:searchKey="medicineSearchKey"
:lossLocationId="receiptHeaderForm.lossLocationId"
:itemType="receiptHeaderForm.medicationType"
:search-key="medicineSearchKey"
:loss-location-id="receiptHeaderForm.lossLocationId"
:item-type="receiptHeaderForm.medicationType"
@select-row="(row) => selectRow(row, scope.$index)"
/>
</template>
</PopoverList>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="规格" align="center" key="volume" prop="volume" width="200">
<el-table-column
key="volume"
label="规格"
align="center"
prop="volume"
width="200"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.volume`"
:rules="tableRules.volume"
>
<el-input v-model="scope.row.volume" placeholder="" disabled />
<el-input
v-model="scope.row.volume"
placeholder=""
disabled
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
key="manufacturerText"
label="厂家/产地"
align="center"
key="manufacturerText"
prop="manufacturerText"
:show-overflow-tooltip="true"
width="240"
@@ -239,14 +343,18 @@
:prop="`purchaseinventoryList.${scope.$index}.manufacturerText`"
:rules="tableRules.manufacturerText"
>
<el-input v-model="scope.row.manufacturerText" placeholder="" disabled />
<el-input
v-model="scope.row.manufacturerText"
placeholder=""
disabled
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
key="unitCode"
label="计量单位"
align="center"
key="unitCode"
prop="unitCode"
:show-overflow-tooltip="true"
width="90"
@@ -287,9 +395,9 @@
</template>
</el-table-column>
<el-table-column
key="totalQuantity"
label="报损前库存数量"
align="center"
key="totalQuantity"
prop="totalQuantity"
width="120"
>
@@ -298,14 +406,18 @@
:prop="`purchaseinventoryList.${scope.$index}.totalQuantity`"
:rules="tableRules.totalQuantity"
>
<el-input v-model="scope.row.totalQuantity" placeholder="" disabled />
<el-input
v-model="scope.row.totalQuantity"
placeholder=""
disabled
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
key="itemQuantity"
label="报损数量"
align="center"
key="itemQuantity"
prop="itemQuantity"
width="120"
>
@@ -320,14 +432,20 @@
v-model="scope.row.itemQuantity"
placeholder=""
:disabled="viewStatus == 'view'"
@blur="handleTotalPrice(scope.$index)"
:class="{ 'error-border': scope.row.error }"
@blur="handleTotalPrice(scope.$index)"
/>
</div>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="采购单价 " align="center" key="price" prop="price" width="130">
<el-table-column
key="price"
label="采购单价 "
align="center"
prop="price"
width="130"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.price`"
@@ -335,13 +453,15 @@
>
<div class="select_wrapper_div">
<el-input
disabled
v-model="scope.row.price"
disabled
placeholder=""
@blur="handleTotalPrice(scope.$index)"
:class="{ 'error-border': scope.row.error }"
@blur="handleTotalPrice(scope.$index)"
>
<template #suffix></template>
<template #suffix>
</template>
</el-input>
</div>
</el-form-item>
@@ -349,22 +469,26 @@
</el-table-column>
<el-table-column
key="totalPrice"
label="报损金额 "
align="center"
key="totalPrice"
prop="totalPrice"
width="130"
>
<template #default="scope">
<el-form-item :prop="`purchaseinventoryList.${scope.$index}.totalPrice`">
<el-input disabled v-model="scope.row.totalPrice" placeholder="" />
<el-input
v-model="scope.row.totalPrice"
disabled
placeholder=""
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
key="lotNumber"
label="产品批号"
align="center"
key="lotNumber"
prop="lotNumber"
width="160"
>
@@ -373,14 +497,18 @@
:prop="`purchaseinventoryList.${scope.$index}.lotNumber`"
:rules="tableRules.lotNumber"
>
<el-input v-model="scope.row.lotNumber" placeholder="" disabled />
<el-input
v-model="scope.row.lotNumber"
placeholder=""
disabled
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
key="supplierName"
label="供应商"
align="center"
key="supplierName"
prop="supplierName"
width="130"
>
@@ -389,14 +517,18 @@
:prop="`purchaseinventoryList.${scope.$index}.supplierName`"
:rules="tableRules.supplierName"
>
<el-input v-model="scope.row.supplierName" placeholder="" disabled />
<el-input
v-model="scope.row.supplierName"
placeholder=""
disabled
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
key="lossReason"
label="原因"
align="center"
key="lossReason"
prop="lossReason"
width="130"
>
@@ -414,9 +546,9 @@
</template>
</el-table-column>
<el-table-column
key="startTime"
label="生产日期"
align="center"
key="startTime"
prop="startTime"
width="150"
>
@@ -437,9 +569,9 @@
</template>
</el-table-column>
<el-table-column
key="endTime"
label="有效期至"
align="center"
key="endTime"
prop="endTime"
width="150"
>
@@ -488,8 +620,9 @@
type="primary"
icon="Edit"
@click="handleScan(scope.row, scope.$index)"
>扫码</el-button
>
扫码
</el-button>
</template>
</el-table-column>
</el-table>
@@ -511,7 +644,10 @@
<span>单据状态:</span>
</el-col> -->
<el-col :span="6">
<el-row :gutter="8" style="display: flex; align-items: center; justify-content: flex-start">
<el-row
:gutter="8"
style="display: flex; align-items: center; justify-content: flex-start"
>
<el-col :span="10">
<span>合计金额:{{ totalAmount ? totalAmount.toFixed(4) : 0 }}</span>
</el-col>

View File

@@ -1,14 +1,17 @@
<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"
>
<!-- supplyBusNo searchKey-->
<el-form-item label="单据号:" prop="searchKey">
<!-- supplyBusNo searchKey-->
<el-form-item
label="单据号:"
prop="searchKey"
>
<el-input
v-model="queryParams.searchKey"
placeholder="单据号:"
@@ -18,7 +21,11 @@
/>
</el-form-item>
<el-form-item label="审批状态:" prop="statusEnum" label-width="100px">
<el-form-item
label="审批状态:"
prop="statusEnum"
label-width="100px"
>
<el-select
v-model="queryParams.statusEnum"
placeholder=""
@@ -33,7 +40,11 @@
/>
</el-select>
</el-form-item>
<el-form-item label="制单人:" prop="applicantId" label-width="100px">
<el-form-item
label="制单人:"
prop="applicantId"
label-width="100px"
>
<el-select
v-model="queryParams.applicantId"
placeholder=""
@@ -59,7 +70,7 @@
value-format="YYYY-MM-DD"
/>
</el-form-item>
<!-- <el-form-item label="单据类型:" prop="typeEnum" label-width="100px">
<!-- <el-form-item label="单据类型:" prop="typeEnum" label-width="100px">
<el-select
v-model="queryParams.typeEnum"
placeholder=""
@@ -76,7 +87,10 @@
</el-form-item> -->
</el-form>
<el-row :gutter="10" class="mb8">
<el-row
:gutter="10"
class="mb8"
>
<!-- 添加记录 -->
<el-col :span="1.5">
<el-button
@@ -84,8 +98,9 @@
plain
icon="Plus"
@click="openAddaddTransferProductDialog"
>新增报损单</el-button
>
新增报损单
</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
@@ -103,8 +118,9 @@
plain
icon="Search"
@click="handleQuery"
>查询</el-button
>
查询
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -112,8 +128,9 @@
plain
icon="CircleClose"
@click="handleClear"
>重置</el-button
>
重置
</el-button>
</el-col>
</el-row>
@@ -122,8 +139,12 @@
:data="purchaseinventoryList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column
<el-table-column
type="selection"
width="50"
align="center"
/>
<!-- <el-table-column
label="药品名称"
align="center"
key="name"
@@ -132,25 +153,25 @@
width="110"
/> -->
<el-table-column
key="supplyBusNo"
label="单据号"
align="center"
key="supplyBusNo"
prop="supplyBusNo"
width="200"
width="200"
:show-overflow-tooltip="true"
/>
<!-- itemTable -->
<el-table-column
key="type_enumText"
label="单据类型"
align="center"
key="type_enumText"
prop="type_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
key="statusEnum_enumText"
label="审批状态"
align="center"
key="statusEnum_enumText"
prop="statusEnum_enumText"
:show-overflow-tooltip="true"
/>
@@ -168,37 +189,37 @@
:show-overflow-tooltip="true"
/> -->
<el-table-column
key="inventoryLocationName"
label="盘点仓库"
align="center"
key="inventoryLocationName"
prop="inventoryLocationName"
:show-overflow-tooltip="true"
/>
<el-table-column
<el-table-column
key="reportedLossAmount"
label="报损金额"
align="center"
key="reportedLossAmount"
prop="reportedLossAmount"
:show-overflow-tooltip="true"
/>
<el-table-column
key="applicantId_dictText"
label="制单人"
align="center"
key="applicantId_dictText"
prop="applicantId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
key="approverId_dictText"
label="审核人"
align="center"
key="approverId_dictText"
prop="approverId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
key="createTime"
label="制单日期"
align="center"
key="createTime"
prop="createTime"
width="160"
:show-overflow-tooltip="true"
@@ -208,9 +229,9 @@
</template>
</el-table-column>
<el-table-column
key="approvalTime"
label="审核日期 "
align="center"
key="approvalTime"
prop="approvalTime"
width="160"
:show-overflow-tooltip="true"
@@ -219,7 +240,7 @@
<span>{{ parseTime(scope.row.approvalTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column
<!-- <el-table-column
label="备注"
align="center"
key="purposeLocationNam"
@@ -238,48 +259,51 @@
type="primary"
icon="View"
@click="handleUpdate(scope.row,'view')"
>详情</el-button
>
详情
</el-button>
<el-button
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
:disabled="
scope.row.statusEnum != '1' && scope.row.statusEnum != '9' && scope.row.statusEnum != '4'
"
>编辑</el-button
@click="handleUpdate(scope.row)"
>
编辑
</el-button>
<el-button
link
type="primary"
icon="View"
@click="handleSubmitApproval(scope.row)"
v-if="scope.row.statusEnum == '1' || scope.row.statusEnum == '9'"
>提交审批</el-button
>
<!-- v-hasPermi="['system:user:remove']" -->
<el-button
link
type="primary"
icon="View"
@click="handleWithdrawApproval(scope.row)"
v-if="scope.row.statusEnum == '2'"
>撤销审批</el-button
@click="handleSubmitApproval(scope.row)"
>
<!-- v-hasPermi="['system:user:remove']" -->
提交审批
</el-button>
<!-- v-hasPermi="['system:user:remove']" -->
<el-button
v-if="scope.row.statusEnum == '2'"
link
type="primary"
icon="View"
@click="handleWithdrawApproval(scope.row)"
>
撤销审批
</el-button>
<!-- v-hasPermi="['system:user:remove']" -->
</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"
/>
<!-- <Dialog