bug 699
This commit is contained in:
@@ -99,4 +99,20 @@ public interface IInHospitalRegisterAppService {
|
|||||||
* @return 病区列表
|
* @return 病区列表
|
||||||
*/
|
*/
|
||||||
List<LocationDto> getWardList(Long orgId);
|
List<LocationDto> getWardList(Long orgId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改住院登记信息
|
||||||
|
*
|
||||||
|
* @param inHospitalInfoDto 登记dto
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
R<?> updateRegistration(InHospitalInfoDto inHospitalInfoDto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作废住院登记
|
||||||
|
*
|
||||||
|
* @param encounterId 住院就诊id
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
R<?> voidRegistration(Long encounterId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,9 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS
|
|||||||
@Resource
|
@Resource
|
||||||
private YbManager ybManager;
|
private YbManager ybManager;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IChargeItemService iChargeItemService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 门诊医生开住院申请
|
* 门诊医生开住院申请
|
||||||
*
|
*
|
||||||
@@ -362,6 +365,183 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS
|
|||||||
return locationDtoList;
|
return locationDtoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改住院登记信息
|
||||||
|
*
|
||||||
|
* @param inHospitalInfoDto 登记dto
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public R<?> updateRegistration(InHospitalInfoDto inHospitalInfoDto) {
|
||||||
|
Long encounterId = inHospitalInfoDto.getEncounterId();
|
||||||
|
if (encounterId == null) {
|
||||||
|
throw new ServiceException("就诊ID不能为空");
|
||||||
|
}
|
||||||
|
Encounter encounter = iEncounterService.getById(encounterId);
|
||||||
|
if (encounter == null) {
|
||||||
|
throw new ServiceException("未找到该住院登记记录");
|
||||||
|
}
|
||||||
|
// 仅"待入科"状态可修改
|
||||||
|
if (!EncounterZyStatus.REGISTERED.getValue().equals(encounter.getStatusEnum())) {
|
||||||
|
throw new ServiceException("患者已入科接收,无法修改登记信息");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新就诊信息
|
||||||
|
encounter.setOrganizationId(inHospitalInfoDto.getInHospitalOrgId()); // 住院科室
|
||||||
|
encounter.setPriorityEnum(inHospitalInfoDto.getPriorityEnum()); // 优先级(患者病情)
|
||||||
|
encounter.setAdmitSourceCode(inHospitalInfoDto.getAdmitSourceCode()); // 入院类型
|
||||||
|
encounter.setInWayCode(inHospitalInfoDto.getInWayCode()); // 入院方式
|
||||||
|
encounter.setStartTime(inHospitalInfoDto.getStartTime()); // 入院日期
|
||||||
|
encounter.setRegistrarId(SecurityUtils.getLoginUser().getPractitionerId()); // 登记员
|
||||||
|
iEncounterService.saveOrUpdate(encounter);
|
||||||
|
|
||||||
|
// 更新病区信息
|
||||||
|
EncounterLocation encounterLocation = iEncounterLocationService.getOne(
|
||||||
|
new LambdaQueryWrapper<EncounterLocation>()
|
||||||
|
.eq(EncounterLocation::getEncounterId, encounterId)
|
||||||
|
.eq(EncounterLocation::getFormEnum, LocationForm.WARD.getValue()));
|
||||||
|
if (inHospitalInfoDto.getWardLocationId() != null) {
|
||||||
|
EncounterLocation encounterLocationReg = new EncounterLocation();
|
||||||
|
if (encounterLocation != null) {
|
||||||
|
encounterLocationReg.setId(encounterLocation.getId());
|
||||||
|
}
|
||||||
|
encounterLocationReg.setEncounterId(encounterId);
|
||||||
|
encounterLocationReg.setLocationId(inHospitalInfoDto.getWardLocationId());
|
||||||
|
encounterLocationReg.setFormEnum(LocationForm.WARD.getValue());
|
||||||
|
iEncounterLocationService.saveOrUpdate(encounterLocationReg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新费用性质(contractNo)对应的账户信息
|
||||||
|
if (inHospitalInfoDto.getContractNo() != null) {
|
||||||
|
boolean selfFunded = CommonConstants.BusinessName.DEFAULT_CONTRACT_NO.equals(inHospitalInfoDto.getContractNo());
|
||||||
|
|
||||||
|
// 查找自费账户(type_code='04')
|
||||||
|
Account cashAccount = iAccountService.getOne(
|
||||||
|
new LambdaQueryWrapper<Account>()
|
||||||
|
.eq(Account::getEncounterId, encounterId)
|
||||||
|
.eq(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode()));
|
||||||
|
|
||||||
|
// 查找非自费账户
|
||||||
|
Account contractAccount = iAccountService.getOne(
|
||||||
|
new LambdaQueryWrapper<Account>()
|
||||||
|
.eq(Account::getEncounterId, encounterId)
|
||||||
|
.ne(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode()));
|
||||||
|
|
||||||
|
if (selfFunded) {
|
||||||
|
// 改为自费
|
||||||
|
if (cashAccount != null) {
|
||||||
|
cashAccount.setContractNo(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO);
|
||||||
|
cashAccount.setEncounterFlag(Whether.YES.getValue());
|
||||||
|
iAccountService.saveOrUpdate(cashAccount);
|
||||||
|
} else {
|
||||||
|
// 不存在自费账户时,创建一个
|
||||||
|
Account newCashAccount = new Account();
|
||||||
|
newCashAccount.setTypeCode(AccountType.PERSONAL_CASH_ACCOUNT.getCode());
|
||||||
|
newCashAccount.setPatientId(encounter.getPatientId());
|
||||||
|
newCashAccount.setEncounterId(encounterId);
|
||||||
|
newCashAccount.setContractNo(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO);
|
||||||
|
newCashAccount.setEncounterFlag(Whether.YES.getValue());
|
||||||
|
newCashAccount.setBalanceAmount(BigDecimal.ZERO);
|
||||||
|
iAccountService.save(newCashAccount);
|
||||||
|
}
|
||||||
|
// 删除非自费账户
|
||||||
|
if (contractAccount != null) {
|
||||||
|
iAccountService.removeById(contractAccount.getId());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 改为非自费
|
||||||
|
if (cashAccount != null) {
|
||||||
|
cashAccount.setEncounterFlag(Whether.NO.getValue());
|
||||||
|
iAccountService.saveOrUpdate(cashAccount);
|
||||||
|
} else {
|
||||||
|
// 不存在自费账户时,创建一个
|
||||||
|
Account newCashAccount = new Account();
|
||||||
|
newCashAccount.setTypeCode(AccountType.PERSONAL_CASH_ACCOUNT.getCode());
|
||||||
|
newCashAccount.setPatientId(encounter.getPatientId());
|
||||||
|
newCashAccount.setEncounterId(encounterId);
|
||||||
|
newCashAccount.setContractNo(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO);
|
||||||
|
newCashAccount.setEncounterFlag(Whether.NO.getValue());
|
||||||
|
newCashAccount.setBalanceAmount(BigDecimal.ZERO);
|
||||||
|
iAccountService.save(newCashAccount);
|
||||||
|
}
|
||||||
|
// 更新或创建非自费账户
|
||||||
|
String typeCode = StringUtils.isNotEmpty(inHospitalInfoDto.getTypeCoce())
|
||||||
|
? inHospitalInfoDto.getTypeCoce()
|
||||||
|
: AccountType.PERSONAL_CASH_ACCOUNT.getCode();
|
||||||
|
if (contractAccount != null) {
|
||||||
|
contractAccount.setContractNo(inHospitalInfoDto.getContractNo());
|
||||||
|
iAccountService.saveOrUpdate(contractAccount);
|
||||||
|
} else {
|
||||||
|
Account newAccount = new Account();
|
||||||
|
newAccount.setTypeCode(typeCode);
|
||||||
|
newAccount.setPatientId(encounter.getPatientId());
|
||||||
|
newAccount.setEncounterId(encounterId);
|
||||||
|
newAccount.setContractNo(inHospitalInfoDto.getContractNo());
|
||||||
|
newAccount.setEncounterFlag(Whether.YES.getValue());
|
||||||
|
iAccountService.save(newAccount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"住院登记"}));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作废住院登记
|
||||||
|
*
|
||||||
|
* @param encounterId 住院就诊id
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public R<?> voidRegistration(Long encounterId) {
|
||||||
|
if (encounterId == null) {
|
||||||
|
throw new ServiceException("就诊ID不能为空");
|
||||||
|
}
|
||||||
|
Encounter encounter = iEncounterService.getById(encounterId);
|
||||||
|
if (encounter == null) {
|
||||||
|
throw new ServiceException("未找到该住院登记记录");
|
||||||
|
}
|
||||||
|
// 仅"待入科"状态可作废
|
||||||
|
if (!EncounterZyStatus.REGISTERED.getValue().equals(encounter.getStatusEnum())) {
|
||||||
|
throw new ServiceException("该患者已入科,请先通知护士站办理退科处理!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查预交金余额
|
||||||
|
Account cashAccount = iAccountService.getOne(
|
||||||
|
new LambdaQueryWrapper<Account>()
|
||||||
|
.eq(Account::getEncounterId, encounterId)
|
||||||
|
.eq(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode()));
|
||||||
|
if (cashAccount != null && cashAccount.getBalanceAmount() != null
|
||||||
|
&& cashAccount.getBalanceAmount().compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
throw new ServiceException("该患者存在未退清的预交金,请先前往预交金页面办理退款!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否已产生计费
|
||||||
|
long chargeCount = iChargeItemService.count(
|
||||||
|
new LambdaQueryWrapper<ChargeItem>()
|
||||||
|
.eq(ChargeItem::getEncounterId, encounterId));
|
||||||
|
if (chargeCount > 0) {
|
||||||
|
throw new ServiceException("该患者已产生计费记录,无法作废登记!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置状态为已作废
|
||||||
|
encounter.setStatusEnum(EncounterZyStatus.VOIDED.getValue());
|
||||||
|
encounter.setRegistrarId(SecurityUtils.getLoginUser().getPractitionerId()); // 作废操作人
|
||||||
|
iEncounterService.saveOrUpdate(encounter);
|
||||||
|
|
||||||
|
// 清理账户记录
|
||||||
|
if (cashAccount != null) {
|
||||||
|
iAccountService.removeById(cashAccount.getId());
|
||||||
|
}
|
||||||
|
// 清理非自费账户
|
||||||
|
iAccountService.remove(
|
||||||
|
new LambdaQueryWrapper<Account>()
|
||||||
|
.eq(Account::getEncounterId, encounterId)
|
||||||
|
.ne(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode()));
|
||||||
|
|
||||||
|
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"作废操作"}));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理入院登记信息
|
* 处理入院登记信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -142,4 +142,26 @@ public class InHospitalRegisterController {
|
|||||||
return R.ok(iInHospitalRegisterAppService.getWardList(orgId));
|
return R.ok(iInHospitalRegisterAppService.getWardList(orgId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改住院登记信息
|
||||||
|
*
|
||||||
|
* @param inHospitalInfoDto 登记dto
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PutMapping(value = "/update-registration")
|
||||||
|
public R<?> updateRegistration(@RequestBody InHospitalInfoDto inHospitalInfoDto) {
|
||||||
|
return iInHospitalRegisterAppService.updateRegistration(inHospitalInfoDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作废住院登记
|
||||||
|
*
|
||||||
|
* @param encounterId 住院就诊id
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PutMapping(value = "/void-registration")
|
||||||
|
public R<?> voidRegistration(@RequestParam(value = "encounterId") Long encounterId) {
|
||||||
|
return iInHospitalRegisterAppService.voidRegistration(encounterId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,4 +95,9 @@ public class InHospitalRegisterQueryDto {
|
|||||||
private String admitSourceCode;
|
private String admitSourceCode;
|
||||||
private String admitSourceCode_dictText;
|
private String admitSourceCode_dictText;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 住院状态
|
||||||
|
*/
|
||||||
|
private Integer statusEnum;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,6 +155,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
|
|||||||
|
|
||||||
// 发药状态
|
// 发药状态
|
||||||
List<DispenseStatusOption> dispenseStatusOptions = new ArrayList<>();
|
List<DispenseStatusOption> dispenseStatusOptions = new ArrayList<>();
|
||||||
|
dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.SUBMITTED.getValue(),
|
||||||
|
DispenseStatus.SUBMITTED.getInfo()));
|
||||||
dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.IN_PROGRESS.getValue(),
|
dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.IN_PROGRESS.getValue(),
|
||||||
DispenseStatus.IN_PROGRESS.getInfo()));
|
DispenseStatus.IN_PROGRESS.getInfo()));
|
||||||
dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.COMPLETED.getValue(),
|
dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.COMPLETED.getValue(),
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
ihri.ward_name,
|
ihri.ward_name,
|
||||||
ihri.contract_no,
|
ihri.contract_no,
|
||||||
ihri.bus_no,
|
ihri.bus_no,
|
||||||
ihri.admit_source_code
|
ihri.admit_source_code,
|
||||||
|
ihri.status_enum
|
||||||
from (SELECT ae.tenant_id,
|
from (SELECT ae.tenant_id,
|
||||||
ae.ID AS encounter_id,
|
ae.ID AS encounter_id,
|
||||||
ae.amb_encounter_id AS amb_encounter_id,
|
ae.amb_encounter_id AS amb_encounter_id,
|
||||||
@@ -32,7 +33,8 @@
|
|||||||
al.NAME AS ward_name,
|
al.NAME AS ward_name,
|
||||||
aa.contract_no,
|
aa.contract_no,
|
||||||
ae.bus_no,
|
ae.bus_no,
|
||||||
ae.admit_source_code
|
ae.admit_source_code,
|
||||||
|
ae.status_enum
|
||||||
FROM adm_encounter AS ae
|
FROM adm_encounter AS ae
|
||||||
LEFT JOIN adm_encounter AS ambae ON ae.amb_encounter_id = ambae.
|
LEFT JOIN adm_encounter AS ambae ON ae.amb_encounter_id = ambae.
|
||||||
ID
|
ID
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ public enum EncounterZyStatus implements HisEnumInterface {
|
|||||||
|
|
||||||
PENDING_TRANSFER(6, "pending-transfer", "待转科"),
|
PENDING_TRANSFER(6, "pending-transfer", "待转科"),
|
||||||
|
|
||||||
ALREADY_SETTLED(7, "already-settled", "已结算出院");
|
ALREADY_SETTLED(7, "already-settled", "已结算出院"),
|
||||||
|
|
||||||
|
VOIDED(8, "voided", "已作废");
|
||||||
|
|
||||||
@EnumValue
|
@EnumValue
|
||||||
private final Integer value;
|
private final Integer value;
|
||||||
|
|||||||
@@ -18,17 +18,13 @@
|
|||||||
查询
|
查询
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-space>
|
</el-space>
|
||||||
<el-space>
|
|
||||||
<!-- <el-button>读卡</el-button> -->
|
|
||||||
<!-- <el-button type="primary">无档登记</el-button> -->
|
|
||||||
</el-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<vxe-table
|
<vxe-table
|
||||||
:data="treatHospitalizedData"
|
:data="treatHospitalizedData"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
height="100%"
|
height="100%"
|
||||||
show-overflow
|
show-overflow="title"
|
||||||
>
|
>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
type="seq"
|
type="seq"
|
||||||
@@ -104,20 +100,68 @@
|
|||||||
align="center"
|
align="center"
|
||||||
title="登记员"
|
title="登记员"
|
||||||
/>
|
/>
|
||||||
|
<vxe-column
|
||||||
|
align="center"
|
||||||
|
title="登记状态"
|
||||||
|
width="100"
|
||||||
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<span :style="{ color: scope.row.statusEnum == 8 ? '#F56C6C' : '#67C23A' }">
|
||||||
|
{{ scope.row.statusEnum == 8 ? '已作废' : '已登记' }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
fixed="right"
|
fixed="right"
|
||||||
align="center"
|
align="center"
|
||||||
title="操作"
|
title="操作"
|
||||||
width="88"
|
width="280"
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
text
|
text
|
||||||
@click="doEdit(scope.row)"
|
@click="doView(scope.row)"
|
||||||
>
|
>
|
||||||
查看
|
查看
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-tooltip
|
||||||
|
v-if="scope.row.statusEnum == 5"
|
||||||
|
content="患者已入科接收,无法修改登记信息"
|
||||||
|
placement="top"
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
disabled
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-button
|
||||||
|
v-else-if="scope.row.statusEnum == 8"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
disabled
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-else
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
@click="doModify(scope.row)"
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
text
|
||||||
|
:disabled="scope.row.statusEnum == 5 || scope.row.statusEnum == 8"
|
||||||
|
@click="doVoid(scope.row)"
|
||||||
|
>
|
||||||
|
作废
|
||||||
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
@@ -134,35 +178,32 @@
|
|||||||
v-model:dialog-visible="patientRegisterVisible"
|
v-model:dialog-visible="patientRegisterVisible"
|
||||||
:patient-info="patient"
|
:patient-info="patient"
|
||||||
:in-hospital-info="inHospitalInfo"
|
:in-hospital-info="inHospitalInfo"
|
||||||
title="登记"
|
:title="dialogTitle"
|
||||||
:registration-type="registrationType"
|
:registration-type="registrationType"
|
||||||
:already-edit="alreadyEdit"
|
:already-edit="alreadyEdit"
|
||||||
:no-file="noFile"
|
:no-file="noFile"
|
||||||
:is-registered="true"
|
:is-registered="!isEditMode"
|
||||||
|
:is-edit-mode="isEditMode"
|
||||||
@ok-act="patientRegisterOK"
|
@ok-act="patientRegisterOK"
|
||||||
@cancel-act="cancelAct"
|
@cancel-act="cancelAct"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import PatientRegister from './patientRegister.vue';
|
import PatientRegister from './patientRegister.vue';
|
||||||
import {getAdmissionPage, getContractList, getInHospitalInfo, getPatientBasicInfo} from './api';
|
import {ElMessage, ElMessageBox} from 'element-plus';
|
||||||
|
import {getAdmissionPage, getContractList, getInHospitalInfo, getPatientBasicInfo, voidRegistration} from './api';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { admit_source_code } = proxy.useDict('admit_source_code');
|
const { admit_source_code } = proxy.useDict('admit_source_code');
|
||||||
//const { proxy } = getCurrentInstance();
|
|
||||||
const emits = defineEmits([]);
|
const emits = defineEmits([]);
|
||||||
// const props = defineProps({});
|
|
||||||
const searchForm = reactive({
|
|
||||||
searchType: 'name',
|
|
||||||
searchKey: '',
|
|
||||||
});
|
|
||||||
const total = ref();
|
const total = ref();
|
||||||
const inHospitalInfo = ref({});
|
const inHospitalInfo = ref({});
|
||||||
const alreadyEdit = ref(true);
|
const alreadyEdit = ref(true);
|
||||||
|
const isEditMode = ref(false);
|
||||||
|
const dialogTitle = ref('登记');
|
||||||
const queryParams = ref({
|
const queryParams = ref({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
searchKey: undefined,
|
|
||||||
registeredFlag: '1',
|
registeredFlag: '1',
|
||||||
searchKey: '',
|
searchKey: '',
|
||||||
});
|
});
|
||||||
@@ -173,22 +214,58 @@ const noFile = ref(false);
|
|||||||
const registrationType = ref(true);
|
const registrationType = ref(true);
|
||||||
const patient = ref({});
|
const patient = ref({});
|
||||||
const priceTypeList = ref({});
|
const priceTypeList = ref({});
|
||||||
const doEdit = (row) => {
|
const doView = async (row) => {
|
||||||
getPatientBasicInfo(row.patientId).then((res) => {
|
isEditMode.value = false;
|
||||||
patient.value = res.data;
|
dialogTitle.value = '查看';
|
||||||
});
|
const [patientRes, hospitalRes] = await Promise.all([
|
||||||
getInHospitalInfo(row.encounterId).then((res) => {
|
getPatientBasicInfo(row.patientId),
|
||||||
inHospitalInfo.value = res.data;
|
getInHospitalInfo(row.encounterId),
|
||||||
patientRegisterVisible.value = true;
|
]);
|
||||||
noFile.value = false;
|
patient.value = patientRes.data;
|
||||||
});
|
inHospitalInfo.value = hospitalRes.data;
|
||||||
|
patientRegisterVisible.value = true;
|
||||||
|
noFile.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
const doModify = async (row) => {
|
||||||
|
isEditMode.value = true;
|
||||||
|
dialogTitle.value = '修改登记';
|
||||||
|
const [patientRes, hospitalRes] = await Promise.all([
|
||||||
|
getPatientBasicInfo(row.patientId),
|
||||||
|
getInHospitalInfo(row.encounterId),
|
||||||
|
]);
|
||||||
|
patient.value = patientRes.data;
|
||||||
|
inHospitalInfo.value = hospitalRes.data;
|
||||||
|
patientRegisterVisible.value = true;
|
||||||
|
noFile.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
const doVoid = (row) => {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'确认作废该患者的住院登记信息吗?作废后不可撤销',
|
||||||
|
'作废确认',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确认',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(() => {
|
||||||
|
voidRegistration(row.encounterId).then((res) => {
|
||||||
|
if (res.code == 200) {
|
||||||
|
ElMessage.success('作废成功');
|
||||||
|
getList();
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg || '作废失败');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
};
|
};
|
||||||
onBeforeMount(() => {});
|
|
||||||
getContract();
|
getContract();
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
const activeName = ref('first');
|
|
||||||
|
|
||||||
const patientRegisterOK = () => {
|
const patientRegisterOK = () => {
|
||||||
patientRegisterVisible.value = false;
|
patientRegisterVisible.value = false;
|
||||||
@@ -211,7 +288,6 @@ function resetQuery() {
|
|||||||
queryParams.value = {
|
queryParams.value = {
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
searchKey: undefined,
|
|
||||||
registeredFlag: '1',
|
registeredFlag: '1',
|
||||||
searchKey: '',
|
searchKey: '',
|
||||||
};
|
};
|
||||||
@@ -262,7 +338,6 @@ const getList = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
treatHospitalizedData.value = dataList;
|
treatHospitalizedData.value = dataList;
|
||||||
// treatHospitalizedData.value = res.data.records;
|
|
||||||
total.value = res.data.total;
|
total.value = res.data.total;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -132,6 +132,23 @@ export function registerInHospital(data) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 修改住院登记
|
||||||
|
export function updateRegistration(data) {
|
||||||
|
return request({
|
||||||
|
url: '/inhospital-charge/register/update-registration',
|
||||||
|
method: 'put',
|
||||||
|
data: data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 作废住院登记
|
||||||
|
export function voidRegistration(encounterId) {
|
||||||
|
return request({
|
||||||
|
url: `/inhospital-charge/register/void-registration?encounterId=${encounterId}`,
|
||||||
|
method: 'put',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 无档登记
|
// 无档登记
|
||||||
export function noFilesRegister(data) {
|
export function noFilesRegister(data) {
|
||||||
return request({
|
return request({
|
||||||
|
|||||||
@@ -39,7 +39,10 @@
|
|||||||
/>
|
/>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="advance-container">
|
<div
|
||||||
|
v-if="!props.isEditMode"
|
||||||
|
class="advance-container"
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
v-if="currentFeeType !== 'hipCash'"
|
v-if="currentFeeType !== 'hipCash'"
|
||||||
class="payment-item"
|
class="payment-item"
|
||||||
@@ -110,13 +113,21 @@
|
|||||||
取消
|
取消
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="!props.isRegistered"
|
v-if="!props.isRegistered && !props.isEditMode"
|
||||||
size="fixed"
|
size="fixed"
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="handleSubmit"
|
@click="handleSubmit"
|
||||||
>
|
>
|
||||||
登记
|
登记
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="props.isEditMode"
|
||||||
|
size="fixed"
|
||||||
|
type="primary"
|
||||||
|
@click="handleEditSubmit"
|
||||||
|
>
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -125,7 +136,7 @@ const { proxy } = getCurrentInstance();
|
|||||||
import {ElMessage, ElMessageBox} from 'element-plus';
|
import {ElMessage, ElMessageBox} from 'element-plus';
|
||||||
import PatientInfoComp from './patientInfo.vue';
|
import PatientInfoComp from './patientInfo.vue';
|
||||||
import RegisterForm from './registerForm.vue';
|
import RegisterForm from './registerForm.vue';
|
||||||
import {noFilesRegister, registerInHospital} from './api';
|
import {noFilesRegister, registerInHospital, updateRegistration} from './api';
|
||||||
import {getInit} from '@/views/doctorstation/components/api';
|
import {getInit} from '@/views/doctorstation/components/api';
|
||||||
import {useRouter} from 'vue-router';
|
import {useRouter} from 'vue-router';
|
||||||
import {wxPay, WxPayResult} from '../../../../charge/cliniccharge/components/api';
|
import {wxPay, WxPayResult} from '../../../../charge/cliniccharge/components/api';
|
||||||
@@ -161,6 +172,10 @@ const props = defineProps({
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false, // false 表示待登记,true 表示已登记
|
default: false, // false 表示待登记,true 表示已登记
|
||||||
},
|
},
|
||||||
|
isEditMode: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false, // true 表示修改已登记的记录
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
@@ -283,6 +298,7 @@ const handleSubmit = () => {
|
|||||||
ElMessage.success(res.msg);
|
ElMessage.success(res.msg);
|
||||||
// 打印预交金收据
|
// 打印预交金收据
|
||||||
printDepositReceipt(props.patientInfo, params.inHospitalInfo);
|
printDepositReceipt(props.patientInfo, params.inHospitalInfo);
|
||||||
|
emits('okAct');
|
||||||
cancelAct();
|
cancelAct();
|
||||||
// 询问是否需要医保登记
|
// 询问是否需要医保登记
|
||||||
// ElMessageBox.confirm('是否需要进行医保登记?', '医保登记确认', {
|
// ElMessageBox.confirm('是否需要进行医保登记?', '医保登记确认', {
|
||||||
@@ -392,19 +408,25 @@ const handleSubmit = () => {
|
|||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log('路由跳转成功');
|
console.log('路由跳转成功');
|
||||||
|
emits('okAct');
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('路由跳转失败:', error);
|
console.error('路由跳转失败:', error);
|
||||||
ElMessage.error('跳转到医保登记页面失败');
|
ElMessage.error('跳转到医保登记页面失败');
|
||||||
|
emits('okAct');
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('跳转异常:', error);
|
console.error('跳转异常:', error);
|
||||||
|
emits('okAct');
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
// 用户取消医保登记,关闭当前弹窗
|
// 用户取消医保登记,关闭当前弹窗
|
||||||
emits('okAct');
|
emits('okAct');
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
// 自费患者,直接通知刷新列表
|
||||||
|
emits('okAct');
|
||||||
}
|
}
|
||||||
cancelAct();
|
cancelAct();
|
||||||
} else {
|
} else {
|
||||||
@@ -430,6 +452,34 @@ const handleSubmit = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 修改登记 */
|
||||||
|
const handleEditSubmit = () => {
|
||||||
|
RegisterFormRef.value.validateData(async () => {
|
||||||
|
const formData = RegisterFormRef.value.submitForm;
|
||||||
|
const params = {
|
||||||
|
encounterId: props.inHospitalInfo.encounterId,
|
||||||
|
patientId: props.patientInfo.patientId,
|
||||||
|
inHospitalOrgId: formData.inHospitalOrgId,
|
||||||
|
wardLocationId: formData.wardLocationId,
|
||||||
|
priorityEnum: formData.priorityEnum,
|
||||||
|
admitSourceCode: formData.admitSourceCode,
|
||||||
|
inWayCode: formData.inWayCode,
|
||||||
|
startTime: formData.startTime,
|
||||||
|
contractNo: formData.contractNo,
|
||||||
|
typeCoce: formData.typeCoce,
|
||||||
|
};
|
||||||
|
updateRegistration(params).then((res) => {
|
||||||
|
if (res.code == 200) {
|
||||||
|
ElMessage.success(res.msg);
|
||||||
|
emits('okAct');
|
||||||
|
cancelAct();
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const openAct = () => {
|
const openAct = () => {
|
||||||
console.log(props.patientInfo, 'patientRegister.vue');
|
console.log(props.patientInfo, 'patientRegister.vue');
|
||||||
console.log(props.inHospitalInfo, 'inHospitalInfo.vue');
|
console.log(props.inHospitalInfo, 'inHospitalInfo.vue');
|
||||||
|
|||||||
@@ -364,7 +364,7 @@ const medicalInsuranceTitle = ref('');
|
|||||||
// });
|
// });
|
||||||
const getProvincesAndCitiesInfo = async () => {
|
const getProvincesAndCitiesInfo = async () => {
|
||||||
try {
|
try {
|
||||||
if (inHospitalInfo.encounterId) {
|
if (props.inHospitalInfo.encounterId) {
|
||||||
const res = await getProvincesAndCities(props.inHospitalInfo.encounterId);
|
const res = await getProvincesAndCities(props.inHospitalInfo.encounterId);
|
||||||
// console.log('获取省市医保字符串', res);
|
// console.log('获取省市医保字符串', res);
|
||||||
if (res && res.code == 200) {
|
if (res && res.code == 200) {
|
||||||
@@ -388,8 +388,7 @@ watch(
|
|||||||
if (newEncounterId) {
|
if (newEncounterId) {
|
||||||
getProvincesAndCitiesInfo();
|
getProvincesAndCitiesInfo();
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
{ immediate: true }
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/* 提交表单 */
|
/* 提交表单 */
|
||||||
@@ -463,8 +462,8 @@ watch(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(async () => {
|
||||||
getInitOptions();
|
await getInitOptions();
|
||||||
setValue();
|
setValue();
|
||||||
setDefaultAdmitSource();
|
setDefaultAdmitSource();
|
||||||
if (submitForm.inHospitalOrgId) {
|
if (submitForm.inHospitalOrgId) {
|
||||||
@@ -505,7 +504,7 @@ function getInitOptions() {
|
|||||||
// 获取所有病区
|
// 获取所有病区
|
||||||
const wardPromise = getPractitionerWard();
|
const wardPromise = getPractitionerWard();
|
||||||
|
|
||||||
Promise.all([orgPromise, wardPromise]).then(([orgRes, wardRes]) => {
|
const initPromise = Promise.all([orgPromise, wardPromise]).then(([orgRes, wardRes]) => {
|
||||||
// 入院科室:展示所有 typeEnum=2(科室) + classEnum含"2"(住院) 的科室
|
// 入院科室:展示所有 typeEnum=2(科室) + classEnum含"2"(住院) 的科室
|
||||||
organization.value = orgRes.data.records.filter(
|
organization.value = orgRes.data.records.filter(
|
||||||
(record) => record.typeEnum === 2 && checkClassEnumValue(record.classEnum, 2)
|
(record) => record.typeEnum === 2 && checkClassEnumValue(record.classEnum, 2)
|
||||||
@@ -529,19 +528,15 @@ function getInitOptions() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// if (!props.noFile) {
|
|
||||||
// wardList().then((res) => {
|
|
||||||
// wardListOptions.value = res.data;
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
diagnosisInit().then((res) => {
|
diagnosisInit().then((res) => {
|
||||||
verificationStatusOptions.value = res.data.verificationStatusOptions;
|
verificationStatusOptions.value = res.data.verificationStatusOptions;
|
||||||
});
|
});
|
||||||
getContractList().then((response) => {
|
getContractList().then((response) => {
|
||||||
contractList.value = response.data;
|
contractList.value = response.data;
|
||||||
setValue();
|
|
||||||
});
|
});
|
||||||
getDiagnosisInfo(undefined);
|
getDiagnosisInfo(undefined);
|
||||||
|
|
||||||
|
return initPromise;
|
||||||
}
|
}
|
||||||
function getDiagnosisInfo(value) {
|
function getDiagnosisInfo(value) {
|
||||||
getDiagnosisDefinitionList({ pageSize: 500, pageNo: 1, searchKey: value }).then((res) => {
|
getDiagnosisDefinitionList({ pageSize: 500, pageNo: 1, searchKey: value }).then((res) => {
|
||||||
@@ -550,6 +545,7 @@ function getDiagnosisInfo(value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleNodeClick(orgInfo) {
|
function handleNodeClick(orgInfo) {
|
||||||
|
const savedWardId = props.inHospitalInfo?.wardLocationId; // 保存原始病区ID,用于编辑模式恢复
|
||||||
submitForm.wardLocationId = undefined; // 切换科室时,先清空原有病区
|
submitForm.wardLocationId = undefined; // 切换科室时,先清空原有病区
|
||||||
submitForm.totalBedsNum = undefined;
|
submitForm.totalBedsNum = undefined;
|
||||||
submitForm.idleBedsNum = undefined;
|
submitForm.idleBedsNum = undefined;
|
||||||
@@ -558,13 +554,20 @@ function handleNodeClick(orgInfo) {
|
|||||||
wardList({ orgId: orgInfo.id })
|
wardList({ orgId: orgInfo.id })
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
wardListOptions.value = res.data || [];
|
wardListOptions.value = res.data || [];
|
||||||
if (wardListOptions.value.length > 0 && !props.inHospitalInfo.wardLocationId) {
|
if (wardListOptions.value.length > 0) {
|
||||||
submitForm.wardLocationId = wardListOptions.value[0].id;
|
// 编辑模式:尝试恢复之前保存的病区
|
||||||
const defaultWard = wardListOptions.value.find(
|
if (savedWardId) {
|
||||||
(item) => item.id === submitForm.wardLocationId
|
const savedWard = wardListOptions.value.find((item) => String(item.id) === String(savedWardId));
|
||||||
);
|
if (savedWard) {
|
||||||
if (defaultWard) {
|
submitForm.wardLocationId = savedWardId;
|
||||||
handleWardClick(defaultWard);
|
handleWardClick(savedWard);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 新增模式 或 原病区不在新科室下:自动选中第一个病区
|
||||||
|
if (!submitForm.wardLocationId) {
|
||||||
|
submitForm.wardLocationId = wardListOptions.value[0].id;
|
||||||
|
handleWardClick(wardListOptions.value[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -619,6 +622,19 @@ function setValue() {
|
|||||||
submitForm.inWayCode_dictText = props.inHospitalInfo?.inWayCode_dictText;
|
submitForm.inWayCode_dictText = props.inHospitalInfo?.inWayCode_dictText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 编辑模式下,API 数据异步到达后重新赋值表单字段并加载病区
|
||||||
|
watch(
|
||||||
|
() => props.inHospitalInfo.encounterId,
|
||||||
|
(newEncounterId, oldEncounterId) => {
|
||||||
|
if (newEncounterId && newEncounterId !== oldEncounterId) {
|
||||||
|
setValue();
|
||||||
|
if (submitForm.inHospitalOrgId) {
|
||||||
|
handleNodeClick({ id: submitForm.inHospitalOrgId });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const registerRef = ref();
|
const registerRef = ref();
|
||||||
/* 登记 */
|
/* 登记 */
|
||||||
const validateData = async (callback) => {
|
const validateData = async (callback) => {
|
||||||
|
|||||||
8
node_modules/.vite/deps/_metadata.json
generated
vendored
8
node_modules/.vite/deps/_metadata.json
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"hash": "5905b5e1",
|
|
||||||
"configHash": "4d078017",
|
|
||||||
"lockfileHash": "9e11ee45",
|
|
||||||
"browserHash": "09dcaa6f",
|
|
||||||
"optimized": {},
|
|
||||||
"chunks": {}
|
|
||||||
}
|
|
||||||
3
node_modules/.vite/deps/package.json
generated
vendored
3
node_modules/.vite/deps/package.json
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user