pacs
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
7f36aa5a05
commit
e51e7d0e66
|
@ -2820,36 +2820,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"chalk": {
|
|
||||||
"version": "4.1.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
|
|
||||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^4.1.0",
|
|
||||||
"supports-color": "^7.1.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"has-flag": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "7.2.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
|
|
||||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"has-flag": "^4.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chokidar": {
|
"chokidar": {
|
||||||
"version": "2.1.8",
|
"version": "2.1.8",
|
||||||
"resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz",
|
"resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz",
|
||||||
|
@ -3229,13 +3199,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"json5": {
|
|
||||||
"version": "2.2.3",
|
|
||||||
"resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
|
|
||||||
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"locate-path": {
|
"locate-path": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz",
|
||||||
|
@ -3479,32 +3442,6 @@
|
||||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"vue-loader-v16": {
|
|
||||||
"version": "npm:vue-loader@16.8.3",
|
|
||||||
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
|
|
||||||
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"chalk": "^4.1.0",
|
|
||||||
"hash-sum": "^2.0.0",
|
|
||||||
"loader-utils": "^2.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"loader-utils": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"big.js": "^5.2.2",
|
|
||||||
"emojis-list": "^3.0.0",
|
|
||||||
"json5": "^2.1.2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"webpack-dev-middleware": {
|
"webpack-dev-middleware": {
|
||||||
"version": "3.7.3",
|
"version": "3.7.3",
|
||||||
"resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
|
"resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
|
||||||
|
@ -14228,6 +14165,11 @@
|
||||||
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
|
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"qrcodejs2": {
|
||||||
|
"version": "0.0.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/qrcodejs2/-/qrcodejs2-0.0.2.tgz",
|
||||||
|
"integrity": "sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA=="
|
||||||
|
},
|
||||||
"qs": {
|
"qs": {
|
||||||
"version": "6.11.2",
|
"version": "6.11.2",
|
||||||
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz",
|
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz",
|
||||||
|
@ -17518,6 +17460,94 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vue-loader-v16": {
|
||||||
|
"version": "npm:vue-loader@16.8.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
|
||||||
|
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^4.1.0",
|
||||||
|
"hash-sum": "^2.0.0",
|
||||||
|
"loader-utils": "^2.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"json5": {
|
||||||
|
"version": "2.2.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
|
||||||
|
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"loader-utils": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"big.js": "^5.2.2",
|
||||||
|
"emojis-list": "^3.0.0",
|
||||||
|
"json5": "^2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"vue-pdf": {
|
"vue-pdf": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmmirror.com/vue-pdf/-/vue-pdf-4.3.0.tgz",
|
"resolved": "https://registry.npmmirror.com/vue-pdf/-/vue-pdf-4.3.0.tgz",
|
||||||
|
|
|
@ -3745,4 +3745,44 @@ export function ConfigTrialPACSInfoConfirm(data) {
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
// 获取推送记录
|
||||||
|
export function getSCPImageUploadList(data) {
|
||||||
|
return request({
|
||||||
|
url: `/Patient/getSCPImageUploadList`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取影像检查患者列表
|
||||||
|
export function getPatientList(data) {
|
||||||
|
return request({
|
||||||
|
url: `/Patient/getPatientList`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取影像检查患者检查列表
|
||||||
|
export function getPatientStudyList(data) {
|
||||||
|
return request({
|
||||||
|
url: `/Patient/getPatientStudyList`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取接收方AE列表
|
||||||
|
export function getDicomCalledAEList(params) {
|
||||||
|
return request({
|
||||||
|
url: `/Patient/getDicomCalledAEList`,
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取发送方AE列表
|
||||||
|
export function getDicomCallingAEList(params) {
|
||||||
|
return request({
|
||||||
|
url: `/Patient/getDicomCallingAEList`,
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
}
|
}
|
|
@ -4,14 +4,15 @@
|
||||||
<el-tabs v-model="trialsTab" @tab-click="clickTab">
|
<el-tabs v-model="trialsTab" @tab-click="clickTab">
|
||||||
<el-tab-pane v-for="item of trialsRouter.children.find(v => {return v.name == 'TrialsPanel'}).children" :key="`tab${item.path}`" :disabled="TotalNeedSignTrialDocCount !== 0 && item.path !== '/trials/trials-panel/attachments'" :label="$t(item.LanguageMark)" :name="item.path">
|
<el-tab-pane v-for="item of trialsRouter.children.find(v => {return v.name == 'TrialsPanel'}).children" :key="`tab${item.path}`" :disabled="TotalNeedSignTrialDocCount !== 0 && item.path !== '/trials/trials-panel/attachments'" :label="$t(item.LanguageMark)" :name="item.path">
|
||||||
<el-tabs v-if="!item.tabHiddn" v-model="trialsTabChild" @tab-click="clickTab">
|
<el-tabs v-if="!item.tabHiddn" v-model="trialsTabChild" @tab-click="clickTab">
|
||||||
<el-tab-pane
|
<template v-for="item1 of item.children">
|
||||||
v-for="item1 of item.children"
|
<el-tab-pane
|
||||||
v-if="TrialConfig && isShow(item1.path)"
|
v-if="TrialConfig && isShow(item1.path)"
|
||||||
:key="`tab1${item1.path}`"
|
:key="`tab1${item1.path}`"
|
||||||
:disabled="TotalNeedSignTrialDocCount !== 0 && item1.path !== '/trials/trials-panel/attachments/self-attachment' || (TrialStatusStr === 'Initializing' && (item1.path === '/trials/trials-panel/setting/personnel-manage' || item1.path === '/trials/trials-panel/setting/qc-question' || item1.path === '/trials/trials-panel/setting/reading-unit' || item1.path === '/trials/trials-panel/setting/medical-audit' || item1.path === '/trials/trials-panel/setting/email-manage'))"
|
:disabled="TotalNeedSignTrialDocCount !== 0 && item1.path !== '/trials/trials-panel/attachments/self-attachment' || (TrialStatusStr === 'Initializing' && (item1.path === '/trials/trials-panel/setting/personnel-manage' || item1.path === '/trials/trials-panel/setting/qc-question' || item1.path === '/trials/trials-panel/setting/reading-unit' || item1.path === '/trials/trials-panel/setting/medical-audit' || item1.path === '/trials/trials-panel/setting/email-manage'))"
|
||||||
:label="$t(item1.LanguageMark)"
|
:label="$t(item1.LanguageMark)"
|
||||||
:name="item1.path"
|
:name="item1.path"
|
||||||
/>
|
/>
|
||||||
|
</template>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
|
@ -126,6 +127,10 @@ export default {
|
||||||
var additionalAssessmentList = [
|
var additionalAssessmentList = [
|
||||||
'/trials/trials-panel/subject/brain-metastasis'
|
'/trials/trials-panel/subject/brain-metastasis'
|
||||||
]
|
]
|
||||||
|
let dicomList = [
|
||||||
|
'/trials/trials-panel/trial-summary/image-inspect',
|
||||||
|
'/trials/trials-panel/trial-summary/push-record',
|
||||||
|
]
|
||||||
if (this.TrialConfig.QCProcessEnum === 0 && ~qualityList.indexOf(path)) {
|
if (this.TrialConfig.QCProcessEnum === 0 && ~qualityList.indexOf(path)) {
|
||||||
isShow = false
|
isShow = false
|
||||||
}
|
}
|
||||||
|
@ -135,6 +140,9 @@ export default {
|
||||||
if (!this.IsAdditionalAssessment && ~additionalAssessmentList.indexOf(path)) {
|
if (!this.IsAdditionalAssessment && ~additionalAssessmentList.indexOf(path)) {
|
||||||
isShow = false
|
isShow = false
|
||||||
}
|
}
|
||||||
|
if ((!this.TrialConfig.IsPACSConnect || !this.TrialConfig.IsTrialPACSConfirmed) && ~dicomList.indexOf(path)) {
|
||||||
|
isShow = false
|
||||||
|
}
|
||||||
return isShow
|
return isShow
|
||||||
},
|
},
|
||||||
goBack() {
|
goBack() {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
<el-radio-group
|
<el-radio-group
|
||||||
v-model="form.IsPACSConnect"
|
v-model="form.IsPACSConnect"
|
||||||
:disabled="form.IsTrialPACSConfirmed && !isEdit"
|
:disabled="form.IsTrialPACSConfirmed && !isEdit"
|
||||||
|
@change="changeConnect"
|
||||||
>
|
>
|
||||||
<el-radio
|
<el-radio
|
||||||
v-for="item of $d.PACSConnectMode"
|
v-for="item of $d.PACSConnectMode"
|
||||||
|
@ -114,7 +115,6 @@
|
||||||
v-if="
|
v-if="
|
||||||
form.IsTrialPACSConfirmed === true &&
|
form.IsTrialPACSConfirmed === true &&
|
||||||
!isEdit &&
|
!isEdit &&
|
||||||
TrialStatusStr === 'Initializing' &&
|
|
||||||
hasPermi(['trials:trials-panel:setting:trial-config:save'])
|
hasPermi(['trials:trials-panel:setting:trial-config:save'])
|
||||||
"
|
"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
@ -354,8 +354,7 @@ export default {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
TrialStatusStr: "",
|
isEdit: false,
|
||||||
isEdit: true,
|
|
||||||
Id: null,
|
Id: null,
|
||||||
signVisible: false,
|
signVisible: false,
|
||||||
signCode: null,
|
signCode: null,
|
||||||
|
@ -366,7 +365,16 @@ export default {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initForm() {
|
changeConnect(val) {
|
||||||
|
if (!val) {
|
||||||
|
this.form.CalledAE = null;
|
||||||
|
this.form.Ip = null;
|
||||||
|
this.form.Port = null;
|
||||||
|
this.form.Modality = null;
|
||||||
|
this.form.IsTestOK = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
initForm(res) {
|
||||||
this.getInfo();
|
this.getInfo();
|
||||||
},
|
},
|
||||||
// 测试dicomAE
|
// 测试dicomAE
|
||||||
|
@ -397,7 +405,7 @@ export default {
|
||||||
if (res.IsSuccess) {
|
if (res.IsSuccess) {
|
||||||
this.form.IsPACSConnect = res.OtherInfo.IsPACSConnect;
|
this.form.IsPACSConnect = res.OtherInfo.IsPACSConnect;
|
||||||
this.form.IsTrialPACSConfirmed = res.OtherInfo.IsTrialPACSConfirmed;
|
this.form.IsTrialPACSConfirmed = res.OtherInfo.IsTrialPACSConfirmed;
|
||||||
if (!res.OtherInfo.IsTrialProcessConfirmed) {
|
if (!res.OtherInfo.IsTrialPACSConfirmed) {
|
||||||
this.isEdit = true;
|
this.isEdit = true;
|
||||||
}
|
}
|
||||||
this.form.IsTestOK = res.Result.IsTestOK;
|
this.form.IsTestOK = res.Result.IsTestOK;
|
||||||
|
@ -465,6 +473,7 @@ export default {
|
||||||
this.signVisible = false;
|
this.signVisible = false;
|
||||||
this.confirmVisible = false;
|
this.confirmVisible = false;
|
||||||
this.updateVisible = false;
|
this.updateVisible = false;
|
||||||
|
this.isEdit = false;
|
||||||
res = await this.addOrUpdateDicomAE();
|
res = await this.addOrUpdateDicomAE();
|
||||||
if (res) this.$emit("refresh");
|
if (res) this.$emit("refresh");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,281 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="visible"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:fullscreen="true"
|
||||||
|
custom-class="upload-dialog"
|
||||||
|
:before-close="beforeCloseStudyDig"
|
||||||
|
>
|
||||||
|
<span slot="title"
|
||||||
|
>{{ $t("trials:imageInspect:viewStudy:message:viewStudy") }}({{
|
||||||
|
$t("trials:imageInspect:viewStudy:message:patientInfo")
|
||||||
|
}}:{{ Patient.PatientIdStr }},{{ Patient.PatientName }})</span
|
||||||
|
>
|
||||||
|
<div class="search">
|
||||||
|
<el-form :inline="true" class="base-search-form">
|
||||||
|
<!-- 检查类型 -->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:modality')"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="searchData.Modalities"
|
||||||
|
clearable
|
||||||
|
style="width: 140px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item of $d.modalType"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.label"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 检查日期 -->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:studyDate')"
|
||||||
|
>
|
||||||
|
<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: 'StudyTime', order: 'descending' }"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="40" />
|
||||||
|
<!--检查描述-->
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
prop="Description"
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:studyDescription')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="120"
|
||||||
|
sortable="custom"
|
||||||
|
></el-table-column>
|
||||||
|
<!--检查类型-->
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
prop="Modalities"
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:modality')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="120"
|
||||||
|
sortable="custom"
|
||||||
|
></el-table-column>
|
||||||
|
<!--Called AE-->
|
||||||
|
<el-table-column
|
||||||
|
prop="CalledAE"
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:CalledAE')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="120"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<!--Calling AE-->
|
||||||
|
<el-table-column
|
||||||
|
prop="CallingAE"
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:CallingAE')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="120"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<!--序列数量-->
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
prop="SeriesCount"
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:seriesCount')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="100"
|
||||||
|
sortable="custom"
|
||||||
|
></el-table-column>
|
||||||
|
<!--图像数量-->
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
prop="InstanceCount"
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:instanceCount')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="100"
|
||||||
|
sortable="custom"
|
||||||
|
></el-table-column>
|
||||||
|
<!--检查日期-->
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
prop="StudyTime"
|
||||||
|
:label="$t('trials:imageInspect:viewStudy:table:studyDate')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="180"
|
||||||
|
sortable="custom"
|
||||||
|
></el-table-column>
|
||||||
|
<!--操作-->
|
||||||
|
<el-table-column :label="$t('common:action:action')" min-width="150">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<!-- 影像 -->
|
||||||
|
<el-button
|
||||||
|
circle
|
||||||
|
icon="el-icon-view"
|
||||||
|
:title="$t('trials:imageInspect:viewStudy: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 { getPatientStudyList } from "@/api/trials.js";
|
||||||
|
import { getToken } from "@/utils/auth";
|
||||||
|
|
||||||
|
const defaultSearchData = () => {
|
||||||
|
return {
|
||||||
|
Modalities: null,
|
||||||
|
EarliestStudyTime: null,
|
||||||
|
LatestStudyTime: null,
|
||||||
|
PatientId: null,
|
||||||
|
Asc: false,
|
||||||
|
SortField: "StudyTime",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export default {
|
||||||
|
name: "viewStudyList",
|
||||||
|
components: { Pagination },
|
||||||
|
props: {
|
||||||
|
visible: {
|
||||||
|
required: true,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
Patient: {
|
||||||
|
required: true,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 查询
|
||||||
|
searchData: defaultSearchData(),
|
||||||
|
dateValue: [],
|
||||||
|
// 可加入项目列表
|
||||||
|
loading: false,
|
||||||
|
list: [],
|
||||||
|
newWindow: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 关闭弹框
|
||||||
|
beforeCloseStudyDig() {
|
||||||
|
if (this.newWindow) {
|
||||||
|
this.newWindow.close();
|
||||||
|
}
|
||||||
|
this.$emit("update:visible", false);
|
||||||
|
},
|
||||||
|
// 获取列表
|
||||||
|
async getList() {
|
||||||
|
let data = {};
|
||||||
|
Object.keys(this.searchData).forEach((key) => {
|
||||||
|
data[key] = this.searchData[key];
|
||||||
|
});
|
||||||
|
data.PatientId = this.Patient.PatientId;
|
||||||
|
if (this.dateValue && this.dateValue[0] && this.dateValue[1]) {
|
||||||
|
data.EarliestStudyTime = this.$moment(this.dateValue[0]).format(
|
||||||
|
"YYYY-MM-DD HH:mm:ss"
|
||||||
|
);
|
||||||
|
data.LatestStudyTime = this.$moment(this.dateValue[1]).format(
|
||||||
|
"YYYY-MM-DD HH:mm:ss"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
data.EarliestStudyTime = null;
|
||||||
|
data.LatestStudyTime = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.loading = true;
|
||||||
|
let res = await getPatientStudyList(data);
|
||||||
|
this.loading = false;
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.list = res.Result;
|
||||||
|
}
|
||||||
|
} 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 = [];
|
||||||
|
},
|
||||||
|
// 查看影像
|
||||||
|
image(item) {
|
||||||
|
let token = getToken();
|
||||||
|
const routeData = this.$router.resolve({
|
||||||
|
path: `/showdicom?studyId=${item.SCPStudyId}&TokenKey=${token}&type=Patient`,
|
||||||
|
});
|
||||||
|
this.newWindow = window.open(routeData.href, "_blank");
|
||||||
|
},
|
||||||
|
// 查看报告
|
||||||
|
report() {},
|
||||||
|
// 表格排序
|
||||||
|
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();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
</style>
|
|
@ -0,0 +1,369 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer>
|
||||||
|
<template slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!--病历号-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:imageInspect:table:patientIdStr')"
|
||||||
|
prop="PatientIdStr"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="searchData.PatientIdStr"
|
||||||
|
size="small"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<!--患者姓名-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:imageInspect:table:patientName')"
|
||||||
|
prop="PatientName"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="searchData.PatientName"
|
||||||
|
size="small"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<!--接收端AE-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:imageInspect:table:calledAE')"
|
||||||
|
prop="CalledAE"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="searchData.CalledAE"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item of calledAEList"
|
||||||
|
:key="item"
|
||||||
|
:value="item"
|
||||||
|
:label="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--发送端AE-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:imageInspect:table:callingAE')"
|
||||||
|
prop="CallingAE"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="searchData.CallingAE"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item of callingAEList"
|
||||||
|
:key="item"
|
||||||
|
:value="item"
|
||||||
|
:label="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--所在中心-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:imageInspect:table:trialSiteKeyInfo')"
|
||||||
|
prop="TrialSiteKeyInfo"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="searchData.TrialSiteKeyInfo"
|
||||||
|
size="small"
|
||||||
|
clearable
|
||||||
|
style="width: 150px"
|
||||||
|
:placeholder="
|
||||||
|
$t('trials:imageInspect:placeholder:trialSiteKeyInfo')
|
||||||
|
"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<!--最新接受日期-->
|
||||||
|
<el-form-item :label="$t('trials:imageInspect:table:createTime')">
|
||||||
|
<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"
|
||||||
|
>
|
||||||
|
{{ $t("common:button:reset") }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
<template slot="main-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
v-adaptive="{ bottomOffset: 60 }"
|
||||||
|
height="100"
|
||||||
|
:data="list"
|
||||||
|
class="table"
|
||||||
|
@sort-change="handleSortByColumn"
|
||||||
|
:default-sort="{ prop: 'LatestPushTime', order: 'descending' }"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<!--病历号-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:patientIdStr')"
|
||||||
|
prop="PatientIdStr"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--患者姓名-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:patientName')"
|
||||||
|
prop="PatientName"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--出生日期-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:patientBirthDate')"
|
||||||
|
prop="PatientBirthDate"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--性别-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:patientSex')"
|
||||||
|
prop="PatientSex"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--接收端AE-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:calledAEList')"
|
||||||
|
prop="CalledAEList"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
><template slot-scope="scope">
|
||||||
|
{{ scope.row.CallingAEList.join(", ") }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!--发送端AE-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:callingAEList')"
|
||||||
|
prop="CallingAEList"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.CallingAEList.join(", ") }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!--检查-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:studyCount')"
|
||||||
|
prop="StudyCount"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.StudyCount >= 1"
|
||||||
|
type="text"
|
||||||
|
@click="handleOpenDialog(scope.row, 'study')"
|
||||||
|
>
|
||||||
|
<span>{{ scope.row.StudyCount }}</span>
|
||||||
|
</el-button>
|
||||||
|
<span v-else>{{ scope.row.StudyCount }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!--所在中心-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:trialSiteCodeAndName')"
|
||||||
|
prop="TrialSiteCode"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.trialSiteCode }},{{ scope.row.trialSiteName }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!--受试者ID-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:subjectCode')"
|
||||||
|
prop="SubjectCode"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--最新接收时间-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:imageInspect:table:lastestPushTime')"
|
||||||
|
prop="LatestPushTime"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination
|
||||||
|
class="page"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="searchData.PageIndex"
|
||||||
|
:limit.sync="searchData.PageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<!--查看检查列表-->
|
||||||
|
<viewStudy
|
||||||
|
v-if="visible"
|
||||||
|
:visible.sync="visible"
|
||||||
|
:Patient="selectPatient"
|
||||||
|
@getList="getList"
|
||||||
|
/>
|
||||||
|
</BaseContainer>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getPatientList,
|
||||||
|
getDicomCalledAEList,
|
||||||
|
getDicomCallingAEList,
|
||||||
|
} from "@/api/trials";
|
||||||
|
import BaseContainer from "@/components/BaseContainer";
|
||||||
|
import Pagination from "@/components/Pagination";
|
||||||
|
import moment from "moment";
|
||||||
|
import viewStudy from "./components/view-study";
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
PatientIdStr: null,
|
||||||
|
PatientName: null,
|
||||||
|
CallingAE: null,
|
||||||
|
CalledAE: null,
|
||||||
|
BeginPushTime: null,
|
||||||
|
EndPushTime: null,
|
||||||
|
SubejctCode: null,
|
||||||
|
TrialSiteKeyInfo: null,
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
Asc: true,
|
||||||
|
SortField: "LatestPushTime",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export default {
|
||||||
|
components: { BaseContainer, Pagination, viewStudy },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
moment,
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
loading: false,
|
||||||
|
datetimerange: [],
|
||||||
|
calledAEList: [],
|
||||||
|
callingAEList: [],
|
||||||
|
visible: false,
|
||||||
|
selectPatient: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCalledAEList();
|
||||||
|
this.getCallingAEList();
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 打开弹框
|
||||||
|
handleOpenDialog(item) {
|
||||||
|
this.visible = true;
|
||||||
|
this.selectPatient = item;
|
||||||
|
},
|
||||||
|
// 获取接收端AE列表
|
||||||
|
async getCalledAEList() {
|
||||||
|
try {
|
||||||
|
let params = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
};
|
||||||
|
let res = await getDicomCalledAEList(params);
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.calledAEList = res.Result;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取发送端端AE列表
|
||||||
|
async getCallingAEList() {
|
||||||
|
try {
|
||||||
|
let params = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
};
|
||||||
|
let res = await getDicomCallingAEList(params);
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.callingAEList = res.Result;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.searchData.TrialId = this.$route.query.trialId;
|
||||||
|
getPatientList(this.searchData)
|
||||||
|
.then((res) => {
|
||||||
|
this.loading = false;
|
||||||
|
this.list = res.Result.CurrentPageData;
|
||||||
|
this.total = res.Result.TotalCount;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleDatetimeChange(val) {
|
||||||
|
if (val) {
|
||||||
|
this.searchData.BeginPushTime = val[0];
|
||||||
|
this.searchData.EndPushTime = val[1];
|
||||||
|
} else {
|
||||||
|
this.searchData.BeginPushTime = "";
|
||||||
|
this.searchData.EndPushTime = "";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSearch() {
|
||||||
|
this.searchData.PageIndex = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 重置列表查询
|
||||||
|
handleReset() {
|
||||||
|
this.datetimerange = null;
|
||||||
|
this.handleDatetimeChange();
|
||||||
|
this.searchData = searchDataDefault();
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === "ascending") {
|
||||||
|
this.searchData.Asc = true;
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false;
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop;
|
||||||
|
this.searchData.PageIndex = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
|
@ -0,0 +1,311 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer>
|
||||||
|
<template slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!--所在中心-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:pushRecord:table:trialSiteKeyInfo')"
|
||||||
|
prop="TrialSiteKeyInfo"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="searchData.TrialSiteKeyInfo"
|
||||||
|
size="small"
|
||||||
|
clearable
|
||||||
|
style="width: 150px"
|
||||||
|
:placeholder="$t('trials:pushRecord:placeholder:trialSiteKeyInfo')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<!--接收端AE-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:pushRecord:table:calledAE')"
|
||||||
|
prop="CalledAE"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="searchData.CalledAE"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item of calledAEList"
|
||||||
|
:key="item"
|
||||||
|
:value="item"
|
||||||
|
:label="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--发送端AE-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:pushRecord:table:callingAE')"
|
||||||
|
prop="CallingAE"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="searchData.CallingAE"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item of callingAEList"
|
||||||
|
:key="item"
|
||||||
|
:value="item"
|
||||||
|
:label="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--最新接受日期-->
|
||||||
|
<el-form-item :label="$t('trials:pushRecord:table:createTime')">
|
||||||
|
<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"
|
||||||
|
>
|
||||||
|
{{ $t("common:button:reset") }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
<template slot="main-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
v-adaptive="{ bottomOffset: 60 }"
|
||||||
|
height="100"
|
||||||
|
:data="list"
|
||||||
|
class="table"
|
||||||
|
@sort-change="handleSortByColumn"
|
||||||
|
:default-sort="{ prop: 'StartTime', order: 'descending' }"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<!--中心编号-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:trialSiteCode')"
|
||||||
|
prop="TrialSiteCode"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--中心名称-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:trialSiteAliasName')"
|
||||||
|
prop="TrialSiteAliasName"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--发送端AE-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:callingAEList')"
|
||||||
|
prop="CallingAEList"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.CallingAEList.join(", ") }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!--发送端IP-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:callingAEIP')"
|
||||||
|
prop="CallingAEIP"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--接收端AE-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:calledAEList')"
|
||||||
|
prop="CalledAEList"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
><template slot-scope="scope">
|
||||||
|
{{ scope.row.CallingAEList.join(", ") }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<!--检查数-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:studyCount')"
|
||||||
|
prop="StudyCount"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--图像数量-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:fileCount')"
|
||||||
|
prop="FileCount"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--图像大小-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:fileSize')"
|
||||||
|
prop="FileSize"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--推送开始时间-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:startTime')"
|
||||||
|
prop="StartTime"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--推送结束时间-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:endTime')"
|
||||||
|
prop="EndTime"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination
|
||||||
|
class="page"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="searchData.PageIndex"
|
||||||
|
:limit.sync="searchData.PageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</BaseContainer>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getSCPImageUploadList,
|
||||||
|
getDicomCalledAEList,
|
||||||
|
getDicomCallingAEList,
|
||||||
|
} from "@/api/trials";
|
||||||
|
import BaseContainer from "@/components/BaseContainer";
|
||||||
|
import Pagination from "@/components/Pagination";
|
||||||
|
import moment from "moment";
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
CallingAE: null,
|
||||||
|
CalledAE: null,
|
||||||
|
StartTime: null,
|
||||||
|
EndTime: null,
|
||||||
|
TrialSiteKeyInfo: null,
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
Asc: true,
|
||||||
|
SortField: "StartTime",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export default {
|
||||||
|
components: { BaseContainer, Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
moment,
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
loading: false,
|
||||||
|
datetimerange: [],
|
||||||
|
calledAEList: [],
|
||||||
|
callingAEList: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCalledAEList();
|
||||||
|
this.getCallingAEList();
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取接收端AE列表
|
||||||
|
async getCalledAEList() {
|
||||||
|
try {
|
||||||
|
let params = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
};
|
||||||
|
let res = await getDicomCalledAEList(params);
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.calledAEList = res.Result;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取发送端端AE列表
|
||||||
|
async getCallingAEList() {
|
||||||
|
try {
|
||||||
|
let params = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
};
|
||||||
|
let res = await getDicomCallingAEList(params);
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.callingAEList = res.Result;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getList() {
|
||||||
|
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;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleDatetimeChange(val) {
|
||||||
|
if (val) {
|
||||||
|
this.searchData.StartTime = val[0];
|
||||||
|
this.searchData.EndTime = val[1];
|
||||||
|
} else {
|
||||||
|
this.searchData.StartTime = "";
|
||||||
|
this.searchData.EndTime = "";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSearch() {
|
||||||
|
this.searchData.PageIndex = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 重置列表查询
|
||||||
|
handleReset() {
|
||||||
|
this.datetimerange = null;
|
||||||
|
this.handleDatetimeChange();
|
||||||
|
this.searchData = searchDataDefault();
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === "ascending") {
|
||||||
|
this.searchData.Asc = true;
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false;
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop;
|
||||||
|
this.searchData.PageIndex = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
|
@ -193,365 +193,389 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 多文件上传 -->
|
<!-- 多文件上传 -->
|
||||||
<form id="inputForm" ref="uploadForm" enctype="multipart/form-data">
|
<el-divider content-position="left">{{
|
||||||
<el-divider content-position="left">{{
|
$t("trials:uploadedDicoms:title:dicomFilesOnly")
|
||||||
$t("trials:uploadedDicoms:title:dicomFilesOnly")
|
}}</el-divider>
|
||||||
}}</el-divider>
|
<el-tabs v-model="uploadActiveName">
|
||||||
<div class="form-group">
|
<!-- 本地上传 -->
|
||||||
<div id="directoryInputWrapper" class="btn btn-link file-input">
|
<el-tab-pane
|
||||||
<el-button
|
:label="$t('trials:uploadedDicoms:tab:uploadFile')"
|
||||||
type="primary"
|
name="file"
|
||||||
:disabled="btnLoading"
|
>
|
||||||
:loading="btnLoading"
|
<form id="inputForm" ref="uploadForm" enctype="multipart/form-data">
|
||||||
size="small"
|
<div class="form-group">
|
||||||
>{{
|
<div id="directoryInputWrapper" class="btn btn-link file-input">
|
||||||
$t("trials:uploadedDicomsicom:button:selectFolder")
|
<el-button
|
||||||
}}</el-button
|
type="primary"
|
||||||
>
|
:disabled="btnLoading"
|
||||||
<input
|
:loading="btnLoading"
|
||||||
type="file"
|
size="small"
|
||||||
name="file"
|
>{{
|
||||||
ref="pathClear"
|
$t("trials:uploadedDicomsicom:button:selectFolder")
|
||||||
:disabled="btnLoading"
|
}}</el-button
|
||||||
webkitdirectory
|
>
|
||||||
multiple
|
<input
|
||||||
@change="beginScanFiles($event)"
|
type="file"
|
||||||
/>
|
name="file"
|
||||||
</div>
|
ref="pathClear"
|
||||||
</div>
|
:disabled="btnLoading"
|
||||||
</form>
|
webkitdirectory
|
||||||
|
multiple
|
||||||
<!-- 文件列表 -->
|
@change="beginScanFiles($event)"
|
||||||
<el-table
|
/>
|
||||||
ref="dicomFilesTable"
|
|
||||||
:data="uploadQueues"
|
|
||||||
:row-key="(row) => row.studyIndex"
|
|
||||||
class="dicomFiles-table"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column
|
|
||||||
type="selection"
|
|
||||||
width="55"
|
|
||||||
:selectable="handleSelectable"
|
|
||||||
/>
|
|
||||||
<el-table-column type="index" width="40" />
|
|
||||||
<el-table-column min-width="200" show-overflow-tooltip>
|
|
||||||
<template slot="header">
|
|
||||||
<el-tooltip placement="top">
|
|
||||||
<div slot="content">
|
|
||||||
{{ $t("trials:uploadDicomList:table:studyDetail1") }}<br />
|
|
||||||
{{ $t("trials:uploadDicomList:table:studyDetail2") }}<br />
|
|
||||||
{{ $t("trials:uploadedDicoms:table:studyDate") }}
|
|
||||||
</div>
|
|
||||||
<span>{{ $t("trials:uploadDicomList:table:studyInfo") }}</span>
|
|
||||||
</el-tooltip>
|
|
||||||
</template>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<div style="line-height: 15px">
|
|
||||||
<div>
|
|
||||||
<div>
|
|
||||||
<span v-if="scope.row.dicomInfo.accNumber"
|
|
||||||
><span style="font-weight: 500">Acc:</span>
|
|
||||||
{{ scope.row.dicomInfo.accNumber }}</span
|
|
||||||
>
|
|
||||||
<span v-else style="color: #f44336">N/A</span>
|
|
||||||
</div>
|
|
||||||
<div style="display: inline-block; margin-right: 2px">
|
|
||||||
<span v-if="scope.row.dicomInfo.modality.length > 0">
|
|
||||||
{{ scope.row.dicomInfo.modality.join("、") }},</span
|
|
||||||
>
|
|
||||||
<span v-else style="color: #f44336">N/A,</span>
|
|
||||||
</div>
|
|
||||||
<div style="display: inline-block; margin-right: 2px">
|
|
||||||
<span v-if="scope.row.seriesList.length"
|
|
||||||
>{{ scope.row.seriesList.length }} Series,</span
|
|
||||||
>
|
|
||||||
<span v-else style="color: #f44336">N/A,</span>
|
|
||||||
</div>
|
|
||||||
<div style="display: inline-block">
|
|
||||||
<span v-if="scope.row.fileList.length"
|
|
||||||
>{{ scope.row.fileList.length }} Instances</span
|
|
||||||
>
|
|
||||||
<span v-else style="color: #f44336">N/A</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div style="display: inline-block; margin-right: 2px">
|
|
||||||
<span v-if="scope.row.dicomInfo.bodyPart">
|
|
||||||
{{ scope.row.dicomInfo.bodyPart }},
|
|
||||||
</span>
|
|
||||||
<span v-else style="color: #f44336">N/A, </span>
|
|
||||||
</div>
|
|
||||||
<div style="display: inline-block">
|
|
||||||
<span v-if="scope.row.dicomInfo.description">
|
|
||||||
{{ scope.row.dicomInfo.description }}</span
|
|
||||||
>
|
|
||||||
<span v-else style="color: #f44336">N/A</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ scope.row.dicomInfo.studyTime }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</form>
|
||||||
</el-table-column>
|
|
||||||
<el-table-column min-width="130" show-overflow-tooltip>
|
|
||||||
<template slot="header">
|
|
||||||
<el-tooltip placement="top">
|
|
||||||
<div slot="content">
|
|
||||||
{{ $t("trials:uploadDicomList:table:pId") }}<br />
|
|
||||||
{{ $t("trials:uploadDicomList:table:patientName") }}<br />
|
|
||||||
{{ $t("trials:uploadDicomList:table:pInfo") }}
|
|
||||||
</div>
|
|
||||||
<span>{{ $t("trials:uploadDicomList:table:patientInfo") }}</span>
|
|
||||||
</el-tooltip>
|
|
||||||
</template>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<div style="line-height: 15px">
|
|
||||||
<div>
|
|
||||||
<span v-if="scope.row.dicomInfo.patientId"
|
|
||||||
><span style="font-weight: 500">PID: </span
|
|
||||||
>{{ scope.row.dicomInfo.patientId }}</span
|
|
||||||
>
|
|
||||||
<span v-else style="color: #f44336">N/A</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span
|
|
||||||
:class="[scope.row.dicomInfo.patientName ? '' : 'colorOfRed']"
|
|
||||||
>
|
|
||||||
{{
|
|
||||||
scope.row.dicomInfo.patientName
|
|
||||||
? scope.row.dicomInfo.patientName
|
|
||||||
: "N/A"
|
|
||||||
}}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span
|
|
||||||
:class="[scope.row.dicomInfo.patientSex ? '' : 'colorOfRed']"
|
|
||||||
>
|
|
||||||
{{
|
|
||||||
scope.row.dicomInfo.patientSex
|
|
||||||
? scope.row.dicomInfo.patientSex
|
|
||||||
: "N/A"
|
|
||||||
}},
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span
|
<!-- 文件列表 -->
|
||||||
:class="[scope.row.dicomInfo.patientAge ? '' : 'colorOfRed']"
|
<el-table
|
||||||
>
|
ref="dicomFilesTable"
|
||||||
{{
|
:data="uploadQueues"
|
||||||
scope.row.dicomInfo.patientAge
|
:row-key="(row) => row.studyIndex"
|
||||||
? scope.row.dicomInfo.patientAge
|
class="dicomFiles-table"
|
||||||
: "N/A"
|
@selection-change="handleSelectionChange"
|
||||||
}},
|
>
|
||||||
</span>
|
<el-table-column
|
||||||
|
type="selection"
|
||||||
<span
|
width="55"
|
||||||
:class="[
|
:selectable="handleSelectable"
|
||||||
scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed',
|
|
||||||
]"
|
|
||||||
>
|
|
||||||
{{
|
|
||||||
scope.row.dicomInfo.patientBirthDate
|
|
||||||
? scope.row.dicomInfo.patientBirthDate
|
|
||||||
: "N/A"
|
|
||||||
}}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('trials:uploadDicomList:table:failedFileCount')"
|
|
||||||
min-width="120"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-progress
|
|
||||||
color="#409eff"
|
|
||||||
:percentage="
|
|
||||||
(scope.row.dicomInfo.failedFileCount * 100) /
|
|
||||||
scope.row.dicomInfo.fileCount
|
|
||||||
"
|
|
||||||
:show-text="false"
|
|
||||||
/>
|
/>
|
||||||
<span
|
<el-table-column type="index" width="40" />
|
||||||
>{{ scope.row.dicomInfo.failedFileCount }} /
|
<el-table-column min-width="200" show-overflow-tooltip>
|
||||||
{{ scope.row.dicomInfo.fileCount }}</span
|
<template slot="header">
|
||||||
>
|
<el-tooltip placement="top">
|
||||||
</template>
|
<div slot="content">
|
||||||
</el-table-column>
|
{{ $t("trials:uploadDicomList:table:studyDetail1") }}<br />
|
||||||
|
{{ $t("trials:uploadDicomList:table:studyDetail2") }}<br />
|
||||||
|
{{ $t("trials:uploadedDicoms:table:studyDate") }}
|
||||||
|
</div>
|
||||||
|
<span>{{ $t("trials:uploadDicomList:table:studyInfo") }}</span>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div style="line-height: 15px">
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<span v-if="scope.row.dicomInfo.accNumber"
|
||||||
|
><span style="font-weight: 500">Acc:</span>
|
||||||
|
{{ scope.row.dicomInfo.accNumber }}</span
|
||||||
|
>
|
||||||
|
<span v-else style="color: #f44336">N/A</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: inline-block; margin-right: 2px">
|
||||||
|
<span v-if="scope.row.dicomInfo.modality.length > 0">
|
||||||
|
{{ scope.row.dicomInfo.modality.join("、") }},</span
|
||||||
|
>
|
||||||
|
<span v-else style="color: #f44336">N/A,</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: inline-block; margin-right: 2px">
|
||||||
|
<span v-if="scope.row.seriesList.length"
|
||||||
|
>{{ scope.row.seriesList.length }} Series,</span
|
||||||
|
>
|
||||||
|
<span v-else style="color: #f44336">N/A,</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: inline-block">
|
||||||
|
<span v-if="scope.row.fileList.length"
|
||||||
|
>{{ scope.row.fileList.length }} Instances</span
|
||||||
|
>
|
||||||
|
<span v-else style="color: #f44336">N/A</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<el-table-column
|
<div>
|
||||||
:label="$t('trials:uploadDicomList:table:status')"
|
<div style="display: inline-block; margin-right: 2px">
|
||||||
min-width="140"
|
<span v-if="scope.row.dicomInfo.bodyPart">
|
||||||
show-overflow-tooltip
|
{{ scope.row.dicomInfo.bodyPart }},
|
||||||
>
|
</span>
|
||||||
<template slot-scope="scope">
|
<span v-else style="color: #f44336">N/A, </span>
|
||||||
<span
|
</div>
|
||||||
v-if="
|
<div style="display: inline-block">
|
||||||
!scope.row.dicomInfo.failedFileCount &&
|
<span v-if="scope.row.dicomInfo.description">
|
||||||
!scope.row.dicomInfo.isInit
|
{{ scope.row.dicomInfo.description }}</span
|
||||||
"
|
>
|
||||||
>
|
<span v-else style="color: #f44336">N/A</span>
|
||||||
{{ $t("trials:uploadDicomList:table:status1") }}</span
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
style="color: #409eff"
|
|
||||||
v-else-if="
|
|
||||||
!scope.row.dicomInfo.failedFileCount &&
|
|
||||||
scope.row.dicomInfo.isInit &&
|
|
||||||
btnLoading
|
|
||||||
"
|
|
||||||
>{{ $t("trials:uploadDicomList:table:status2") }}</span
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
style="color: #409eff"
|
|
||||||
v-else-if="
|
|
||||||
scope.row.dicomInfo.failedFileCount <
|
|
||||||
scope.row.dicomInfo.fileCount && !scope.row.uploadState.record
|
|
||||||
"
|
|
||||||
>{{ $t("trials:uploadDicomList:table:status2") }}</span
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
style="color: #2cc368"
|
|
||||||
v-else-if="
|
|
||||||
scope.row.dicomInfo.failedFileCount ===
|
|
||||||
scope.row.dicomInfo.fileCount
|
|
||||||
"
|
|
||||||
>{{ $t("trials:uploadDicomList:table:status3") }}</span
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
style="color: #f66"
|
|
||||||
v-else-if="
|
|
||||||
scope.row.uploadState.record &&
|
|
||||||
scope.row.uploadState.record.fileCount === 0
|
|
||||||
"
|
|
||||||
>{{ $t("trials:uploadDicomList:table:status5") }}</span
|
|
||||||
>
|
|
||||||
<span style="color: #f66" v-else>{{
|
|
||||||
$t("trials:uploadDicomList:table:Failed")
|
|
||||||
}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('trials:uploadDicomList:table:record')"
|
|
||||||
min-width="140"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tooltip placement="top" v-if="scope.row.uploadState.record">
|
|
||||||
<div slot="content">
|
|
||||||
<div style="max-height: 500px; overflow-y: auto">
|
|
||||||
{{ $t("trials:uploadDicomList:table:Existed") }}:
|
|
||||||
<div v-if="scope.row.uploadState.record.Existed.length">
|
|
||||||
<div
|
|
||||||
v-for="item of scope.row.uploadState.record.Existed"
|
|
||||||
:key="item"
|
|
||||||
style="font-size: 12px; color: #baa72a"
|
|
||||||
>
|
|
||||||
{{ item }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else> </div>
|
<div>
|
||||||
{{ $t("trials:uploadDicomList:table:Uploaded") }}:
|
{{ scope.row.dicomInfo.studyTime }}
|
||||||
<div v-if="scope.row.uploadState.record.Uploaded.length">
|
|
||||||
<div
|
|
||||||
v-for="item of scope.row.uploadState.record.Uploaded"
|
|
||||||
:key="item"
|
|
||||||
style="font-size: 12px; color: #24b837"
|
|
||||||
>
|
|
||||||
{{ item }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div v-else> </div>
|
|
||||||
<br />
|
|
||||||
{{ $t("trials:uploadDicomList:table:Failed") }}:
|
|
||||||
<div v-if="scope.row.uploadState.record.Failed.length">
|
|
||||||
<div
|
|
||||||
v-for="item of scope.row.uploadState.record.Failed"
|
|
||||||
:key="item"
|
|
||||||
style="font-size: 12px; color: #f66"
|
|
||||||
>
|
|
||||||
{{ item }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else> </div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
<el-button size="mini" style="cursor: pointer">
|
</el-table-column>
|
||||||
<span style="font-size: 12px; color: #baa72a">{{
|
<el-table-column min-width="130" show-overflow-tooltip>
|
||||||
scope.row.uploadState.record.Existed.length
|
<template slot="header">
|
||||||
|
<el-tooltip placement="top">
|
||||||
|
<div slot="content">
|
||||||
|
{{ $t("trials:uploadDicomList:table:pId") }}<br />
|
||||||
|
{{ $t("trials:uploadDicomList:table:patientName") }}<br />
|
||||||
|
{{ $t("trials:uploadDicomList:table:pInfo") }}
|
||||||
|
</div>
|
||||||
|
<span>{{
|
||||||
|
$t("trials:uploadDicomList:table:patientInfo")
|
||||||
|
}}</span>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div style="line-height: 15px">
|
||||||
|
<div>
|
||||||
|
<span v-if="scope.row.dicomInfo.patientId"
|
||||||
|
><span style="font-weight: 500">PID: </span
|
||||||
|
>{{ scope.row.dicomInfo.patientId }}</span
|
||||||
|
>
|
||||||
|
<span v-else style="color: #f44336">N/A</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span
|
||||||
|
:class="[
|
||||||
|
scope.row.dicomInfo.patientName ? '' : 'colorOfRed',
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
scope.row.dicomInfo.patientName
|
||||||
|
? scope.row.dicomInfo.patientName
|
||||||
|
: "N/A"
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span
|
||||||
|
:class="[
|
||||||
|
scope.row.dicomInfo.patientSex ? '' : 'colorOfRed',
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
scope.row.dicomInfo.patientSex
|
||||||
|
? scope.row.dicomInfo.patientSex
|
||||||
|
: "N/A"
|
||||||
|
}},
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span
|
||||||
|
:class="[
|
||||||
|
scope.row.dicomInfo.patientAge ? '' : 'colorOfRed',
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
scope.row.dicomInfo.patientAge
|
||||||
|
? scope.row.dicomInfo.patientAge
|
||||||
|
: "N/A"
|
||||||
|
}},
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span
|
||||||
|
:class="[
|
||||||
|
scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed',
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
scope.row.dicomInfo.patientBirthDate
|
||||||
|
? scope.row.dicomInfo.patientBirthDate
|
||||||
|
: "N/A"
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:uploadDicomList:table:failedFileCount')"
|
||||||
|
min-width="120"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-progress
|
||||||
|
color="#409eff"
|
||||||
|
:percentage="
|
||||||
|
(scope.row.dicomInfo.failedFileCount * 100) /
|
||||||
|
scope.row.dicomInfo.fileCount
|
||||||
|
"
|
||||||
|
:show-text="false"
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
>{{ scope.row.dicomInfo.failedFileCount }} /
|
||||||
|
{{ scope.row.dicomInfo.fileCount }}</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:uploadDicomList:table:status')"
|
||||||
|
min-width="140"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span
|
||||||
|
v-if="
|
||||||
|
!scope.row.dicomInfo.failedFileCount &&
|
||||||
|
!scope.row.dicomInfo.isInit
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{ $t("trials:uploadDicomList:table:status1") }}</span
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
style="color: #409eff"
|
||||||
|
v-else-if="
|
||||||
|
!scope.row.dicomInfo.failedFileCount &&
|
||||||
|
scope.row.dicomInfo.isInit &&
|
||||||
|
btnLoading
|
||||||
|
"
|
||||||
|
>{{ $t("trials:uploadDicomList:table:status2") }}</span
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
style="color: #409eff"
|
||||||
|
v-else-if="
|
||||||
|
scope.row.dicomInfo.failedFileCount <
|
||||||
|
scope.row.dicomInfo.fileCount &&
|
||||||
|
!scope.row.uploadState.record
|
||||||
|
"
|
||||||
|
>{{ $t("trials:uploadDicomList:table:status2") }}</span
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
style="color: #2cc368"
|
||||||
|
v-else-if="
|
||||||
|
scope.row.dicomInfo.failedFileCount ===
|
||||||
|
scope.row.dicomInfo.fileCount
|
||||||
|
"
|
||||||
|
>{{ $t("trials:uploadDicomList:table:status3") }}</span
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
style="color: #f66"
|
||||||
|
v-else-if="
|
||||||
|
scope.row.uploadState.record &&
|
||||||
|
scope.row.uploadState.record.fileCount === 0
|
||||||
|
"
|
||||||
|
>{{ $t("trials:uploadDicomList:table:status5") }}</span
|
||||||
|
>
|
||||||
|
<span style="color: #f66" v-else>{{
|
||||||
|
$t("trials:uploadDicomList:table:Failed")
|
||||||
}}</span>
|
}}</span>
|
||||||
/
|
</template>
|
||||||
<span style="font-size: 12px; color: #24b837">{{
|
</el-table-column>
|
||||||
scope.row.uploadState.record.Uploaded.length
|
<el-table-column
|
||||||
}}</span>
|
:label="$t('trials:uploadDicomList:table:record')"
|
||||||
/
|
min-width="140"
|
||||||
<span style="font-size: 12px; color: #f66">{{
|
show-overflow-tooltip
|
||||||
scope.row.uploadState.record.Failed.length
|
>
|
||||||
}}</span>
|
<template slot-scope="scope">
|
||||||
</el-button>
|
<el-tooltip placement="top" v-if="scope.row.uploadState.record">
|
||||||
</el-tooltip>
|
<div slot="content">
|
||||||
</template>
|
<div style="max-height: 500px; overflow-y: auto">
|
||||||
</el-table-column>
|
{{ $t("trials:uploadDicomList:table:Existed") }}:
|
||||||
<el-table-column
|
<div v-if="scope.row.uploadState.record.Existed.length">
|
||||||
v-show="isScan"
|
<div
|
||||||
:label="$t('common:action:action')"
|
v-for="item of scope.row.uploadState.record.Existed"
|
||||||
width="200"
|
:key="item"
|
||||||
>
|
style="font-size: 12px; color: #baa72a"
|
||||||
<template slot-scope="scope">
|
>
|
||||||
<!-- 预览 -->
|
{{ item }}
|
||||||
<!-- :disabled="scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.fileCount && scope.row.dicomInfo.failedFileCount !== 0"-->
|
</div>
|
||||||
<el-button
|
</div>
|
||||||
icon="el-icon-view"
|
<div v-else> </div>
|
||||||
circle
|
{{ $t("trials:uploadDicomList:table:Uploaded") }}:
|
||||||
:disabled="
|
<div v-if="scope.row.uploadState.record.Uploaded.length">
|
||||||
scope.row.uploadState.stateCode !== '' &&
|
<div
|
||||||
scope.row.dicomInfo.failedFileCount <
|
v-for="item of scope.row.uploadState.record.Uploaded"
|
||||||
scope.row.dicomInfo.fileCount &&
|
:key="item"
|
||||||
!scope.row.uploadState.record
|
style="font-size: 12px; color: #24b837"
|
||||||
"
|
>
|
||||||
:title="$t('trials:uploadedDicoms:action:preview')"
|
{{ item }}
|
||||||
size="small"
|
</div>
|
||||||
@click="handlePreview(scope.row.dicomInfo.studyUid)"
|
</div>
|
||||||
/>
|
<div v-else> </div>
|
||||||
<!-- 移除 -->
|
<br />
|
||||||
<el-button
|
{{ $t("trials:uploadDicomList:table:Failed") }}:
|
||||||
icon="el-icon-delete"
|
<div v-if="scope.row.uploadState.record.Failed.length">
|
||||||
circle
|
<div
|
||||||
:title="$t('trials:uploadedDicoms:action:delete')"
|
v-for="item of scope.row.uploadState.record.Failed"
|
||||||
size="small"
|
:key="item"
|
||||||
:disabled="
|
style="font-size: 12px; color: #f66"
|
||||||
scope.row.uploadState.stateCode !== '' &&
|
>
|
||||||
scope.row.dicomInfo.failedFileCount <
|
{{ item }}
|
||||||
scope.row.dicomInfo.fileCount &&
|
</div>
|
||||||
!scope.row.uploadState.record
|
</div>
|
||||||
"
|
<div v-else> </div>
|
||||||
@click="handleDelete(scope.$index, scope.row)"
|
</div>
|
||||||
/>
|
</div>
|
||||||
</template>
|
<el-button size="mini" style="cursor: pointer">
|
||||||
</el-table-column>
|
<span style="font-size: 12px; color: #baa72a">{{
|
||||||
</el-table>
|
scope.row.uploadState.record.Existed.length
|
||||||
<div style="text-align: right; padding: 10px 0px">
|
}}</span>
|
||||||
<!-- 关闭 -->
|
/
|
||||||
<!-- <el-button :disabled="btnLoading" size="small" type="primary" @click="cancel">
|
<span style="font-size: 12px; color: #24b837">{{
|
||||||
|
scope.row.uploadState.record.Uploaded.length
|
||||||
|
}}</span>
|
||||||
|
/
|
||||||
|
<span style="font-size: 12px; color: #f66">{{
|
||||||
|
scope.row.uploadState.record.Failed.length
|
||||||
|
}}</span>
|
||||||
|
</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
v-show="isScan"
|
||||||
|
:label="$t('common:action:action')"
|
||||||
|
width="200"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<!-- 预览 -->
|
||||||
|
<!-- :disabled="scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.fileCount && scope.row.dicomInfo.failedFileCount !== 0"-->
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-view"
|
||||||
|
circle
|
||||||
|
:disabled="
|
||||||
|
scope.row.uploadState.stateCode !== '' &&
|
||||||
|
scope.row.dicomInfo.failedFileCount <
|
||||||
|
scope.row.dicomInfo.fileCount &&
|
||||||
|
!scope.row.uploadState.record
|
||||||
|
"
|
||||||
|
:title="$t('trials:uploadedDicoms:action:preview')"
|
||||||
|
size="small"
|
||||||
|
@click="handlePreview(scope.row.dicomInfo.studyUid)"
|
||||||
|
/>
|
||||||
|
<!-- 移除 -->
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-delete"
|
||||||
|
circle
|
||||||
|
:title="$t('trials:uploadedDicoms:action:delete')"
|
||||||
|
size="small"
|
||||||
|
:disabled="
|
||||||
|
scope.row.uploadState.stateCode !== '' &&
|
||||||
|
scope.row.dicomInfo.failedFileCount <
|
||||||
|
scope.row.dicomInfo.fileCount &&
|
||||||
|
!scope.row.uploadState.record
|
||||||
|
"
|
||||||
|
@click="handleDelete(scope.$index, scope.row)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<div style="text-align: right; padding: 10px 0px">
|
||||||
|
<!-- 关闭 -->
|
||||||
|
<!-- <el-button :disabled="btnLoading" size="small" type="primary" @click="cancel">
|
||||||
{{ $t('trials:uploadDicomList:button:close') }}
|
{{ $t('trials:uploadDicomList:button:close') }}
|
||||||
</el-button> -->
|
</el-button> -->
|
||||||
<!-- 上传 -->
|
<!-- 上传 -->
|
||||||
<el-button
|
<el-button
|
||||||
size="small"
|
size="small"
|
||||||
type="primary"
|
type="primary"
|
||||||
:disabled="selectArr.length == 0 || !isScan"
|
:disabled="selectArr.length == 0 || !isScan"
|
||||||
:loading="btnLoading"
|
:loading="btnLoading"
|
||||||
@click="beginUploadQueues"
|
@click="beginUploadQueues"
|
||||||
|
>
|
||||||
|
{{ $t("trials:uploadDicomList:button:upload") }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<!-- pacs上传 -->
|
||||||
|
<el-tab-pane
|
||||||
|
:label="$t('trials:uploadNonDicoms:tab:uploadPacs')"
|
||||||
|
name="pacs"
|
||||||
|
:disabled="btnLoading"
|
||||||
>
|
>
|
||||||
{{ $t("trials:uploadDicomList:button:upload") }}
|
<uploadDicomPacs v-if="uploadActiveName === 'pacs'" />
|
||||||
</el-button>
|
</el-tab-pane>
|
||||||
</div>
|
</el-tabs>
|
||||||
|
|
||||||
<!-- 预览影像模态框 -->
|
<!-- 预览影像模态框 -->
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-if="previewVisible"
|
v-if="previewVisible"
|
||||||
|
@ -758,9 +782,10 @@ import { dcmUpload } from "@/utils/dcmUpload/dcmUpload";
|
||||||
import { convertBytes } from "@/utils/dicom-character-set";
|
import { convertBytes } from "@/utils/dicom-character-set";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
|
import uploadDicomPacs from "./uploadDiocmPacs.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "UploadDicomFiles",
|
name: "UploadDicomFiles",
|
||||||
components: { DicomPreview, uploadPetClinicalData },
|
components: { DicomPreview, uploadPetClinicalData, uploadDicomPacs },
|
||||||
props: {
|
props: {
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
@ -783,6 +808,7 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
uploadActiveName: "file",
|
||||||
editStudyInfoVisible: false,
|
editStudyInfoVisible: false,
|
||||||
studyForm: {
|
studyForm: {
|
||||||
StudyCode: "",
|
StudyCode: "",
|
||||||
|
|
|
@ -0,0 +1,311 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer>
|
||||||
|
<template slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!--所在中心-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:pushRecord:table:trialSiteKeyInfo')"
|
||||||
|
prop="TrialSiteKeyInfo"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="searchData.TrialSiteKeyInfo"
|
||||||
|
size="small"
|
||||||
|
clearable
|
||||||
|
style="width: 150px"
|
||||||
|
:placeholder="$t('trials:pushRecord:placeholder:trialSiteKeyInfo')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<!--接收端AE-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:pushRecord:table:calledAE')"
|
||||||
|
prop="CalledAE"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="searchData.CalledAE"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item of calledAEList"
|
||||||
|
:key="item"
|
||||||
|
:value="item"
|
||||||
|
:label="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--发送端AE-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('trials:pushRecord:table:callingAE')"
|
||||||
|
prop="CallingAE"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="searchData.CallingAE"
|
||||||
|
clearable
|
||||||
|
style="width: 120px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item of callingAEList"
|
||||||
|
:key="item"
|
||||||
|
:value="item"
|
||||||
|
:label="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--最新接受日期-->
|
||||||
|
<el-form-item :label="$t('trials:pushRecord:table:createTime')">
|
||||||
|
<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"
|
||||||
|
>
|
||||||
|
{{ $t("common:button:reset") }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
<template slot="main-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
v-adaptive="{ bottomOffset: 120 }"
|
||||||
|
height="100"
|
||||||
|
:data="list"
|
||||||
|
class="table"
|
||||||
|
@sort-change="handleSortByColumn"
|
||||||
|
:default-sort="{ prop: 'StartTime', order: 'descending' }"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<!--中心编号-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:trialSiteCode')"
|
||||||
|
prop="TrialSiteCode"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--中心名称-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:trialSiteAliasName')"
|
||||||
|
prop="TrialSiteAliasName"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--发送端AE-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:callingAEList')"
|
||||||
|
prop="CallingAEList"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.CallingAEList.join(", ") }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!--发送端IP-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:callingAEIP')"
|
||||||
|
prop="CallingAEIP"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--接收端AE-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:calledAEList')"
|
||||||
|
prop="CalledAEList"
|
||||||
|
min-width="90"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
><template slot-scope="scope">
|
||||||
|
{{ scope.row.CallingAEList.join(", ") }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<!--检查数-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:studyCount')"
|
||||||
|
prop="StudyCount"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--图像数量-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:fileCount')"
|
||||||
|
prop="FileCount"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--图像大小-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:fileSize')"
|
||||||
|
prop="FileSize"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--推送开始时间-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:startTime')"
|
||||||
|
prop="StartTime"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!--推送结束时间-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('trials:pushRecord:table:endTime')"
|
||||||
|
prop="EndTime"
|
||||||
|
min-width="160"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination
|
||||||
|
class="page"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="searchData.PageIndex"
|
||||||
|
:limit.sync="searchData.PageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</BaseContainer>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getSCPImageUploadList,
|
||||||
|
getDicomCalledAEList,
|
||||||
|
getDicomCallingAEList,
|
||||||
|
} from "@/api/trials";
|
||||||
|
import BaseContainer from "@/components/BaseContainer";
|
||||||
|
import Pagination from "@/components/Pagination";
|
||||||
|
import moment from "moment";
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
CallingAE: null,
|
||||||
|
CalledAE: null,
|
||||||
|
StartTime: null,
|
||||||
|
EndTime: null,
|
||||||
|
TrialSiteKeyInfo: null,
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
Asc: true,
|
||||||
|
SortField: "StartTime",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export default {
|
||||||
|
components: { BaseContainer, Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
moment,
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
loading: false,
|
||||||
|
datetimerange: [],
|
||||||
|
calledAEList: [],
|
||||||
|
callingAEList: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCalledAEList();
|
||||||
|
this.getCallingAEList();
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取接收端AE列表
|
||||||
|
async getCalledAEList() {
|
||||||
|
try {
|
||||||
|
let params = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
};
|
||||||
|
let res = await getDicomCalledAEList(params);
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.calledAEList = res.Result;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取发送端端AE列表
|
||||||
|
async getCallingAEList() {
|
||||||
|
try {
|
||||||
|
let params = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
};
|
||||||
|
let res = await getDicomCallingAEList(params);
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.callingAEList = res.Result;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getList() {
|
||||||
|
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;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleDatetimeChange(val) {
|
||||||
|
if (val) {
|
||||||
|
this.searchData.StartTime = val[0];
|
||||||
|
this.searchData.EndTime = val[1];
|
||||||
|
} else {
|
||||||
|
this.searchData.StartTime = "";
|
||||||
|
this.searchData.EndTime = "";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSearch() {
|
||||||
|
this.searchData.PageIndex = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 重置列表查询
|
||||||
|
handleReset() {
|
||||||
|
this.datetimerange = null;
|
||||||
|
this.handleDatetimeChange();
|
||||||
|
this.searchData = searchDataDefault();
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === "ascending") {
|
||||||
|
this.searchData.Asc = true;
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false;
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop;
|
||||||
|
this.searchData.PageIndex = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
|
@ -1045,7 +1045,7 @@ export default {
|
||||||
formRow: {},
|
formRow: {},
|
||||||
searchData: searchDataDefault(),
|
searchData: searchDataDefault(),
|
||||||
loading: false,
|
loading: false,
|
||||||
uploadVisible: false,
|
uploadVisible: true,
|
||||||
qcVisible: false,
|
qcVisible: false,
|
||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
|
|
Loading…
Reference in New Issue