影像检查新增推送记录列表

main
wangxiaoshuang 2024-05-28 11:15:26 +08:00
parent 2d2dadcac5
commit fd46407dfa
4 changed files with 339 additions and 0 deletions

View File

@ -37,6 +37,24 @@ export function getPatientJoinedTrialList(data) {
})
}
// 检查->scp影像推送记录
export function getSCPImageUploadList(data) {
return request({
url: '/Patient/getSCPImageUploadList',
method: 'post',
data
})
}
// 下载记录
export function getTrialSubjectVisitDownloadList(data) {
return request({
url: '/Patient/getTrialSubjectVisitDownloadList',
method: 'post',
data
})
}
// 获取患者列表(下拉框)
export function getTrialSubejctSelectList(data) {
return request({

View File

@ -0,0 +1,303 @@
<template>
<el-dialog
:visible.sync="visible"
:close-on-click-modal="false"
:fullscreen="true"
custom-class="upload-dialog"
:before-close="beforeCloseStudyDig"
>
<span slot="title"> </span>
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- Called AE -->
<el-form-item
class="my_multiple"
:label="$t('trials:inspection:search:CalledAE')"
>
<el-select
v-model="searchData.CalledAE"
clearable
style="width: 140px"
>
<el-option
v-for="(item, index) of calledAeList"
:key="index"
:label="item"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<!-- Calling AE -->
<el-form-item
class="my_multiple"
:label="$t('trials:inspection:search:CallingAE')"
>
<el-select
v-model="searchData.callingAE"
clearable
style="width: 140px"
>
<el-option
v-for="(item, index) of callingAeList"
:key="index"
:label="item"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<!-- 推送日期 -->
<el-form-item :label="$t('trials:inspection:table:pushDate')">
<el-date-picker
v-model="dateValue"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
>
</el-date-picker>
</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"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
</div>
<!--检查列表-->
<el-table
ref="viewStudyList"
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
:default-sort="{ prop: 'StartTime', order: 'descending' }"
>
<el-table-column type="index" width="40" />
<!--Called AE-->
<el-table-column
prop="CalledAE"
:label="$t('trials:inspection:table:CalledAE')"
show-overflow-tooltip
min-width="120"
>
</el-table-column>
<!--Calling AE-->
<el-table-column
prop="CallingAE"
:label="$t('trials:inspection:table:CallingAE')"
show-overflow-tooltip
min-width="120"
>
</el-table-column>
<!--Calling AE IP-->
<el-table-column
prop="CallingAEIP"
:label="$t('trials:inspection:table:CallingAEIP')"
show-overflow-tooltip
min-width="120"
>
</el-table-column>
<!--图像数量-->
<el-table-column
align="center"
prop="FileCount"
:label="$t('trials:inspection:table:FileCount')"
show-overflow-tooltip
min-width="100"
sortable="custom"
></el-table-column>
<!--图像大小-->
<el-table-column
align="center"
prop="FileSize"
:label="$t('trials:inspection:table:FileSize')"
show-overflow-tooltip
min-width="100"
sortable="custom"
>
<template slot-scope="scope">
<span>{{
scope.row.FileSize && scope.row.FileSize > 0
? `${Math.ceil(scope.row.FileSize / 1024 / 1024)}MB`
: 0
}}</span>
</template>
</el-table-column>
<!--推送开始日期-->
<el-table-column
align="center"
prop="StartTime"
:label="$t('trials:inspection:table:StartTime')"
show-overflow-tooltip
min-width="180"
sortable="custom"
></el-table-column>
<!--推送结束日期-->
<el-table-column
align="center"
prop="EndTime"
:label="$t('trials:inspection:table:EndTime')"
show-overflow-tooltip
min-width="180"
sortable="custom"
></el-table-column>
<!--操作-->
<el-table-column :label="$t('common:action:action')" min-width="80">
<template slot-scope="scope">
<!-- 影像 -->
<el-button
circle
disabled
icon="el-icon-view"
:title="$t('trials:inspection:button:image')"
@click.stop="image(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</el-dialog>
</template>
<script>
import Pagination from "@/components/Pagination";
import { getSCPImageUploadList } from "@/api/inspection.js";
import { getToken } from "@/utils/auth";
const defaultSearchData = () => {
return {
CallingAE: null,
CalledAE: null,
CallingAEIP: null,
StartTime: null,
EndTime: null,
PageIndex: 1,
PageSize: 10,
Asc: false,
SortField: "StartTime",
};
};
export default {
name: "pushRecordList",
components: { Pagination },
props: {
visible: {
required: true,
default: false,
},
calledAeList: {
required: true,
default: () => {
return [];
},
},
callingAeList: {
required: true,
default: () => {
return [];
},
},
},
data() {
return {
//
searchData: defaultSearchData(),
dateValue: [],
//
loading: false,
list: [],
total: 0,
};
},
created() {
this.getList();
},
methods: {
async getList() {
let data = {};
Object.keys(this.searchData).forEach((key) => {
data[key] = this.searchData[key];
});
if (this.dateValue && this.dateValue[0] && this.dateValue[1]) {
data.StartTime = this.$moment(this.dateValue[0]).format(
"YYYY-MM-DD HH:mm:ss"
);
data.EndTime = this.$moment(this.dateValue[1]).format(
"YYYY-MM-DD HH:mm:ss"
);
} else {
data.StartTime = null;
data.EndTime = null;
}
try {
this.loading = true;
let res = await getSCPImageUploadList(data);
this.loading = false;
if (res.IsSuccess) {
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
}
} catch (err) {
this.loading = false;
console.log(err);
}
},
//
handleSearch() {
this.searchData.PageIndex = 1;
this.getList();
},
//
handleReset() {
this.reset();
this.getList();
},
//
reset() {
this.searchData = defaultSearchData();
this.dateValue = [];
},
//
handleSortByColumn(sort) {
this.searchData.SortField = sort.prop;
if (sort.order === "ascending") this.searchData.Asc = true;
if (sort.order === "descending") this.searchData.Asc = false;
if (!sort.order) this.searchData.SortField = null;
this.getList();
},
beforeCloseStudyDig() {
this.$setOpenWindow();
this.$emit("update:visible", false);
},
//
image(item) {
let token = getToken();
const routeData = this.$router.resolve({
path: `/showdicom?studyId=${item.SCPStudyId}&TokenKey=${token}&type=Patient`,
});
let newWindow = window.open(routeData.href, "_blank");
this.$setOpenWindow(newWindow);
},
},
};
</script>

View File

@ -273,6 +273,7 @@ export default {
this.list = res.Result;
}
} catch (err) {
this.loading = false;
console.log(err);
}
},

View File

@ -92,6 +92,12 @@
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
<el-form-item>
<!-- 推送记录 -->
<el-button type="primary" @click="handleOpenDialog({}, 'push')">
{{ $t("common:button:push") }}
</el-button>
</el-form-item>
</el-form>
</template>
@ -294,6 +300,13 @@
:Patient="selectPatient"
@getList="getList"
/>
<!--推送记录列表-->
<pushRecordList
v-if="pushTrialsVisible"
:visible.sync="pushTrialsVisible"
:calledAeList="calledAeList"
:callingAeList="callingAeList"
/>
</BaseContainer>
</template>
<script>
@ -302,6 +315,7 @@ import Pagination from "@/components/Pagination";
import researchTrialsList from "./components/research-trials-list";
import addTrialsList from "./components/add-trials-list";
import viewStudyList from "./components/view-study-list";
import pushRecordList from "./components/push-record-list";
import { getPatientList, deletePatientStudyAllData } from "@/api/inspection.js";
import { getDicomCalledAEList, getDicomCallingAEList } from "@/api/dicomAE.js";
@ -328,6 +342,7 @@ export default {
researchTrialsList,
addTrialsList,
viewStudyList,
pushRecordList,
},
data() {
return {
@ -348,6 +363,8 @@ export default {
addTrialsVisible: false,
//
studyTrialsVisible: false,
//
pushTrialsVisible: false,
};
},
created() {