Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details

uat_us
caiyiling 2024-09-20 16:46:13 +08:00
commit d67bc1e02d
3 changed files with 270 additions and 189 deletions

View File

@ -17,11 +17,7 @@
</el-form-item>
<!-- 用户名称 -->
<el-form-item :label="$t('trials:downloadMonitor:table:userName')">
<el-input
v-model="searchData.Name"
style="width: 120px"
clearable
/>
<el-input v-model="searchData.Name" style="width: 120px" clearable />
</el-form-item>
<!-- 用户类型 -->
<el-form-item
@ -150,7 +146,7 @@
<!-- 用户类型 -->
<el-table-column
prop="VisitName"
min-width="80"
min-width="100"
:label="$t('trials:downloadMonitor:table:userType')"
show-overflow-tooltip
sortable="custom"
@ -164,7 +160,7 @@
<!-- 检查数量 -->
<el-table-column
prop="VisitName"
min-width="80"
min-width="100"
:label="$t('trials:downloadMonitor:table:studyNum')"
show-overflow-tooltip
sortable="custom"
@ -212,7 +208,7 @@
<!-- 状态 -->
<el-table-column
prop="IsSuccess"
min-width="130"
min-width="100"
:label="$t('trials:downloadMonitor:table:status')"
show-overflow-tooltip
sortable="custom"
@ -239,6 +235,17 @@
show-overflow-tooltip
sortable="custom"
/>
<!-- 总共用时 -->
<el-table-column
prop="UploadIntervalStr"
min-width="100"
:label="$t('trials:downloadMonitor:table:totalTime')"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ scope.row.UploadIntervalStr }}
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
@ -270,7 +277,7 @@ const searchDataDefault = () => {
Ip: null,
ImageType: null,
UserType: null,
Name:null
Name: null,
}
}
export default {

View File

@ -65,7 +65,7 @@
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t("common:button:search") }}
{{ $t('common:button:search') }}
</el-button>
<!-- 重置 -->
<el-button
@ -73,7 +73,7 @@
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
@ -176,6 +176,17 @@
show-overflow-tooltip
sortable="custom"
/>
<!-- 总共用时 -->
<el-table-column
prop="UploadIntervalStr"
min-width="100"
:label="$t('trials:pushRecord:table:totalTime')"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ scope.row.UploadIntervalStrs }}
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
@ -193,10 +204,10 @@ import {
getSCPImageUploadList,
getDicomCalledAEList,
getDicomCallingAEList,
} from "@/api/trials";
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import moment from "moment";
} from '@/api/trials'
import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination'
import moment from 'moment'
const searchDataDefault = () => {
return {
CallingAE: null,
@ -207,9 +218,9 @@ const searchDataDefault = () => {
PageIndex: 1,
PageSize: 20,
Asc: false,
SortField: "StartTime",
};
};
SortField: 'StartTime',
}
}
export default {
components: { BaseContainer, Pagination },
data() {
@ -222,14 +233,14 @@ export default {
datetimerange: [],
calledAEList: [],
callingAEList: [],
};
}
},
created() {
this.getCalledAEList();
this.getCallingAEList();
this.getCalledAEList()
this.getCallingAEList()
},
mounted() {
this.getList();
this.getList()
},
methods: {
// AE
@ -237,13 +248,13 @@ export default {
try {
let params = {
TrialId: this.$route.query.trialId,
};
let res = await getDicomCalledAEList(params);
}
let res = await getDicomCalledAEList(params)
if (res.IsSuccess) {
this.calledAEList = res.Result;
this.calledAEList = res.Result
}
} catch (err) {
console.log(err);
console.log(err)
}
},
// AE
@ -251,60 +262,60 @@ export default {
try {
let params = {
TrialId: this.$route.query.trialId,
};
let res = await getDicomCallingAEList(params);
}
let res = await getDicomCallingAEList(params)
if (res.IsSuccess) {
this.callingAEList = res.Result;
this.callingAEList = res.Result
}
} catch (err) {
console.log(err);
console.log(err)
}
},
getList() {
this.loading = true;
this.searchData.TrialId = this.$route.query.trialId;
this.loading = true
this.searchData.TrialId = this.$route.query.trialId
getSCPImageUploadList(this.searchData)
.then((res) => {
this.loading = false;
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
})
.catch(() => {
this.loading = false;
});
this.loading = false
})
},
handleDatetimeChange(val) {
if (val) {
this.searchData.StartTime = val[0];
this.searchData.EndTime = val[1];
this.searchData.StartTime = val[0]
this.searchData.EndTime = val[1]
} else {
this.searchData.StartTime = "";
this.searchData.EndTime = "";
this.searchData.StartTime = ''
this.searchData.EndTime = ''
}
},
handleSearch() {
this.searchData.PageIndex = 1;
this.getList();
this.searchData.PageIndex = 1
this.getList()
},
//
handleReset() {
this.datetimerange = null;
this.handleDatetimeChange();
this.searchData = searchDataDefault();
this.getList();
this.datetimerange = null
this.handleDatetimeChange()
this.searchData = searchDataDefault()
this.getList()
},
//
handleSortByColumn(column) {
if (column.order === "ascending") {
this.searchData.Asc = true;
if (column.order === 'ascending') {
this.searchData.Asc = true
} else {
this.searchData.Asc = false;
this.searchData.Asc = false
}
this.searchData.SortField = column.prop;
this.searchData.PageIndex = 1;
this.getList();
this.searchData.SortField = column.prop
this.searchData.PageIndex = 1
this.getList()
},
},
};
}
</script>

