|
|
|
|
@ -5,27 +5,37 @@ |
|
|
|
|
<el-col :span="3"> |
|
|
|
|
<el-card class="left-card"> |
|
|
|
|
<div slot="header" class="card-header"> |
|
|
|
|
<span>影像文件</span> |
|
|
|
|
<span>超声影像</span> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-plus" |
|
|
|
|
@click="handleOpenFile" |
|
|
|
|
:disabled="caseStatus === 'submitted'" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
> |
|
|
|
|
新增 |
|
|
|
|
</el-button> |
|
|
|
|
</div> |
|
|
|
|
<el-table |
|
|
|
|
:data="imgList" |
|
|
|
|
:data="form.attachment" |
|
|
|
|
:show-header="false" |
|
|
|
|
height="calc(100vh - 235px)" |
|
|
|
|
> |
|
|
|
|
<el-table-column align="center"> |
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
<el-image |
|
|
|
|
:src="scope.row.url" |
|
|
|
|
:src=" |
|
|
|
|
$store.state.user.netConfig.MINIO_ENDPOINT_HTTPS + |
|
|
|
|
scope.row.bucket_compress + |
|
|
|
|
'/' + |
|
|
|
|
scope.row.object_compress |
|
|
|
|
" |
|
|
|
|
fit="cover" |
|
|
|
|
:preview-src-list="[scope.row.url]" |
|
|
|
|
:preview-src-list="[ |
|
|
|
|
$store.state.user.netConfig.MINIO_ENDPOINT_HTTPS + |
|
|
|
|
scope.row.bucket_compress + |
|
|
|
|
'/' + |
|
|
|
|
scope.row.object_compress, |
|
|
|
|
]" |
|
|
|
|
style="width: 100px; height: 80px" |
|
|
|
|
/> |
|
|
|
|
<div class="img-status">上传完成</div> |
|
|
|
|
@ -33,7 +43,7 @@ |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-delete" |
|
|
|
|
@click="handleDeleteImg(scope.row)" |
|
|
|
|
:disabled="caseStatus === 'submitted'" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
> |
|
|
|
|
删除 |
|
|
|
|
</el-button> |
|
|
|
|
@ -56,13 +66,23 @@ |
|
|
|
|
<div slot="header" class="card-header"> |
|
|
|
|
<span class="status-text"> |
|
|
|
|
病例状态: |
|
|
|
|
{{ statusList.find((i) => i.value == form.status).label || "-" }} |
|
|
|
|
{{ |
|
|
|
|
form.status |
|
|
|
|
? statusList.find((i) => i.value == form.status).label || "" |
|
|
|
|
: "" |
|
|
|
|
}} |
|
|
|
|
</span> |
|
|
|
|
<div class="btn-group"> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-check" |
|
|
|
|
@click="handleSave" |
|
|
|
|
@click=" |
|
|
|
|
handleSave( |
|
|
|
|
'您确定暂存病例吗,暂存会保存您当前的内容修改', |
|
|
|
|
{ ...form, submit_type: 0 }, |
|
|
|
|
'暂存成功' |
|
|
|
|
) |
|
|
|
|
" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
> |
|
|
|
|
暂存 |
|
|
|
|
@ -70,7 +90,13 @@ |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-check" |
|
|
|
|
@click="handleSubmit" |
|
|
|
|
@click=" |
|
|
|
|
handleSave( |
|
|
|
|
'您确定提交病例吗,提交成功之后不可再编辑', |
|
|
|
|
{ ...form, submit_type: 1 }, |
|
|
|
|
'提交成功' |
|
|
|
|
) |
|
|
|
|
" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
> |
|
|
|
|
提交 |
|
|
|
|
@ -94,18 +120,30 @@ |
|
|
|
|
<el-form |
|
|
|
|
ref="form" |
|
|
|
|
:model="form" |
|
|
|
|
label-width="70px" |
|
|
|
|
label-width="90px" |
|
|
|
|
class="report-form" |
|
|
|
|
> |
|
|
|
|
<el-row :gutter="20"> |
|
|
|
|
<el-col :span="21" style="text-align: center"> |
|
|
|
|
<el-form-item> 远程超声检查报告 </el-form-item> |
|
|
|
|
<el-row :gutter="20" style="border-bottom: 2px solid #44931e"> |
|
|
|
|
<el-col :span="20"> |
|
|
|
|
<div |
|
|
|
|
style=" |
|
|
|
|
text-align: center; |
|
|
|
|
vertical-align: middle; |
|
|
|
|
color: #606266; |
|
|
|
|
box-sizing: border-box; |
|
|
|
|
font-weight: 700; |
|
|
|
|
" |
|
|
|
|
> |
|
|
|
|
远程超声检查报告 |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="3"> |
|
|
|
|
<el-col :span="4"> |
|
|
|
|
<el-form-item label="检查号"> |
|
|
|
|
{{ form.id }} |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
</el-row> |
|
|
|
|
<el-row :gutter="20"> |
|
|
|
|
<el-col :span="6"> |
|
|
|
|
<el-form-item label="患者姓名" prop="patient_name"> |
|
|
|
|
{{ form.patient_name }} |
|
|
|
|
@ -114,8 +152,10 @@ |
|
|
|
|
<el-col :span="3"> |
|
|
|
|
<el-form-item label="性别" prop="patient_sex"> |
|
|
|
|
{{ |
|
|
|
|
patientSexList.find((i) => i.value == form.patient_sex) |
|
|
|
|
.label || "-" |
|
|
|
|
form.patient_sex |
|
|
|
|
? patientSexList.find((i) => i.value == form.patient_sex) |
|
|
|
|
.label || "" |
|
|
|
|
: "" |
|
|
|
|
}} |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
@ -127,9 +167,11 @@ |
|
|
|
|
> |
|
|
|
|
{{ form.patient_age }} |
|
|
|
|
{{ |
|
|
|
|
patientAgeTypeList.find( |
|
|
|
|
(i) => i.value == form.patient_age_type |
|
|
|
|
).label || "-" |
|
|
|
|
form.patient_age_type |
|
|
|
|
? patientAgeTypeList.find( |
|
|
|
|
(i) => i.value == form.patient_age_type |
|
|
|
|
).label || "" |
|
|
|
|
: "" |
|
|
|
|
}} |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
@ -168,23 +210,50 @@ |
|
|
|
|
{{ form.equipments.map((i) => i.name).join("|") }} |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="24"> |
|
|
|
|
<el-col :span="24" style="border-bottom: 2px solid #44931e"> |
|
|
|
|
<el-form-item label="检查部位" prop="positions"> |
|
|
|
|
{{ |
|
|
|
|
(form.positions.length |
|
|
|
|
form.positions.length |
|
|
|
|
? form.positions |
|
|
|
|
.map((item) => item.level2.name) |
|
|
|
|
.join("|") + "|" |
|
|
|
|
: "") + form.position_text |
|
|
|
|
.join("|") + |
|
|
|
|
(form.position_text ? "|" + form.position_text : "") |
|
|
|
|
: form.position_text |
|
|
|
|
}} |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="24"> |
|
|
|
|
<el-col |
|
|
|
|
:span="6" |
|
|
|
|
v-for="(item, idx) in form.attachment" |
|
|
|
|
:key="idx" |
|
|
|
|
v-show="item.showInDoc == 1" |
|
|
|
|
style="margin-top: 10px" |
|
|
|
|
> |
|
|
|
|
<el-form-item> |
|
|
|
|
<el-image |
|
|
|
|
:src=" |
|
|
|
|
$store.state.user.netConfig.MINIO_ENDPOINT_HTTPS + |
|
|
|
|
item.bucket_compress + |
|
|
|
|
'/' + |
|
|
|
|
item.object_compress |
|
|
|
|
" |
|
|
|
|
fit="cover" |
|
|
|
|
:preview-src-list="[ |
|
|
|
|
$store.state.user.netConfig.MINIO_ENDPOINT_HTTPS + |
|
|
|
|
item.bucket_compress + |
|
|
|
|
'/' + |
|
|
|
|
item.object_compress, |
|
|
|
|
]" |
|
|
|
|
style="width: 100px; height: 80px" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="24" style=""> |
|
|
|
|
<el-form-item label="超声所见"> |
|
|
|
|
<el-input |
|
|
|
|
v-model="form.text_comment" |
|
|
|
|
type="textarea" |
|
|
|
|
:rows="8" |
|
|
|
|
:rows="9" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
@ -194,7 +263,7 @@ |
|
|
|
|
<el-input |
|
|
|
|
v-model="form.text_conclusion" |
|
|
|
|
type="textarea" |
|
|
|
|
:rows="6" |
|
|
|
|
:rows="4" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
@ -212,7 +281,7 @@ |
|
|
|
|
<el-input |
|
|
|
|
v-model="item.user_comment" |
|
|
|
|
type="textarea" |
|
|
|
|
:rows="4" |
|
|
|
|
:rows="3" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
/> |
|
|
|
|
<div class="expert-btns"> |
|
|
|
|
@ -227,6 +296,7 @@ |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-check" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
v-if="item.confirm == 0" |
|
|
|
|
> |
|
|
|
|
一键同意 |
|
|
|
|
</el-button> |
|
|
|
|
@ -286,7 +356,6 @@ |
|
|
|
|
</el-form> |
|
|
|
|
</el-card> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<!-- 右侧:部位模板 + 片语 --> |
|
|
|
|
<el-col :span="4"> |
|
|
|
|
<el-card class="right-card"> |
|
|
|
|
@ -297,23 +366,31 @@ |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-plus" |
|
|
|
|
@click="openTemplateDialog({})" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
> |
|
|
|
|
新增 |
|
|
|
|
</el-button> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-delete" |
|
|
|
|
@click="deleteTemplate" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
@click="deleteTemplate(templateForm)" |
|
|
|
|
:disabled=" |
|
|
|
|
form.status != 1 && |
|
|
|
|
form.status != 5 && |
|
|
|
|
templateForm.id != undefined |
|
|
|
|
" |
|
|
|
|
> |
|
|
|
|
删除 |
|
|
|
|
</el-button> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-edit" |
|
|
|
|
@click="openTemplateDialog(form)" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
@click="openTemplateDialog(templateForm)" |
|
|
|
|
:disabled=" |
|
|
|
|
form.status != 1 && |
|
|
|
|
form.status != 5 && |
|
|
|
|
templateForm.id != undefined |
|
|
|
|
" |
|
|
|
|
> |
|
|
|
|
编辑 |
|
|
|
|
</el-button> |
|
|
|
|
@ -328,6 +405,7 @@ |
|
|
|
|
v-model="templateForm.id" |
|
|
|
|
style="width: 100%" |
|
|
|
|
@change="changeTemplate" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
> |
|
|
|
|
<el-option |
|
|
|
|
v-for="item in templateList" |
|
|
|
|
@ -337,53 +415,57 @@ |
|
|
|
|
/> |
|
|
|
|
</el-select> |
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
<el-form-item label="超声所见"> |
|
|
|
|
<el-input |
|
|
|
|
v-model="templateForm.comment" |
|
|
|
|
type="textarea" |
|
|
|
|
readonly |
|
|
|
|
:rows="6" |
|
|
|
|
:rows="13" |
|
|
|
|
placeholder="请输入超声所见" |
|
|
|
|
/> |
|
|
|
|
<el-button |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-check" |
|
|
|
|
@click="handleComment" |
|
|
|
|
style="float: right; margin-top: 6px" |
|
|
|
|
style="float: right" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
> |
|
|
|
|
应用 |
|
|
|
|
</el-button> |
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
<el-form-item label="结论" style="margin-top: 20px"> |
|
|
|
|
<el-form-item label="检查结论"> |
|
|
|
|
<el-input |
|
|
|
|
v-model="templateForm.conclusion" |
|
|
|
|
type="textarea" |
|
|
|
|
readonly |
|
|
|
|
:rows="6" |
|
|
|
|
:rows="4" |
|
|
|
|
placeholder="请输入检查结论" |
|
|
|
|
/> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-check" |
|
|
|
|
@click="handleCnclusion" |
|
|
|
|
style="float: right; margin-top: 6px" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
style="float: right" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
> |
|
|
|
|
应用 |
|
|
|
|
</el-button> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-form> |
|
|
|
|
</el-tab-pane> |
|
|
|
|
|
|
|
|
|
<!-- ✅ 片语功能改造 --> |
|
|
|
|
<el-tab-pane label="片语" name="phrase"> |
|
|
|
|
<div class="phrase-buttons"> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-plus" |
|
|
|
|
@click="openPhraseDialog({})" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
@click=" |
|
|
|
|
handleAddPhrase({ |
|
|
|
|
id: 0, |
|
|
|
|
phrase: '', |
|
|
|
|
}) |
|
|
|
|
" |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
> |
|
|
|
|
新增 |
|
|
|
|
</el-button> |
|
|
|
|
@ -392,25 +474,37 @@ |
|
|
|
|
:data="phraseList" |
|
|
|
|
style="width: 100%" |
|
|
|
|
:show-header="false" |
|
|
|
|
height="calc(100vh - 265px)" |
|
|
|
|
height="calc(100vh - 262px)" |
|
|
|
|
> |
|
|
|
|
<el-table-column prop="phrase" label="内容" /> |
|
|
|
|
<el-table-column label="操作" width="80"> |
|
|
|
|
<el-table-column |
|
|
|
|
prop="phrase" |
|
|
|
|
label="内容" |
|
|
|
|
show-overflow-tooltip |
|
|
|
|
/> |
|
|
|
|
<el-table-column label="操作" width="50"> |
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-edit" |
|
|
|
|
@click="openPhraseDialog(scope.row)" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
> |
|
|
|
|
</el-button> |
|
|
|
|
<el-button |
|
|
|
|
type="text" |
|
|
|
|
icon="el-icon-delete" |
|
|
|
|
@click="deletePhrase(scope.row)" |
|
|
|
|
v-if="form.status == 1 || form.status == 5" |
|
|
|
|
<el-dropdown |
|
|
|
|
:disabled="form.status != 1 && form.status != 5" |
|
|
|
|
@command=" |
|
|
|
|
(command) => handlePhraseCommand(command, scope.row) |
|
|
|
|
" |
|
|
|
|
> |
|
|
|
|
</el-button> |
|
|
|
|
<el-button type="text" icon="el-icon-more" /> |
|
|
|
|
<el-dropdown-menu slot="dropdown"> |
|
|
|
|
<el-dropdown-item command="edit"> |
|
|
|
|
修改 |
|
|
|
|
</el-dropdown-item> |
|
|
|
|
<el-dropdown-item command="delete"> |
|
|
|
|
删除 |
|
|
|
|
</el-dropdown-item> |
|
|
|
|
<el-dropdown-item command="apply"> |
|
|
|
|
应用超声所见 |
|
|
|
|
</el-dropdown-item> |
|
|
|
|
<el-dropdown-item command="applyConclusion"> |
|
|
|
|
应用检查结论 |
|
|
|
|
</el-dropdown-item> |
|
|
|
|
</el-dropdown-menu> |
|
|
|
|
</el-dropdown> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
</el-table> |
|
|
|
|
@ -423,78 +517,97 @@ |
|
|
|
|
<!-- 模板弹窗:新增 + 编辑 共用 --> |
|
|
|
|
<el-dialog |
|
|
|
|
:title="dialogTitle" |
|
|
|
|
:visible.sync="templateDialogVisible" |
|
|
|
|
:visible.sync="templateDialogOpen" |
|
|
|
|
width="33%" |
|
|
|
|
> |
|
|
|
|
<el-form :model="newTemplateForm" label-width="60px"> |
|
|
|
|
<el-form-item label="部位"> |
|
|
|
|
<el-select v-model="newTemplateForm.type" style="width: 100%"> |
|
|
|
|
<el-option label="肝脏-腹部" value="abdomen-liver" /> |
|
|
|
|
<el-option label="心脏" value="heart" /> |
|
|
|
|
<el-option label="肾脏" value="kidney" /> |
|
|
|
|
<el-option label="妇科" value="gynecology" /> |
|
|
|
|
<el-form |
|
|
|
|
:model="newTemplateForm" |
|
|
|
|
:rules="templateFormRules" |
|
|
|
|
ref="templateFormRef" |
|
|
|
|
label-width="80px" |
|
|
|
|
> |
|
|
|
|
<el-form-item label="检查部位" prop="part_id"> |
|
|
|
|
<el-select |
|
|
|
|
v-model="newTemplateForm.part_id" |
|
|
|
|
style="width: 100%" |
|
|
|
|
placeholder="请选择检查部位" |
|
|
|
|
filterable |
|
|
|
|
clearable |
|
|
|
|
pop |
|
|
|
|
> |
|
|
|
|
<el-option-group v-for="group in partIdList" :key="group.id"> |
|
|
|
|
<el-option |
|
|
|
|
v-for="item in group.child" |
|
|
|
|
: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"> |
|
|
|
|
{{ group.name }} |
|
|
|
|
</span> |
|
|
|
|
</el-option> |
|
|
|
|
</el-option-group> |
|
|
|
|
</el-select> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="标题"> |
|
|
|
|
<el-form-item label="标题" prop="name"> |
|
|
|
|
<el-input |
|
|
|
|
v-model="newTemplateForm.title" |
|
|
|
|
v-model="newTemplateForm.name" |
|
|
|
|
placeholder="请输入模板标题" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="所见"> |
|
|
|
|
<el-form-item label="超声所见"> |
|
|
|
|
<el-input |
|
|
|
|
type="textarea" |
|
|
|
|
:rows="6" |
|
|
|
|
v-model="newTemplateForm.text_comment" |
|
|
|
|
placeholder="请输入超声所见内容" |
|
|
|
|
v-model="newTemplateForm.comment" |
|
|
|
|
placeholder="请输入超声所见" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="结论"> |
|
|
|
|
<el-form-item label="检查结论"> |
|
|
|
|
<el-input |
|
|
|
|
type="textarea" |
|
|
|
|
:rows="6" |
|
|
|
|
v-model="newTemplateForm.conclusion" |
|
|
|
|
placeholder="请输入检查结论内容" |
|
|
|
|
placeholder="请输入检查结论" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-form> |
|
|
|
|
<div slot="footer" class="dialog-footer"> |
|
|
|
|
<el-button @click="templateDialogVisible = false">取消</el-button> |
|
|
|
|
<el-button type="primary" @click="saveTemplate">确认保存</el-button> |
|
|
|
|
<el-button type="primary" @click="saveTemplate">确 定</el-button> |
|
|
|
|
<el-button @click="templateDialogOpen = false">取 消</el-button> |
|
|
|
|
</div> |
|
|
|
|
</el-dialog> |
|
|
|
|
|
|
|
|
|
<!-- ✅ 片语弹窗:创建 + 更新 共用 --> |
|
|
|
|
<el-dialog |
|
|
|
|
:title="phraseDialogTitle" |
|
|
|
|
:visible.sync="phraseDialogVisible" |
|
|
|
|
width="33%" |
|
|
|
|
> |
|
|
|
|
<el-form :model="newPhraseForm" label-width="60px"> |
|
|
|
|
<el-form-item label="内容"> |
|
|
|
|
<el-dialog :title="phraseTitle" :visible.sync="phraseOpen" width="33%"> |
|
|
|
|
<el-form |
|
|
|
|
ref="phraseFormRef" |
|
|
|
|
:model="phraseForm" |
|
|
|
|
:rules="phraseRules" |
|
|
|
|
label-width="60px" |
|
|
|
|
> |
|
|
|
|
<el-form-item label="内容" prop="phrase"> |
|
|
|
|
<el-input |
|
|
|
|
type="textarea" |
|
|
|
|
:rows="10" |
|
|
|
|
v-model="newPhraseForm.phrase" |
|
|
|
|
v-model="phraseForm.phrase" |
|
|
|
|
placeholder="请输入片语内容" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-form> |
|
|
|
|
<div slot="footer" class="dialog-footer"> |
|
|
|
|
<el-button @click="phraseDialogVisible = false">取消</el-button> |
|
|
|
|
<el-button type="primary" @click="savePhrase"> |
|
|
|
|
{{ phraseType === "add" ? "创建" : "更新" }} |
|
|
|
|
</el-button> |
|
|
|
|
<el-button type="primary" @click="submitPhraseForm"> 确 定 </el-button> |
|
|
|
|
<el-button @click="phraseOpen = false">取 消</el-button> |
|
|
|
|
</div> |
|
|
|
|
</el-dialog> |
|
|
|
|
<!-- 引入打印弹窗组件 --> |
|
|
|
|
<UltrasoundReportPrint |
|
|
|
|
<!-- <UltrasoundReportPrint |
|
|
|
|
:visible.sync="printDialogVisible" |
|
|
|
|
:form="form" |
|
|
|
|
:img-list="imgList" |
|
|
|
|
:gender-list="genderList" |
|
|
|
|
:age-unit-list="ageUnitList" |
|
|
|
|
/> |
|
|
|
|
:img-list="form.attachment" |
|
|
|
|
:gender-list="patientSexList" |
|
|
|
|
:age-unit-list="patientAgeTypeList" |
|
|
|
|
/> --> |
|
|
|
|
|
|
|
|
|
<!-- 分享弹窗 - 选择联系人 --> |
|
|
|
|
<CreateGroupDialog |
|
|
|
|
@ -523,10 +636,11 @@ import { |
|
|
|
|
postReportTplEdit, |
|
|
|
|
postReportTplDelete, |
|
|
|
|
postReportTplCount, |
|
|
|
|
postReportPhraseList, |
|
|
|
|
postReportPhrase, |
|
|
|
|
postReportPhraseEdit, |
|
|
|
|
postReportPhraseDelete, |
|
|
|
|
postReportPhraseCount, |
|
|
|
|
postReportTemplateTree, |
|
|
|
|
} from "@/api/cases/index.js"; |
|
|
|
|
// 导入打印组件 |
|
|
|
|
import UltrasoundReportPrint from "./components/UltrasoundReportPrint.vue"; |
|
|
|
|
@ -539,13 +653,6 @@ export default { |
|
|
|
|
}, |
|
|
|
|
data() { |
|
|
|
|
return { |
|
|
|
|
// 图片上传 |
|
|
|
|
imgList: [ |
|
|
|
|
{ |
|
|
|
|
id: Date.now(), |
|
|
|
|
url: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg", |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
// 新增:控制打印弹窗显隐 |
|
|
|
|
printDialogVisible: false, |
|
|
|
|
// ================== 分享相关 ================== |
|
|
|
|
@ -565,7 +672,7 @@ export default { |
|
|
|
|
// 检查设备 |
|
|
|
|
equipmentsList: [], |
|
|
|
|
// 检查部位 |
|
|
|
|
templatesList: [], |
|
|
|
|
partIdList: [], |
|
|
|
|
// 检查诊室 |
|
|
|
|
examRoomsList: [], |
|
|
|
|
// 预约时间 |
|
|
|
|
@ -582,7 +689,7 @@ export default { |
|
|
|
|
|
|
|
|
|
// ====================== 部位模板核心 ====================== |
|
|
|
|
dialogTitle: "模板创建", |
|
|
|
|
templateDialogVisible: false, |
|
|
|
|
templateDialogOpen: false, |
|
|
|
|
templateList: [], |
|
|
|
|
templateForm: {}, |
|
|
|
|
newTemplateForm: { |
|
|
|
|
@ -592,23 +699,30 @@ export default { |
|
|
|
|
text_comment: "", |
|
|
|
|
conclusion: "", |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
templateFormRules: { |
|
|
|
|
part_id: [ |
|
|
|
|
{ required: true, message: "请选择检查部位", trigger: "change" }, |
|
|
|
|
], |
|
|
|
|
name: [{ required: true, message: "请输入模板标题", trigger: "blur" }], |
|
|
|
|
}, |
|
|
|
|
// ====================== ✅ 片语核心(新增) ====================== |
|
|
|
|
phraseDialogTitle: "片语创建", |
|
|
|
|
phraseDialogVisible: false, |
|
|
|
|
phraseTitle: "新增片语", |
|
|
|
|
phraseOpen: false, |
|
|
|
|
phraseList: [], |
|
|
|
|
newPhraseForm: { |
|
|
|
|
id: null, |
|
|
|
|
phraseForm: { |
|
|
|
|
id: 0, |
|
|
|
|
phrase: "", |
|
|
|
|
}, |
|
|
|
|
phraseRules: { |
|
|
|
|
phrase: [ |
|
|
|
|
{ required: true, message: "请输入片语内容", trigger: "blur" }, |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
created() { |
|
|
|
|
const id = this.$route.params && this.$route.params.id; |
|
|
|
|
this.getReportInfo(id); |
|
|
|
|
this.getReviewers(); |
|
|
|
|
this.loadTemplateList(); |
|
|
|
|
this.loadPhraseList(); |
|
|
|
|
}, |
|
|
|
|
methods: { |
|
|
|
|
// 图片操作 |
|
|
|
|
@ -620,13 +734,15 @@ export default { |
|
|
|
|
for (let file of files) { |
|
|
|
|
if (!file.type.startsWith("image/")) continue; |
|
|
|
|
const url = URL.createObjectURL(file); |
|
|
|
|
this.imgList.push({ id: Date.now(), url }); |
|
|
|
|
this.form.attachment.push({ id: Date.now(), url }); |
|
|
|
|
} |
|
|
|
|
e.target.value = ""; |
|
|
|
|
}, |
|
|
|
|
handleDeleteImg(row) { |
|
|
|
|
this.$confirm("确定删除该影像?").then(() => { |
|
|
|
|
this.imgList = this.imgList.filter((i) => i.id !== row.id); |
|
|
|
|
this.form.attachment = this.form.attachment.filter( |
|
|
|
|
(i) => i.id !== row.id |
|
|
|
|
); |
|
|
|
|
this.$message.success("删除成功"); |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
@ -638,6 +754,9 @@ export default { |
|
|
|
|
}).then((res) => { |
|
|
|
|
if (res.code === 200) { |
|
|
|
|
this.form = res.data; |
|
|
|
|
this.getReviewers(); |
|
|
|
|
this.loadTemplateList(); |
|
|
|
|
this.loadPhraseList(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
@ -650,14 +769,27 @@ export default { |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
// 病例操作 |
|
|
|
|
handleSave(title, form, msg) { |
|
|
|
|
this.$modal |
|
|
|
|
.confirm(title) |
|
|
|
|
.then(function () { |
|
|
|
|
form.exam_rooms = form.exam_rooms.map((item) => item.id); |
|
|
|
|
form.report_id = form.id; |
|
|
|
|
return postReportEdit(form); |
|
|
|
|
}) |
|
|
|
|
.then(() => { |
|
|
|
|
this.handleClose(); |
|
|
|
|
this.$modal.msgSuccess(msg); |
|
|
|
|
}) |
|
|
|
|
.catch(() => {}); |
|
|
|
|
}, |
|
|
|
|
// 打印 |
|
|
|
|
handlePrint() { |
|
|
|
|
this.printDialogVisible = true; // 打开打印预览弹窗 |
|
|
|
|
}, |
|
|
|
|
handleClose() { |
|
|
|
|
this.$confirm("未保存内容将丢失,确定退出?").then(() => { |
|
|
|
|
this.$router.back(); |
|
|
|
|
}); |
|
|
|
|
this.$router.back(); |
|
|
|
|
}, |
|
|
|
|
handleShare() { |
|
|
|
|
this.shareItem = { |
|
|
|
|
@ -675,19 +807,24 @@ export default { |
|
|
|
|
console.log("分享病例:", this.shareItem, "给:", shareTarget); |
|
|
|
|
} |
|
|
|
|
this.shareDialogVisible = false; |
|
|
|
|
ss; |
|
|
|
|
this.shareItem = null; |
|
|
|
|
}, |
|
|
|
|
// 部位模板列表 |
|
|
|
|
async loadTemplateList() { |
|
|
|
|
try { |
|
|
|
|
const response = await postReportTplList({ |
|
|
|
|
keyword: "", |
|
|
|
|
part_ids: this.form.positions.map((item) => item.level2.id), |
|
|
|
|
}); |
|
|
|
|
this.templateList = response.data || []; |
|
|
|
|
if (this.templateList.length > 0) { |
|
|
|
|
this.templateForm = { ...this.templateList[0] }; |
|
|
|
|
if (this.form.positions.length !== 0) { |
|
|
|
|
const response = await postReportTplList({ |
|
|
|
|
keyword: "", |
|
|
|
|
part_ids: this.form.positions.map( |
|
|
|
|
(item) => item.level2.template_id |
|
|
|
|
), |
|
|
|
|
}); |
|
|
|
|
this.templateList = response.data || []; |
|
|
|
|
if (this.templateList.length > 0) { |
|
|
|
|
this.templateForm = { ...this.templateList[0] }; |
|
|
|
|
} else { |
|
|
|
|
this.templateForm = {}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("加载模板列表失败:", error); |
|
|
|
|
@ -705,61 +842,56 @@ export default { |
|
|
|
|
}, |
|
|
|
|
// 部位模板-新增/编辑 |
|
|
|
|
openTemplateDialog(form) { |
|
|
|
|
this.newTemplateForm = { ...form }; |
|
|
|
|
this.templateDialogVisible = true; |
|
|
|
|
this.newTemplateForm = { ...form, tpl_id: form.id }; |
|
|
|
|
this.templateDialogOpen = true; |
|
|
|
|
this.loadTemplateTree(); |
|
|
|
|
}, |
|
|
|
|
// 加载检查部位 |
|
|
|
|
loadTemplateTree() { |
|
|
|
|
postReportTemplateTree({ |
|
|
|
|
owner_id: 0, |
|
|
|
|
}) |
|
|
|
|
.then((response) => { |
|
|
|
|
if (response.code === 200 && response.data) { |
|
|
|
|
this.partIdList = response.data; |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
.catch((error) => { |
|
|
|
|
console.error("加载检查部位模板树失败:", error); |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
// 部位模板-保存或编辑 |
|
|
|
|
async saveTemplate() { |
|
|
|
|
if (!this.newTemplateForm.title) { |
|
|
|
|
this.$message.warning("请输入模板标题"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
if (this.newTemplateForm.id === null) { |
|
|
|
|
// 新增模板 |
|
|
|
|
const response = await postReportTplCreate(this.newTemplateForm); |
|
|
|
|
const newTemplate = response.data; |
|
|
|
|
this.templateList.unshift(newTemplate); |
|
|
|
|
this.templateForm = { ...newTemplate }; |
|
|
|
|
this.$message.success("创建成功"); |
|
|
|
|
} else { |
|
|
|
|
// 编辑模板 |
|
|
|
|
await postReportTplEdit(this.newTemplateForm); |
|
|
|
|
const index = this.templateList.findIndex( |
|
|
|
|
(t) => t.id === this.newTemplateForm.id |
|
|
|
|
); |
|
|
|
|
if (index > -1) { |
|
|
|
|
this.templateList.splice(index, 1, { ...this.newTemplateForm }); |
|
|
|
|
this.templateForm = { ...this.newTemplateForm }; |
|
|
|
|
this.$refs["templateFormRef"].validate((valid) => { |
|
|
|
|
if (valid) { |
|
|
|
|
if (this.newTemplateForm.id != undefined) { |
|
|
|
|
postReportTplEdit(this.newTemplateForm).then(() => { |
|
|
|
|
this.$modal.msgSuccess("修改部位模板成功"); |
|
|
|
|
this.templateDialogOpen = false; |
|
|
|
|
this.loadTemplateList(); |
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
postReportTplCreate(this.newTemplateForm).then(() => { |
|
|
|
|
this.$modal.msgSuccess("新增部位模板成功"); |
|
|
|
|
this.templateDialogOpen = false; |
|
|
|
|
this.loadTemplateList(); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
this.$message.success("修改成功"); |
|
|
|
|
} |
|
|
|
|
this.templateDialogVisible = false; |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("保存模板失败:", error); |
|
|
|
|
this.$message.error("保存模板失败"); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
// 部位模板-删除 |
|
|
|
|
deleteTemplate() { |
|
|
|
|
if (this.templateList.length <= 1) { |
|
|
|
|
this.$message.warning("至少保留一个模板"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
this.$confirm("确定删除当前模板?").then(async () => { |
|
|
|
|
try { |
|
|
|
|
await postReportTplDelete({ id: this.templateForm.id }); |
|
|
|
|
const index = this.templateList.findIndex( |
|
|
|
|
(t) => t.id === this.templateForm.id |
|
|
|
|
); |
|
|
|
|
this.templateList.splice(index, 1); |
|
|
|
|
this.templateForm = { ...this.templateList[0] }; |
|
|
|
|
this.$message.success("删除成功"); |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("删除模板失败:", error); |
|
|
|
|
this.$message.error("删除模板失败"); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
deleteTemplate(form) { |
|
|
|
|
this.$modal |
|
|
|
|
.confirm("确定删除当前模板") |
|
|
|
|
.then(function () { |
|
|
|
|
return postReportTplDelete({ tpl_id: form.id }); |
|
|
|
|
}) |
|
|
|
|
.then(() => { |
|
|
|
|
this.loadTemplateList(); |
|
|
|
|
this.$modal.msgSuccess("删除成功"); |
|
|
|
|
}) |
|
|
|
|
.catch(() => {}); |
|
|
|
|
}, |
|
|
|
|
// 部位模板-超声所见 |
|
|
|
|
handleComment() { |
|
|
|
|
@ -776,51 +908,53 @@ export default { |
|
|
|
|
// 片语列表 |
|
|
|
|
async loadPhraseList() { |
|
|
|
|
try { |
|
|
|
|
const response = await postReportPhraseList({}); |
|
|
|
|
const response = await postReportPhrase({}); |
|
|
|
|
this.phraseList = response.data || []; |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("加载片语列表失败:", error); |
|
|
|
|
this.$message.error("加载片语列表失败"); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
// 片语-新增/修改 |
|
|
|
|
openPhraseDialog(row) { |
|
|
|
|
this.phraseDialogTitle = row.id === null ? "片语创建" : "片语更新"; |
|
|
|
|
this.newPhraseForm = { ...row }; |
|
|
|
|
this.phraseDialogVisible = true; |
|
|
|
|
}, |
|
|
|
|
// 保存片语 |
|
|
|
|
async savePhrase() { |
|
|
|
|
if (!this.newPhraseForm.phrase) { |
|
|
|
|
this.$message.warning("请输入片语内容"); |
|
|
|
|
handlePhraseCommand(command, row) { |
|
|
|
|
if (command === "edit") { |
|
|
|
|
this.handleAddPhrase(row); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
if (this.phraseType === "add") { |
|
|
|
|
// 新增片语 |
|
|
|
|
const response = await postReportPhraseEdit(this.newPhraseForm); |
|
|
|
|
const newPhrase = response.data; |
|
|
|
|
this.phraseList.unshift(newPhrase); |
|
|
|
|
this.$message.success("创建成功"); |
|
|
|
|
} else { |
|
|
|
|
// 编辑片语 |
|
|
|
|
await postReportPhraseEdit(this.newPhraseForm); |
|
|
|
|
const index = this.phraseList.findIndex( |
|
|
|
|
(p) => p.phrase_id === this.newPhraseForm.phrase_id |
|
|
|
|
); |
|
|
|
|
if (index > -1) { |
|
|
|
|
this.phraseList.splice(index, 1, { ...this.newPhraseForm }); |
|
|
|
|
} |
|
|
|
|
this.$message.success("更新成功"); |
|
|
|
|
} |
|
|
|
|
this.phraseDialogVisible = false; |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("保存片语失败:", error); |
|
|
|
|
this.$message.error("保存片语失败"); |
|
|
|
|
if (command === "delete") { |
|
|
|
|
this.handleDeletePhrase(row); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (command === "apply") { |
|
|
|
|
this.applyPhrase(row); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (command === "applyConclusion") { |
|
|
|
|
this.applyConclusion(row); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
handleAddPhrase(row) { |
|
|
|
|
this.phraseTitle = row.id === 0 ? "新增片语" : "修改片语"; |
|
|
|
|
this.phraseForm = { ...row, phrase_id: row.id }; |
|
|
|
|
delete this.phraseForm.id; |
|
|
|
|
this.phraseOpen = true; |
|
|
|
|
}, |
|
|
|
|
// 保存片语 |
|
|
|
|
async submitPhraseForm() { |
|
|
|
|
this.$refs["phraseFormRef"].validate((valid) => { |
|
|
|
|
if (valid) { |
|
|
|
|
postReportPhraseEdit(this.phraseForm).then(() => { |
|
|
|
|
this.$modal.msgSuccess( |
|
|
|
|
this.phraseForm.phrase_id === 0 ? "新增片语成功" : "修改片语成功" |
|
|
|
|
); |
|
|
|
|
this.phraseOpen = false; |
|
|
|
|
this.loadPhraseList(); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
// 删除片语 |
|
|
|
|
deletePhrase(row) { |
|
|
|
|
handleDeletePhrase(row) { |
|
|
|
|
this.$modal |
|
|
|
|
.confirm("是否确认删除当前片语?") |
|
|
|
|
.then(function () { |
|
|
|
|
@ -832,16 +966,18 @@ export default { |
|
|
|
|
}) |
|
|
|
|
.catch(() => {}); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// 病例操作 |
|
|
|
|
handleSave() { |
|
|
|
|
this.$confirm("您确定暂存病例吗?").then(() => { |
|
|
|
|
this.$message.success("暂存成功"); |
|
|
|
|
applyPhrase(row) { |
|
|
|
|
postReportPhraseCount({ phrase_id: row.id }).then((res) => { |
|
|
|
|
if (res.data) { |
|
|
|
|
this.form.text_comment += row.phrase; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
handleSubmit() { |
|
|
|
|
this.$confirm("提交后不可修改,确定提交?").then(() => { |
|
|
|
|
this.$message.success("提交成功"); |
|
|
|
|
applyConclusion(row) { |
|
|
|
|
postReportPhraseCount({ phrase_id: row.id }).then((res) => { |
|
|
|
|
if (res.data) { |
|
|
|
|
this.form.text_conclusion += row.phrase; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
@ -851,7 +987,7 @@ export default { |
|
|
|
|
<style lang="scss" scoped> |
|
|
|
|
/* 内部滚动区域高度自适应 */ |
|
|
|
|
.report-form { |
|
|
|
|
height: calc(100vh - 218px); |
|
|
|
|
height: calc(100vh - 235px); |
|
|
|
|
overflow-y: auto; |
|
|
|
|
overflow-x: hidden; |
|
|
|
|
width: 100%; |
|
|
|
|
@ -859,7 +995,7 @@ export default { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.template-form { |
|
|
|
|
height: calc(100vh - 265px); |
|
|
|
|
height: calc(100vh - 260px); |
|
|
|
|
overflow-y: auto; |
|
|
|
|
overflow-x: hidden; |
|
|
|
|
} |
|
|
|
|
|