病例库-功能联调/新增/查询搁置

main
ysn 4 days ago
parent 940f7d3332
commit 837ffacdb8
  1. 111
      src/api/cases/index.js
  2. 6
      src/router/index.js
  3. 439
      src/views/cases/detail.vue
  4. 278
      src/views/cases/index.vue

@ -1,7 +1,60 @@
import request from '@/utils/request' import request from '@/utils/request'
// 性别
export const patientSexList = () => {
return [
// { label: "所有", value: "-1" },
{ label: "未知", value: 0 },
{ label: "男", value: 1 },
{ label: "女", value: 2 },
]
}
// 年龄单位
export const patientAgeTypeList = () => {
return [
{ label: "岁", value: 0 },
{ label: "月", value: 1 },
{ label: "日", value: 2 },
{ label: "时", value: 3 },
{ label: "分", value: 4 },
{ label: "秒", value: 5 },
]
}
// 检查类型 // 检查类型
export const patientTypeList = () => {
return [
{ label: "全部", value: -1 },
{ label: "门诊", value: 0 },
{ label: "急诊", value: 1 },
{ label: "住院", value: 2 },
]
}
// 病例类型
export const reportTypeList = () => {
return [
{ label: "本院报告", value: 1 },
{ label: "我参与的会诊", value: 2 },
{ label: "我审核的", value: 3 },
]
}
// 检查结果
export const negativeList = () => {
return [
{ label: "全部", value: -1 },
{ label: "阳性", value: 0 },
{ label: "阴性", value: 1 },
]
}
// 状态
export const statusList = () => {
return [
{ label: "新建", value: 1 },
{ label: "暂存", value: 5 },
{ label: "已提交", value: 10 },
{ label: "驳回", value: 15 },
{ label: "已完成", value: 20 },
]
}
// 检查诊室 // 检查诊室
export function postReportExamRoomList(data) { export function postReportExamRoomList(data) {
return request({ return request({
@ -60,13 +113,13 @@ export function postReportInfo(data) {
data: data data: data
}) })
} }
// 修改病例 // 审核人
export function postReportViewers(data) {
return request({ url: '/report/reviewers', method: 'post', data })
}
// <EFBFBD>病例库-修改
export function postReportEdit(data) { export function postReportEdit(data) {
return request({ return request({ url: '/report/edit', method: 'post', data })
url: '/report/edit',
method: 'post',
data: data
})
} }
// 修改预约时间 // 修改预约时间
export function postReportTimeSectionEdit(data) { export function postReportTimeSectionEdit(data) {
@ -76,3 +129,47 @@ export function postReportTimeSectionEdit(data) {
data: data data: data
}) })
} }
// 影像文件-新增
export function postReportImageCompress(data) {
return request({ url: '/common/image/compress', method: 'post', data })
}
// 部位模板-列表
export function postReportTplList(data) {
return request({ url: '/report/tpl/list', method: 'post', data })
}
// 部位模板-新增
export function postReportTplCreate(data) {
return request({ url: '/report/tpl/create', method: 'post', data })
}
// 部位模板-修改
export function postReportTplEdit(data) {
return request({ url: '/report/tpl/edit', method: 'post', data })
}
// 部位模板-删除
export function postReportTplDelete(data) {
return request({ url: '/report/tpl/delete', method: 'post', data })
}
// 部位模板-统计
export function postReportTplCount(data) {
return request({ url: '/report/tpl/count', method: 'post', data })
}
// 片语-列表
export function postReportPhraseList(data) {
return request({ url: '/report/reviewers', method: 'post', data })
}
// // 片语-新增
// export function postReportPhraseCreate(data) {
// return request({ url: '/report/create', method: 'post', data })
// }
// // 部位模板-修改
// export function postReportTplEdit(data) {
// return request({ url: '/report/tpl/edit', method: 'post', data })
// }
// // 部位模板-删除
// export function postReportTplDelete(data) {
// return request({ url: '/report/tpl/delete', method: 'post', data })
// }
// // 部位模板-统计
// export function postReportTplCount(data) {
// return request({ url: '/report/tpl/count', method: 'post', data })
// }

@ -166,11 +166,11 @@ export const constantRoutes = [
meta: { title: '病例库', icon: 'example' } meta: { title: '病例库', icon: 'example' }
}, },
{ {
path: 'detail/:id', path: 'detail/:id(\\d+)',
component: () => import('@/views/cases/detail'), component: () => import('@/views/cases/detail'),
name: 'PatientDetail', name: 'CaseDetail',
hidden: true, hidden: true,
meta: { title: '病例库详情' } meta: { title: '病例库详情', activeMenu: '/cases' }
} }
] ]
}, },

