Browse Source

cctj

master
pengjun 7 days ago
parent
commit
23317a57e1
  1. 2
      public/sysConfig.json
  2. 77
      src/components/common/LocalConfig.vue
  3. 35
      src/components/doctorCheck/CheckItemList.vue
  4. 9
      src/components/doctorCheck/CheckSumSug.vue
  5. 399
      src/components/doctorCheck/PacsDcmList.vue
  6. 108
      src/components/doctorCheck/RegisterCheckList.vue

2
public/sysConfig.json

@ -1,5 +1,5 @@
{
"apiurl": "http://192.168.0.188:9530",
"apiurl": "http://140.143.162.39:9529",
"softName": "神豚体检管理系统",
"pacsApi": "http://140.143.162.39:9529",
"dcmViewers": "https://app.mzaktj.com:4436",

77
src/components/common/LocalConfig.vue

@ -82,6 +82,22 @@
</el-tab-pane>
<el-tab-pane label="医生诊台">
<el-form label-width="100px" size="medium">
<el-row>
<el-col :span="6">
<el-form-item label="全选录入框">
<el-checkbox v-model="LocalConfig.doctorCheck.isSelectAll" size="small" true-label="Y"
false-label="N" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-tooltip content="医生诊台保存结果后,自动跳至下一个项目" placement="top">
<el-form-item label="自动下个项目">
<el-checkbox v-model="LocalConfig.doctorCheck.isAutoNext" size="small" true-label="Y"
false-label="N" />
</el-form-item>
</el-tooltip>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="是否显示图片">
@ -98,19 +114,36 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="全选录入框">
<el-checkbox v-model="LocalConfig.doctorCheck.isSelectAll" size="small" true-label="Y"
false-label="N" />
<el-form-item label="pacs看图描述">
<el-input type="number" v-model="LocalConfig.doctorCheck.pacsDescLines" size="small" >
<template slot="append">控件行数</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-tooltip content="医生诊台保存结果后,自动跳至下一个项目" placement="top">
<el-form-item label="自动下个项目">
<el-checkbox v-model="LocalConfig.doctorCheck.isAutoNext" size="small" true-label="Y"
false-label="N" />
<el-form-item label="pacs看图描述">
<el-input type="number" v-model="LocalConfig.doctorCheck.pacsDescLineH" size="small" >
<template slot="append">控件行高</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-tooltip content="医生诊台和pacs看图字体大小设置" placement="top">
<el-form-item label="pacs看图字体">
<el-input type="number" v-model="LocalConfig.doctorCheck.pacsDescFontSize" size="small" >
<template slot="append">px 字体大小</template>
</el-input>
</el-form-item>
</el-tooltip>
</el-col>
<el-col :span="6">
<el-form-item label="有无扩展屏">
<el-checkbox v-model="LocalConfig.doctorCheck.isHaveExternal" size="small" true-label="Y"
false-label="N" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
@ -155,7 +188,15 @@
<el-input v-model="LocalConfig.doctorCheck.scheduledAet" size="small" />
</el-form-item>
</el-col>
<el-col :span="6" v-if="LocalConfig.doctorCheck.isPacsWorklist == 'Y'">
<el-form-item label="设备ID">
<el-select v-model="LocalConfig.doctorCheck.deviceId" placeholder="设备" clearable filterable
size="small">
<el-option v-for="item in localDict.deviceList" :key="item.id" :label="item.displayName"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
@ -220,10 +261,16 @@ export default {
isQueue: 'N', //
queueRoom: '', //
queueItemTypeIds: [], //
isBroadcast: 'N', // 广
isBroadcast: 'N', // 广
isPacsWorklist: 'N', // DCM-worklist
scheduledAet: '', //scheduledAet
deviceId:"", // ID
pacsDescLines:'5', //
pacsDescLineH:'18', //
pacsDescFontSize: 14, //
isHaveExternal:'N', // pacs
},
lisLab: {
specimens: [], // ID
@ -232,7 +279,8 @@ export default {
LocalConfigInit: {},
localDict: {
room: [], //
pacsTypes: [{ label: 'dcm', value: 'dcm' }, { label: '图片', value: 'image' }]
pacsTypes: [{ label: 'dcm', value: 'dcm' }, { label: '图片', value: 'image' }],
deviceList:[], // pacs
}
};
},
@ -250,7 +298,7 @@ export default {
this.LocalConfig = Object.assign({}, this.LocalConfigInit, JSON.parse(LocalConfig) || {})
if (this.LocalConfig && this.LocalConfig.patientRegister && this.LocalConfig.patientRegister.printGuideLabel) {
this.printGuideLabel = deepCopy(this.LocalConfig.patientRegister.printGuideLabel)
}
}
} catch (error) {
console.log('window.localStorage.getItem("LocalConfig")', error)
}
@ -292,6 +340,13 @@ export default {
}
});
//
postapi("/api/app/PacsBusiness/GetDeviceListByCheckTypeFlag",{checkTypeFlag:'1'}).then((res) => {
if (res.code != -1) {
this.localDict.deviceList = res.data;
}
});
},
},
watch: {

35
src/components/doctorCheck/CheckItemList.vue

@ -5,8 +5,9 @@
<el-table-column prop="itemName" label="项目" width="220" />
<el-table-column prop="result" label="结果" min-width="200">
<template slot-scope="scope">
<div style="display: flex">
<el-autocomplete style="width: 100%" type="textarea" v-model="scope.row.result" placeholder="请输入结果值"
<div style="display: flex;">
<el-autocomplete style="width: 100%"
type="textarea" v-model="scope.row.result" placeholder="请输入结果值"
:disabled="rowResultDisabled(scope.row)" :autosize="{ minRows: 1, maxRows: 10 }" :trigger-on-focus="false"
:fetch-suggestions="querySearch" :data-lineModeFlag="scope.row.lineModeFlag" @input="
madeTooltips(scope.$index);
@ -264,7 +265,14 @@ export default {
summary: "",
},
curRow: {},
isSelectAll: 'N', //
//
LocalConfig:{
doctorCheck:{
isSelectAll: 'N', //
pacsDescFontSize: "14px", //
}
},
};
},
@ -272,7 +280,9 @@ export default {
this.dictInit();
let LocalConfig = JSON.parse(window.localStorage.getItem("LocalConfig") || null)
if (LocalConfig && LocalConfig.doctorCheck && LocalConfig.doctorCheck.isSelectAll) this.isSelectAll = LocalConfig.doctorCheck.isSelectAll
if (LocalConfig?.doctorCheck?.isSelectAll) this.LocalConfig.doctorCheck.isSelectAll = LocalConfig.doctorCheck.isSelectAll
if (LocalConfig?.doctorCheck?.pacsDescFontSize) this.LocalConfig.doctorCheck.pacsDescFontSize = LocalConfig.doctorCheck.pacsDescFontSize+'px'
},
//
@ -927,7 +937,7 @@ export default {
//
input.addEventListener("click", (event) => {
if (this.isSelectAll == 'Y') {
if (this.LocalConfig.doctorCheck.isSelectAll == 'Y') {
input.select();
}
});
@ -1017,79 +1027,68 @@ export default {
height: 23px;
line-height: 1.25;
padding: 2px 15px 2px 2px;
font-size: v-bind("LocalConfig.doctorCheck.pacsDescFontSize");
font-family: "Microsoft YaHei";
}
/*正常*/
::v-deep .tipsNormal .el-textarea__inner {
background-color: v-bind("tipsNormal.backgroundColor") !important;
color: v-bind("tipsNormal.color") !important;
font-family: "Microsoft YaHei";
}
/*错误*/
::v-deep .tipsError .el-textarea__inner {
background-color: v-bind("tipsError.backgroundColor") !important;
color: v-bind("tipsError.color") !important;
font-family: "Microsoft YaHei";
}
/*阴性 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsNegative .el-textarea__inner {
background-color: v-bind("tipsNegative.backgroundColor") !important;
color: v-bind("tipsNegative.color") !important;
font-family: "Microsoft YaHei";
}
/*弱阳性 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsLowPositive .el-textarea__inner {
background-color: v-bind("tipsLowPositive.backgroundColor") !important;
color: v-bind("tipsLowPositive.color") !important;
font-family: "Microsoft YaHei";
}
/*阳性 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsPositive .el-textarea__inner {
background-color: v-bind("tipsPositive.backgroundColor") !important;
color: v-bind("tipsPositive.color") !important;
font-family: "Microsoft YaHei";
}
/*偏低 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsLow .el-textarea__inner {
background-color: v-bind("tipsLow.backgroundColor") !important;
color: v-bind("tipsLow.color") !important;
font-family: "Microsoft YaHei";
}
/*偏高 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsHigh .el-textarea__inner {
background-color: v-bind("tipsHigh.backgroundColor") !important;
color: v-bind("tipsHigh.color") !important;
font-family: "Microsoft YaHei";
}
/*超低 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsSuperLow .el-textarea__inner {
background-color: v-bind("tipsSuperLow.backgroundColor") !important;
color: v-bind("tipsSuperLow.color") !important;
font-family: "Microsoft YaHei";
}
/*超高 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsSuperHigh .el-textarea__inner {
background-color: v-bind("tipsSuperHigh.backgroundColor") !important;
color: v-bind("tipsSuperHigh.color") !important;
font-family: "Microsoft YaHei";
}
/*文字性危及值 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
::v-deep .tipsSuper .el-textarea__inner {
background-color: v-bind("tipsSuper.backgroundColor") !important;
color: v-bind("tipsSuper.color") !important;
font-family: "Microsoft YaHei";
}
::v-deep .commonFont .el-textarea__inner {
font-family: "Microsoft YaHei";
}
</style>

9
src/components/doctorCheck/CheckSumSug.vue

@ -18,10 +18,10 @@
<div></div>
</div>
</template>
<template slot-scope="scope">
<div style="display: flex;">
<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 }"
:disabled="doctorBtnDisabled('delSum')" placeholder="请输入小结">
placeholder="请输入小结" :style="`font-size: ${pacsDescFontSize}px;`">
</el-input>
<el-button type="danger" style="min-width:23px;padding:2px;" icon="el-icon-delete"
@click="delSum(scope.$index)" :disabled="doctorBtnDisabled('delSum')" size="small"></el-button>
@ -174,6 +174,7 @@ export default {
},
activeName:'preResult',
doctor_check_disp_suggestion:'N', //
pacsDescFontSize: 14, //
};
},
@ -182,6 +183,8 @@ export default {
let userPriv = window.sessionStorage.getItem('userPriv')
if (userPriv) this.pagePriv.privs = deepCopy(getPagePriv(this.pagePriv.routeUrlorPageName))
let LocalConfig = JSON.parse(window.localStorage.getItem("LocalConfig") || null)
if (LocalConfig?.doctorCheck?.pacsDescFontSize) this.pacsDescFontSize = LocalConfig.doctorCheck.pacsDescFontSize
postapi('/api/app/SysParmValue/GetSysParmValueBySysParmId', { sysParmId:'doctor_check_disp_suggestion' })
.then(res => {

399
src/components/doctorCheck/PacsDcmList.vue

@ -4,163 +4,175 @@
体检 /<span class="contenttitleBold">pacs看图</span>
</div>
<div style="display: flex;">
<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 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 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 style="width: 310px;margin-left: 2px;">
<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 v-else>
<iframe :src="iframeSrc" :height="window.pageHeight - 105" :width="window.pageWidth - 330"></iframe>
</div>
</div>
<div v-if="false" style="margin-top: 5px;">
<span style="color: #232748;">人员信息</span>
<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;">
<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 />
<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="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 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 style="display: flex;">
<span style="width: 80px;margin: 7px 0;">年龄</span>
<el-input v-model="dataTransOpts.tableS.patient_register.age" size="small" disabled />
<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>
<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 :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>
<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%;border: 1px solid #232748;" type="textarea" v-model="item.result"
placeholder="请输入检查结果" :autosize="{ minRows: 5, maxRows: 5 }" />
<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-tabs>
</div>
<div style="margin-top: -15px;">
<span style="color: #232748;">检查结论</span>
<el-table row-key="id" :data="doctorCheck.checkSummaryList" size="samll" height="120" 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 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>
</template>
<template slot-scope="scope">
<div style="display: flex;">
<el-input type="textarea" v-model="scope.row.summary" :autosize="{ minRows: 1, maxRows: 100 }"
placeholder="请输入小结">
</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>
</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>
<!--
<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 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>
@ -187,7 +199,8 @@ export default {
CheckPictureUpload, PacsTemplate
},
data() {
return {
return {
rightWidth: 430, //
sysConfig: {}, //
pagePriv: {
routeUrlorPageName: 'doctorCheck', //
@ -228,6 +241,18 @@ export default {
tabChoosed: "0",
tabPosition: "top", //
customerOrg:[], //
LocalConfig: {
doctorCheck: { //
scheduledAet: '', //scheduledAet
// deviceId: '', // ID
pacsDescLines: '5',
pacsDescLineH: '18',
isHaveExternal: 'N',
pacsDescFontSize: 14, //
}
},
pacs_interface_barcode_type:'0', //pacs0:1:
};
},
@ -237,7 +262,19 @@ export default {
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 && LocalConfig.doctorCheck && LocalConfig.doctorCheck.pacsType) this.pacsType = LocalConfig.doctorCheck.pacsType
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) => {
@ -249,6 +286,14 @@ export default {
}
});
// (pacs0: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"
}
})
},
//
@ -274,9 +319,26 @@ export default {
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() {
return this.window.pageHeight - 105 - 360 - 76
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,
@ -498,20 +560,59 @@ export default {
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')
this.iframeSrc = `${this.sysConfig.dcmViewers}/?mrn=${this.doctorCheck.RegisterCheckEdit.checkRequestNo}&token=${token}&pacsapi=${this.sysConfig.pacsApiHttps}`
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)
this.pacsParams.index = parseInt(this.tabChoosed)
this.pacsParams.refresh++
this.dialogWin.PacsTemplate = true
if(this.doctorCheck.asbitemName){
this.pacsParams.index = parseInt(this.tabChoosed)
this.pacsParams.refresh++
this.dialogWin.PacsTemplate = true
}else{
this.$message.warning({showClose:true,message:"没有可操作的数据!"})
}
},
//
@ -530,6 +631,10 @@ export default {
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

108
src/components/doctorCheck/RegisterCheckList.vue

@ -29,7 +29,8 @@
<el-collapse-item v-if="registerCheckList2.length > 0" title="特检" name="2">
<el-table :data="registerCheckList2" style="width: 100%;" border highlight-current-row @row-click="rowClick"
:show-header="false" :row-style="{ height: '28px' }">
<el-table-column prop="asbitemName" label="组合项目" :width="LocalConfig.doctorCheck.isPacsWorklist == 'Y' ? 153:184">
<el-table-column prop="asbitemName" label="组合项目"
:width="LocalConfig.doctorCheck.isPacsWorklist == 'Y' ? 153 : 184">
<template slot-scope="scope">
<div :style="`padding: 0 5px;color: ${setCheckStatusColor(scope.row.completeFlag)};`">
{{ scope.row.asbitemName }}
@ -38,8 +39,8 @@
</el-table-column>
<el-table-column v-if="LocalConfig.doctorCheck.isPacsWorklist == 'Y'" width="30" align="center">
<template slot-scope="scope">
<i class="el-icon-s-order" @click="pacsRequest(scope.row.checkRequestNo)"
style="font-size: 24px;color: blue;cursor:pointer;"></i>
<i class="el-icon-s-order" @click="pacsRequest(scope.row.checkRequestNo)"
style="font-size: 24px;color: blue;cursor:pointer;"></i>
</template>
</el-table-column>
</el-table>
@ -47,7 +48,8 @@
<el-collapse-item v-if="registerCheckList3.length > 0" title="放射" name="3">
<el-table :data="registerCheckList3" style="width: 100%;" border highlight-current-row @row-click="rowClick"
:show-header="false" :row-style="{ height: '28px' }">
<el-table-column prop="asbitemName" label="组合项目" :width="LocalConfig.doctorCheck.isPacsWorklist == 'Y' ? 153:184">
<el-table-column prop="asbitemName" label="组合项目"
:width="LocalConfig.doctorCheck.isPacsWorklist == 'Y' ? 153 : 184">
<template slot-scope="scope">
<div :style="`padding: 0 5px;color: ${setCheckStatusColor(scope.row.completeFlag)};`">
{{ scope.row.asbitemName }}
@ -75,27 +77,48 @@ export default {
components: {},
data() {
return {
sysConfig: {}, //
activeNames: ['0', '1', '2', '3'],
LocalConfig: {
doctorCheck: { //
isPacsWorklist: 'N', // DCM-worklist
scheduledAet: '', //scheduledAet
scheduledAet: '', //scheduledAet
deviceId: "", // ID
isCheckPicture: false, //
pacsType: 'image', //[{ label: 'dcm', value: 'dcm' }, { label: '', value: 'image' }],
isHaveExternal: 'N', // pacs
}
},
pacs_interface_barcode_type:'0', //pacs0:1:
};
},
created() {
let LocalConfigStr = window.localStorage.getItem("LocalConfig") || null
if(LocalConfigStr){
try {
let LocalConfig = JSON.parse(LocalConfigStr)
if(LocalConfig?.doctorCheck?.isPacsWorklist) this.LocalConfig.doctorCheck.isPacsWorklist = LocalConfig.doctorCheck.isPacsWorklist
if(LocalConfig?.doctorCheck?.scheduledAet) this.LocalConfig.doctorCheck.scheduledAet = LocalConfig.doctorCheck.scheduledAet
} catch (error) {
console.log('error',error)
}
created() {
try {
this.sysConfig = JSON.parse(window.sessionStorage.getItem('sysConfig'))
let LocalConfig = JSON.parse(window.localStorage.getItem("LocalConfig") || null)
if (LocalConfig?.doctorCheck?.isPacsWorklist) this.LocalConfig.doctorCheck.isPacsWorklist = LocalConfig.doctorCheck.isPacsWorklist
if (LocalConfig?.doctorCheck?.scheduledAet) this.LocalConfig.doctorCheck.scheduledAet = LocalConfig.doctorCheck.scheduledAet
if (LocalConfig?.doctorCheck?.isCheckPicture) this.LocalConfig.doctorCheck.isCheckPicture = LocalConfig.doctorCheck.isCheckPicture
if (LocalConfig?.doctorCheck?.pacsType) this.LocalConfig.doctorCheck.pacsType = LocalConfig.doctorCheck.pacsType
if (LocalConfig?.doctorCheck?.isHaveExternal) this.LocalConfig.doctorCheck.isHaveExternal = LocalConfig.doctorCheck.isHaveExternal
// (pacs0: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"
}
})
} catch (error) {
console.log('error', error)
this.$message.error({ showClose: true, message: error.message })
}
},
//
@ -153,8 +176,55 @@ export default {
this.dataTransOpts.refresh.register_check.S++
this.dataTransOpts.refresh.register_check_item.M++
//
// dcm
if (this.$peisAPI && this.LocalConfig.doctorCheck.isCheckPicture
&& this.LocalConfig.doctorCheck.pacsType == 'dcm'
&& this.LocalConfig.doctorCheck.isHaveExternal == 'Y'
) {
this.browseDcm(row)
}
},
// Dcm dcm Dcm
browseDcm(row) {
let token = window.sessionStorage.getItem('token')
let barcodeNo = row.checkRequestNo
if(this.pacs_interface_barcode_type == '1'){
barcodeNo = row.patientRegisterNo
}
let url = ''
url = `${this.sysConfig.dcmViewers}/?mrn=${barcodeNo}&registerCheckId=${row.id}&token=${token}&pacsapi=${this.sysConfig.pacsApiHttps}`
//if (this.isDescription == 'Y' && this.curPacs.pacsDesc) url += `&description=${this.curPacs.pacsDesc}`
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'))
},
//
registerCheckList(patientRegisterId) {
if (!patientRegisterId) {
@ -207,14 +277,14 @@ export default {
},
// pacsDCM-Worklist
pacsRequest(checkRequestNo){
pacsRequest(checkRequestNo) {
let body = {
scheduledAet: this.LocalConfig.doctorCheck.scheduledAet,
checkRequestNo
}
postapi('/api/app/Worklist/CreateRegisterCheckWorklist',body).then(res => {
if(res.code > -1){
this.$message.success({showClose:true,message:"往 DCM-Worklist 发送申请成功!"})
postapi('/api/app/Worklist/CreateRegisterCheckWorklist', body).then(res => {
if (res.code > -1) {
this.$message.success({ showClose: true, message: "往 DCM-Worklist 发送申请成功!" })
}
})
},

Loading…
Cancel
Save