pacs接收修改
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2024-12-17 17:16:56 +08:00
parent 1dd21911e5
commit 3c15561485
7 changed files with 486 additions and 181 deletions

View File

@ -29,7 +29,7 @@ export default {
} }
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.box-body{ .box-body{
.search{ .search{
display: flex; display: flex;

View File

@ -3,7 +3,7 @@
:visible.sync="visible" :visible.sync="visible"
:close-on-click-modal="false" :close-on-click-modal="false"
:title="title" :title="title"
width="500px" width="600px"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
append-to-body append-to-body
:before-close="handleCancel" :before-close="handleCancel"
@ -14,7 +14,7 @@
:model="form" :model="form"
:rules="rules" :rules="rules"
size="small" size="small"
label-width="100px" label-width="150px"
> >
<div class="base-dialog-body"> <div class="base-dialog-body">
<!--PacsTypeEnum--> <!--PacsTypeEnum-->
@ -48,8 +48,46 @@
<el-input v-model.number="form.Port" type="number" clearable /> <el-input v-model.number="form.Port" type="number" clearable />
</el-form-item> </el-form-item>
<!--Modality--> <!--Modality-->
<el-form-item :label="$t('system:dicom:form:Modality')" prop="Modality"> <el-form-item
<el-input v-model="form.Modality" clearable /> :label="$t('system:dicom:form:Modality')"
prop="ModalityList"
>
<el-select
v-model="form.ModalityList"
placeholder=""
style="width: 100%"
clearable
multiple
>
<el-option
v-for="item in $d.modalType"
:key="item.id"
:label="item.label"
:value="item.label"
/>
</el-select>
</el-form-item>
<!--影像时间范围-->
<el-form-item
:label="$t('system:dicom:form:timeFrame')"
prop="PacsSearchMaxDays"
>
<el-input
v-model.number="form.PacsSearchMaxDays"
type="number"
clearable
/>
</el-form-item>
<!--最大拉取数量-->
<el-form-item
:label="$t('system:dicom:form:MaxStudyCount')"
prop="MaxStudyCount"
>
<el-input
v-model.number="form.MaxStudyCount"
type="number"
clearable
/>
</el-form-item> </el-form-item>
<!--Description--> <!--Description-->
<el-form-item <el-form-item
@ -111,10 +149,12 @@ export default {
CalledAE: null, CalledAE: null,
IP: null, IP: null,
Port: null, Port: null,
Modality: null, ModalityList: null,
Description: null, Description: null,
Id: null, Id: null,
PacsTypeEnum: null, PacsTypeEnum: null,
PacsSearchMaxDays: null,
MaxStudyCount: null,
}, },
rules: { rules: {
PacsTypeEnum: [ PacsTypeEnum: [
@ -124,6 +164,22 @@ export default {
trigger: 'blur', trigger: 'blur',
}, },
], ],
ModalityList: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: 'blur',
},
{
validator: (rule, value, callback) => {
if (!value || (Array.isArray(value) && value.length <= 0)) {
callback(new Error(this.$t('common:ruleMessage:select')))
} else {
callback()
}
},
},
],
CalledAE: [ CalledAE: [
{ {
required: true, required: true,
@ -170,6 +226,61 @@ export default {
trigger: 'blur', trigger: 'blur',
}, },
], ],
PacsSearchMaxDays: [
{
required: true,
message: this.$t('common:ruleMessage:PacsSearchMaxDaysPattern'),
trigger: 'blur',
},
{
type: 'number',
min: 0,
max: 365,
message: this.$t('common:ruleMessage:PacsSearchMaxDaysPattern'),
trigger: 'blur',
},
{
validator: (rule, value, callback) => {
if (
value &&
(String(value).includes('.') ||
new RegExp(/\D/g).test(String(value)))
) {
callback(
new Error(
this.$t('common:ruleMessage:PacsSearchMaxDaysPattern')
)
)
} else {
callback()
}
},
trigger: 'blur',
},
],
MaxStudyCount: [
// {
// required: true,
// message: this.$t('common:ruleMessage:MaxStudyCountPattern'),
// trigger: 'blur',
// },
{
validator: (rule, value, callback) => {
if (
value &&
(String(value).includes('.') ||
new RegExp(/\D/g).test(String(value)))
) {
callback(
new Error(this.$t('common:ruleMessage:MaxStudyCountPattern'))
)
} else {
callback()
}
},
trigger: 'blur',
},
],
Port: [ Port: [
{ {
required: true, required: true,

View File

@ -69,7 +69,7 @@
<el-table-column <el-table-column
:label="$t('system:dicom:table:AETitle')" :label="$t('system:dicom:table:AETitle')"
prop="CalledAE" prop="CalledAE"
min-width="120" min-width="100"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
@ -77,7 +77,7 @@
<el-table-column <el-table-column
:label="$t('system:dicom:table:IP')" :label="$t('system:dicom:table:IP')"
prop="IP" prop="IP"
min-width="120" min-width="100"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
@ -85,7 +85,7 @@
<el-table-column <el-table-column
:label="$t('system:dicom:table:Port')" :label="$t('system:dicom:table:Port')"
prop="Port" prop="Port"
min-width="120" min-width="80"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
@ -104,16 +104,36 @@
<!--Modality--> <!--Modality-->
<el-table-column <el-table-column
:label="$t('system:dicom:table:Modality')" :label="$t('system:dicom:table:Modality')"
prop="Modality" prop="ModalityList"
min-width="120" min-width="120"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
>
<template slot-scope="scope">
<span>{{ scope.row.ModalityList.join(', ') }}</span>
</template>
</el-table-column>
<!--PacsSearchMaxDays-->
<el-table-column
:label="$t('system:dicom:table:PacsSearchMaxDays')"
prop="PacsSearchMaxDays"
min-width="140"
show-overflow-tooltip
sortable="custom"
/>
<!--MaxStudyCount-->
<el-table-column
:label="$t('system:dicom:table:MaxStudyCount')"
prop="MaxStudyCount"
min-width="110"
show-overflow-tooltip
sortable="custom"
/> />
<!--Description--> <!--Description-->
<el-table-column <el-table-column
:label="$t('system:dicom:table:Description')" :label="$t('system:dicom:table:Description')"
prop="Description" prop="Description"
min-width="120" min-width="100"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
@ -121,7 +141,7 @@
<el-table-column <el-table-column
:label="$t('system:dicom:table:IsTestOK')" :label="$t('system:dicom:table:IsTestOK')"
prop="IsTestOK" prop="IsTestOK"
min-width="120" min-width="80"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
> >
@ -185,6 +205,7 @@
</div> </div>
</div> </div>
<editDicom <editDicom
v-if="editDicomVisible"
:visible.sync="editDicomVisible" :visible.sync="editDicomVisible"
:title="editDicomTitle" :title="editDicomTitle"
:dicom="DICOM" :dicom="DICOM"

View File

@ -17,7 +17,7 @@
<el-select <el-select
v-model="searchData.PacsDicomAEId" v-model="searchData.PacsDicomAEId"
style="width: 140px" style="width: 140px"
@change="getList" @change="pacsDicomAEIdChange"
> >
<el-option <el-option
v-for="(item, index) of AElist" v-for="(item, index) of AElist"
@ -36,6 +36,7 @@
<el-input <el-input
v-model="searchData.PatientID" v-model="searchData.PatientID"
clearable clearable
style="width: 100px"
:maxlength="400" :maxlength="400"
></el-input> ></el-input>
</el-form-item> </el-form-item>
@ -47,11 +48,12 @@
<el-input <el-input
v-model="searchData.PatientName" v-model="searchData.PatientName"
clearable clearable
style="width: 100px"
:maxlength="400" :maxlength="400"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<!-- patientSex --> <!-- patientSex -->
<el-form-item <!-- <el-form-item
class="my_multiple" class="my_multiple"
:label="$t('trials:inspection:pullImage:search:patientSex')" :label="$t('trials:inspection:pullImage:search:patientSex')"
> >
@ -68,9 +70,9 @@
> >
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<!-- patientBirthDate --> <!-- patientBirthDate -->
<el-form-item <!-- <el-form-item
:label="$t('trials:inspection:pullImage:search:patientBirthDate')" :label="$t('trials:inspection:pullImage:search:patientBirthDate')"
> >
<el-date-picker <el-date-picker
@ -82,7 +84,7 @@
value-format="yyyyMMDD" value-format="yyyyMMDD"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item> -->
<!-- studyID --> <!-- studyID -->
<!-- <el-form-item <!-- <el-form-item
class="my_multiple" class="my_multiple"
@ -95,7 +97,7 @@
></el-input> ></el-input>
</el-form-item> --> </el-form-item> -->
<!-- AccessionNumber --> <!-- AccessionNumber -->
<el-form-item <!-- <el-form-item
class="my_multiple" class="my_multiple"
:label="$t('trials:inspection:pullImage:search:AccessionNumber')" :label="$t('trials:inspection:pullImage:search:AccessionNumber')"
> >
@ -104,17 +106,25 @@
clearable clearable
:maxlength="400" :maxlength="400"
></el-input> ></el-input>
</el-form-item> </el-form-item> -->
<!-- modalitiesInStudy --> <!-- modalitiesInStudy -->
<el-form-item <el-form-item
class="my_multiple"
:label="$t('trials:inspection:pullImage:search:modalitiesInStudy')" :label="$t('trials:inspection:pullImage:search:modalitiesInStudy')"
> >
<el-input <el-select
v-model="searchData.ModalitiesInStudy" v-model="searchData.ModalitiesInStudy"
placeholder=""
clearable clearable
:maxlength="400" multiple
></el-input> collapse-tags
>
<el-option
v-for="item in ModalityList"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item> </el-form-item>
<!-- studyDate --> <!-- studyDate -->
<el-form-item <el-form-item
@ -127,11 +137,12 @@
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
value-format="yyyyMMDD" value-format="yyyyMMDD"
:picker-options="pickerOptions"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<!-- studyTime --> <!-- studyTime -->
<el-form-item <!-- <el-form-item
:label="$t('trials:inspection:pullImage:search:studyTime')" :label="$t('trials:inspection:pullImage:search:studyTime')"
> >
<el-time-picker <el-time-picker
@ -144,9 +155,9 @@
placeholder="选择时间范围" placeholder="选择时间范围"
> >
</el-time-picker> </el-time-picker>
</el-form-item> </el-form-item> -->
<!-- bodyPartExamined --> <!-- bodyPartExamined -->
<el-form-item <!-- <el-form-item
class="my_multiple" class="my_multiple"
:label="$t('trials:inspection:pullImage:search:bodyPartExamined')" :label="$t('trials:inspection:pullImage:search:bodyPartExamined')"
> >
@ -155,9 +166,9 @@
clearable clearable
:maxlength="400" :maxlength="400"
></el-input> ></el-input>
</el-form-item> </el-form-item> -->
<!-- studyDescription --> <!-- studyDescription -->
<el-form-item <!-- <el-form-item
class="my_multiple" class="my_multiple"
:label="$t('trials:inspection:pullImage:search:studyDescription')" :label="$t('trials:inspection:pullImage:search:studyDescription')"
> >
@ -166,9 +177,9 @@
clearable clearable
:maxlength="400" :maxlength="400"
></el-input> ></el-input>
</el-form-item> </el-form-item> -->
<!-- studyInstanceUID --> <!-- studyInstanceUID -->
<el-form-item <!-- <el-form-item
class="my_multiple" class="my_multiple"
:label="$t('trials:inspection:pullImage:search:studyInstanceUID')" :label="$t('trials:inspection:pullImage:search:studyInstanceUID')"
> >
@ -177,7 +188,7 @@
clearable clearable
:maxlength="400" :maxlength="400"
></el-input> ></el-input>
</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">
@ -207,21 +218,21 @@
ref="viewStudyList" ref="viewStudyList"
v-loading="loading" v-loading="loading"
v-adaptive="{ bottomOffset: 60 }" v-adaptive="{ bottomOffset: 60 }"
:data="list" :data="PageList"
stripe stripe
height="100" height="100"
@sort-change="handleSortByColumn" @sort-change="handleSortByColumn"
:default-sort="{ prop: 'StartTime', order: 'descending' }"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<!-- <el-table-column type="index" width="40" /> --> <el-table-column type="index" width="40" />
<!--patientID--> <!--patientID-->
<el-table-column <el-table-column
prop="PatientID" prop="PatientID"
:label="$t('trials:inspection:pullImage:table:patientID')" :label="$t('trials:inspection:pullImage:table:patientID')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--patientName--> <!--patientName-->
<el-table-column <el-table-column
@ -229,6 +240,7 @@
:label="$t('trials:inspection:pullImage:table:patientName')" :label="$t('trials:inspection:pullImage:table:patientName')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--patientSex--> <!--patientSex-->
<el-table-column <el-table-column
@ -236,13 +248,19 @@
:label="$t('trials:inspection:pullImage:table:patientSex')" :label="$t('trials:inspection:pullImage:table:patientSex')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
/> sortable="custom"
>
<template slot-scope="scope">
<span>{{ $fd('Sex', scope.row.PatientSex) }}</span>
</template>
</el-table-column>
<!--patientBirthDate--> <!--patientBirthDate-->
<el-table-column <el-table-column
prop="PatientBirthDate" prop="PatientBirthDate"
:label="$t('trials:inspection:pullImage:table:patientBirthDate')" :label="$t('trials:inspection:pullImage:table:patientBirthDate')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--studyID--> <!--studyID-->
<!-- <el-table-column <!-- <el-table-column
@ -257,6 +275,7 @@
:label="$t('trials:inspection:pullImage:table:AccessionNumber')" :label="$t('trials:inspection:pullImage:table:AccessionNumber')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--modalitiesInStudy--> <!--modalitiesInStudy-->
<el-table-column <el-table-column
@ -264,6 +283,7 @@
:label="$t('trials:inspection:pullImage:table:modalitiesInStudy')" :label="$t('trials:inspection:pullImage:table:modalitiesInStudy')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--studyDate--> <!--studyDate-->
<el-table-column <el-table-column
@ -271,6 +291,7 @@
:label="$t('trials:inspection:pullImage:table:studyDate')" :label="$t('trials:inspection:pullImage:table:studyDate')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--studyTime--> <!--studyTime-->
<el-table-column <el-table-column
@ -278,6 +299,7 @@
:label="$t('trials:inspection:pullImage:table:studyTime')" :label="$t('trials:inspection:pullImage:table:studyTime')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--bodyPartExamined--> <!--bodyPartExamined-->
<el-table-column <el-table-column
@ -285,6 +307,7 @@
:label="$t('trials:inspection:pullImage:table:bodyPartExamined')" :label="$t('trials:inspection:pullImage:table:bodyPartExamined')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--studyDescription--> <!--studyDescription-->
<el-table-column <el-table-column
@ -292,6 +315,7 @@
:label="$t('trials:inspection:pullImage:table:studyDescription')" :label="$t('trials:inspection:pullImage:table:studyDescription')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--studyInstanceUID--> <!--studyInstanceUID-->
<el-table-column <el-table-column
@ -299,6 +323,7 @@
:label="$t('trials:inspection:pullImage:table:studyInstanceUID')" :label="$t('trials:inspection:pullImage:table:studyInstanceUID')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
/> />
<!--操作--> <!--操作-->
@ -315,13 +340,13 @@
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<!-- <pagination <pagination
class="page" class="page"
:total="total" :total="total"
:page.sync="searchData.PageIndex" :page.sync="PageIndex"
:limit.sync="searchData.PageSize" :limit.sync="PageSize"
@pagination="getList" @pagination="paging"
/> --> />
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
@ -337,11 +362,12 @@ const defaultSearchData = () => {
PacsDicomAEId: null, PacsDicomAEId: null,
PatientID: null, PatientID: null,
PatientName: null, PatientName: null,
ModalitiesInStudy: null,
StudyDate: null,
PatientSex: null, PatientSex: null,
PatientBirthDate: null, PatientBirthDate: null,
StudyID: null, StudyID: null,
ModalitiesInStudy: null,
StudyDate: null,
StudyTime: null, StudyTime: null,
BodyPartExamined: null, BodyPartExamined: null,
StudyDescription: null, StudyDescription: null,
@ -374,25 +400,111 @@ export default {
return { return {
// //
searchData: defaultSearchData(), searchData: defaultSearchData(),
ModalityList: [],
timeFrame: null,
MaxStudyCount: null,
PatientBirthDate: [], PatientBirthDate: [],
StudyDate: [new Date(), new Date()], StudyDate: [],
// StudyTime: [ // StudyTime: [
// new Date(2016, 9, 10, 0, 0, 0), // new Date(2016, 9, 10, 0, 0, 0),
// new Date(2016, 9, 10, 23, 59, 59), // new Date(2016, 9, 10, 23, 59, 59),
// ], // ],
StudyTime: [new Date(new Date().getTime() - 10800000), new Date()], // StudyTime: [new Date(new Date().getTime() - 10800000), new Date()],
// //
loading: false, loading: false,
list: [], list: [],
PageList: [],
total: 0, total: 0,
PageIndex: 1,
PageSize: 50,
AElist: [], AElist: [],
multipleSelection: [], multipleSelection: [],
} }
}, },
computed: {
pickerOptions() {
return {
shortcuts: [
{
text: this.$t('trials:inspection:pullImage:picker:today'),
onClick: (picker) => {
const end = new Date()
const start = new Date()
// picker.$emit('pick', [start, end])
this.StudyDate = [start, end]
},
},
{
text: this.$t('trials:inspection:pullImage:picker:week'),
onClick: (picker) => {
const end = new Date()
const start = new Date()
if (!this.timeFrame || this.timeFrame > 3) {
start.setTime(start.getTime() - 3600 * 1000 * 24 * 2)
} else {
start.setTime(
start.getTime() - 3600 * 1000 * 24 * (this.timeFrame - 1)
)
}
// picker.$emit('pick', [start, end])
this.StudyDate = [start, end]
},
},
{
text: this.$t('trials:inspection:pullImage:picker:month'),
onClick: (picker) => {
const end = new Date()
const start = new Date()
if (!this.timeFrame || this.timeFrame > 30) {
start.setTime(start.getTime() - 3600 * 1000 * 24 * 29)
} else {
start.setTime(
start.getTime() - 3600 * 1000 * 24 * (this.timeFrame - 1)
)
}
// picker.$emit('pick', [start, end])
this.StudyDate = [start, end]
},
},
{
text: this.$t('trials:inspection:pullImage:picker:trimester'),
onClick: (picker) => {
const end = new Date()
const start = new Date()
if (!this.timeFrame || this.timeFrame > 90) {
start.setTime(start.getTime() - 3600 * 1000 * 24 * 89)
} else {
start.setTime(
start.getTime() - 3600 * 1000 * 24 * (this.timeFrame - 1)
)
}
// picker.$emit('pick', [start, end])
this.StudyDate = [start, end]
},
},
],
disabledDate: (time) => {
if (!this.timeFrame) return false
let curDate = new Date().getTime()
let three = this.timeFrame * 24 * 3600 * 1000
let threeMonths = curDate - three
return time.getTime() >= Date.now() || time.getTime() <= threeMonths
},
}
},
},
created() { created() {
this.getAEList() this.getAEList()
}, },
methods: { methods: {
pacsDicomAEIdChange(val) {
let pacs = this.AElist.find((item) => item.Id === val)
this.ModalityList = pacs.ModalityList
this.timeFrame = pacs.PacsSearchMaxDays
this.MaxStudyCount = pacs.MaxStudyCount
this.handleReset()
},
// pacs // pacs
async cMoveVerify(data) { async cMoveVerify(data) {
try { try {
@ -415,35 +527,44 @@ export default {
Object.keys(this.searchData).forEach((key) => { Object.keys(this.searchData).forEach((key) => {
data[key] = this.searchData[key] data[key] = this.searchData[key]
}) })
if ( // if (
this.PatientBirthDate && // this.PatientBirthDate &&
this.PatientBirthDate[0] && // this.PatientBirthDate[0] &&
this.PatientBirthDate[1] // this.PatientBirthDate[1]
) { // ) {
data.PatientBirthDate = // data.PatientBirthDate =
this.PatientBirthDate[0] + '-' + this.PatientBirthDate[1] // this.PatientBirthDate[0] + '-' + this.PatientBirthDate[1]
} else { // } else {
data.PatientBirthDate = null // data.PatientBirthDate = null
} // }
if (this.StudyDate && this.StudyDate[0] && this.StudyDate[1]) { if (this.StudyDate && this.StudyDate[0] && this.StudyDate[1]) {
data.StudyDate = this.StudyDate[0] + '-' + this.StudyDate[1] data.StudyDate = this.StudyDate[0] + '-' + this.StudyDate[1]
} else { } else {
data.StudyDate = null data.StudyDate = null
} }
if (this.StudyTime && this.StudyTime[0] && this.StudyTime[1]) { // if (this.StudyTime && this.StudyTime[0] && this.StudyTime[1]) {
data.StudyTime = // data.StudyTime =
this.$moment(this.StudyTime[0]).format('HHmmss') + // this.$moment(this.StudyTime[0]).format('HHmmss') +
'-' + // '-' +
this.$moment(this.StudyTime[1]).format('HHmmss') // this.$moment(this.StudyTime[1]).format('HHmmss')
} else { // } else {
data.StudyTime = null // data.StudyTime = null
} // }
try { try {
this.loading = true this.loading = true
let res = await getCFindStudyList(data) let res = await getCFindStudyList(data)
this.loading = false this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
this.list = res.Result this.list = res.Result
this.total = res.Result.length
this.paging()
let MaxStudyCount = this.MaxStudyCount || 50
if (this.total >= MaxStudyCount) {
let message = this.$t(
'trials:inspection:pullImage:confirm:limit50'
).replace('xx', MaxStudyCount)
this.$confirm(message)
}
} }
} catch (err) { } catch (err) {
this.loading = false this.loading = false
@ -456,7 +577,7 @@ export default {
CalledAE: null, CalledAE: null,
IP: null, IP: null,
Port: null, Port: null,
PacsTypeEnum: 2, // PacsTypeEnum: 2,
PageIndex: 1, PageIndex: 1,
PageSize: 1000, PageSize: 1000,
SortField: 'CreateTime', SortField: 'CreateTime',
@ -470,6 +591,9 @@ export default {
this.AElist = res.Result.CurrentPageData this.AElist = res.Result.CurrentPageData
if (this.AElist.length > 0) { if (this.AElist.length > 0) {
this.searchData.PacsDicomAEId = this.AElist[0].Id this.searchData.PacsDicomAEId = this.AElist[0].Id
this.ModalityList = this.AElist[0].ModalityList
this.timeFrame = this.AElist[0].PacsSearchMaxDays
this.MaxStudyCount = this.AElist[0].MaxStudyCount
this.getList() this.getList()
} }
} }
@ -477,6 +601,15 @@ export default {
console.log(err) console.log(err)
} }
}, },
//
paging() {
this.PageList = []
if (!this.list || this.list.length <= 0) return false
this.PageList = this.list.slice(
(this.PageIndex - 1) * this.PageSize,
this.PageIndex * this.PageSize
)
},
// //
handleSearch() { handleSearch() {
// this.searchData.PageIndex = 1 // this.searchData.PageIndex = 1
@ -495,17 +628,19 @@ export default {
this.searchData[key] = null this.searchData[key] = null
} }
}) })
this.PatientBirthDate = [] // this.PatientBirthDate = []
this.StudyDate = [new Date(), new Date()] this.StudyDate = []
this.StudyTime = [new Date(new Date().getTime() - 10800000), new Date()] // this.StudyTime = [new Date(new Date().getTime() - 10800000), new Date()]
}, },
// //
handleSortByColumn(sort) { handleSortByColumn(sort) {
this.searchData.SortField = sort.prop if (sort.order === 'ascending') {
if (sort.order === 'ascending') this.searchData.Asc = true this.list.sort((a, b) => a[sort.prop] - b[sort.prop])
if (sort.order === 'descending') this.searchData.Asc = false }
if (!sort.order) this.searchData.SortField = null if (sort.order === 'descending') {
this.getList() this.list.sort((a, b) => b[sort.prop] - a[sort.prop])
}
this.paging()
}, },
beforeCloseStudyDig() { beforeCloseStudyDig() {
this.$setOpenWindow() this.$setOpenWindow()

View File

@ -6,22 +6,33 @@
custom-class="upload-dialog" custom-class="upload-dialog"
:before-close="beforeCloseStudyDig" :before-close="beforeCloseStudyDig"
> >
<div class="top"> <span slot="title">
<p>
<span <span
>{{ $t("trials:uploadDicomList:table:patientInfo") }}{{ >{{ $t('trials:uploadDicomList:table:patientInfo') }}{{
Patient.PatientIdStr Patient.PatientIdStr
}}{{ Patient.PatientName }}</span }}{{ Patient.PatientName }}</span
>|<span> >|<span>
{{ {{
$t("trials:inspection:research-trials-list:table:joinTrialsNumber") $t('trials:inspection:research-trials-list:table:joinTrialsNumber')
}}{{ total }}</span
></span
>
<!-- <div class="top">
<p>
<span
>{{ $t('trials:uploadDicomList:table:patientInfo') }}{{
Patient.PatientIdStr
}}{{ Patient.PatientName }}</span
>|<span>
{{
$t('trials:inspection:research-trials-list:table:joinTrialsNumber')
}}{{ total }}</span }}{{ total }}</span
> >
</p> </p>
<!-- <el-button type="primary" @click="addTrials"> <el-button type="primary" @click="addTrials">
{{ $t("trials:inspection:button:addTrials") }} {{ $t("trials:inspection:button:addTrials") }}
</el-button> --> </el-button>
</div> </div> -->
<!--参与项目列表--> <!--参与项目列表-->
<el-table <el-table
ref="researchTrialsList" ref="researchTrialsList"
@ -30,6 +41,7 @@
:data="list" :data="list"
stripe stripe
height="100" height="100"
@sort-change="handleSortByColumn"
:default-sort="{ prop: 'CreateTime', order: 'descending' }" :default-sort="{ prop: 'CreateTime', order: 'descending' }"
> >
<el-table-column type="index" width="40" /> <el-table-column type="index" width="40" />
@ -90,7 +102,7 @@
sortable sortable
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ $fd("Sex", scope.row.Sex) }}</span> <span>{{ $fd('Sex', scope.row.Sex) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!--状态--> <!--状态-->
@ -110,7 +122,7 @@
) )
] ]
" "
>{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag >{{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}</el-tag
> >
</template></el-table-column </template></el-table-column
> >
@ -145,23 +157,31 @@
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<!-- <pagination <pagination
class="page" class="page"
:total="total" :total="total"
:page.sync="searchData.PageIndex" :page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize" :limit.sync="searchData.PageSize"
@pagination="getList" @pagination="getList"
/> --> />
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import Pagination from "@/components/Pagination"; import Pagination from '@/components/Pagination'
import { import {
getPatientJoinedTrialList, getPatientJoinedTrialList,
deleteSubjectPatientBinding, deleteSubjectPatientBinding,
} from "@/api/inspection.js"; } from '@/api/inspection.js'
const defaultSearchData = () => {
return {
PageIndex: 1,
PageSize: 20,
Asc: false,
SortField: 'CreateTime',
}
}
export default { export default {
name: "researchTrialsList", name: 'researchTrialsList',
components: { Pagination }, components: { Pagination },
props: { props: {
visible: { visible: {
@ -171,95 +191,105 @@ export default {
Patient: { Patient: {
required: true, required: true,
default: () => { default: () => {
return {}; return {}
}, },
}, },
}, },
created() { created() {
this.getList(); this.getList()
}, },
data() { data() {
return { return {
// //
searchData: defaultSearchData(),
total: 0, total: 0,
loading: false, loading: false,
list: [], list: [],
}; }
}, },
methods: { methods: {
// //
beforeCloseStudyDig() { beforeCloseStudyDig() {
this.$emit("update:visible", false); this.$emit('update:visible', false)
}, },
// //
addTrials() { addTrials() {
this.$emit("update:visible", false); this.$emit('update:visible', false)
this.$emit("handleOpenDialog", this.Patient, "add"); this.$emit('handleOpenDialog', this.Patient, 'add')
}, },
// //
async getList() { async getList() {
let data = { let data = {
PatientId: this.Patient.PatientId, PatientId: this.Patient.PatientId,
}; ...this.searchData,
}
try { try {
this.loading = true; this.loading = true
let res = await getPatientJoinedTrialList(data); let res = await getPatientJoinedTrialList(data)
this.loading = false; this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
this.list = res.Result; this.list = res.Result.CurrentPageData
this.total = this.list.length; this.total = res.Result.TotalCount
} }
} catch (err) { } catch (err) {
this.loading = false; this.loading = false
console.log(err); console.log(err)
} }
}, },
// //
detail(item) { detail(item) {
this.$emit("update:visible", false); this.$emit('update:visible', false)
let query = { let query = {
trialId: item.TrialId, trialId: item.TrialId,
trialCode: item.Code, trialCode: item.Code,
researchProgramNo: item.ResearchProgramNo, researchProgramNo: item.ResearchProgramNo,
}; }
this.$router.push({ this.$router.push({
path: "/trials/trials-panel/subject/subject-list", path: '/trials/trials-panel/subject/subject-list',
query, query,
}); })
},
//
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()
}, },
// //
async remove(item) { async remove(item) {
try { try {
let confirm = await this.$confirm( let confirm = await this.$confirm(
this.$t("trials:sitesList:message:removeSite"), this.$t('trials:sitesList:message:removeSite'),
{ {
type: "warning", type: 'warning',
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
confirmButtonText: this.$t("common:button:confirm"), confirmButtonText: this.$t('common:button:confirm'),
cancelButtonText: this.$t("recompose:button:cancel"), cancelButtonText: this.$t('recompose:button:cancel'),
} }
); )
if (confirm !== "confirm") return; if (confirm !== 'confirm') return
let params = { let params = {
PatientId: this.Patient.PatientId, PatientId: this.Patient.PatientId,
SubjectId: item.SubjectId, SubjectId: item.SubjectId,
TrialId: item.TrialId, TrialId: item.TrialId,
}; }
this.loading = true; this.loading = true
let res = await deleteSubjectPatientBinding(params); let res = await deleteSubjectPatientBinding(params)
this.loading = false; this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
this.getList(); this.getList()
this.$message.success(this.$t("common:message:removedSuccessfully")); this.$message.success(this.$t('common:message:removedSuccessfully'))
this.$emit("getList"); this.$emit('getList')
} }
} catch (err) { } catch (err) {
this.loading = false; this.loading = false
console.log(err); console.log(err)
} }
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.top { .top {

View File

@ -7,8 +7,8 @@
:before-close="beforeCloseStudyDig" :before-close="beforeCloseStudyDig"
> >
<span slot="title" <span slot="title"
>{{ $t("trials:inspection:message:viewStudy") }}{{ >{{ $t('trials:inspection:message:viewStudy') }}{{
$t("trials:uploadDicomList:table:patientInfo") $t('trials:uploadDicomList:table:patientInfo')
}}{{ Patient.PatientIdStr }}{{ Patient.PatientName }}</span }}{{ Patient.PatientIdStr }}{{ Patient.PatientName }}</span
> >
<div class="search"> <div class="search">
@ -44,7 +44,7 @@
<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
@ -52,7 +52,7 @@
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
@click="handleReset" @click="handleReset"
> >
{{ $t("common:button:reset") }} {{ $t('common:button:reset') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -161,19 +161,19 @@
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<!-- <pagination <pagination
class="page" class="page"
:total="total" :total="total"
:page.sync="searchData.PageIndex" :page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize" :limit.sync="searchData.PageSize"
@pagination="getList" @pagination="getList"
/> --> />
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import Pagination from "@/components/Pagination"; import Pagination from '@/components/Pagination'
import { getPatientStudyList, deletePatientStudy } from "@/api/inspection.js"; import { getPatientStudyList, deletePatientStudy } from '@/api/inspection.js'
import { getToken } from "@/utils/auth"; import { getToken } from '@/utils/auth'
const defaultSearchData = () => { const defaultSearchData = () => {
return { return {
@ -182,11 +182,13 @@ const defaultSearchData = () => {
LatestStudyTime: null, LatestStudyTime: null,
PatientId: null, PatientId: null,
Asc: false, Asc: false,
SortField: "StudyTime", SortField: 'StudyTime',
}; PageIndex: 1,
}; PageSize: 20,
}
}
export default { export default {
name: "viewStudyList", name: 'viewStudyList',
components: { Pagination }, components: { Pagination },
props: { props: {
visible: { visible: {
@ -196,7 +198,7 @@ export default {
Patient: { Patient: {
required: true, required: true,
default: () => { default: () => {
return {}; return {}
}, },
}, },
}, },
@ -208,111 +210,113 @@ export default {
// //
loading: false, loading: false,
list: [], list: [],
}; total: 0,
}
}, },
created() { created() {
this.getList(); this.getList()
}, },
methods: { methods: {
// //
async deletePatientStudy(item) { async deletePatientStudy(item) {
try { try {
let confirm = await this.$confirm( let confirm = await this.$confirm(
this.$t("trials:inspection:message:remove"), this.$t('trials:inspection:message:remove'),
{ {
type: "warning", type: 'warning',
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
confirmButtonText: this.$t("common:button:confirm"), confirmButtonText: this.$t('common:button:confirm'),
cancelButtonText: this.$t("common:button:cancel"), cancelButtonText: this.$t('common:button:cancel'),
} }
); )
if (confirm !== "confirm") return; if (confirm !== 'confirm') return
let params = { let params = {
PatiendId: item.PatientId, PatiendId: item.PatientId,
ScpStudyId: item.SCPStudyId, ScpStudyId: item.SCPStudyId,
}; }
let res = await deletePatientStudy(params); let res = await deletePatientStudy(params)
if (res.IsSuccess) { if (res.IsSuccess) {
this.getList(); this.getList()
this.$emit("getList"); this.$emit('getList')
this.$message.success(this.$t("common:message:deletedSuccessfully")); this.$message.success(this.$t('common:message:deletedSuccessfully'))
} }
} catch (err) { } catch (err) {
console.log(err); console.log(err)
} }
}, },
// //
beforeCloseStudyDig() { beforeCloseStudyDig() {
this.$setOpenWindow(); this.$setOpenWindow()
this.$emit("update:visible", false); this.$emit('update:visible', false)
}, },
// //
async getList() { async getList() {
let data = {}; let data = {}
Object.keys(this.searchData).forEach((key) => { Object.keys(this.searchData).forEach((key) => {
data[key] = this.searchData[key]; data[key] = this.searchData[key]
}); })
data.PatientId = this.Patient.PatientId; data.PatientId = this.Patient.PatientId
if (this.dateValue && this.dateValue[0] && this.dateValue[1]) { if (this.dateValue && this.dateValue[0] && this.dateValue[1]) {
data.EarliestStudyTime = this.$moment(this.dateValue[0]).format( data.EarliestStudyTime = this.$moment(this.dateValue[0]).format(
"YYYY-MM-DD HH:mm:ss" 'YYYY-MM-DD HH:mm:ss'
); )
data.LatestStudyTime = this.$moment(this.dateValue[1]).format( data.LatestStudyTime = this.$moment(this.dateValue[1]).format(
"YYYY-MM-DD HH:mm:ss" 'YYYY-MM-DD HH:mm:ss'
); )
} else { } else {
data.EarliestStudyTime = null; data.EarliestStudyTime = null
data.LatestStudyTime = null; data.LatestStudyTime = null
} }
try { try {
this.loading = true; this.loading = true
let res = await getPatientStudyList(data); let res = await getPatientStudyList(data)
this.loading = false; this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
this.list = res.Result; this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
} }
} catch (err) { } catch (err) {
this.loading = false; this.loading = false
console.log(err); console.log(err)
} }
}, },
// //
handleSearch() { handleSearch() {
this.searchData.PageIndex = 1; this.searchData.PageIndex = 1
this.getList(); this.getList()
}, },
// //
handleReset() { handleReset() {
this.reset(); this.reset()
this.getList(); this.getList()
}, },
// //
reset() { reset() {
this.searchData = defaultSearchData(); this.searchData = defaultSearchData()
this.dateValue = []; this.dateValue = []
}, },
// //
image(item) { image(item) {
let token = getToken(); let token = getToken()
const routeData = this.$router.resolve({ const routeData = this.$router.resolve({
path: `/showdicom?studyId=${item.SCPStudyId}&TokenKey=${token}&type=Patient`, path: `/showdicom?studyId=${item.SCPStudyId}&TokenKey=${token}&type=Patient`,
}); })
let newWindow = window.open(routeData.href, "_blank"); let newWindow = window.open(routeData.href, '_blank')
this.$setOpenWindow(newWindow); this.$setOpenWindow(newWindow)
}, },
// //
report() {}, report() {},
// //
handleSortByColumn(sort) { handleSortByColumn(sort) {
this.searchData.SortField = sort.prop; this.searchData.SortField = sort.prop
if (sort.order === "ascending") this.searchData.Asc = true; if (sort.order === 'ascending') this.searchData.Asc = true
if (sort.order === "descending") this.searchData.Asc = false; if (sort.order === 'descending') this.searchData.Asc = false
if (!sort.order) this.searchData.SortField = null; if (!sort.order) this.searchData.SortField = null
this.getList(); this.getList()
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
</style> </style>

View File

@ -100,7 +100,11 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<!-- pacs拉取 --> <!-- pacs拉取 -->
<el-button type="primary" @click="handleOpenDialog({}, 'pull')"> <el-button
type="primary"
@click="handleOpenDialog({}, 'pull')"
v-hasPermi="['trials:trialsInspection:pullPACS']"
>
{{ $t('common:button:pull') }} {{ $t('common:button:pull') }}
</el-button> </el-button>
</el-form-item> </el-form-item>