@ -50,14 +50,13 @@
/> />
</el-card> </el-card>
</el-col> </el-col>
<!-- 中间报告表单 --> <!-- 中间报告表单 -->
<el-col :span="17"> <el-col :span="17">
<el-card class="center-card"> <el-card class="center-card">
<div slot="header" class="card-header"> <div slot="header" class="card-header">
<span class="status-text" <span class="status-text">
>病例状态 病例状态
{{ caseStatus === "submitted" ? "已提交" : "暂存" }} {{ statusList.find((i) => i.value == form.status).label || "-" }}
</span> </span>
<div class="btn-group"> <div class="btn-group">
<el-button <el-button
@ -92,166 +91,143 @@
</el-button> </el-button>
</div> </div>
</div> </div>
<el-divider>远程超声检查报告</el-divider> <el-form
<el-form class="report-form" :model="form" label-width="70px"> ref="form"
<el-row :gutter="15"> :model="form"
<el-col :span="6"> label-width="70px"
<el-form-item label="患者姓名"> class="report-form"
<el-input v-model="form.patientName" readonly /> >
</el-form-item> <el-row :gutter="20">
<el-col :span="21" style="text-align: center">
<el-form-item> 远程超声检查报告 </el-form-item>
</el-col> </el-col>
<el-col :span="3"> <el-col :span="3">
<el-form-item label="性别"> <el-form-item label="检查号">
<el-select v-model="form.gender" readonly> {{ form.id }}
<el-option
v-for="item in genderList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-col :span="2"> <el-form-item label="患者姓名" prop="patient_name">
<el-form-item label-width="0"> {{ form.patient_name }}
<el-input-number
v-model="form.age"
:min="0"
readonly
style="width: 100%"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="1"> <el-col :span="3">
<el-form-item label-width="0"> <el-form-item label="性别" prop="patient_sex">
<el-select v-model="form.ageUnit" readonly> {{
<el-option patientSexList.find((i) => i.value == form.patient_sex)
v-for="item in ageUnitList" .label || "-"
:key="item.value" }}
:label="item.label" </el-form-item>
:value="item.value" </el-col>
/> <el-col :span="3">
</el-select> <el-form-item
label="年龄"
prop="patient_age"
label-width="60px"
>
{{ form.patient_age }}
{{
patientAgeTypeList.find(
(i) => i.value == form.patient_age_type
).label || "-"
}}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="申请医师"> <el-form-item label="申请医师" prop="request_doctor">
<el-input v-model="form.doctor" readonly /> {{ form.request_doctor }}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="病历号"> <el-form-item label="病例号" prop="patient_id">
<el-input v-model="form.medicalNo" readonly /> {{ form.patient_id }}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="门诊号"> <el-form-item label="门诊号" prop="outpatient_number">
<el-input v-model="form.outNo" readonly /> {{ form.outpatient_number }}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="住院号"> <el-form-item label="住院号" prop="hospitalization_number">
<el-input v-model="form.inNo" readonly /> {{ form.hospitalization_number }}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="病区号"> <el-form-item label="病区号" prop="area_number">
<el-input v-model="form.wardNo" readonly /> {{ form.area_number }}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="床位号"> <el-form-item label="床位号" prop="bed_number">
<el-input v-model="form.bedNo" readonly /> {{ form.bed_number }}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="检查设备"> <el-form-item label="检查设备" prop="equipments">
<el-input {{ form.equipments.map((i) => i.name).join("|") }}
type="textarea"
autosize
v-model="form.device"
readonly
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="检查部位"> <el-form-item label="检查部位" prop="positions">
<el-input {{ form.positions.map((item) => item.level2.name).join("|") }}
type="textarea"
autosize
v-model="form.part"
readonly
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="超声所见"> <el-form-item label="超声所见">
<el-input <el-input
v-model="form.findings" v-model="form.text_comment"
type="textarea" type="textarea"
:rows="8" :rows="8"
:disabled="caseStatus === 'submitted'" :disabled="form.status != 1 && form.status != 5"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="检查结论"> <el-form-item label="检查结论">
<el-input <el-input
v-model="form.conclusion" v-model="form.text_conclusion"
type="textarea" type="textarea"
:rows="6" :rows="6"
:disabled="caseStatus === 'submitted'" :disabled="form.status != 1 && form.status != 5"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="form.experts.length != 0">
<el-col :span="24">
<el-form-item label="专家意见" /> <el-form-item label="专家意见" />
</el-col> </el-col>
<el-col <el-col
:span="24" :span="24"
v-for="(item, idx) in expertList" v-for="(item, idx) in form.experts"
:key="idx" :key="idx"
class="expert-item" class="expert-item"
> >
<el-form-item :label="item.name"> <el-form-item :label="item.expert_name">
<el-input <el-input
v-model="item.content" v-model="item.user_comment"
type="textarea" type="textarea"
:rows="4" :rows="4"
:disabled="caseStatus === 'submitted'" :disabled="form.status != 1 && form.status != 5"
/> />
<div class="expert-btns"> <div class="expert-btns">
<el-button <el-button
type="text" type="text"
icon="el-icon-document-copy" icon="el-icon-document-copy"
:disabled="caseStatus === 'submitted'" :disabled="form.status != 1 && form.status != 5"
> >
全部复制 全部复制
</el-button> </el-button>
<el-button <el-button
type="text" type="text"
icon="el-icon-check" icon="el-icon-check"
:disabled="caseStatus === 'submitted'" :disabled="form.status != 1 && form.status != 5"
> >
一键同意 一键同意
</el-button> </el-button>
<el-button <el-button
type="text" type="text"
icon="el-icon-warning" icon="el-icon-warning"
:disabled="caseStatus === 'submitted'" :disabled="form.status != 1 && form.status != 5"
> >
待确认 待确认
</el-button> </el-button>
@ -261,20 +237,32 @@
<el-col :span="18"> <el-col :span="18">
<el-form-item label="报告人"> <el-form-item label="报告人">
{{ $store.state.user.nickName || "未登录" }} {{ form.reporter_name }}
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="审核人"> <el-form-item label="审核人">
<el-select <el-select
v-model="form.auditUser" v-model="form.reviewer_id"
clearable clearable
filterable filterable
style="width: 100%" style="width: 100%"
:disabled="caseStatus === 'submitted'" :disabled="form.status != 1 && form.status != 5"
>
<el-option
v-for="item in reviewersList"
:key="item.id"
:label="item.name"
:value="item.id"
>
<span style="float: left">{{ item.name }}</span>
<span
style="float: right; color: #8492a6; font-size: 13px"
> >
<el-option label="请选择" value="" /> {{ item.username }}
</span>
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -346,7 +334,7 @@
<el-form-item label="超声所见"> <el-form-item label="超声所见">
<el-input <el-input
v-model="templateForm.findings" v-model="templateForm.text_comment"
type="textarea" type="textarea"
readonly readonly
:rows="6" :rows="6"
@ -355,7 +343,7 @@
:disabled="caseStatus === 'submitted'" :disabled="caseStatus === 'submitted'"
type="text" type="text"
icon="el-icon-check" icon="el-icon-check"
@click="applyFindings" @click="applytext_comment"
style="float: right; margin-top: 6px" style="float: right; margin-top: 6px"
> >
应用 应用
@ -364,7 +352,7 @@
<el-form-item label="结论" style="margin-top: 20px"> <el-form-item label="结论" style="margin-top: 20px">
<el-input <el-input
v-model="templateForm.conclusion" v-model="templateForm.text_conclusion"
type="textarea" type="textarea"
readonly readonly
:rows="6" :rows="6"
@ -372,7 +360,7 @@
<el-button <el-button
type="text" type="text"
icon="el-icon-check" icon="el-icon-check"
@click="applyConclusion" @click="applytext_conclusion"
style="float: right; margin-top: 6px" style="float: right; margin-top: 6px"
:disabled="caseStatus === 'submitted'" :disabled="caseStatus === 'submitted'"
> >
@ -451,7 +439,7 @@
<el-input <el-input
type="textarea" type="textarea"
:rows="6" :rows="6"
v-model="newTemplateForm.findings" v-model="newTemplateForm.text_comment"
placeholder="请输入超声所见内容" placeholder="请输入超声所见内容"
/> />
</el-form-item> </el-form-item>
@ -459,7 +447,7 @@
<el-input <el-input
type="textarea" type="textarea"
:rows="6" :rows="6"
v-model="newTemplateForm.conclusion" v-model="newTemplateForm.text_conclusion"
placeholder="请输入检查结论内容" placeholder="请输入检查结论内容"
/> />
</el-form-item> </el-form-item>
@ -516,6 +504,17 @@
</template> </template>
<script> <script>
import {
patientSexList,
patientAgeTypeList,
patientTypeList,
reportTypeList,
negativeList,
statusList,
postReportInfo,
postReportViewers,
postReportEdit,
} from "@/api/cases/index.js";
// //
import UltrasoundReportPrint from "./components/UltrasoundReportPrint.vue"; import UltrasoundReportPrint from "./components/UltrasoundReportPrint.vue";
import CreateGroupDialog from "@/views/message/components/CreateGroupDialog"; import CreateGroupDialog from "@/views/message/components/CreateGroupDialog";
@ -527,6 +526,33 @@ export default {
}, },
data() { data() {
return { return {
//
form: {},
//
//
patientSexList: patientSexList(),
//
patientAgeTypeList: patientAgeTypeList(),
//
patientTypeList: patientTypeList(),
//
expertIdsList: [],
//
equipmentsList: [],
//
templatesList: [],
//
examRoomsList: [],
//
timeSectionList: [],
//
reportTypeList: reportTypeList(),
//
negativeList: negativeList(),
statusList: statusList(),
//
reviewersList: [],
activeTab: "template", activeTab: "template",
// : pending-, submitted- // : pending-, submitted-
caseStatus: "submitted", caseStatus: "submitted",
@ -537,147 +563,25 @@ export default {
url: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg", url: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
}, },
], ],
//
form: {
patientName: "",
gender: "",
age: 0,
ageUnit: "1",
doctor: "",
medicalNo: "",
outNo: "",
inNo: "",
wardNo: "",
bedNo: "",
device: "",
part: "",
findings: "",
conclusion: "",
auditUser: "",
isPositive: false,
},
//
genderList: [
{ label: "未知", value: "0" },
{ label: "男", value: "1" },
{ label: "女", value: "2" },
],
ageUnitList: [
{ label: "岁", value: "1" },
{ label: "月", value: "2" },
{ label: "天", value: "3" },
],
// Mock
caseMockList: [
{
id: 1,
patientName: "测试患者",
gender: "1",
age: 30,
ageUnit: "1",
checkType: "1",
outpatientNumber: "123456",
inpatientNumber: "IN789012",
wardNumber: "W01",
bedNumber: "05",
applyDoctor: "张医生",
expertDoctor: "李专家",
checkDevice: "GE-E8",
checkRoom: "1",
customPart: "肝脏",
reserveDate: "2023-01-01",
reserveTime: "13:30-14:00",
diagnosisDoctor: "",
auditDoctor: "",
reportStatus: "",
createTime: "2023-01-01 10:00:00",
updateTime: "2023-01-01 10:00:00",
},
{
id: 2,
patientName: "王小明",
gender: "1",
age: 45,
ageUnit: "1",
checkType: "2",
outpatientNumber: "654321",
inpatientNumber: "",
wardNumber: "",
bedNumber: "",
applyDoctor: "刘医生",
expertDoctor: "王专家",
checkDevice: "Philips-iU22",
checkRoom: "2",
customPart: "心脏",
reserveDate: "2023-01-02",
reserveTime: "09:00-09:30",
diagnosisDoctor: "",
auditDoctor: "",
reportStatus: "",
createTime: "2023-01-02 09:00:00",
updateTime: "2023-01-02 09:00:00",
},
{
id: 3,
patientName: "李小红",
gender: "2",
age: 28,
ageUnit: "1",
checkType: "3",
outpatientNumber: "",
inpatientNumber: "IN345678",
wardNumber: "W03",
bedNumber: "12",
applyDoctor: "赵医生",
expertDoctor: "孙专家",
checkDevice: "GE-E8",
checkRoom: "1",
customPart: "肾脏",
reserveDate: "2023-01-03",
reserveTime: "14:00-14:30",
diagnosisDoctor: "",
auditDoctor: "",
reportStatus: "",
createTime: "2023-01-03 14:00:00",
updateTime: "2023-01-03 14:00:00",
},
],
//
expertList: [
{ name: "韩主任", content: "" },
{ name: "景静静", content: "" },
{ name: "郑曙光", content: "" },
],
// ====================== ====================== // ====================== ======================
templateType: "add", templateType: "add",
dialogTitle: "模板创建", dialogTitle: "模板创建",
templateDialogVisible: false, templateDialogVisible: false,
templateList: [ templateList: [],
{
id: 1,
type: "abdomen-liver",
title: "腹部(肝、胆、胰、脾)",
findings: `肝脏剑下cm,肋下cm,右肝斜径cm,包膜光滑,实质回声均匀,未见确切占位。肝静脉走行正常,门静脉不扩张。
胆囊前后径cm壁薄光滑囊内未见异常回声
胰腺形态规则大小正常边界清晰胰腺实质回声未见异常主胰管不扩张
脾脏肋间厚cm轮廓清楚脾门切迹清晰可见实质回声未见异常脾静脉不扩张`,
conclusion: "肝脏、胆囊、胰腺、脾脏未见明显异常",
},
],
templateForm: { templateForm: {
id: 1, id: 1,
type: "abdomen-liver", type: "abdomen-liver",
title: "腹部(肝、胆、胰、脾)", title: "腹部(肝、胆、胰、脾)",
findings: "", text_comment: "",
conclusion: "", text_conclusion: "",
}, },
newTemplateForm: { newTemplateForm: {
id: null, id: null,
type: "abdomen-liver", type: "abdomen-liver",
title: "", title: "",
findings: "", text_comment: "",
conclusion: "", text_conclusion: "",
}, },
// ====================== ====================== // ====================== ======================
@ -700,52 +604,31 @@ export default {
}; };
}, },
created() { created() {
this.getCaseData(); const id = this.$route.params && this.$route.params.id;
this.loadRecentContacts(); this.getReportInfo(id);
this.getReviewers();
}, },
methods: { methods: {
//
loadRecentContacts() {
// TODO:
this.recentContacts = [
{ id: 1, name: "张医生", avatar: "" },
{ id: 2, name: "李医生", avatar: "" },
{ id: 3, name: "王医生", avatar: "" },
];
this.recentGroups = [
{ id: 1, name: "骨科会诊群", avatar: "" },
{ id: 2, name: "放射科交流群", avatar: "" },
];
},
// //
getCaseData() { getReportInfo(id) {
const caseId = parseInt(this.$route.params.id); if (id) {
if (caseId) { postReportInfo({
const caseData = this.caseMockList.find((item) => item.id === caseId); report_id: id,
if (caseData) { }).then((res) => {
this.form = { if (res.code === 200) {
patientName: caseData.patientName, this.form = res.data;
gender: caseData.gender,
age: caseData.age,
ageUnit: caseData.ageUnit,
doctor: caseData.applyDoctor,
medicalNo: caseData.patientRecordNumber || "",
outNo: caseData.outpatientNumber || "",
inNo: caseData.inpatientNumber || "",
wardNo: caseData.wardNumber || "",
bedNo: caseData.bedNumber || "",
device: caseData.checkDevice || "",
part: caseData.customPart || "",
findings: "",
conclusion: "",
auditUser: "",
isPositive: false,
};
//
this.$store.dispatch("settings/setTitle", caseData.patientName);
} }
});
} }
}, },
//
getReviewers() {
postReportViewers().then((res) => {
if (res.code === 200) {
this.form.reviewersList = res.data;
}
});
},
// //
handlePrint() { handlePrint() {
this.printDialogVisible = true; // this.printDialogVisible = true; //
@ -771,8 +654,8 @@ export default {
this.shareItem = { this.shareItem = {
patientName: this.form.patientName, patientName: this.form.patientName,
medicalNo: this.form.medicalNo, medicalNo: this.form.medicalNo,
findings: this.form.findings, text_comment: this.form.text_comment,
conclusion: this.form.conclusion, text_conclusion: this.form.text_conclusion,
}; };
this.shareDialogVisible = true; this.shareDialogVisible = true;
}, },
@ -823,8 +706,8 @@ export default {
id: Date.now(), id: Date.now(),
type: "abdomen-liver", type: "abdomen-liver",
title: "", title: "",
findings: "", text_comment: "",
conclusion: "", text_conclusion: "",
}; };
} else { } else {
this.newTemplateForm = { ...this.templateForm }; this.newTemplateForm = { ...this.templateForm };
@ -865,12 +748,12 @@ export default {
this.$message.success("删除成功"); this.$message.success("删除成功");
}); });
}, },
applyFindings() { applytext_comment() {
this.form.findings = this.templateForm.findings; this.form.text_comment = this.templateForm.text_comment;
this.$message.success("已应用超声所见"); this.$message.success("已应用超声所见");
}, },
applyConclusion() { applytext_conclusion() {
this.form.conclusion = this.templateForm.conclusion; this.form.text_conclusion = this.templateForm.text_conclusion;
this.$message.success("已应用检查结论"); this.$message.success("已应用检查结论");
}, },
@ -927,6 +810,7 @@ export default {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
} }
.template-form { .template-form {
height: calc(100vh - 265px); height: calc(100vh - 265px);
overflow-y: auto; overflow-y: auto;
@ -939,32 +823,39 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.status-text { .status-text {
font-weight: 500; font-weight: 500;
color: #333; color: #333;
} }
.btn-group { .btn-group {
display: flex; display: flex;
gap: 4px; gap: 4px;
} }
.expert-item { .expert-item {
margin-bottom: 10px; margin-bottom: 10px;
} }
.expert-btns { .expert-btns {
text-align: right; text-align: right;
margin-top: 6px; margin-top: 6px;
} }
.img-status { .img-status {
font-size: 12px; font-size: 12px;
color: #666; color: #666;
margin: 4px 0; margin: 4px 0;
} }
.template-buttons, .template-buttons,
.phrase-buttons { .phrase-buttons {
display: flex; display: flex;
gap: 6px; gap: 6px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.dialog-footer { .dialog-footer {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;

@ -1,7 +1,9 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 查询表单按截图的三行4列布局 -->
<el-form :model="queryParams" ref="queryForm" label-width="90px"> <el-form :model="queryParams" ref="queryForm" label-width="90px">
<el-row> <el-row :gutter="15">
<!-- 第一行 -->
<el-col :span="6"> <el-col :span="6">
<el-form-item> <el-form-item>
<el-radio-group v-model="timeType"> <el-radio-group v-model="timeType">
@ -26,11 +28,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item <el-form-item label="检查类型" prop="patient_type">
label="检查类型"
prop="patient_type"
v-show="showSearch"
>
<el-select <el-select
v-model="queryParams.patient_type" v-model="queryParams.patient_type"
placeholder="请选择检查类型" placeholder="请选择检查类型"
@ -48,7 +46,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="检查诊室" prop="exam_room" v-show="showSearch"> <el-form-item label="检查诊室" prop="exam_room">
<el-select <el-select
v-model="queryParams.exam_room" v-model="queryParams.exam_room"
placeholder="请选择检查诊室" placeholder="请选择检查诊室"
@ -65,8 +63,11 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="15">
<!-- 第二行 -->
<el-col :span="6"> <el-col :span="6">
<el-form-item label="检查部位" prop="body_text" v-show="showSearch"> <el-form-item label="检查部位" prop="body_text">
<el-input <el-input
v-model="queryParams.body_text" v-model="queryParams.body_text"
placeholder="请输入检查部位" placeholder="请输入检查部位"
@ -76,7 +77,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="检查设备" prop="equipment" v-show="showSearch"> <el-form-item label="检查设备" prop="equipment">
<el-select <el-select
v-model="queryParams.equipment" v-model="queryParams.equipment"
placeholder="请选择检查设备" placeholder="请选择检查设备"
@ -94,11 +95,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item <el-form-item label="诊断医师" prop="reporter_name">
label="诊断医师"
prop="reporter_name"
v-show="showSearch"
>
<el-input <el-input
v-model="queryParams.reporter_name" v-model="queryParams.reporter_name"
placeholder="请输入诊断医师" placeholder="请输入诊断医师"
@ -108,11 +105,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item <el-form-item label="审核医生" prop="reviewer_name">
label="审核医生"
prop="reviewer_name"
v-show="showSearch"
>
<el-input <el-input
v-model="queryParams.reviewer_name" v-model="queryParams.reviewer_name"
placeholder="请输入审核医生" placeholder="请输入审核医生"
@ -121,6 +114,9 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="15">
<!-- 第三行 -->
<el-col :span="6"> <el-col :span="6">
<el-form-item label="病例类型" prop="report_type"> <el-form-item label="病例类型" prop="report_type">
<el-select <el-select
@ -140,11 +136,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item <el-form-item label="患者姓名" prop="patient_name">
label="患者姓名"
prop="patient_name"
v-show="showSearch"
>
<el-input <el-input
v-model="queryParams.patient_name" v-model="queryParams.patient_name"
placeholder="请输入患者姓名" placeholder="请输入患者姓名"
@ -154,7 +146,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="病例号" prop="patient_id" v-show="showSearch"> <el-form-item label="病例号" prop="patient_id">
<el-input <el-input
v-model="queryParams.patient_id" v-model="queryParams.patient_id"
placeholder="请输入病例号" placeholder="请输入病例号"
@ -164,7 +156,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="检查结果" prop="negative" v-show="showSearch"> <el-form-item label="检查结果" prop="negative">
<el-select <el-select
v-model="queryParams.negative" v-model="queryParams.negative"
placeholder="请选择检查结果" placeholder="请选择检查结果"
@ -181,6 +173,9 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="15">
<!-- 按钮行 -->
<el-col :span="6"> <el-col :span="6">
<el-form-item> <el-form-item>
<el-button <el-button
@ -193,23 +188,23 @@
<el-button icon="el-icon-refresh" @click="resetQuery"> <el-button icon="el-icon-refresh" @click="resetQuery">
重置 重置
</el-button> </el-button>
</el-form-item> <el-button
</el-col> type="primary"
</el-row> plain
</el-form> icon="el-icon-plus"
<el-row :gutter="10" class="mb8"> @click="handleAdd"
<el-col :span="1.5"> >
<el-button type="primary" plain icon="el-icon-plus" @click="handleAdd">
新增 新增
</el-button> </el-button>
</el-form-item>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
</el-row> </el-row>
</el-form>
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="caseList" :data="caseList"
border border
height="calc(100vh - 300px)" height="calc(100vh - 415px)"
@row-dblclick="handleView" @row-dblclick="handleView"
> >
<el-table-column <el-table-column
@ -303,8 +298,7 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
patientTypeList.find((i) => i.value == scope.row.patient_type) patientTypeList.find((i) => i.value == scope.row.patient_type).label
.label || "-"
}} }}
</template> </template>
</el-table-column> </el-table-column>
@ -315,9 +309,7 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{ negativeList.find((i) => i.value == scope.row.negative).label }}
negativeList.find((i) => i.value == scope.row.negative).label || "-"
}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -351,7 +343,7 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ statusList.find((i) => i.value == scope.row.status).label || "-" }} {{ statusList.find((i) => i.value == scope.row.status).label }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -418,7 +410,7 @@
:limit.sync="queryParams.size" :limit.sync="queryParams.size"
@pagination="getList" @pagination="getList"
/> />
<!-- 添加对话框 --> <!-- 新增/编辑弹窗 -->
<el-dialog :title="title" :visible.sync="open" width="60%" append-to-body> <el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="90px"> <el-form ref="form" :model="form" :rules="rules" label-width="90px">
<el-row :gutter="20"> <el-row :gutter="20">
@ -449,7 +441,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" v-if="!isEditMode"> <el-col :span="6" v-if="!isEditMode">
<el-form-item label="年龄" prop="patient_age"> <el-form-item label="年龄" prop="patient_age">
<el-input-number <el-input-number
v-model="form.patient_age" v-model="form.patient_age"
@ -460,7 +452,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4" v-if="!isEditMode"> <el-col :span="6" v-if="!isEditMode">
<el-form-item label="" prop="patient_age_type" label-width="0"> <el-form-item label="" prop="patient_age_type" label-width="0">
<el-select <el-select
v-model="form.patient_age_type" v-model="form.patient_age_type"
@ -479,6 +471,9 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="20">
<!-- 第二行2个字段 -->
<el-col :span="12" v-if="!isEditMode"> <el-col :span="12" v-if="!isEditMode">
<el-form-item label="病例号" prop="patient_id"> <el-form-item label="病例号" prop="patient_id">
<el-input <el-input
@ -507,6 +502,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-if="!isEditMode"> <el-col :span="12" v-if="!isEditMode">
<el-form-item label="门诊号" prop="outpatient_number"> <el-form-item label="门诊号" prop="outpatient_number">
<el-input <el-input
@ -525,6 +522,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-if="!isEditMode"> <el-col :span="12" v-if="!isEditMode">
<el-form-item label="病区号" prop="area_number"> <el-form-item label="病区号" prop="area_number">
<el-input <el-input
@ -543,6 +542,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-if="!isEditMode"> <el-col :span="12" v-if="!isEditMode">
<el-form-item label="申请医师" prop="request_doctor"> <el-form-item label="申请医师" prop="request_doctor">
<el-input <el-input
@ -576,6 +577,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-if="!isEditMode"> <el-col :span="12" v-if="!isEditMode">
<el-form-item label="检查设备" prop="equipments"> <el-form-item label="检查设备" prop="equipments">
<el-select <el-select
@ -615,12 +618,13 @@
:key="item.id" :key="item.id"
:label="item.name" :label="item.name"
:value="item.id" :value="item.id"
> />
</el-option>
</el-option-group> </el-option-group>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-if="!isEditMode"> <el-col :span="12" v-if="!isEditMode">
<el-form-item label="检查诊室" prop="exam_rooms"> <el-form-item label="检查诊室" prop="exam_rooms">
<el-select <el-select
@ -630,7 +634,6 @@
@change="handleExamRoomsChange" @change="handleExamRoomsChange"
filterable filterable
clearable clearable
multiple
> >
<el-option <el-option
v-for="item in examRoomsList" v-for="item in examRoomsList"
@ -650,6 +653,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="预约日期" prop="date_time"> <el-form-item label="预约日期" prop="date_time">
<el-date-picker <el-date-picker
@ -664,7 +669,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="" prop="time_section"> <el-form-item label="预约时间" prop="time_section">
<el-select <el-select
v-model="form.time_section" v-model="form.time_section"
placeholder="请选择预约时间" placeholder="请选择预约时间"
@ -672,10 +677,10 @@
filterable filterable
clearable clearable
> >
<el-option label="自动" value="auto" /> <el-option label="自动" value="自动" />
<el-option <el-option
v-for="item in timeSectionList" v-for="(item, index) in timeSectionList"
:key="item" :key="index"
:label="item" :label="item"
:value="item" :value="item"
/> />
@ -693,6 +698,12 @@
</template> </template>
<script> <script>
import { import {
patientSexList,
patientAgeTypeList,
patientTypeList,
reportTypeList,
negativeList,
statusList,
postReportList, postReportList,
postReportExamRoomList, postReportExamRoomList,
postReportTemplateTree, postReportTemplateTree,
@ -713,8 +724,6 @@ export default {
loading: true, loading: true,
// //
ids: [], ids: [],
//
showSearch: false,
// //
caseList: [], caseList: [],
// //
@ -725,28 +734,11 @@ export default {
isEditMode: false, isEditMode: false,
// //
// //
patientSexList: [ patientSexList: patientSexList(),
// { label: "", value: "-1" },
{ label: "未知", value: 0 },
{ label: "男", value: 1 },
{ label: "女", value: 2 },
],
// //
patientAgeTypeList: [ patientAgeTypeList: patientAgeTypeList(),
{ label: "岁", value: 0 },
{ label: "月", value: 1 },
{ label: "日", value: 2 },
{ label: "时", value: 3 },
{ label: "分", value: 4 },
{ label: "秒", value: 5 },
],
// //
patientTypeList: [ patientTypeList: patientTypeList(),
{ label: "全部", value: -1 },
{ label: "门诊", value: 0 },
{ label: "急诊", value: 1 },
{ label: "住院", value: 2 },
],
// //
expertIdsList: [], expertIdsList: [],
// //
@ -758,24 +750,10 @@ export default {
// //
timeSectionList: [], timeSectionList: [],
// //
reportTypeList: [ reportTypeList: reportTypeList(),
{ label: "本院报告", value: 1 },
{ label: "我参与的会诊", value: 2 },
{ label: "我审核的", value: 3 },
],
// //
negativeList: [ negativeList: negativeList(),
{ label: "全部", value: -1 }, statusList: statusList(),
{ label: "阳性", value: 0 },
{ label: "阴性", value: 1 },
],
statusList: [
{ label: "新建", value: 1 },
{ label: "暂存", value: 5 },
{ label: "已提交", value: 10 },
{ label: "驳回", value: 15 },
{ label: "已完成", value: 20 },
],
// //
timeType: "date_time", timeType: "date_time",
date: [], date: [],
@ -870,27 +848,27 @@ export default {
// //
form: { form: {
// * // *
patient_name: "", patient_name: undefined,
// * // *
patient_sex: "", patient_sex: undefined,
// * // *
patient_age: "", patient_age: undefined,
// * // *
patient_age_type: "", patient_age_type: undefined,
// * // *
patient_id: "", patient_id: undefined,
// * // *
patient_type: "", patient_type: undefined,
// //
outpatient_number: "", outpatient_number: undefined,
// //
hospitalization_number: "", hospitalization_number: undefined,
// //
area_number: "", area_number: undefined,
// //
bed_number: "", bed_number: undefined,
// //
request_doctor: "", request_doctor: undefined,
// //
expert_ids: [], expert_ids: [],
// //
@ -898,17 +876,17 @@ export default {
// //
templates: [], templates: [],
// //
exam_rooms: [], exam_rooms: undefined,
// //
position_text: "", position_text: undefined,
// //
date_time: "", date_time: undefined,
// //
time_section: "", time_section: undefined,
// //
comment: "", comment: undefined,
// //
patient_phone: "", patient_phone: undefined,
// ID // ID
consultation_id: 0, consultation_id: 0,
// 线ID // 线ID
@ -1014,8 +992,8 @@ export default {
}, },
// //
handleExamRoomsChange(exam_rooms_id) { handleExamRoomsChange(exam_rooms_id) {
this.form.time_section = ""; this.form.time_section = undefined;
if (this.form.date_time) this.fetchTimeSlots(exam_rooms_id[0]); if (exam_rooms_id) this.fetchTimeSlots(exam_rooms_id);
else this.timeSectionList = []; else this.timeSectionList = [];
}, },
async fetchTimeSlots(exam_rooms_id) { async fetchTimeSlots(exam_rooms_id) {
@ -1032,7 +1010,6 @@ export default {
const timeTypes = ["create_time", "review_time", "date_time"]; const timeTypes = ["create_time", "review_time", "date_time"];
timeTypes.forEach((type) => { timeTypes.forEach((type) => {
delete this.queryParams[`${type}_start`]; delete this.queryParams[`${type}_start`];
s;
delete this.queryParams[`${type}_end`]; delete this.queryParams[`${type}_end`];
}); });
// timeType // timeType
@ -1061,7 +1038,7 @@ export default {
this.loading = true; this.loading = true;
postReportList(this.queryParams) postReportList(this.queryParams)
.then((response) => { .then((response) => {
this.caseList = response.data?.list || []; this.caseList = response.data.list || [];
this.queryParams.total = response.data.total; this.queryParams.total = response.data.total;
console.log("病例库", response.data); console.log("病例库", response.data);
this.loading = false; this.loading = false;
@ -1125,7 +1102,10 @@ export default {
}); });
} else { } else {
// //
postReportCreate(this.form) postReportCreate({
...this.form,
exam_rooms: this.form.exam_rooms ? [this.form.exam_rooms] : [],
})
.then((response) => { .then((response) => {
if (response.code === 200) { if (response.code === 200) {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
@ -1148,36 +1128,56 @@ export default {
}, },
// //
reset() { reset() {
this.form = {}; this.form = {
this.resetForm("form"); // *
patient_name: undefined,
// *
patient_sex: undefined,
// *
patient_age: undefined,
// *
patient_age_type: undefined,
// *
patient_id: undefined,
// *
patient_type: undefined,
//
outpatient_number: undefined,
//
hospitalization_number: undefined,
//
area_number: undefined,
//
bed_number: undefined,
//
request_doctor: undefined,
//
expert_ids: [],
//
equipments: [],
//
templates: [],
//
exam_rooms: undefined,
//
position_text: undefined,
//
date_time: undefined,
//
time_section: undefined,
//
comment: undefined,
//
patient_phone: undefined,
// ID
consultation_id: 0,
// 线ID
off_consultation_id: 0,
};
}, },
// //
handleView(row) { handleView(row) {
// this.$tab.openPage(row.patient_name + row.id, "/cases/detail/" + row.id);
postReportInfo({ id: row.id })
.then((response) => {
if (response.code === 200 && response.data) {
this.$router.push({
name: "PatientDetail",
params: {
id: response.data.id,
patientName: response.data.patient_name,
},
});
} else {
this.$modal.msgError("获取病例详情失败");
}
})
.catch(() => {
// 使 row
this.$router.push({
name: "PatientDetail",
params: {
id: row.id,
patientName: row.patient_name || row.patientName,
},
});
});
}, },
}, },
}; };

Loading…
Cancel
Save