对于通过DICOM AE推送的影像支持按检查查看
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-07-28 14:31:50 +08:00
parent d7838051e8
commit fd683d74f9
3 changed files with 67 additions and 145 deletions

View File

@ -45,10 +45,11 @@ export function saveImageLabelList(param) {
}) })
} }
export function getStudyInfo(studyId) { export function getStudyInfo(studyId, params) {
return request({ return request({
url: `/Study/item/${studyId}`, url: `/Study/item/${studyId}`,
method: 'get' method: 'get',
params
}) })
} }
export function getSeriesList(url) { export function getSeriesList(url) {

View File

@ -194,7 +194,8 @@ export default {
currentLoadIns: [], currentLoadIns: [],
isFromCRCUpload: false, isFromCRCUpload: false,
isReading: null, isReading: null,
activeSeriesId: null activeSeriesId: null,
isPacs: false
} }
}, },
created: function () { created: function () {
@ -211,6 +212,9 @@ export default {
if (this.$router.currentRoute.query.isReading) { if (this.$router.currentRoute.query.isReading) {
this.isReading = this.$router.currentRoute.query.isReading this.isReading = this.$router.currentRoute.query.isReading
} }
if (this.$router.currentRoute.query.isPacs) {
this.isPacs = Boolean(this.$router.currentRoute.query.isPacs)
}
this.studyId = this.$router.currentRoute.query.studyId this.studyId = this.$router.currentRoute.query.studyId
this.isFromCRCUpload = !!this.$router.currentRoute.query.isFromCRCUpload this.isFromCRCUpload = !!this.$router.currentRoute.query.isFromCRCUpload
if (this.type === 'Series') { if (this.type === 'Series') {
@ -241,7 +245,11 @@ export default {
}, },
methods: { methods: {
async loadStudy() { async loadStudy() {
const data = await getStudyInfo(this.studyId) let params = {}
if (this.isPacs) {
params.IsPacs = true
}
const data = await getStudyInfo(this.studyId, params)
if (data.IsSuccess) { if (data.IsSuccess) {
if (data.Result) { if (data.Result) {
this.studyCode = data.Result.StudyCode this.studyCode = data.Result.StudyCode
@ -250,6 +258,11 @@ export default {
this.description = data.Result.Description this.description = data.Result.Description
} }
let isReading = !!this.isReading ? `?IsReading=true` : '' let isReading = !!this.isReading ? `?IsReading=true` : ''
if (isReading && this.isPacs) {
isReading += `&IsPacs=true`
} else if (!isReading && this.isPacs) {
isReading = `?IsPacs=true`
}
const url = `/series/list/${this.studyId}${isReading}` const url = `/series/list/${this.studyId}${isReading}`
this.getSeriesList(url) this.getSeriesList(url)
} }

View File

@ -3,96 +3,47 @@
<template slot="search-container"> <template slot="search-container">
<el-form :inline="true"> <el-form :inline="true">
<!--患者信息--> <!--患者信息-->
<el-form-item <el-form-item :label="$t('trials:visit:crcUpload:uploadDicomPacs:search:patientInfo')
:label=" " prop="TrialSiteKeyInfo">
$t('trials:visit:crcUpload:uploadDicomPacs:search:patientInfo') <el-input v-model="searchData.PatientInfo" size="small" clearable style="width: 190px" :placeholder="$t('trials:visit:crcUpload:uploadDicomPacs:search:placeholder')
" " />
prop="TrialSiteKeyInfo"
>
<el-input
v-model="searchData.PatientInfo"
size="small"
clearable
style="width: 190px"
:placeholder="
$t('trials:visit:crcUpload:uploadDicomPacs:search:placeholder')
"
/>
</el-form-item> </el-form-item>
<!--检查技术--> <!--检查技术-->
<el-form-item <el-form-item :label="$t('trials:visit:crcUpload:uploadDicomPacs:search:modalities')
:label=" " prop="CalledAE">
$t('trials:visit:crcUpload:uploadDicomPacs:search:modalities')
"
prop="CalledAE"
>
<el-select v-model="searchData.Modalities" clearable> <el-select v-model="searchData.Modalities" clearable>
<el-option <el-option v-for="item of DicomModalityList" :key="item" :label="item" :value="item">
v-for="item of DicomModalityList"
:key="item"
:label="item"
:value="item"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!--检查日期--> <!--检查日期-->
<el-form-item <el-form-item :label="$t('trials:visit:crcUpload:uploadDicomPacs:search:studyTime')">
:label="$t('trials:visit:crcUpload:uploadDicomPacs:search:studyTime')" <el-date-picker v-model="datetimerange" type="datetimerange" :default-time="['00:00:00', '23:59:59']"
> value-format="yyyy-MM-dd HH:mm:ss" @change="handleDatetimeChange" />
<el-date-picker
v-model="datetimerange"
type="datetimerange"
:default-time="['00:00:00', '23:59:59']"
value-format="yyyy-MM-dd HH:mm:ss"
@change="handleDatetimeChange"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t("common:button:search") }} {{ $t("common:button:search") }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button <el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }} {{ $t("common:button:reset") }}
</el-button> </el-button>
<!-- 添加 --> <!-- 添加 -->
<el-button <el-button type="primary" icon="el-icon-plus" :disabled="tableSelectData.length <= 0" @click="handleAddList">
type="primary"
icon="el-icon-plus"
:disabled="tableSelectData.length <= 0"
@click="handleAddList"
>
{{ $t("common:button:add") }} {{ $t("common:button:add") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
<template slot="main-container"> <template slot="main-container">
<el-table <el-table v-loading="loading" :data="list" class="table" @selection-change="handleSelectChange"
v-loading="loading" @sort-change="handleSortByColumn" :default-sort="{ prop: 'StudyTime', order: 'descending' }">
:data="list"
class="table"
@selection-change="handleSelectChange"
@sort-change="handleSortByColumn"
:default-sort="{ prop: 'StudyTime', order: 'descending' }"
>
<el-table-column type="selection" align="center" width="45" /> <el-table-column type="selection" align="center" width="45" />
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<!--患者信息--> <!--患者信息-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:patientMessage')
:label=" " prop="PatientIdStr" min-width="140" show-overflow-tooltip sortable="custom">
$t('trials:visit:crcUpload:uploadDicomPacs:table:patientMessage')
"
prop="PatientIdStr"
min-width="140"
show-overflow-tooltip
sortable="custom"
>
<template slot="header"> <template slot="header">
<el-tooltip placement="top"> <el-tooltip placement="top">
<div slot="content"> <div slot="content">
@ -106,10 +57,8 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div style="line-height: 15px"> <div style="line-height: 15px">
<div> <div>
<span v-if="scope.row.PatientIdStr" <span v-if="scope.row.PatientIdStr"><span style="font-weight: 500">PID: </span>{{ scope.row.PatientIdStr
><span style="font-weight: 500">PID: </span }}</span>
>{{ scope.row.PatientIdStr }}</span
>
<span v-else style="color: #f44336">N/A</span> <span v-else style="color: #f44336">N/A</span>
</div> </div>
<div> <div>
@ -138,91 +87,42 @@
</template> </template>
</el-table-column> </el-table-column>
<!--检查申请号--> <!--检查申请号-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:accNumber')" prop="AccessionNumber"
:label="$t('trials:visit:crcUpload:uploadDicomPacs:table:accNumber')" min-width="90" show-overflow-tooltip sortable="custom" />
prop="AccessionNumber"
min-width="90"
show-overflow-tooltip
sortable="custom"
/>
<!--检查模态--> <!--检查模态-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:modalities')" prop="Modalities"
:label="$t('trials:visit:crcUpload:uploadDicomPacs:table:modalities')" min-width="120" show-overflow-tooltip sortable="custom" />
prop="Modalities"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!--检查部位--> <!--检查部位-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:bodyPartExamined')
:label=" " prop="BodyPartExamined" min-width="120" show-overflow-tooltip sortable="custom" />
$t('trials:visit:crcUpload:uploadDicomPacs:table:bodyPartExamined')
"
prop="BodyPartExamined"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!--检查描述--> <!--检查描述-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:description')
:label=" " prop="Description" min-width="160" show-overflow-tooltip sortable="custom" />
$t('trials:visit:crcUpload:uploadDicomPacs:table:description')
"
prop="Description"
min-width="160"
show-overflow-tooltip
sortable="custom"
/>
<!--序列数量--> <!--序列数量-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:seriesCount')
:label=" " prop="SeriesCount" show-overflow-tooltip sortable="custom" />
$t('trials:visit:crcUpload:uploadDicomPacs:table:seriesCount')
"
prop="SeriesCount"
show-overflow-tooltip
sortable="custom"
/>
<!--图像数量--> <!--图像数量-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:instanceCount')
:label=" " prop="InstanceCount" show-overflow-tooltip sortable="custom" />
$t('trials:visit:crcUpload:uploadDicomPacs:table:instanceCount')
"
prop="InstanceCount"
show-overflow-tooltip
sortable="custom"
/>
<!--检查日期--> <!--检查日期-->
<el-table-column <el-table-column :label="$t('trials:visit:crcUpload:uploadDicomPacs:table:studyTime')" prop="StudyTime"
:label="$t('trials:visit:crcUpload:uploadDicomPacs:table:studyTime')" min-width="160" show-overflow-tooltip sortable="custom" />
prop="StudyTime"
min-width="160"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" fixed="right"> <el-table-column :label="$t('common:action:action')" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button icon="el-icon-view" :title="$t('trials:uploadedDicoms:action:preview')" circle
@click="handleViewStudy(scope.row)" />
<!-- 添加 --> <!-- 添加 -->
<el-button <el-button :title="$t('common:button:add')" @click="handleAdd(scope.row)" icon="el-icon-plus" circle />
:title="$t('common:button:add')"
type="text"
@click="handleAdd(scope.row)"
>{{ $t("common:button:add") }}</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination <pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
class="page" @pagination="getList" />
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template> </template>
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
import { import {
getVisitPatientStudyFilterList, getVisitPatientStudyFilterList,
submitVisitStudyBinding, submitVisitStudyBinding,
@ -232,6 +132,7 @@ import {
import BaseContainer from "@/components/BaseContainer"; import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination"; import Pagination from "@/components/Pagination";
import moment from "moment"; import moment from "moment";
import { getToken } from '@/utils/auth'
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
PatientInfo: null, PatientInfo: null,
@ -282,6 +183,14 @@ export default {
this.getDicomModalityList(); this.getDicomModalityList();
}, },
methods: { methods: {
//
handleViewStudy(row) {
var token = getToken()
const routeData = this.$router.resolve({
path: `/showdicom?studyId=${row.SCPStudyId}&TokenKey=${token}&type=Study&isPacs=1`,
})
window.open(routeData.href, '_blank')
},
// //
async verifyPacsImage(arr) { async verifyPacsImage(arr) {
try { try {
@ -339,7 +248,7 @@ export default {
"trials:uploadDicomList:label:confirm" "trials:uploadDicomList:label:confirm"
), ),
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
callback: (action) => {}, callback: (action) => { },
} }
); );
this.loading = false; this.loading = false;
@ -469,5 +378,4 @@ export default {
}, },
}, },
}; };
</script> </script>