View File

@ -5,9 +5,14 @@
<el-form :inline="true">
<!-- 中心编号 -->
<el-form-item :label="$t('trials:uploadMonitor:table:siteId')">
<el-select v-model="searchData.SiteId" clearable filterable style="width:120px;">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 120px"
>
<el-option
v-for="(item,index) of siteOptions"
v-for="(item, index) of siteOptions"
:key="index"
:label="item.TrialSiteCode"
:value="item.SiteId"
@ -18,15 +23,18 @@
<el-form-item :label="$t('trials:uploadMonitor:table:subjectId')">
<el-input
v-model="searchData.SubjectInfo"
style="width:120px;"
style="width: 120px"
clearable
/>
</el-form-item>
<!-- 访视名称 -->
<el-form-item class="my_multiple" :label="$t('trials:uploadMonitor:table:visitName')">
<el-form-item
class="my_multiple"
:label="$t('trials:uploadMonitor:table:visitName')"
>
<el-select
v-model="searchData.VisitPlanArray"
style="width:140px"
style="width: 140px"
clearable
multiple
>
@ -38,11 +46,7 @@
>
<span style="float: left">{{ item.VisitName }}</span>
</el-option>
<el-option
key="Other"
label="Out of Plan"
value="1.11"
/>
<el-option key="Other" label="Out of Plan" value="1.11" />
</el-select>
</el-form-item>
<!-- 检查编号 -->
@ -50,33 +54,70 @@
<el-input v-model="searchData.StudyCode" />
</el-form-item>
<el-form-item :label="$t('trials:uploadMonitor:table:imageType')">
<el-select v-model="searchData.IsDicom" style="width:120px" clearable>
<el-option v-for="item of $d.IsDicom" :label="item.label" :value="item.value" :key="`RoleName${item.value}`"/>
<el-select
v-model="searchData.IsDicom"
style="width: 120px"
clearable
>
<el-option
v-for="item of $d.IsDicom"
:label="item.label"
:value="item.value"
:key="`RoleName${item.value}`"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('trials:uploadMonitor:table:uploader')">
<el-input
v-model="searchData.Uploader"
style="width:120px;"
style="width: 120px"
clearable
/>
</el-form-item>
<el-form-item :label="$t('trials:uploadMonitor:table:uploadStatus')">
<el-select v-model="searchData.IsSuccess" style="width:120px" clearable>
<el-option v-for="item of $d.YesOrNo" :label="item.label" :value="item.value" :key="`RoleName${item.value}`"/>
<el-select
v-model="searchData.IsSuccess"
style="width: 120px"
clearable
>
<el-option
v-for="item of $d.YesOrNo"
:label="item.label"
:value="item.value"
:key="`RoleName${item.value}`"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('trials:uploadMonitor:table:uploadTime')">
<el-date-picker
v-model="datetimerange"
type="datetimerange"
:default-time="['00:00:00', '23:59:59']"
:start-placeholder="$t('trials:loginLog:table:beginTime')"
:end-placeholder="$t('trials:loginLog:table:endTime')"
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-download" @click="handleExport">
<el-button
type="primary"
icon="el-icon-download"
@click="handleExport"
>
{{ $t('common:button:export') }}
</el-button>
</el-form-item>
@ -84,13 +125,13 @@
</template>
<template slot="main-container">
<el-table
v-adaptive="{bottomOffset:60}"
v-adaptive="{ bottomOffset: 60 }"
v-loading="loading"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
:default-sort ="{prop: 'ArchiveFinishedTime', order: 'descending'}"
:default-sort="{ prop: 'ArchiveFinishedTime', order: 'descending' }"
>
<el-table-column type="index" width="40" align="left" />
<!-- 中心编号 -->
@ -134,7 +175,7 @@
sortable="custom"
>
<template slot-scope="scope">
{{$fd('IsDicom', scope.row.IsDicom)}}
{{ $fd('IsDicom', scope.row.IsDicom) }}
</template>
</el-table-column>
<!-- 上传人 -->
@ -153,63 +194,6 @@
show-overflow-tooltip
sortable="custom"
/>
<!-- 开始时间 -->
<el-table-column
prop="UploadStartTime"
min-width="140"
:label="$t('trials:uploadMonitor:table:beginTime')"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope">
{{scope.row.UploadStartTimeStr}}
</template>
</el-table-column>
<!-- 结束时间 -->
<el-table-column
prop="ArchiveFinishedTime"
min-width="140"
:label="$t('trials:uploadMonitor:table:endTime')"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope">
{{scope.row.ArchiveFinishedTime}}
</template>
</el-table-column>
<!-- 上传用时 -->
<el-table-column
prop="UploadIntervalStr"
min-width="120"
:label="$t('trials:uploadMonitor:table:uploadInterval')"
show-overflow-tooltip
>
<template slot-scope="scope">
{{scope.row.UploadIntervalStr}}
</template>
</el-table-column>
<!-- 归档用时 -->
<el-table-column
prop="ArchiveIntervalStr"
min-width="120"
:label="$t('trials:uploadMonitor:table:archiveInterval')"
show-overflow-tooltip
>
<template slot-scope="scope">
{{scope.row.ArchiveIntervalStr}}
</template>
</el-table-column>
<!-- 总共用时 -->
<el-table-column
prop="TotalMillisecondsInterval"
min-width="100"
:label="$t('trials:uploadMonitor:table:totalTime')"
show-overflow-tooltip
>
<template slot-scope="scope">
{{scope.row.TimeInterval}}
</template>
</el-table-column>
<!-- 文件数 -->
<el-table-column
prop="FileCount"
@ -227,7 +211,7 @@
sortable="custom"
>
<template slot-scope="scope">
{{fileSizeFormatter(scope.row.FileSize)}}
{{ fileSizeFormatter(scope.row.FileSize) }}
</template>
</el-table-column>
<!-- 是否有重复文件 -->
@ -251,16 +235,49 @@
sortable="custom"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.IsSuccess" type="primary"> {{ $fd('YesOrNo', scope.row.IsSuccess) }}</el-tag>
<el-tag v-else type="danger"> {{ $fd('YesOrNo', scope.row.IsSuccess) }}</el-tag>
<el-tag v-if="scope.row.IsSuccess" type="primary">
{{ $fd('YesOrNo', scope.row.IsSuccess) }}</el-tag
>
<el-tag v-else type="danger">
{{ $fd('YesOrNo', scope.row.IsSuccess) }}</el-tag
>
</template>
</el-table-column>
<!-- <el-table-column
prop="Note"
min-width="110"
:label="$t('trials:uploadMonitor:table:remark')"
<!-- 开始时间 -->
<el-table-column
prop="UploadStartTime"
min-width="140"
:label="$t('trials:uploadMonitor:table:beginTime')"
show-overflow-tooltip
/> -->
sortable="custom"
>
<template slot-scope="scope">
{{ scope.row.UploadStartTimeStr }}
</template>
</el-table-column>
<!-- 结束时间 -->
<el-table-column
prop="ArchiveFinishedTime"
min-width="140"
:label="$t('trials:uploadMonitor:table:endTime')"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope">
{{ scope.row.ArchiveFinishedTime }}
</template>
</el-table-column>
<!-- 总共用时 -->
<el-table-column
prop="TotalMillisecondsInterval"
min-width="100"
:label="$t('trials:uploadMonitor:table:totalTime')"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ scope.row.TimeInterval }}
</template>
</el-table-column>
<el-table-column
:label="$t('common:action:action')"
width="80"
@ -279,7 +296,13 @@
</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>
<el-dialog
v-if="lookVisible"
@ -290,28 +313,49 @@
:close-on-click-modal="false"
custom-class="base-dialog-wrapper"
>
<div style="max-height: 500px;overflow-y: auto;padding: 0 20px">
<div style="display: flex;justify-content: space-around;margin-bottom: 20px">
<span>{{$t('trials:uploadDicomList:table:FailedNumber')}}: {{lookText.Failed.length}}</span>
<span>{{$t('trials:uploadDicomList:table:ExistedNumber')}}: {{lookText.Existed.length}}</span>
<span>{{$t('trials:uploadDicomList:table:UploadedNumber')}}: {{lookText.Uploaded.length}}</span>
<div style="max-height: 500px; overflow-y: auto; padding: 0 20px">
<div
style="
display: flex;
justify-content: space-around;
margin-bottom: 20px;
"
>
<span
>{{ $t('trials:uploadDicomList:table:FailedNumber') }}:
{{ lookText.Failed.length }}</span
>
<span
>{{ $t('trials:uploadDicomList:table:ExistedNumber') }}:
{{ lookText.Existed.length }}</span
>
<span
>{{ $t('trials:uploadDicomList:table:UploadedNumber') }}:
{{ lookText.Uploaded.length }}</span
>
</div>
<div style="margin-bottom: 10px; font-size: 12px">
<div style="font-size: 14px; margin-bottom: 5px">
{{ $t('trials:uploadDicomList:table:Failed') }}
</div>
<div style="margin-bottom: 10px;font-size:12px">
<div style="font-size: 14px;margin-bottom: 5px">{{$t('trials:uploadDicomList:table:Failed')}}</div>
<div v-if="lookText.Failed.length">
<div v-for="item of lookText.Failed" :key="item">{{item}}</div>
<div v-for="item of lookText.Failed" :key="item">{{ item }}</div>
</div>
</div>
<div style="margin-bottom: 10px;font-size:12px">
<div style="font-size: 14px;margin-bottom: 5px">{{$t('trials:uploadDicomList:table:Existed')}}</div>
<div style="margin-bottom: 10px; font-size: 12px">
<div style="font-size: 14px; margin-bottom: 5px">
{{ $t('trials:uploadDicomList:table:Existed') }}
</div>
<div v-if="lookText.Existed.length">
<div v-for="item of lookText.Existed" :key="item">{{item}}</div>
<div v-for="item of lookText.Existed" :key="item">{{ item }}</div>
</div>
</div>
<div style="margin-bottom: 10px;font-size:12px">
<div style="font-size: 14px;margin-bottom: 5px">{{$t('trials:uploadDicomList:table:Uploaded')}}</div>
<div style="margin-bottom: 10px; font-size: 12px">
<div style="font-size: 14px; margin-bottom: 5px">
{{ $t('trials:uploadDicomList:table:Uploaded') }}
</div>
<div v-if="lookText.Uploaded.length">
<div v-for="item of lookText.Uploaded" :key="item">{{item}}</div>
<div v-for="item of lookText.Uploaded" :key="item">{{ item }}</div>
</div>
</div>
</div>
@ -326,28 +370,34 @@
</template>
<script>
import {getDicomAndNoneDicomStudyMonitorList,getTrialSiteSelect,getTrialVisitStageSelect} from '@/api/trials'
import {
getDicomAndNoneDicomStudyMonitorList,
getTrialSiteSelect,
getTrialVisitStageSelect,
} from '@/api/trials'
import { getStudyUploadMonitor_Export } from '@/api/export'
import Pagination from '@/components/Pagination'
import BaseContainer from '@/components/BaseContainer'
import BaseModel from '@/components/BaseModel'
import axios from "axios";
import axios from 'axios'
const searchDataDefault = () => {
return {
SortField: 'ArchiveFinishedTime',
Asc: false,
PageIndex: 1,
PageSize: 20,
TrialId:'',
SiteId:'',
SubjectId:'',
SubjectVisitId:'',
SubjectInfo:'',
TrialId: '',
SiteId: '',
SubjectId: '',
SubjectVisitId: '',
SubjectInfo: '',
VisitPlanArray: [],
IsDicom: null,
Uploader: null,
IsSuccess: null,
StudyCode: null
StudyCode: null,
UploadFinishedTime: null,
UploadStartTime: null,
}
}
export default {
@ -359,10 +409,11 @@ export default {
loading: false,
searchData: searchDataDefault(),
trialId: this.$route.query.trialId,
siteOptions:[],
visitPlanOptions:[],
siteOptions: [],
visitPlanOptions: [],
lookVisible: false,
lookText: null
lookText: null,
datetimerange: [],
}
},
mounted() {
@ -384,33 +435,35 @@ export default {
getList() {
this.loading = true
this.searchData.TrialId = this.trialId
getDicomAndNoneDicomStudyMonitorList(this.searchData).then((res) => {
getDicomAndNoneDicomStudyMonitorList(this.searchData)
.then((res) => {
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.loading = false
}).catch(() => {
})
.catch(() => {
this.loading = false
})
},
// site
getSite() {
getTrialSiteSelect(this.trialId).then(res => {
getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result
})
},
// 访
getVisitPlanOptions() {
getTrialVisitStageSelect(this.trialId)
.then((res) => {
getTrialVisitStageSelect(this.trialId).then((res) => {
this.visitPlanOptions = res.Result
})
},
fileSizeFormatter(size){
if(!size) return
return (size / Math.pow(1024, 2)).toFixed(3) + "M"
fileSizeFormatter(size) {
if (!size) return
return (size / Math.pow(1024, 2)).toFixed(3) + 'M'
},
handleReset() {
this.searchData = searchDataDefault()
this.datetimerange = []
this.getList()
},
handleSearch() {
@ -428,9 +481,19 @@ export default {
this.getList()
},
handleExport() {
getStudyUploadMonitor_Export(this.searchData).then(res => {
}).catch(() => {})
getStudyUploadMonitor_Export(this.searchData)
.then((res) => {})
.catch(() => {})
},
handleDatetimeChange(val) {
if (val) {
this.searchData.UploadStartTime = val[0]
this.searchData.UploadFinishedTime = val[1]
} else {
this.searchData.UploadStartTime = ''
this.searchData.UploadFinishedTime = ''
}
},
},
}
</script>