Files
his/openhis-ui-vue3/src/views/ybmanagement/inhospital/register/index.vue
2025-12-27 15:30:40 +08:00

277 lines
8.0 KiB
Vue

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px">
<el-form-item label="内容" prop="searchKey">
<el-input
v-model="queryParams.searchKey"
style="max-width: 600px"
placeholder="请输入内容"
class="input-with-select"
@keydown.enter="handleQuery"
>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<div class="table-container">
<el-table
:data="treatHospitalizedData"
style="width: 100%"
height="100%"
show-overflow-tooltip
>
<el-table-column type="index" width="54" align="center" label="序号" />
<el-table-column prop="patientName" align="center" label="患者姓名" />
<el-table-column prop="genderEnum_enumText" label="性别" align="center" />
<el-table-column prop="age" label="年龄" align="center" />
<el-table-column prop="requestTime" align="center" label="申请时间" width="180" />
<el-table-column prop="sourceName" align="center" label="申请来源" />
<el-table-column prop="wardName" align="center" label="入院病区" />
<el-table-column prop="statusText" align="center" label="医保登记状态">
<template #default="scope">
<el-tag :type="tagType(scope.row.statusText)">
{{ scope.row.statusText || '--' }}
</el-tag>
</template>
</el-table-column>
<el-table-column
fixed="right"
align="center"
label="操作"
class-name="small-padding fixed-width"
width="600"
>
<template #default="scope">
<el-button type="primary" icon="Edit" link @click="doRegistering(scope.row)">
医保登记
</el-button>
<el-button type="success" icon="Edit" link @click="doYbOut(scope.row)">
医保出院
</el-button>
<el-button type="danger" icon="Edit" link @click="doYbChange(scope.row)">
信息变更
</el-button>
<el-button type="warning" icon="Remove" link @click="doYbInCancel(scope.row)">
入院撤销
</el-button>
<el-button type="warning" icon="Remove" link @click="doYbOutCancel(scope.row)">
出院撤销
</el-button>
<!-- 更多操作下拉菜单 -->
<el-dropdown>
<el-button type="primary" link style="margin-top: 4px; margin-left: 10px">
更多
<el-icon class="el-icon--right"><ArrowDown /></el-icon>
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="doYbUpload(scope.row)">
<el-icon><Upload /></el-icon>
<span>病案上传</span>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import {
getRegisteInfoPage,
getInHospitalInfo,
getInpatientCheckInfo,
cancelInpatientRegister,
cancelDischargeRegister,
uploadEmr,
} from './components/api';
import { ElMessage, ElMessageBox, ElDropdown, ElDropdownMenu, ElDropdownItem } from 'element-plus';
import { ArrowDown, Close, Upload } from '@element-plus/icons-vue';
const total = ref(0);
const queryParams = ref({
pageNo: 1,
pageSize: 10,
searchKey: '',
});
// 医保状态标签
const registerStatusTags = [
{
value: '1',
label: '待登记',
type: 'primary',
},
{
value: '2',
label: '已登记',
type: 'success',
},
{
value: '3',
label: '待退费',
type: 'danger',
},
];
// 标签类型
const tagType = (value) => {
return registerStatusTags.find((item) => item.value === value)?.type;
};
// 列表数据
const treatHospitalizedData = ref([]);
const queryRef = ref(null);
// 就诊信息
const mdtrtinfo = ref({});
// 诊断信息
const mdtrtdiag = ref([]);
const router = useRouter();
// 医保登记
const doRegistering = async (row) => {
// 跳转
router.push({
name: 'YbregisterEdit',
query: {
encounterId: row.encounterId,
operationType: 'register', // 添加操作类型参数,标识这是医保登记操作
},
});
};
// 医保出院
const doYbOut = async (row) => {
router.push({
name: 'YbregisterEdit',
query: {
encounterId: row.encounterId,
operationType: 'discharge', // 添加操作类型参数,标识是医保出院
mdtrtId: row.mdtrtId,
},
});
};
// 医保信息变更
const doYbChange = (row) => {
router.push({
name: 'YbregisterEdit',
query: {
encounterId: row.encounterId,
operationType: 'change', // 添加操作类型参数,标识是信息变更
mdtrtId: row.mdtrtId,
},
});
};
// 医保入院撤销
const doYbInCancel = async (row) => {
try {
// 添加确认弹窗
await ElMessageBox.confirm('确定要撤销该入院登记吗?此操作不可恢复!', '入院撤销', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
});
// 用户确认后执行撤销操作 传就诊ID
const res = await cancelInpatientRegister({ mdtrtId: row.mdtrtId });
if (res && res.code === 200) {
ElMessage.success('入院撤销成功');
getList();
} else {
ElMessage.error(res?.message || '入院撤销失败');
}
} catch (error) {
// 用户取消操作或请求失败
if (error === 'cancel' || error === 'close') {
ElMessage.info('已取消操作');
} else {
ElMessage.error('操作失败,请重试');
console.error('入院撤销操作失败:', error);
}
} finally {
loading.close && loading.close();
}
};
// 医保出院撤销
const doYbOutCancel = async (row) => {
try {
// 添加确认弹窗
await ElMessageBox.confirm('确定要撤销该入院登记吗?此操作不可恢复!', '出院撤销', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
});
// 用户确认后执行撤销操作 传就诊ID
const res = await cancelDischargeRegister({ mdtrtId: row.mdtrtId });
if (res && res.code === 200) {
ElMessage.success('出院撤销成功');
getList();
} else {
ElMessage.error(res?.message || '出院撤销失败');
}
} catch (error) {
// 用户取消操作或请求失败
if (error === 'cancel' || error === 'close') {
ElMessage.info('已取消操作');
} else {
ElMessage.error('操作失败,请重试');
console.error('入院撤销操作失败:', error);
}
} finally {
loading.close && loading.close();
}
};
// 病案上传
const doYbUpload = (row) => {
const res = uploadEmr({ mdtrtId: row.mdtrtId });
if (res && res.code === 200) {
ElMessage.success('病案上传成功');
getList();
} else {
ElMessage.error(res?.message || '病案上传失败');
}
};
// 加载中
const loading = ref(false);
// 获取列表
const getList = () => {
loading.value = true;
getRegisteInfoPage(queryParams.value).then((res) => {
console.log(res);
treatHospitalizedData.value = res.data.records;
total.value = res.data.total;
loading.value = false;
});
};
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNo = 1;
getList();
}
// 重置按钮操作
function resetQuery() {
queryParams.value = {
pageNo: 1,
pageSize: 10,
searchKey: '',
};
getList();
}
getList();
</script>