患者档案(现为患者列表)->修改和查看按钮调出窗口与新建患者保持一致
This commit is contained in:
@@ -342,6 +342,7 @@
|
|||||||
<script setup name="PatientAddDialog">
|
<script setup name="PatientAddDialog">
|
||||||
import pcas from 'china-division/dist/pcas-code.json';
|
import pcas from 'china-division/dist/pcas-code.json';
|
||||||
import {addPatient, getOutpatientRegistrationList, patientlLists} from './outpatientregistration';
|
import {addPatient, getOutpatientRegistrationList, patientlLists} from './outpatientregistration';
|
||||||
|
import {updatePatient} from '@/views/patientmanagement/patientmanagement/component/api';
|
||||||
import {getGenderAndAge, isValidCNidCardNumber, isValidCNPhoneNumber,} from '../../../../utils/validate';
|
import {getGenderAndAge, isValidCNidCardNumber, isValidCNPhoneNumber,} from '../../../../utils/validate';
|
||||||
import {ElMessage} from 'element-plus';
|
import {ElMessage} from 'element-plus';
|
||||||
|
|
||||||
@@ -1224,13 +1225,26 @@ function submitForm() {
|
|||||||
}
|
}
|
||||||
form.value.address = getAddress(form);
|
form.value.address = getAddress(form);
|
||||||
|
|
||||||
// 提交新增患者请求
|
// 判断是修改还是新增
|
||||||
addPatient(form.value).then((response) => {
|
if (form.value.busNo != undefined) {
|
||||||
proxy.$modal.msgSuccess('新增成功');
|
// 修改患者
|
||||||
getPatientInfo(response.data.idCard);
|
updatePatient(form.value).then((response) => {
|
||||||
visible.value = false;
|
proxy.$modal.msgSuccess('修改成功');
|
||||||
reset();
|
visible.value = false;
|
||||||
});
|
// 触发提交成功事件,让父组件刷新列表
|
||||||
|
emits('submit', 'update');
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// 新增患者
|
||||||
|
addPatient(form.value).then((response) => {
|
||||||
|
proxy.$modal.msgSuccess('新增成功');
|
||||||
|
getPatientInfo(response.data.idCard);
|
||||||
|
visible.value = false;
|
||||||
|
reset();
|
||||||
|
// 触发提交成功事件,让父组件刷新列表
|
||||||
|
emits('submit', 'add');
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1270,8 +1284,66 @@ const typeChange = () => {
|
|||||||
form.value.genderEnum = info.gender;
|
form.value.genderEnum = info.gender;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
// 设置查看模式
|
||||||
|
function setViewMode(isView) {
|
||||||
|
isViewMode.value = isView;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置表单数据
|
||||||
|
function setFormData(rowData) {
|
||||||
|
// 深拷贝数据以避免引用问题
|
||||||
|
form.value = JSON.parse(JSON.stringify(rowData));
|
||||||
|
|
||||||
|
// 如果有地址信息,设置级联选择器
|
||||||
|
if (rowData.addressProvince || rowData.addressCity || rowData.addressDistrict) {
|
||||||
|
// 构建地址数组
|
||||||
|
const addressParts = [
|
||||||
|
rowData.addressProvince,
|
||||||
|
rowData.addressCity,
|
||||||
|
rowData.addressDistrict,
|
||||||
|
rowData.addressStreet,
|
||||||
|
].filter(part => part); // 过滤空值
|
||||||
|
|
||||||
|
if (addressParts.length > 0) {
|
||||||
|
const codes = convertAddressToCodes(addressParts);
|
||||||
|
selectedOptions.value = codes.filter((code) => code !== null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置患者ID信息 - 如果没有patientIdInfoList则创建一个
|
||||||
|
if (!form.value.patientIdInfoList || form.value.patientIdInfoList.length === 0) {
|
||||||
|
form.value.patientIdInfoList = [
|
||||||
|
{
|
||||||
|
typeCode: '01',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保必要字段有默认值
|
||||||
|
if (!form.value.typeCode) {
|
||||||
|
form.value.typeCode = '01';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置活动标识 - 根据activeFlag设置tempFlag
|
||||||
|
if (form.value.activeFlag) {
|
||||||
|
form.value.tempFlag = form.value.activeFlag === 2 ? '1' : '0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将地址转换为级联选择器所需的代码
|
||||||
|
function convertAddressToCodes(addressParts) {
|
||||||
|
return addressParts.map((part) => {
|
||||||
|
if (!part) return null;
|
||||||
|
// 这里需要根据实际的地址名称找到对应的代码
|
||||||
|
// 由于数据结构的复杂性,这里先返回空值
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
show,
|
show,
|
||||||
|
setViewMode,
|
||||||
|
setFormData,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 患者添加对话框组件 -->
|
<!-- 患者添加/修改/查看对话框组件 -->
|
||||||
<patient-add-dialog ref="patientAddRef" @submit="handlePatientAdded" />
|
<patient-add-dialog ref="patientAddRef" @submit="handlePatientAdded" />
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" class="query-form">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" class="query-form">
|
||||||
<el-form-item label="病人名称" prop="searchKey">
|
<el-form-item label="病人名称" prop="searchKey">
|
||||||
@@ -111,257 +111,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -578,13 +328,11 @@ function handleAdd() {
|
|||||||
}
|
}
|
||||||
//查看按钮
|
//查看按钮
|
||||||
function handleSee(row) {
|
function handleSee(row) {
|
||||||
reset();
|
// 使用PatientAddDialog组件显示查看模式
|
||||||
nextTick(() => {
|
patientAddRef.value.show();
|
||||||
isViewMode.value = true;
|
// 设置为查看模式并填充数据
|
||||||
form.value = row;
|
patientAddRef.value.setViewMode(true);
|
||||||
open.value = true;
|
patientAddRef.value.setFormData(row);
|
||||||
title.value = '查看患者';
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查看就诊历史
|
// 查看就诊历史
|
||||||
@@ -607,23 +355,11 @@ const nationalityDict = (code) => {
|
|||||||
function handleUpdate(row) {
|
function handleUpdate(row) {
|
||||||
console.log('nationality_code=======>', JSON.stringify(nationality_code.value));
|
console.log('nationality_code=======>', JSON.stringify(nationality_code.value));
|
||||||
|
|
||||||
reset();
|
// 使用PatientAddDialog组件显示修改模式
|
||||||
nextTick(() => {
|
patientAddRef.value.show();
|
||||||
form.value = JSON.parse(JSON.stringify(row));
|
// 设置为编辑模式并填充数据
|
||||||
addressCom.value =
|
patientAddRef.value.setViewMode(false);
|
||||||
row.addressProvince + row.addressCity + row.addressDistrict + row.addressStreet + row.address;
|
patientAddRef.value.setFormData(row);
|
||||||
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 convertAddressToCodes = (selectedOptions1) => {
|
||||||
const [provinceName, cityName, areaName, streetName] = selectedOptions1;
|
const [provinceName, cityName, areaName, streetName] = selectedOptions1;
|
||||||
|
|||||||
Reference in New Issue
Block a user