门诊医生站-》开立诊断 页面调整
This commit is contained in:
@@ -49,11 +49,10 @@
|
||||
clearable
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option label="已到达" :value="1" />
|
||||
<el-option label="已分诊" :value="2" />
|
||||
<el-option label="已看诊" :value="3" />
|
||||
<el-option label="已离开" :value="4" />
|
||||
<el-option label="已完成" :value="5" />
|
||||
<el-option label="待就诊" :value="1" />
|
||||
<el-option label="就诊中" :value="2" />
|
||||
<el-option label="已完成" :value="3" />
|
||||
<el-option label="已取消" :value="4" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="医生" prop="doctorName">
|
||||
@@ -182,18 +181,16 @@ function getList() {
|
||||
|
||||
/** 根据状态获取标签类型 */
|
||||
function getStatusTagType(status) {
|
||||
// 状态值对应后端 EncounterSubjectStatus 枚举:1-已到达,2-已分诊,3-已看诊,4-已离开,5-已完成
|
||||
// 假设状态值:1-待就诊,2-就诊中,3-已完成,4-已取消
|
||||
switch (status) {
|
||||
case 1:
|
||||
return 'warning'; // 已到达 - 黄色
|
||||
return 'warning'; // 待就诊 - 黄色
|
||||
case 2:
|
||||
return 'primary'; // 已分诊 - 蓝色
|
||||
return 'primary'; // 就诊中 - 蓝色
|
||||
case 3:
|
||||
return 'success'; // 已看诊 - 绿色
|
||||
case 4:
|
||||
return 'info'; // 已离开 - 灰色
|
||||
case 5:
|
||||
return 'success'; // 已完成 - 绿色
|
||||
case 4:
|
||||
return 'info'; // 已取消 - 灰色
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 患者添加/修改/查看对话框组件 -->
|
||||
<!-- 患者添加对话框组件 -->
|
||||
<patient-add-dialog ref="patientAddRef" @submit="handlePatientAdded" />
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" class="query-form">
|
||||
<el-form-item label="病人名称" prop="searchKey">
|
||||
@@ -111,21 +111,266 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 添加或修改对话框 -->
|
||||
<el-dialog :title="title" v-model="open" width="1000px" append-to-body>
|
||||
<el-form ref="patientRef" :model="form" :rules="rules" label-width="90px" size="medium">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="form.name" clearable :disabled="isViewMode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="民族" prop="nationalityCode">
|
||||
<el-select v-model="form.nationalityCode" filterable clearable :disabled="isViewMode">
|
||||
<el-option
|
||||
v-for="item in nationality_code"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="性别" prop="genderEnum">
|
||||
<el-radio-group v-model="form.genderEnum" :disabled="isViewMode" size="small">
|
||||
<el-radio
|
||||
v-for="item in administrativegenderList"
|
||||
:key="item.value"
|
||||
:label="item.value"
|
||||
>
|
||||
{{ item.info }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="7">
|
||||
<el-form-item label="活动标识" prop="activeFlag">
|
||||
<el-radio-group v-model="form.activeFlag" :disabled="isViewMode">
|
||||
<el-radio v-for="item in tempFlagList" :key="item.value" :label="item.value">
|
||||
{{ item.info }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="证件类别" prop="typeCode">
|
||||
<el-select
|
||||
v-model="form.patientIdInfoList[0].typeCode"
|
||||
placeholder="证件类别"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in sys_idtype"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="证件号码" prop="idCard">
|
||||
<el-input
|
||||
v-model="form.idCard"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
placeholder="请输入18位身份证号"
|
||||
maxlength="18"
|
||||
show-word-limit
|
||||
@blur="handleIdCardBlur"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="生日" prop="birthDate" v-show="false">
|
||||
<el-input v-model="form.birthDate" v-show="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input
|
||||
v-model="form.age"
|
||||
:disabled="isViewMode"
|
||||
@input="(value) => (form.age = value.replace(/[^0-9]/g, ''))"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- <el-col :span="6">
|
||||
<el-form-item label="国家编码" prop="countryCode">
|
||||
<el-input v-model="form.countryCode" clearable :disabled="isViewMode" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="联系方式" prop="phone">
|
||||
<el-input v-model="form.phone" clearable :disabled="isViewMode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="职业" prop="prfsEnum">
|
||||
<el-select
|
||||
v-model="form.prfsEnum"
|
||||
placeholder="职业"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in occupationtypeList"
|
||||
:key="item.value"
|
||||
:label="item.info"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="工作单位" prop="workCompany">
|
||||
<el-input v-model="form.workCompany" clearable :disabled="isViewMode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="联系人" prop="linkName">
|
||||
<el-input v-model="form.linkName" clearable :disabled="isViewMode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="联系人关系" prop="linkRelationCode">
|
||||
<el-select
|
||||
v-model="form.linkRelationCode"
|
||||
placeholder="联系人关系"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in familyrelationshiptypeList"
|
||||
:key="item.value"
|
||||
:label="item.info"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="联系人电话" prop="linkRelationCode">
|
||||
<el-input v-model="form.linkTelcom" clearable :disabled="isViewMode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="血型ABO" prop="bloodAbo">
|
||||
<el-select
|
||||
v-model="form.bloodAbo"
|
||||
placeholder="血型ABO"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in bloodtypeaboList"
|
||||
:key="item.value"
|
||||
:label="item.info"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="血型RH" prop="bloodRh">
|
||||
<el-select
|
||||
v-model="form.bloodRh"
|
||||
placeholder="血型RH"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in bloodtypearhList"
|
||||
:key="item.value"
|
||||
:label="item.info"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="地址选择" prop="addressSelect">
|
||||
<el-cascader
|
||||
:options="options"
|
||||
:props="{ checkStrictly: true, value: 'code', label: 'name' }"
|
||||
v-model="selectedOptions"
|
||||
@change="handleChange"
|
||||
:disabled="isViewMode"
|
||||
size="small"
|
||||
>
|
||||
<template #default="{ node, data }">
|
||||
<span>{{ data.name }}</span>
|
||||
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
|
||||
</template>
|
||||
</el-cascader>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="详细地址" prop="address">
|
||||
<el-input v-model="form.address" clearable :disabled="isViewMode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="婚姻状态" prop="maritalStatusEnum">
|
||||
<el-select
|
||||
v-model="form.maritalStatusEnum"
|
||||
placeholder="婚姻状态"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in maritalstatusList"
|
||||
:key="item.value"
|
||||
:label="item.info"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="死亡时间" prop="deceasedDate">
|
||||
<el-date-picker
|
||||
v-model="form.deceasedDate"
|
||||
type="datetime"
|
||||
placeholder="时间"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
:disabled="isViewMode"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
size="small"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="patientManagement">
|
||||
import pcas from 'china-division/dist/pcas-code.json';
|
||||
import {nextTick, ref} from 'vue';
|
||||
import {useRoute} from 'vue-router';
|
||||
import {useRouter} from 'vue-router';
|
||||
import {addPatient, listPatient, lists, updatePatient} from './component/api';
|
||||
import PatientAddDialog from '@/views/charge/outpatientregistration/components/patientAddDialog';
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
const showSearch = ref(true);
|
||||
const open = ref(false);
|
||||
const title = ref('');
|
||||
@@ -183,9 +428,7 @@ const data = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
searchKey: undefined,
|
||||
name: undefined,
|
||||
patientId: undefined, // 新增: 专门用于数据库ID查询
|
||||
searchType: 'name' // 新增: 查询类型, 'name'按姓名查询, 'patientId'按病人ID查询
|
||||
name: undefined
|
||||
},
|
||||
rules: {
|
||||
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
@@ -249,25 +492,13 @@ const findNodeByCode = (data, code) => {
|
||||
return null;
|
||||
};
|
||||
|
||||
/** 查询患者列表 - 基础查询方法,用于初始化等操作 */
|
||||
/** 查询患者列表 */
|
||||
function getList() {
|
||||
// 执行查询
|
||||
listPatient(queryParams.value).then((response) => {
|
||||
patientList.value = response.data.records;
|
||||
total.value = response.data.total;
|
||||
console.log('patientList======>', JSON.stringify(patientList.value));
|
||||
});
|
||||
|
||||
// 初始化字典数据(仅在第一次加载时执行)
|
||||
if (!listsFlag.value) {
|
||||
getInitDictData();
|
||||
listsFlag.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化字典数据 - 分离字典数据加载逻辑 */
|
||||
const listsFlag = ref(false);
|
||||
function getInitDictData() {
|
||||
lists().then((response) => {
|
||||
console.log(response);
|
||||
occupationtypeList.value = response.data.occupationType;
|
||||
@@ -281,86 +512,6 @@ function getInitDictData() {
|
||||
});
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 - 支持按姓名和病人ID两种查询方式 */
|
||||
function handleQuery() {
|
||||
queryParams.value.pageNo = 1;
|
||||
queryParams.value.createTimeSTime =
|
||||
dateRange.value && dateRange.value.length == 2 ? dateRange.value[0] : '';
|
||||
queryParams.value.createTimeETime =
|
||||
dateRange.value && dateRange.value.length == 2 ? dateRange.value[1] : '';
|
||||
|
||||
// 根据查询类型设置查询参数
|
||||
if (queryParams.value.searchType === 'patientId') {
|
||||
// 按病人ID查询(数据库ID) - 直接传递ID参数
|
||||
const queryParamsCopy = {
|
||||
pageNo: queryParams.value.pageNo,
|
||||
pageSize: queryParams.value.pageSize,
|
||||
id: queryParams.value.patientId,
|
||||
searchKey: undefined
|
||||
};
|
||||
console.log('按数据库ID查询参数:', queryParamsCopy);
|
||||
|
||||
// 执行查询
|
||||
listPatient(queryParamsCopy).then((response) => {
|
||||
patientList.value = response.data.records;
|
||||
total.value = response.data.total;
|
||||
console.log('查询结果:', response.data);
|
||||
});
|
||||
} else {
|
||||
// 按姓名/拼音码/病人ID查询(兼容原有逻辑)
|
||||
queryParams.value.id = undefined;
|
||||
|
||||
// 执行查询
|
||||
listPatient(queryParams.value).then((response) => {
|
||||
patientList.value = response.data.records;
|
||||
total.value = response.data.total;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
function resetQuery() {
|
||||
dateRange.value = [];
|
||||
proxy.resetForm('queryRef');
|
||||
queryParams.value.patientId = undefined;
|
||||
queryParams.value.searchType = 'name';
|
||||
queryParams.value.id = undefined;
|
||||
queryParams.value.name = undefined;
|
||||
handleQuery();
|
||||
}
|
||||
|
||||
/** 从门诊挂号页面跳转时的精确查询 - 按数据库ID查询 */
|
||||
function queryByPatientId(patientId) {
|
||||
console.log('收到门诊挂号传递的patientId:', patientId);
|
||||
|
||||
// 直接构造查询参数,避免受到其他条件干扰
|
||||
const exactQueryParams = {
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
id: patientId, // 直接使用ID字段进行精确查询
|
||||
searchKey: undefined
|
||||
};
|
||||
|
||||
console.log('精确查询参数:', exactQueryParams);
|
||||
|
||||
// 执行查询
|
||||
listPatient(exactQueryParams).then((response) => {
|
||||
patientList.value = response.data.records;
|
||||
total.value = response.data.total;
|
||||
console.log('按数据库ID查询结果:', JSON.stringify(patientList.value));
|
||||
console.log('查询到的患者数量:', response.data.records.length);
|
||||
|
||||
// 如果查询成功,清空patientId以免影响后续查询
|
||||
if (response.data.records && response.data.records.length > 0) {
|
||||
console.log('查询成功,找到患者:', response.data.records[0].name);
|
||||
} else {
|
||||
console.warn('未找到匹配的患者,ID:', patientId);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('查询失败:', error);
|
||||
});
|
||||
}
|
||||
|
||||
/** 表单重置 */
|
||||
function reset() {
|
||||
form.value = {
|
||||
@@ -404,17 +555,36 @@ function handlePatientAdded(patientData) {
|
||||
// 患者添加成功后刷新列表
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
function handleQuery() {
|
||||
queryParams.value.pageNo = 1;
|
||||
queryParams.value.createTimeSTime =
|
||||
dateRange.value && dateRange.value.length == 2 ? dateRange.value[0] : '';
|
||||
queryParams.value.createTimeETime =
|
||||
dateRange.value && dateRange.value.length == 2 ? dateRange.value[1] : '';
|
||||
// 执行查询
|
||||
getList();
|
||||
}
|
||||
/** 重置按钮操作 */
|
||||
function resetQuery() {
|
||||
dateRange.value = [];
|
||||
proxy.resetForm('queryRef');
|
||||
handleQuery();
|
||||
}
|
||||
/** 新增按钮操作 */
|
||||
function handleAdd() {
|
||||
patientAddRef.value.show(); // 使用与门诊挂号一致的方式显示新增患者组件
|
||||
}
|
||||
//查看按钮
|
||||
function handleSee(row) {
|
||||
// 使用PatientAddDialog组件显示查看模式
|
||||
patientAddRef.value.show();
|
||||
// 设置为查看模式并填充数据
|
||||
patientAddRef.value.setViewMode(true);
|
||||
patientAddRef.value.setFormData(row);
|
||||
reset();
|
||||
nextTick(() => {
|
||||
isViewMode.value = true;
|
||||
form.value = row;
|
||||
open.value = true;
|
||||
title.value = '查看患者';
|
||||
});
|
||||
}
|
||||
|
||||
// 查看就诊历史
|
||||
@@ -437,11 +607,23 @@ const nationalityDict = (code) => {
|
||||
function handleUpdate(row) {
|
||||
console.log('nationality_code=======>', JSON.stringify(nationality_code.value));
|
||||
|
||||
// 使用PatientAddDialog组件显示修改模式
|
||||
patientAddRef.value.show();
|
||||
// 设置为编辑模式并填充数据
|
||||
patientAddRef.value.setViewMode(false);
|
||||
patientAddRef.value.setFormData(row);
|
||||
reset();
|
||||
nextTick(() => {
|
||||
form.value = JSON.parse(JSON.stringify(row));
|
||||
addressCom.value =
|
||||
row.addressProvince + row.addressCity + row.addressDistrict + row.addressStreet + row.address;
|
||||
const selectedOptions1 = ref([
|
||||
row.addressProvince,
|
||||
row.addressCity,
|
||||
row.addressDistrict,
|
||||
row.addressStreet,
|
||||
]);
|
||||
const codes = convertAddressToCodes(selectedOptions1.value);
|
||||
selectedOptions.value = codes.filter((code) => code !== null);
|
||||
isViewMode.value = false;
|
||||
open.value = true;
|
||||
title.value = '修改菜单';
|
||||
});
|
||||
}
|
||||
const convertAddressToCodes = (selectedOptions1) => {
|
||||
const [provinceName, cityName, areaName, streetName] = selectedOptions1;
|
||||
@@ -722,14 +904,7 @@ function submitForm() {
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 检查是否从门诊挂号页面跳转过来,并携带了patientId参数
|
||||
if (route.query.patientId) {
|
||||
// 使用精确查询方法按数据库ID查询
|
||||
queryByPatientId(route.query.patientId);
|
||||
} else {
|
||||
// 正常加载患者列表
|
||||
getList();
|
||||
}
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user