You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
821 lines
30 KiB
821 lines
30 KiB
<template>
|
|
<div>
|
|
<div class="contenttitle">
|
|
体检 /<span class="contenttitleBold">pacs看图</span>
|
|
</div>
|
|
<div style="display: flex;">
|
|
<div v-if="LocalConfig.doctorCheck.isHaveExternal == 'N'">
|
|
<div v-if="pacsType == 'image'" class="image__preview"
|
|
:style="`overflow-y: auto;width: ${window.pageWidth - 330}px;height: ${window.pageHeight - 105}px;`">
|
|
<div v-for="item in checkPictures" :key="item.id" style="margin-bottom: 5px;">
|
|
<el-image :src="imageFilePlus(item.pictureFilename)" :preview-src-list="previewSrcList(checkPictures, item)"
|
|
:style="`overflow-y: auto;max-width: ${window.pageWidth - 330}px;height: auto;`"></el-image>
|
|
<div style="display: flex;justify-content: space-between;margin-top: -26px;">
|
|
<div></div>
|
|
<div style="display: flex;width: 60px;">
|
|
<div>
|
|
<el-checkbox v-model="item.isPrint" true-label="Y" false-label="N" @change="btnSavePic"></el-checkbox>
|
|
</div>
|
|
<div style="font-size: 14px;font-weight: 700;color: #FF0000; margin: 2px 0 0 2px;z-index: 2;">打印</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-else>
|
|
<iframe :src="iframeSrc" :height="window.pageHeight - 105" :width="window.pageWidth - 330"></iframe>
|
|
</div>
|
|
</div>
|
|
|
|
<div :style="`display:${LocalConfig.doctorCheck.isHaveExternal == 'Y' ? 'flex' : 'block'};`">
|
|
<!-- 查询条件 -->
|
|
<div
|
|
:style="`display: block;${LocalConfig.doctorCheck.isHaveExternal == 'Y' ? ('width: ' + leftWidth + 'px;') : ('margin-left: 2px;width: ' + rightWidth + 'px;')}`">
|
|
<div style="display: flex;">
|
|
<el-select v-model="query.dateType" placeholder="请选择" style="width: 80px" size="small">
|
|
<el-option label="检查日期" value="0" />
|
|
<el-option label="上传日期" value="1" />
|
|
</el-select>
|
|
|
|
<el-date-picker v-model="query.startDate" type="date" placeholder="起始日期" size="small" style="width:90px;"
|
|
value-format="yyyy-MM-dd" :picker-options="pickerOptions" />
|
|
<span class="spanClass">至</span>
|
|
<el-date-picker v-model="query.endDate" type="date" placeholder="截止日期" size="small" style="width:90px;"
|
|
value-format="yyyy-MM-dd" :picker-options="pickerOptions" />
|
|
<el-button icon="el-icon-search" @click="btnQuery" type="primary"
|
|
style="font-size: 20px;height:32px;min-width:30px; padding: 5px;z-index: 2;" size="small"></el-button>
|
|
</div>
|
|
<div style="font-size: 14px;">
|
|
<span>体检单位:</span>
|
|
<el-select v-model="query.customerOrgIds" placeholder="请选择体检单位" :filter-method="filterMethod" default-first-option
|
|
clearable filterable style="margin-left: 10px;width:225px;max-height: 32px;" size="small" multiple collapse-tags>
|
|
<el-option v-for="item in customerOrg" :key="item.id" :label="item.displayName" :value="item.id">
|
|
{{ item.displayName }}
|
|
</el-option>
|
|
</el-select>
|
|
</div>
|
|
<div @contextmenu.prevent="onContextmenu">
|
|
<el-table :data="pacsList" style="width: 100%;" border highlight-current-row @row-click="rowClick"
|
|
:height="tableHeight" :row-style="{ height: '28px' }" ref="pacsList" @cell-contextmenu="onCellRightClick">
|
|
<el-table-column prop="patientName" label="姓名" min-width="80" align="center" />
|
|
<el-table-column prop="checkRequestNo" label="检查条码" min-width="120" align="center" />
|
|
<el-table-column prop="asbitemName" label="检查项目" show-overflow-tooltip min-width="200" />
|
|
<el-table-column prop="pacsCheckDate" label="检查日期" min-width="90" align="center">
|
|
<template slot-scope="scope">
|
|
{{ moment(scope.row.pacsCheckDate).format("yyyy-MM-DD") }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="pacsUploadDate" label="上传日期" min-width="90" align="center">
|
|
<template slot-scope="scope">
|
|
{{ moment(scope.row.pacsUploadDate).format("yyyy-MM-DD") }}
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
<!-- 检查结果 -->
|
|
<div :style="`display: block;margin-left: 2px;width:${rightWidth}px;`">
|
|
<div v-if="false" style="margin-top: 5px;">
|
|
<span style="color: #232748;">人员信息:</span>
|
|
<div style="display: flex;">
|
|
<span style="width: 80px;margin: 7px 0;">检查条码</span>
|
|
<el-input ref="checkRequestNo" placeholder="检查条码" v-model="checkRequestNo" size="small" clearable
|
|
@keyup.native.enter="onQueryByPacsNo(checkRequestNo)" @focus="onFocus" disabled />
|
|
</div>
|
|
<div style="display: flex;">
|
|
<span style="width: 80px;margin: 7px 0;">姓名</span>
|
|
<el-input v-model="dataTransOpts.tableS.patient_register.patientName" size="small" disabled />
|
|
</div>
|
|
<div style="display: flex;">
|
|
<span style="width: 80px;margin: 7px 0;">性别</span>
|
|
<el-input v-model="dataTransOpts.tableS.patient_register.sexName" size="small" disabled />
|
|
</div>
|
|
<div style="display: flex;">
|
|
<span style="width: 80px;margin: 7px 0;">年龄</span>
|
|
<el-input v-model="dataTransOpts.tableS.patient_register.age" size="small" disabled />
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div style="margin-top: 5px;">
|
|
<span style="color: #232748;">检查结果:</span>
|
|
<el-radio-group v-model="tabPosition">
|
|
<el-radio :label="'top'">横排</el-radio>
|
|
<el-radio :label="'left'">纵排</el-radio>
|
|
</el-radio-group>
|
|
</div>
|
|
<el-tabs :tab-position="tabPosition" v-model="tabChoosed">
|
|
<el-tab-pane v-for="(item, seq) in doctorCheck.checkItemList" :label="dispLabel(item.itemName)"
|
|
:name="seq + ''" :key="seq">
|
|
<el-input :style="`width: 98%;font-family: 'Microsoft YaHei';font-size: ${LocalConfig.doctorCheck.pacsDescFontSize}px;`" type="textarea"
|
|
v-model="item.result" placeholder="请输入检查结果"
|
|
:autosize="{ minRows: LocalConfig.doctorCheck.pacsDescLines, maxRows: LocalConfig.doctorCheck.pacsDescLines }" />
|
|
<div style="display: flex;justify-content: space-between;">
|
|
<div></div>
|
|
<div>
|
|
<el-tooltip :content="`给 ${item.itemName} 项目,赋默认结果`" placement="top">
|
|
<i class="el-icon-edit" @click="btnDefResult(seq)"
|
|
style="font-size: 18px;color: blue;cursor:pointer;margin-right: 10px;"></i>
|
|
</el-tooltip>
|
|
<el-tooltip :content="`清除 ${item.itemName} 项目的检查结果`" placement="top">
|
|
<i class="el-icon-delete" @click="btnClear(seq)"
|
|
style="font-size: 18px;color: red;cursor:pointer;margin-right: 10px;"></i>
|
|
</el-tooltip>
|
|
</div>
|
|
</div>
|
|
</el-tab-pane>
|
|
<el-input v-if="doctorCheck.checkItemList.length == 0" :style="`margin-bottom: 20px;width: 99%;font-family: 'Microsoft YaHei';font-size: ${LocalConfig.doctorCheck.pacsDescFontSize}px;`" type="textarea"
|
|
placeholder="请输入检查结果"
|
|
:autosize="{ minRows: LocalConfig.doctorCheck.pacsDescLines, maxRows: LocalConfig.doctorCheck.pacsDescLines }" />
|
|
</el-tabs>
|
|
</div>
|
|
<div style="margin-top: -15px;">
|
|
<span style="color: #232748;">检查结论:</span>
|
|
<el-table row-key="id" :data="doctorCheck.checkSummaryList" size="samll" :height="resultHeight" width="100%" border>
|
|
<el-table-column width="30" align="center">
|
|
<template slot-scope="scope">
|
|
<el-tag class="moveSummary" style="height:25px;padding:0 2px;cursor: move;background-color: #EEEEEE;">
|
|
<div style="width: 16px;">{{ scope.$index + 1 }}</div>
|
|
</el-tag>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="summary" label="小结">
|
|
<template slot="header">
|
|
<div style="display: flex;justify-content:space-between;">
|
|
<div>小结</div>
|
|
<div></div>
|
|
</div>
|
|
</template>
|
|
<template slot-scope="scope">
|
|
<div style="display: flex;font-family: 'Microsoft YaHei';">
|
|
<el-input type="textarea" v-model="scope.row.summary" :autosize="{ minRows: 1, maxRows: 100 }"
|
|
placeholder="请输入小结" :style="`font-size: ${LocalConfig.doctorCheck.pacsDescFontSize}px;`">
|
|
</el-input>
|
|
<el-button type="danger" style="min-width:23px;padding:2px;" icon="el-icon-delete"
|
|
@click="delSum(scope.$index)" size="small"></el-button>
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
<div style="display: flex;justify-content: space-between;margin-top: 10px;">
|
|
<div>
|
|
<el-checkbox v-model="autoNext" true-label="Y" false-label="N" size="small">自动下一条</el-checkbox>
|
|
</div>
|
|
<div>
|
|
<!--
|
|
<el-button type="primary" @click="btnTest" class="commonbutton">测试</el-button>
|
|
-->
|
|
<el-button type="primary" @click="btnChooseBigtext" style="width: 90px;" size="small" class="commonbutton"
|
|
:disabled="dataTransOpts.tableS.patient_register.completeFlag == '3'">选择描述</el-button>
|
|
<el-button type="primary" @click="btnOkBigtext" style="width: 90px;" size="small" class="commonbutton"
|
|
:disabled="dataTransOpts.tableS.patient_register.completeFlag == '3'">保存结果</el-button>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!--Pacs结果录入模版-->
|
|
<el-dialog :title="'Pacs结果录入模版 -- ' + doctorCheck.asbitemName" :visible.sync="dialogWin.PacsTemplate" width="880px"
|
|
:close-on-click-modal="false">
|
|
<PacsTemplate :refParams="pacsParams" :refFuncOther="handlePacsResult" />
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import moment from "moment";
|
|
import { mapState } from "vuex";
|
|
import { Loading } from "element-ui";
|
|
import { getapi, postapi, putapi, deletapi } from "@/api/api";
|
|
import { getPagePriv, checkPagePriv, deepCopy, arrayExistObj } from "../../utlis/proFunc";
|
|
import { hadoopGet, hadoopPost, hadoopPut, hadoopDel } from "../../api/hadoopApi"
|
|
import CheckPictureUpload from "./CheckPictureUpload.vue";
|
|
import PacsTemplate from "./PacsTemplate.vue";
|
|
|
|
export default {
|
|
components: {
|
|
CheckPictureUpload, PacsTemplate
|
|
},
|
|
data() {
|
|
return {
|
|
rightWidth: 430, // 右侧宽度
|
|
sysConfig: {}, //
|
|
pagePriv: {
|
|
routeUrlorPageName: 'doctorCheck', //当前页面归属路由或归属页面权限名称
|
|
privs: [] // 页面权限
|
|
},
|
|
query: {
|
|
patientName: "",
|
|
checkRequestNo: "",
|
|
dateType: "1",
|
|
startDate: "",
|
|
endDate: "",
|
|
maxResultCount: 1000,
|
|
skipCount: 0,
|
|
customerOrgIds:[]
|
|
},
|
|
|
|
rClickRow: null, //右击的行
|
|
rClickColumn: null, //右击的列(预留)
|
|
|
|
autoNext: 'Y', // 保存后自动下一条
|
|
doctorCheckEdit: {},
|
|
pacsList: [],
|
|
curPacs: {},
|
|
checkRequestNo: '',
|
|
dialogDcm: false,
|
|
iframeSrc: '',
|
|
pacsParams: {
|
|
from: 'dcm',
|
|
refresh: -1,
|
|
row: {},
|
|
index: 0,
|
|
result: '',
|
|
summary: ''
|
|
},
|
|
pacsType: 'dcm', // image/dcm
|
|
checkPictures: [],
|
|
|
|
tabChoosed: "0",
|
|
tabPosition: "top", // 多个明细检查排列方式
|
|
customerOrg:[], // 单位
|
|
|
|
LocalConfig: {
|
|
doctorCheck: { // 医生诊台
|
|
scheduledAet: '', //scheduledAet
|
|
// deviceId: '', // 设备ID
|
|
pacsDescLines: '5',
|
|
pacsDescLineH: '18',
|
|
isHaveExternal: 'N',
|
|
pacsDescFontSize: 14, //描述控件的字体大小
|
|
}
|
|
},
|
|
pacs_interface_barcode_type:'0', //pacs系统条码类型:0:检查条码,1:人员条码
|
|
};
|
|
},
|
|
|
|
created() {
|
|
//获取用户当前页面的权限
|
|
let userPriv = window.sessionStorage.getItem('userPriv')
|
|
if (userPriv) this.pagePriv.privs = deepCopy(getPagePriv(this.pagePriv.routeUrlorPageName))
|
|
this.sysConfig = JSON.parse(window.sessionStorage.getItem('sysConfig'))
|
|
let LocalConfig = JSON.parse(window.localStorage.getItem("LocalConfig") || null)
|
|
|
|
if (LocalConfig?.doctorCheck?.pacsType) this.pacsType = LocalConfig.doctorCheck.pacsType
|
|
if (LocalConfig?.doctorCheck?.deviceId) {
|
|
this.pacsReq.deviceId = LocalConfig.doctorCheck.deviceId
|
|
this.query.deviceId = LocalConfig.doctorCheck.deviceId
|
|
}
|
|
if (LocalConfig?.doctorCheck?.scheduledAet) this.pacsReq.scheduledAet = LocalConfig.doctorCheck.scheduledAet
|
|
if (LocalConfig?.doctorCheck?.pacsDescLines) this.LocalConfig.doctorCheck.pacsDescLines = LocalConfig.doctorCheck.pacsDescLines
|
|
if (LocalConfig?.doctorCheck?.pacsDescLineH) this.LocalConfig.doctorCheck.pacsDescLineH = LocalConfig.doctorCheck.pacsDescLineH
|
|
if (LocalConfig?.doctorCheck?.isHaveExternal) this.LocalConfig.doctorCheck.isHaveExternal = LocalConfig.doctorCheck.isHaveExternal
|
|
if (LocalConfig?.doctorCheck?.pacsDescFontSize) this.LocalConfig.doctorCheck.pacsDescFontSize = LocalConfig.doctorCheck.pacsDescFontSize
|
|
|
|
|
|
// console.log('this.pacsType', this.pacsType,)
|
|
//获取单位列表
|
|
getapi("/api/app/customer-org/parent-all").then((res) => {
|
|
if (res.code != -1) {
|
|
this.customerOrgAll = res.data;
|
|
let lfind = arrayExistObj(this.customerOrgAll, "id", this.dict.personOrgId);
|
|
if (lfind > -1) this.customerOrgAll.splice(lfind, 1);
|
|
this.customerOrg = deepCopy(this.customerOrgAll);
|
|
}
|
|
});
|
|
|
|
// 获取系统参数(pacs系统条码类型:0:检查条码,1:人员条码)
|
|
postapi('/api/app/SysParmValue/GetSysParmValueBySysParmId', { sysParmId:'pacs_interface_barcode_type' })
|
|
.then(res => {
|
|
if(res.code > -1){
|
|
this.pacs_interface_barcode_type = res.data||"0"
|
|
}
|
|
})
|
|
|
|
},
|
|
|
|
//挂载完成
|
|
mounted() {
|
|
let today = moment(new Date()).format("yyyy-MM-DD")
|
|
this.query.startDate = today
|
|
this.query.endDate = today
|
|
this.doctorCheck.checkItemList = []
|
|
this.result = ''
|
|
this.summary = ''
|
|
},
|
|
|
|
computed: {
|
|
...mapState([
|
|
"pickerOptions",
|
|
"window",
|
|
"dict",
|
|
"dialogWin",
|
|
"dataTransOpts",
|
|
"doctorCheck",
|
|
"patientRegister"
|
|
]),
|
|
lmoment(date, forMat) {
|
|
return moment(new Date(date)).format(forMat);
|
|
},
|
|
|
|
// 左侧宽度
|
|
leftWidth() {
|
|
return this.window.pageWidth - this.rightWidth - 20
|
|
},
|
|
|
|
// 左侧宽度
|
|
resultHeight() {
|
|
return this.LocalConfig.doctorCheck.isHaveExternal == 'N' ? 120 : 300
|
|
},
|
|
|
|
//表格高度
|
|
tableHeight() {
|
|
let h = Number(this.LocalConfig.doctorCheck.pacsDescLineH)
|
|
let n = Number(this.LocalConfig.doctorCheck.pacsDescLines)
|
|
let th = this.window.pageHeight - this.resultHeight - 270 - 76 - (n * h) - 34
|
|
if (this.LocalConfig.doctorCheck.isHaveExternal == 'Y') th = this.window.pageHeight - 85 - 76
|
|
return th
|
|
},
|
|
|
|
},
|
|
methods: {
|
|
checkPagePriv, moment,
|
|
|
|
// 显示tab标签名称,过长处理
|
|
dispLabel(itemName) {
|
|
return itemName.length > 5 ? (itemName.substring(0, 4) + "…") : itemName
|
|
},
|
|
|
|
// 清除结果
|
|
btnClear(seq) {
|
|
this.doctorCheck.checkItemList[seq].result = ''
|
|
},
|
|
|
|
// 默认结果
|
|
btnDefResult(seq) {
|
|
this.doctorCheck.checkItemList[seq].result = this.doctorCheck.checkItemList[seq].defaultResult
|
|
},
|
|
|
|
// 生成 图片预览列表
|
|
previewSrcList(oriList, curImag) {
|
|
let srcList = []
|
|
let image = curImag.pictureFilename.indexOf('http') > -1
|
|
? curImag.pictureFilename
|
|
: (this.sysConfig.pacsApi || this.sysConfig.apiurl) + curImag.pictureFilename;
|
|
srcList.push(image)
|
|
let lfind = arrayExistObj(oriList, 'id', curImag.id)
|
|
if (lfind > -1) {
|
|
for (let i = lfind + 1; i < oriList.length; i++) {
|
|
let e = oriList[i];
|
|
image = this.imageFilePlus(e.pictureFilename)
|
|
srcList.push(image)
|
|
}
|
|
for (let index = 0; index < lfind; index++) {
|
|
let e = oriList[index];
|
|
image = this.imageFilePlus(e.pictureFilename)
|
|
srcList.push(image)
|
|
}
|
|
}
|
|
return srcList
|
|
},
|
|
|
|
// 图片文件补全路径
|
|
imageFilePlus(fileName) {
|
|
if (fileName.indexOf('base64') > -1 || fileName.indexOf('http') > -1) {
|
|
return fileName
|
|
} else {
|
|
return (this.sysConfig.pacsApi || this.sysConfig.apiurl) + fileName
|
|
}
|
|
},
|
|
|
|
btnSavePic() {
|
|
|
|
|
|
let body = [];
|
|
// [
|
|
// {
|
|
// "registerCheckPictureId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", // 新增无需传此值
|
|
// "registerCheckId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
// "pictureFilename": "string",
|
|
// "isPrint": "string",
|
|
// "displayOrder": 0
|
|
// }
|
|
// ]
|
|
|
|
let checkPictures = deepCopy(this.checkPictures);
|
|
checkPictures.sort((a, b) => {
|
|
let seq1 = 0;
|
|
let seq2 = 0;
|
|
try {
|
|
seq1 = parseInt(a.displayOrder);
|
|
} catch (error) {
|
|
seq1 = 0;
|
|
}
|
|
try {
|
|
seq2 = parseInt(b.displayOrder);
|
|
} catch (error) {
|
|
seq2 = 0;
|
|
}
|
|
return seq1 - seq2;
|
|
});
|
|
|
|
checkPictures.forEach((e) => {
|
|
let item = {
|
|
registerCheckId: e.registerCheckId,
|
|
pictureFilename: e.pictureFilename,
|
|
isPrint: e.isPrint
|
|
};
|
|
if (e.id) item.registerCheckPictureId = e.id;
|
|
body.push(item);
|
|
});
|
|
|
|
postapi("/api/app/registercheckpicture/UpdateRegisterCheckPictureStatusMany", body)
|
|
.then((res) => {
|
|
if (res.code > -1) {
|
|
//this.getCheckPictures(checkPictures[0].registerCheckId);
|
|
}
|
|
});
|
|
},
|
|
|
|
filterMethod(keyWords) {
|
|
if (keyWords) {
|
|
this.customerOrg = [];
|
|
this.customerOrgAll.forEach((item) => {
|
|
if (
|
|
item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) > -1 ||
|
|
item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > -1
|
|
// || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
|
|
) {
|
|
this.customerOrg.push(item);
|
|
}
|
|
});
|
|
} else {
|
|
this.customerOrg = deepCopy(this.customerOrgAll);
|
|
}
|
|
},
|
|
|
|
btnQuery() {
|
|
let body = Object.assign({}, this.query)
|
|
if (!body.checkRequestNo) delete body.checkRequestNo
|
|
if (!body.patientName) delete body.patientName
|
|
if (!body.startDate || !body.endDate) {
|
|
this.$message.warning({ showClose: true, message: '请选择日期' })
|
|
return
|
|
}
|
|
|
|
// 0:普通检查; 1:检验; 2:特检; 3:放射
|
|
if (this.pacsType == 'image') {
|
|
body.checkTypeFlag = '2'
|
|
} else {
|
|
body.checkTypeFlag = '3'
|
|
}
|
|
|
|
postapi('/api/app/PacsBusiness/GetPatientRegisterPacsCheck', body)
|
|
.then(res => {
|
|
if (res.code > -1) {
|
|
res.data.items.forEach((e, i) => {
|
|
e.seq = i // 增加序号
|
|
});
|
|
this.pacsList = res.data.items
|
|
}
|
|
})
|
|
},
|
|
|
|
rowClick(row) {
|
|
this.curPacs = row
|
|
this.onQueryByPacsNo(row.checkRequestNo)
|
|
},
|
|
|
|
//右击菜单
|
|
onCellRightClick(row, column) {
|
|
this.rClickRow = { ...row }; //右击的行记录
|
|
this.rClickColumn = { ...column }; //右击的列(预留)
|
|
// console.log(row, column.property);
|
|
},
|
|
onContextmenu(event) {
|
|
//// console.log('onContextmenu',event);
|
|
if (!this.rClickRow) return false;
|
|
let row = { ...this.rClickRow };
|
|
let items = [] //菜单项
|
|
|
|
items.push({
|
|
label: "清除pacs影像数据",
|
|
onClick: () => {
|
|
postapi("/api/app/PacsBusiness/DeletePacsCheckDicomDataByRegisterCheckId", {
|
|
registerCheckId: row.registerCheckId
|
|
})
|
|
.then((res) => {
|
|
if (res.code < 0) {
|
|
this.$message.error({ showClose: true, message: res.message })
|
|
}
|
|
});
|
|
},
|
|
})
|
|
|
|
this.$contextmenu({
|
|
items,
|
|
event,
|
|
//x: event.clientX,
|
|
//y: event.clientY,
|
|
customClass: "custom-class",
|
|
zIndex: 3,
|
|
minWidth: 80,
|
|
});
|
|
|
|
this.rClickRow = null;
|
|
return false;
|
|
|
|
},
|
|
|
|
//删除小结
|
|
delSum(index) {
|
|
this.$confirm("此操作将删除该记录, 是否继续?", "提示", {
|
|
confirmButtonText: "是",
|
|
cancelButtonText: "否",
|
|
type: "warning",
|
|
}).then(() => {
|
|
this.doctorCheck.checkSummaryList.splice(index, 1);
|
|
}).catch(err => {
|
|
if (err == "cancel") {
|
|
// this.$message.info("已取消删除");
|
|
console.log('已取消删除')
|
|
}
|
|
});
|
|
},
|
|
|
|
// 浏览Dcm文件
|
|
btnBrowseDcm() {
|
|
|
|
// console.log('this.doctorCheck', this.doctorCheck.RegisterCheckEdit)
|
|
this.checkRequestNo = this.doctorCheck.RegisterCheckEdit.checkRequestNo
|
|
this.pacsParams.result = this.doctorCheck.checkItemList[0].result
|
|
let summary = ''
|
|
this.doctorCheck.checkSummaryList.forEach(e => {
|
|
summary += e.summary
|
|
});
|
|
this.pacsParams.summary = summary
|
|
this.pacsParams.row = deepCopy(this.doctorCheck.checkItemList[0])
|
|
this.pacsParams.index = 0
|
|
this.pacsParams.refresh++
|
|
|
|
let barcodeNo = this.doctorCheck.RegisterCheckEdit.checkRequestNo
|
|
if(this.pacs_interface_barcode_type == '1'){
|
|
barcodeNo = this.dataTransOpts.tableS.patient_register.patientRegisterNo
|
|
}
|
|
|
|
// console.log('pacsParams', this.pacsParams)
|
|
let token = window.sessionStorage.getItem('token')
|
|
let url = `${this.sysConfig.dcmViewers}/?mrn=${barcodeNo}&token=${token}&pacsapi=${this.sysConfig.pacsApiHttps}`
|
|
// this.iframeSrc = `${this.sysConfig.dcmViewers}/viewer?StudyInstanceUIDs=1.3.12.2.1107.5.1.4.79623.30000024091203062645300000022`
|
|
this.dialogDcm = true
|
|
// 有分屏且安装有壳
|
|
if (this.$peisAPI && this.LocalConfig.doctorCheck.isHaveExternal == 'Y') {
|
|
let inParams = ''
|
|
try {
|
|
inParams = JSON.stringify({ url })
|
|
} catch (error) {
|
|
this.$message.error({ showClose: true, message: '壳参数 JSON.stringify({ url }) 分析失败:' + error })
|
|
console.log('壳参数 JSON.stringify({ url }) 分析失败:',error)
|
|
return
|
|
}
|
|
|
|
this.$peisAPI.openExternal(inParams)
|
|
.then(res => {
|
|
if (res.code < 0) {
|
|
this.$message.error({ showClose: true, message: '壳打开分屏失败:' + res.message })
|
|
console.log( '壳打开分屏失败:',res.message)
|
|
this.iframeSrc = url
|
|
}
|
|
})
|
|
.catch(err => {
|
|
this.$message.error({ showClose: true, message: '壳打开分屏失败:' + err })
|
|
console.log( '壳打开分屏失败:',err)
|
|
this.iframeSrc = url
|
|
})
|
|
.finally(() => console.log('this.$peisAPI.openExternal over'))
|
|
|
|
} else {
|
|
this.iframeSrc = url
|
|
}
|
|
|
|
},
|
|
|
|
// 选择描述与结论
|
|
btnChooseBigtext() {
|
|
// console.log('this.pacsParams', this.pacsParams)
|
|
if(this.doctorCheck.asbitemName){
|
|
this.pacsParams.index = parseInt(this.tabChoosed)
|
|
this.pacsParams.refresh++
|
|
this.dialogWin.PacsTemplate = true
|
|
}else{
|
|
this.$message.warning({showClose:true,message:"没有可操作的数据!"})
|
|
}
|
|
|
|
},
|
|
|
|
// 确定描述与结论
|
|
btnOkBigtext() {
|
|
// console.log('this.pacsParams', this.pacsParams)
|
|
/*
|
|
if (!this.pacsParams.summary) {
|
|
this.$message.warning({ showClose: true, message: '请填写检查结论' })
|
|
return
|
|
}
|
|
|
|
this.doctorCheck.checkSummaryList = [{
|
|
id: Math.random(),
|
|
registerCheckId: this.doctorCheck.RegisterCheckEdit.id,
|
|
summary: this.pacsParams.summary,
|
|
summaryFlag: 'N',
|
|
}]
|
|
*/
|
|
if(!this.doctorCheck.asbitemName){
|
|
this.$message.warning({showClose:true,message:"没有可操作的数据!"})
|
|
return
|
|
}
|
|
if (this.doctorCheck.checkSummaryList.length < 1) {
|
|
this.$message.warning({ showClose: true, message: '请填写检查结论' })
|
|
return
|
|
}
|
|
|
|
this.save()
|
|
.then(() => {
|
|
if (this.autoNext == 'Y') {
|
|
let lfind = arrayExistObj(this.pacsList, 'seq', this.curPacs.seq)
|
|
if (lfind > -1 && this.pacsList.length - 1 > lfind) {
|
|
this.rowClick(this.pacsList[lfind + 1])
|
|
this.$refs['pacsList'].setCurrentRow(this.pacsList[lfind + 1]);
|
|
}
|
|
}
|
|
})
|
|
.catch(err => {
|
|
console.log(err)
|
|
this.$message.error({ showClose: true, message: err })
|
|
})
|
|
|
|
},
|
|
|
|
//保存数据
|
|
save() {
|
|
return new Promise((resolve, reject) => {
|
|
let checkDate = this.doctorCheck.RegisterCheckEdit.checkDate || new Date();
|
|
checkDate = moment(new Date(checkDate)).format('yyyy-MM-DD HH:mm:ss'); //yyyy-MM-DD HH:mm:ss
|
|
let checkDoctorId = this.doctorCheck.RegisterCheckEdit.checkDoctorId || null;
|
|
let registerCheckId = this.doctorCheck.RegisterCheckEdit.id
|
|
// 明细
|
|
let registerCheckItems = []
|
|
this.doctorCheck.checkItemList.forEach(e => {
|
|
registerCheckItems.push({
|
|
itemId: e.itemId,
|
|
result: e.result,
|
|
checkDoctorName: checkDoctorId,
|
|
checkDate,
|
|
})
|
|
});
|
|
// 小结
|
|
let summarys = []
|
|
this.doctorCheck.checkSummaryList.forEach(item => {
|
|
summarys.push({
|
|
summary: item.summary,
|
|
summaryFlag: item.summaryFlag,
|
|
})
|
|
});
|
|
// 建议
|
|
let suggestions = []
|
|
this.doctorCheck.checkSuggestionList.forEach(item => {
|
|
suggestions.push({
|
|
suggestion: item.suggestion
|
|
})
|
|
});
|
|
|
|
let body = {
|
|
registerCheckId,
|
|
checkDoctorId,
|
|
checkDate,
|
|
registerCheckItems,
|
|
summarys,
|
|
suggestions
|
|
}
|
|
if (summarys.length == 0) reject('请填写结论!')
|
|
|
|
postapi('/api/app/registercheck/UpdateCheckResult', body)
|
|
.then(res => {
|
|
if (res.code > -1) {
|
|
this.doctorCheck.RegisterCheckEdit.completeFlag = '1';
|
|
//更新组合项目列表记录状态
|
|
let lfind = arrayExistObj(this.doctorCheck.RegisterCheckList, 'id', body.registerCheckId)
|
|
if (lfind > -1) this.doctorCheck.RegisterCheckList[lfind].completeFlag = '1'
|
|
|
|
resolve(res)
|
|
} else {
|
|
reject(res.message)
|
|
}
|
|
})
|
|
.catch(err => reject(err))
|
|
})
|
|
},
|
|
|
|
|
|
// 处理 pacs 结果录入的情况
|
|
handlePacsResult(row, index, pacsResult) {
|
|
Object.assign(this.pacsParams, pacsResult)
|
|
},
|
|
|
|
|
|
// 通过检查条码查询相关数据
|
|
onQueryByPacsNo(checkRequestNo) {
|
|
this.checkRequestNo = checkRequestNo
|
|
postapi('/api/app/PacsBusiness/GetPatientRegisterWithCheckResultByCheckRequestNo', { checkRequestNo })
|
|
.then(res => {
|
|
if (res.code > -1) {
|
|
// 人员信息
|
|
this.dataTransOpts.tableS.patient_register = res.data.patientRegisterDetail
|
|
|
|
// 检查信息
|
|
this.doctorCheck.RegisterCheckEdit = res.data.registerCheckDetail
|
|
|
|
// 组合项目
|
|
this.doctorCheck.RegisterCheckList = [res.data.registerCheckDetail]
|
|
|
|
// 组合项目明细
|
|
this.doctorCheck.checkItemList = res.data.registerCheckItemDetails
|
|
if (this.doctorCheck.checkItemList.length > 0) {
|
|
this.tabChoosed = "0"
|
|
}
|
|
if (this.doctorCheck.checkItemList.length > 3) {
|
|
this.tabPosition = 'left'
|
|
} else {
|
|
this.tabPosition = 'top'
|
|
}
|
|
|
|
// 小结与建议
|
|
this.doctorCheck.checkSummaryList = res.data.registerCheckSummaryDetails
|
|
this.doctorCheck.checkSuggestionList = res.data.registerCheckSuggestionDetails
|
|
|
|
// 上次结果
|
|
this.doctorCheck.preResult = res.data.lastTimeAsbitemResultDetail
|
|
|
|
// 检查情况
|
|
this.doctorCheck.RegisterCheckEdit = res.data.registerCheckDetail
|
|
|
|
// 图片
|
|
this.checkPictures = res.data.registerCheckPictureDetails
|
|
this.checkPictures.forEach(e => {
|
|
e.isPrintTrans = e.isPrint == "Y" ? true : false
|
|
});
|
|
|
|
this.iframeSrc = ''
|
|
this.btnBrowseDcm()
|
|
}
|
|
})
|
|
|
|
},
|
|
|
|
},
|
|
|
|
//监听事件
|
|
watch: {
|
|
//检查项目未切换换时 也可以强制刷新数据
|
|
// "dataTransOpts.refresh.register_check_item.M": {
|
|
// // immediate: true,
|
|
// handler(newVal, oldVal) {
|
|
// console.log(`watch 检查图片 newVal:${newVal} oldVal:${oldVal} registerCheckId: ${this.dataTransOpts.tableS.register_check.id}`);
|
|
// if (newVal != oldVal) this.getCheckPictures(this.dataTransOpts.tableS.register_check.id);
|
|
// }
|
|
// },
|
|
|
|
},
|
|
};
|
|
</script>
|
|
<style scoped>
|
|
.query {
|
|
margin-left: 10px;
|
|
margin-right: 2px;
|
|
padding: 1px 1px;
|
|
}
|
|
|
|
.spanClass {
|
|
font-size: 14px;
|
|
padding: 6px 2px 0 0;
|
|
}
|
|
|
|
.btnClass {
|
|
margin: 2px 2px 0;
|
|
height: 26px;
|
|
min-width: 40px;
|
|
padding: 5px 5px;
|
|
/*原始 默认值 10px 10px */
|
|
}
|
|
|
|
/* 强制出现滚动条 */
|
|
::-webkit-scrollbar {
|
|
height: 0.5rem;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background-color: #ccc;
|
|
border-radius: 0.25rem;
|
|
}
|
|
</style>
|