对于通过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({
url: `/Study/item/${studyId}`,
method: 'get'
method: 'get',
params
})
}
export function getSeriesList(url) {

View File

@ -194,7 +194,8 @@ export default {
currentLoadIns: [],
isFromCRCUpload: false,
isReading: null,
activeSeriesId: null
activeSeriesId: null,
isPacs: false
}
},
created: function () {
@ -211,6 +212,9 @@ export default {
if (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.isFromCRCUpload = !!this.$router.currentRoute.query.isFromCRCUpload
if (this.type === 'Series') {
@ -241,7 +245,11 @@ export default {
},
methods: {
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.Result) {
this.studyCode = data.Result.StudyCode
@ -250,6 +258,11 @@ export default {
this.description = data.Result.Description
}
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}`
this.getSeriesList(url)
}

View File

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