系统设置-默认存储到localStorage

main
ysn 3 weeks ago
parent ee7e4742d1
commit 2b2f02be72
  1. 72
      src/layout/components/SystemSettingDialog.vue
  2. 2
      src/views/cases/components/UltrasoundReportPrint.vue
  3. 574
      src/views/cases/detail.vue
  4. 20
      src/views/cases/index.vue

@ -112,6 +112,8 @@
<script> <script>
import ESignatureDialog from "./ESignatureDialog"; import ESignatureDialog from "./ESignatureDialog";
//
const SYSTEM_SETTINGS_KEY = "systemSettings";
export default { export default {
name: "SystemSettingDialog", name: "SystemSettingDialog",
components: { components: {
@ -123,6 +125,13 @@ export default {
this.activeTab = "basic"; this.activeTab = "basic";
} }
}, },
//
basicForm: {
deep: true,
handler() {
this.saveSettings();
},
},
// //
audioForm: { audioForm: {
deep: true, deep: true,
@ -139,6 +148,7 @@ export default {
duration: 5000, duration: 5000,
}); });
} }
this.saveSettings();
}, },
}, },
// //
@ -146,8 +156,13 @@ export default {
if (oldVal !== undefined && newVal !== oldVal) { if (oldVal !== undefined && newVal !== oldVal) {
this.$message.success('设置成功'); this.$message.success('设置成功');
} }
this.saveSettings();
}, },
}, },
created() {
//
this.loadSettings();
},
data() { data() {
return { return {
visible: false, visible: false,
@ -183,6 +198,41 @@ export default {
}, },
handleSignatureSubmit(signatureData) { handleSignatureSubmit(signatureData) {
this.otherForm.signature = signatureData; this.otherForm.signature = signatureData;
this.saveSettings();
},
//
loadSettings() {
try {
const savedSettings = localStorage.getItem(SYSTEM_SETTINGS_KEY);
if (savedSettings) {
const settings = JSON.parse(savedSettings);
//
if (settings.basicForm) {
this.basicForm = { ...this.basicForm, ...settings.basicForm };
}
if (settings.audioForm) {
this.audioForm = { ...this.audioForm, ...settings.audioForm };
}
if (settings.otherForm) {
this.otherForm = { ...this.otherForm, ...settings.otherForm };
}
}
} catch (e) {
console.error("加载系统设置失败:", e);
}
},
//
saveSettings() {
try {
const settings = {
basicForm: { ...this.basicForm },
audioForm: { ...this.audioForm },
otherForm: { ...this.otherForm },
};
localStorage.setItem(SYSTEM_SETTINGS_KEY, JSON.stringify(settings));
} catch (e) {
console.error("保存系统设置失败:", e);
}
}, },
// //
clearCache() { clearCache() {
@ -191,19 +241,25 @@ export default {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning",
}).then(() => { }).then(() => {
// localStorage // localStorage
// localStorage.clear(); const systemSettings = localStorage.getItem(SYSTEM_SETTINGS_KEY);
// localStorage
localStorage.clear();
//
if (systemSettings) {
localStorage.setItem(SYSTEM_SETTINGS_KEY, systemSettings);
}
this.$message.success('缓存清除成功'); this.$message.success('缓存清除成功');
}).catch(() => { }).catch(() => {
// //
}); });
}, },
restoreDefault() { restoreDefault() {
this.$confirm("确定要恢复默认设置吗?", "提示", { this.$confirm("确定要恢复默认设置吗?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning",
}).then(() => { }).then(() => {
this.basicForm = { this.basicForm = {
notification: true, notification: true,
// autoStart: false, // autoStart: false,
@ -220,6 +276,8 @@ export default {
this.otherForm = { this.otherForm = {
skipEvaluation: false, skipEvaluation: false,
}; };
//
localStorage.removeItem(SYSTEM_SETTINGS_KEY);
this.$message.success("重置成功"); this.$message.success("重置成功");
}); });
}, },

@ -115,7 +115,7 @@
<b>青岛海信医疗设备股份有限公司</b> <b>青岛海信医疗设备股份有限公司</b>
</td> </td>
<td valign="bottom" style="font-size: 12pt"> <td valign="bottom" style="font-size: 12pt">
<b>诊断医师:</b> {{ $store.state.user.nickName || "未知" }} <b>诊断医师:</b> {{ $store.state.user.userInfo.nickName || "未知" }}
</td> </td>
<td valign="bottom" style="font-size: 12pt"> <td valign="bottom" style="font-size: 12pt">
<b>检查日期:</b> {{ formatDate(new Date()) }} <b>检查日期:</b> {{ formatDate(new Date()) }}

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

@ -287,10 +287,10 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
(scope.row.positions.length scope.row.positions.length
? scope.row.positions.map((item) => item.level2.name).join("|") + ? scope.row.positions.map((item) => item.level2.name).join("|") +
"|" (scope.row.position_text ? "|" + scope.row.position_text : "")
: "") + scope.row.position_text : scope.row.position_text
}} }}
</template> </template>
</el-table-column> </el-table-column>
@ -1077,7 +1077,11 @@ export default {
handleTimeSectionUpdate(row) { handleTimeSectionUpdate(row) {
this.reset(); this.reset();
postReportInfo({ report_id: row.id }).then((response) => { postReportInfo({ report_id: row.id }).then((response) => {
if (response.code === 200 && response.data && response.data.exam_rooms.length > 0) { if (
response.code === 200 &&
response.data &&
response.data.exam_rooms.length > 0
) {
this.fetchTimeSlots(response.data.exam_rooms[0].id); this.fetchTimeSlots(response.data.exam_rooms[0].id);
} }
this.form = response.data || {}; this.form = response.data || {};
@ -1120,9 +1124,11 @@ export default {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
if (response.data && response.data.report_id) { if (response.data && response.data.report_id) {
postReportInfo({ report_id: response.data.report_id }).then((response) => { postReportInfo({ report_id: response.data.report_id }).then(
this.handleView(response.data); (response) => {
}); this.handleView(response.data);
}
);
} else { } else {
this.getList(); this.getList();
} }

Loading…
Cancel
Save