Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
d5acb0a27c
|
|
@ -42,8 +42,8 @@
|
||||||
<el-link v-if="!form.IsUpdate" type="primary" @click="form.IsUpdate = true">
|
<el-link v-if="!form.IsUpdate" type="primary" @click="form.IsUpdate = true">
|
||||||
{{ $t('trials:researchForm:button:updateQsForm') }}
|
{{ $t('trials:researchForm:button:updateQsForm') }}
|
||||||
</el-link>
|
</el-link>
|
||||||
<!-- 取消更新调研表 -->
|
<!-- 取消更新调研表 form.ReplaceUserEmailOrPhone = '' -->
|
||||||
<el-link v-else type="primary" @click="form.IsUpdate = false; form.ReplaceUserEmailOrPhone = ''">
|
<el-link v-else type="primary" @click="form.IsUpdate = false;">
|
||||||
{{ $t('trials:researchForm:button:cancelUpdateQsForm') }}
|
{{ $t('trials:researchForm:button:cancelUpdateQsForm') }}
|
||||||
</el-link>
|
</el-link>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -214,7 +214,11 @@ export default {
|
||||||
let { email, oldEMail, trialSiteId } = this.$route.query
|
let { email, oldEMail, trialSiteId } = this.$route.query
|
||||||
if (trialSiteId) this.form.TrialSiteId = trialSiteId
|
if (trialSiteId) this.form.TrialSiteId = trialSiteId
|
||||||
if (oldEMail) this.form.ReplaceUserEmailOrPhone = oldEMail
|
if (oldEMail) this.form.ReplaceUserEmailOrPhone = oldEMail
|
||||||
if (email) this.form.EmailOrPhone = email
|
if (email && email !== 'null') {
|
||||||
|
this.form.EmailOrPhone = email
|
||||||
|
} else {
|
||||||
|
this.form.EmailOrPhone = oldEMail
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
||||||
|
|
@ -313,6 +313,15 @@ const config = {
|
||||||
'isDisabled': false,
|
'isDisabled': false,
|
||||||
'disabledReason': ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'name': '长短径测量工具',
|
||||||
|
'icon': 'bidirection',
|
||||||
|
'toolName': 'Bidirectional',
|
||||||
|
'props': ['length', 'width'],
|
||||||
|
'i18nKey': 'trials:reading:button:bidirectional',
|
||||||
|
'isDisabled': false,
|
||||||
|
'disabledReason': ''
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'name': '矩形工具',
|
'name': '矩形工具',
|
||||||
'icon': 'rectangle',
|
'icon': 'rectangle',
|
||||||
|
|
@ -322,15 +331,6 @@ const config = {
|
||||||
'isDisabled': false,
|
'isDisabled': false,
|
||||||
'disabledReason': ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
|
||||||
'name': '箭头工具',
|
|
||||||
'icon': 'arrow',
|
|
||||||
'toolName': 'ArrowAnnotate',
|
|
||||||
'props': [],
|
|
||||||
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
|
||||||
'isDisabled': false,
|
|
||||||
'disabledReason': ''
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
'name': '圆形工具',
|
'name': '圆形工具',
|
||||||
'icon': 'oval',
|
'icon': 'oval',
|
||||||
|
|
@ -349,6 +349,15 @@ const config = {
|
||||||
'isDisabled': false,
|
'isDisabled': false,
|
||||||
'disabledReason': ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'name': '自由曲线',
|
||||||
|
'icon': 'polygon',
|
||||||
|
'toolName': 'PlanarFreehandROI',
|
||||||
|
'props': ['area', 'mean', 'max', 'stdDev', 'perimeter'],
|
||||||
|
'i18nKey': 'trials:reading:button:planarFreehandROI',
|
||||||
|
'isDisabled': false,
|
||||||
|
'disabledReason': ''
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'name': '角度工具',
|
'name': '角度工具',
|
||||||
'icon': 'angle',
|
'icon': 'angle',
|
||||||
|
|
@ -359,11 +368,11 @@ const config = {
|
||||||
'disabledReason': ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': '自由曲线',
|
'name': '箭头工具',
|
||||||
'icon': 'polygon',
|
'icon': 'arrow',
|
||||||
'toolName': 'PlanarFreehandROI',
|
'toolName': 'ArrowAnnotate',
|
||||||
'props': ['area', 'mean', 'max', 'stdDev', 'perimeter'],
|
'props': [],
|
||||||
'i18nKey': 'trials:reading:button:planarFreehandROI',
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
'isDisabled': false,
|
'isDisabled': false,
|
||||||
'disabledReason': ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -308,7 +308,8 @@ const {
|
||||||
LengthTool,
|
LengthTool,
|
||||||
EllipticalROITool,
|
EllipticalROITool,
|
||||||
CircleROITool,
|
CircleROITool,
|
||||||
AngleTool
|
AngleTool,
|
||||||
|
BidirectionalTool,
|
||||||
// cursors
|
// cursors
|
||||||
} = cornerstoneTools
|
} = cornerstoneTools
|
||||||
const { MouseBindings, Events: toolsEvents } = csToolsEnums
|
const { MouseBindings, Events: toolsEvents } = csToolsEnums
|
||||||
|
|
@ -607,7 +608,7 @@ export default {
|
||||||
cornerstoneTools.addTool(EraserTool)
|
cornerstoneTools.addTool(EraserTool)
|
||||||
cornerstoneTools.addTool(LengthTool)
|
cornerstoneTools.addTool(LengthTool)
|
||||||
cornerstoneTools.addTool(LengthscaleTool)
|
cornerstoneTools.addTool(LengthscaleTool)
|
||||||
|
cornerstoneTools.addTool(BidirectionalTool)
|
||||||
viewportIds.forEach((viewportId, i) => {
|
viewportIds.forEach((viewportId, i) => {
|
||||||
const toolGroupId = `canvas-${i}`
|
const toolGroupId = `canvas-${i}`
|
||||||
const toolGroup = ToolGroupManager.createToolGroup(toolGroupId)
|
const toolGroup = ToolGroupManager.createToolGroup(toolGroupId)
|
||||||
|
|
@ -635,6 +636,10 @@ export default {
|
||||||
cachedStats: false,
|
cachedStats: false,
|
||||||
getTextLines: this.getRectangleROIToolTextLines
|
getTextLines: this.getRectangleROIToolTextLines
|
||||||
})
|
})
|
||||||
|
toolGroup.addTool(BidirectionalTool.toolName, {
|
||||||
|
// cachedStats: true
|
||||||
|
getTextLines: this.getBidirectionalToolTextLines
|
||||||
|
})
|
||||||
toolGroup.addTool(EllipticalROITool.toolName, {
|
toolGroup.addTool(EllipticalROITool.toolName, {
|
||||||
cachedStats: false,
|
cachedStats: false,
|
||||||
getTextLines: this.getEllipticalROIToolTextLines
|
getTextLines: this.getEllipticalROIToolTextLines
|
||||||
|
|
@ -684,6 +689,7 @@ export default {
|
||||||
toolGroup.setToolPassive(SplineROITool.toolName)
|
toolGroup.setToolPassive(SplineROITool.toolName)
|
||||||
toolGroup.setToolPassive(LengthTool.toolName)
|
toolGroup.setToolPassive(LengthTool.toolName)
|
||||||
toolGroup.setToolPassive(LengthscaleTool.toolName)
|
toolGroup.setToolPassive(LengthscaleTool.toolName)
|
||||||
|
toolGroup.setToolPassive(BidirectionalTool.toolName)
|
||||||
} else {
|
} else {
|
||||||
toolGroup.setToolEnabled(ArrowAnnotateTool.toolName)
|
toolGroup.setToolEnabled(ArrowAnnotateTool.toolName)
|
||||||
toolGroup.setToolEnabled(RectangleROITool.toolName)
|
toolGroup.setToolEnabled(RectangleROITool.toolName)
|
||||||
|
|
@ -694,6 +700,7 @@ export default {
|
||||||
toolGroup.setToolEnabled(SplineROITool.toolName)
|
toolGroup.setToolEnabled(SplineROITool.toolName)
|
||||||
toolGroup.setToolEnabled(LengthTool.toolName)
|
toolGroup.setToolEnabled(LengthTool.toolName)
|
||||||
toolGroup.setToolEnabled(LengthscaleTool.toolName)
|
toolGroup.setToolEnabled(LengthscaleTool.toolName)
|
||||||
|
toolGroup.setToolEnabled(BidirectionalTool.toolName)
|
||||||
}
|
}
|
||||||
toolGroup.setToolPassive(EraserTool.toolName)
|
toolGroup.setToolPassive(EraserTool.toolName)
|
||||||
})
|
})
|
||||||
|
|
@ -1430,6 +1437,38 @@ export default {
|
||||||
}
|
}
|
||||||
return textLines
|
return textLines
|
||||||
},
|
},
|
||||||
|
// 长短径工具注释
|
||||||
|
getBidirectionalToolTextLines(data, targetId) {
|
||||||
|
const { cachedStats, label } = data
|
||||||
|
const { length, width, unit } = cachedStats[targetId]
|
||||||
|
let ps = null
|
||||||
|
const path = targetId.split(`web:${this.OSSclientConfig.basePath}`)[1]
|
||||||
|
const i = this.psArr.findIndex(i => i.Path === path)
|
||||||
|
if (i > -1 && this.psArr[i].PS) {
|
||||||
|
ps = parseFloat(this.psArr[i].PS).toFixed(3)
|
||||||
|
}
|
||||||
|
const textLines = []
|
||||||
|
if (label) {
|
||||||
|
textLines.push(data.status ? `${label}(${data.status})` : label)
|
||||||
|
}
|
||||||
|
if (length === undefined) {
|
||||||
|
return textLines
|
||||||
|
}
|
||||||
|
if (ps) {
|
||||||
|
textLines.push(
|
||||||
|
`L: ${this.reRound(csUtils.roundNumber(length * ps), this.digitPlaces)} mm`,
|
||||||
|
`S: ${this.reRound(csUtils.roundNumber(width * ps), this.digitPlaces)} mm`
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
textLines.push(
|
||||||
|
`L: ${this.reRound(csUtils.roundNumber(length), this.digitPlaces)} ${unit || unit}`,
|
||||||
|
`S: ${this.reRound(csUtils.roundNumber(length), this.digitPlaces)} ${unit}`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return textLines
|
||||||
|
},
|
||||||
// 直线工具注释
|
// 直线工具注释
|
||||||
getLengthToolTextLines(data, targetId) {
|
getLengthToolTextLines(data, targetId) {
|
||||||
const cachedVolumeStats = data.cachedStats[targetId]
|
const cachedVolumeStats = data.cachedStats[targetId]
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
study.StudyName }}</span>
|
study.StudyName }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div style="text-overflow: ellipsis;overflow: hidden;">
|
<div style="text-overflow: ellipsis;overflow: hidden;">
|
||||||
<span :title="study.BodyPart">{{ study.BodyPart }}</span>
|
<span :title="study.BodyPart">{{ getBodyPart(study.BodyPart, study.BodyPartForEditOther) }}</span>
|
||||||
<span style="margin-left: 5px;" :title="study.Modality">{{ study.Modality }}</span>
|
<span style="margin-left: 5px;" :title="study.Modality">{{ study.Modality }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -74,18 +74,40 @@ export default {
|
||||||
activeFileIndex: -1,
|
activeFileIndex: -1,
|
||||||
taskInfo: null,
|
taskInfo: null,
|
||||||
studyList: [],
|
studyList: [],
|
||||||
pdf
|
pdf,
|
||||||
|
BodyPart: {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
async mounted() {
|
||||||
this.taskInfo = JSON.parse(localStorage.getItem('taskInfo'))
|
this.taskInfo = JSON.parse(localStorage.getItem('taskInfo'))
|
||||||
this.studyList = this.visitTaskInfo.StudyList
|
this.studyList = this.visitTaskInfo.StudyList
|
||||||
if (this.studyList.length === 0) return
|
if (this.studyList.length === 0) return
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.activeStudy(this.studyList[0].Id)
|
this.activeStudy(this.studyList[0].Id)
|
||||||
})
|
})
|
||||||
|
this.BodyPart.Bodypart = await this.$getBodyPart(this.$route.query.trialId)
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getBodyPart(bodyPart, other) {
|
||||||
|
if (!bodyPart && !other) return ''
|
||||||
|
var separator = ','
|
||||||
|
if (bodyPart.indexOf('|') > -1) {
|
||||||
|
separator = '|'
|
||||||
|
} else if (bodyPart.indexOf(',') > -1) {
|
||||||
|
separator = ','
|
||||||
|
} else if (bodyPart.indexOf(',') > -1) {
|
||||||
|
separator = ','
|
||||||
|
}
|
||||||
|
var arr = bodyPart.split(separator)
|
||||||
|
var newArr = arr.map((i) => {
|
||||||
|
return this.$fd('Bodypart', i.trim(), 'Code', this.BodyPart, 'Name')
|
||||||
|
})
|
||||||
|
if (other) {
|
||||||
|
newArr.push(other)
|
||||||
|
}
|
||||||
|
newArr = newArr.filter(Boolean)
|
||||||
|
return newArr.join(' | ')
|
||||||
|
},
|
||||||
// 设置初始化激活文件
|
// 设置初始化激活文件
|
||||||
setInitActiveFile() {
|
setInitActiveFile() {
|
||||||
if (this.studyList.length === 0) return
|
if (this.studyList.length === 0) return
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,7 @@
|
||||||
<el-button type="primary" @click="sendEMailTable" :loading="loading">
|
<el-button type="primary" @click="sendEMailTable" :loading="loading">
|
||||||
{{ $t('common:button:confirm') }}
|
{{ $t('common:button:confirm') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button @click="checkRemind_model.visible = false" :loading="loading">
|
<el-button @click="siteEmail_model.visible = false" :loading="loading">
|
||||||
{{ $t('common:button:cancel') }}
|
{{ $t('common:button:cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -5,18 +5,9 @@
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
<!-- Site -->
|
<!-- Site -->
|
||||||
<el-form-item :label="$t('trials:studyList:table:site')">
|
<el-form-item :label="$t('trials:studyList:table:site')">
|
||||||
<el-select
|
<el-select v-model="searchData.SiteId" clearable filterable style="width: 150px">
|
||||||
v-model="searchData.SiteId"
|
<el-option v-for="item of siteOptions" :key="item.SiteId" :label="item.TrialSiteCode"
|
||||||
clearable
|
:value="item.SiteId" />
|
||||||
filterable
|
|
||||||
style="width: 150px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of siteOptions"
|
|
||||||
:key="item.SiteId"
|
|
||||||
:label="item.TrialSiteCode"
|
|
||||||
:value="item.SiteId"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- Subject -->
|
<!-- Subject -->
|
||||||
|
|
@ -25,19 +16,9 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- Visit -->
|
<!-- Visit -->
|
||||||
<el-form-item :label="$t('trials:studyList:table:visit')">
|
<el-form-item :label="$t('trials:studyList:table:visit')">
|
||||||
<el-select
|
<el-select v-model="searchData.VisitPlanArray" clearable filterable multiple collapse-tags>
|
||||||
v-model="searchData.VisitPlanArray"
|
<el-option v-for="(item, index) of visitPlanOptions" :key="index" :label="item.VisitName"
|
||||||
clearable
|
:value="item.VisitNum">
|
||||||
filterable
|
|
||||||
multiple
|
|
||||||
collapse-tags
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="(item, index) of visitPlanOptions"
|
|
||||||
:key="index"
|
|
||||||
:label="item.VisitName"
|
|
||||||
:value="item.VisitNum"
|
|
||||||
>
|
|
||||||
<span style="float: left">{{ item.VisitName }}</span>
|
<span style="float: left">{{ item.VisitName }}</span>
|
||||||
</el-option>
|
</el-option>
|
||||||
<el-option key="Other" label="Out of Plan" value="1.11" />
|
<el-option key="Other" label="Out of Plan" value="1.11" />
|
||||||
|
|
@ -45,12 +26,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('trials:studyList:table:isFromPacs')">
|
<el-form-item :label="$t('trials:studyList:table:isFromPacs')">
|
||||||
<el-select v-model="searchData.IsFromPACS" clearable>
|
<el-select v-model="searchData.IsFromPACS" clearable>
|
||||||
<el-option
|
<el-option v-for="item of $d.UploadType" :key="item.id" :label="item.label" :value="item.value">
|
||||||
v-for="item of $d.UploadType"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
>
|
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -60,11 +36,7 @@
|
||||||
{{ $t("common:button:search") }}
|
{{ $t("common:button:search") }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 重置 -->
|
<!-- 重置 -->
|
||||||
<el-button
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
type="primary"
|
|
||||||
icon="el-icon-refresh-left"
|
|
||||||
@click="handleReset"
|
|
||||||
>
|
|
||||||
{{ $t("common:button:reset") }}
|
{{ $t("common:button:reset") }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -73,42 +45,22 @@
|
||||||
|
|
||||||
<!-- 检查列表 -->
|
<!-- 检查列表 -->
|
||||||
<template slot="main-container">
|
<template slot="main-container">
|
||||||
<el-table
|
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 60 }" :data="list" stripe height="100"
|
||||||
v-loading="loading"
|
@sort-change="handleSortByColumn">
|
||||||
v-adaptive="{ bottomOffset: 60 }"
|
|
||||||
:data="list"
|
|
||||||
stripe
|
|
||||||
height="100"
|
|
||||||
@sort-change="handleSortByColumn"
|
|
||||||
>
|
|
||||||
<el-table-column type="index" width="40" />
|
<el-table-column type="index" width="40" />
|
||||||
<!-- Study ID -->
|
<!-- Study ID -->
|
||||||
<el-table-column
|
<el-table-column prop="StudyCode" :label="$t('trials:studyList:table:studyId')" show-overflow-tooltip
|
||||||
prop="StudyCode"
|
sortable="custom" min-width="100" />
|
||||||
:label="$t('trials:studyList:table:studyId')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="100"
|
|
||||||
/>
|
|
||||||
<!-- Image Type -->
|
<!-- Image Type -->
|
||||||
<el-table-column
|
<el-table-column prop="IsDicom" :label="$t('trials:studyList:table:imageType')" sortable="custom"
|
||||||
prop="IsDicom"
|
min-width="100">
|
||||||
:label="$t('trials:studyList:table:imageType')"
|
|
||||||
sortable="custom"
|
|
||||||
min-width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsDicom" type="primary">DICOM</el-tag>
|
<el-tag v-if="scope.row.IsDicom" type="primary">DICOM</el-tag>
|
||||||
<el-tag v-else type="danger">Non-DICOM</el-tag>
|
<el-tag v-else type="danger">Non-DICOM</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column
|
<el-table-column prop="StudyTime" sortable="custom" min-width="150" show-overflow-tooltip>
|
||||||
prop="StudyTime"
|
|
||||||
sortable="custom"
|
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot="header">
|
<template slot="header">
|
||||||
<el-tooltip placement="top">
|
<el-tooltip placement="top">
|
||||||
<!-- Modality,Body Part Examined,Count,Study Date -->
|
<!-- Modality,Body Part Examined,Count,Study Date -->
|
||||||
|
|
@ -132,7 +84,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-else style="color: #f44336">N/A,</div>
|
<div v-else style="color: #f44336">N/A,</div>
|
||||||
<div v-if="scope.row.Bodypart" style="margin: 0 3px">
|
<div v-if="scope.row.Bodypart" style="margin: 0 3px">
|
||||||
{{ scope.row.Bodypart }},
|
{{ getBodyPart(scope.row.Bodypart, scope.row.BodyPartForEditOther) }},
|
||||||
</div>
|
</div>
|
||||||
<div v-else style="color: #f44336; margin: 0 3px">N/A,</div>
|
<div v-else style="color: #f44336; margin: 0 3px">N/A,</div>
|
||||||
<div v-if="scope.row.StudyTime">
|
<div v-if="scope.row.StudyTime">
|
||||||
|
|
@ -179,21 +131,18 @@
|
||||||
{{ $t('trials:studyList:button:view') }}
|
{{ $t('trials:studyList:button:view') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div slot="reference" class="name-wrapper">
|
<div slot="reference" class="name-wrapper">
|
||||||
<span style="color:#428bca;cursor:pointer;" @click="handleGetseriesList(scope.row)">
|
<span style="color:#428bca;cursor:pointer;" @click="handleGetseriesList(scope.row)">
|
||||||
{{ `${scope.row.Count}` }}
|
{{ `${scope.row.Count}` }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
<el-button
|
<el-button v-else-if="scope.row.Count && !scope.row.IsDicom" type="text"
|
||||||
v-else-if="scope.row.Count && !scope.row.IsDicom"
|
@click.native.prevent="handlePreviewNonDicom(scope.row)">
|
||||||
type="text"
|
{{ scope.row.Count }}
|
||||||
@click.native.prevent="handlePreviewNonDicom(scope.row)"
|
</el-button> -->
|
||||||
>
|
|
||||||
{{ scope.row.Count }}
|
|
||||||
</el-button> -->
|
|
||||||
<!-- <span>({{ scope.row.Count }})</span> -->
|
<!-- <span>({{ scope.row.Count }})</span> -->
|
||||||
<!-- <span v-else style="color:#f44336;">N/A</span> -->
|
<!-- <span v-else style="color:#f44336;">N/A</span> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -214,8 +163,7 @@
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</template>
|
</template>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span v-if="scope.row.TrialSiteCode"
|
<span v-if="scope.row.TrialSiteCode">{{ scope.row.TrialSiteCode }},
|
||||||
>{{ scope.row.TrialSiteCode }},
|
|
||||||
</span>
|
</span>
|
||||||
<span v-else style="color: #f44336">N/A, </span>
|
<span v-else style="color: #f44336">N/A, </span>
|
||||||
<span v-if="scope.row.TrialSiteAliasName">{{
|
<span v-if="scope.row.TrialSiteAliasName">{{
|
||||||
|
|
@ -224,12 +172,8 @@
|
||||||
<span v-else style="color: #f44336">N/A</span>
|
<span v-else style="color: #f44336">N/A</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column prop="SubjectCode" :label="$t('trials:studyList:table:subject')" sortable="custom"
|
||||||
prop="SubjectCode"
|
show-overflow-tooltip />
|
||||||
:label="$t('trials:studyList:table:subject')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<el-table-column min-width="90" show-overflow-tooltip>
|
<el-table-column min-width="90" show-overflow-tooltip>
|
||||||
<template slot="header">
|
<template slot="header">
|
||||||
<el-tooltip placement="top">
|
<el-tooltip placement="top">
|
||||||
|
|
@ -249,68 +193,34 @@
|
||||||
<span>{{ scope.row.VisitNum }}</span>
|
<span>{{ scope.row.VisitNum }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column prop="Uploader" :label="$t('trials:studyList:table:uploader')" show-overflow-tooltip
|
||||||
prop="Uploader"
|
sortable="custom" min-width="80" />
|
||||||
:label="$t('trials:studyList:table:uploader')"
|
<el-table-column prop="UploadTime" :label="$t('trials:studyList:table:uploadTime')" show-overflow-tooltip
|
||||||
show-overflow-tooltip
|
sortable="custom" min-width="120" />
|
||||||
sortable="custom"
|
<el-table-column prop="IsFromPACS" :label="$t('trials:studyList:table:isFromPacs')" show-overflow-tooltip
|
||||||
min-width="80"
|
sortable="custom" min-width="120">
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="UploadTime"
|
|
||||||
:label="$t('trials:studyList:table:uploadTime')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="120"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="IsFromPACS"
|
|
||||||
:label="$t('trials:studyList:table:isFromPacs')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="120"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag :type="scope.row.IsFromPACS ? 'warning' : ''">
|
<el-tag :type="scope.row.IsFromPACS ? 'warning' : ''">
|
||||||
{{ $fd("UploadType", scope.row.IsFromPACS) }}
|
{{ $fd("UploadType", scope.row.IsFromPACS) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('common:action:action')" min-width="100" fixed="right">
|
||||||
:label="$t('common:action:action')"
|
|
||||||
min-width="100"
|
|
||||||
fixed="right"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<!-- 查看 -->
|
<!-- 查看 -->
|
||||||
<el-button
|
<el-button :disabled="!scope.row.Count" circle :title="$t('trials:studyList:button:view')"
|
||||||
:disabled="!scope.row.Count"
|
icon="el-icon-view" @click="handleViewStudy(scope.row)" />
|
||||||
circle
|
|
||||||
:title="$t('trials:studyList:button:view')"
|
|
||||||
icon="el-icon-view"
|
|
||||||
@click="handleViewStudy(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 分享检查 -->
|
<!-- 分享检查 -->
|
||||||
<el-button
|
<el-button v-hasPermi="['trials:trials-panel:study:share']"
|
||||||
v-hasPermi="['trials:trials-panel:study:share']"
|
:disabled="!(scope.row.Count > 0 && scope.row.IsDicom)" circle
|
||||||
:disabled="!(scope.row.Count > 0 && scope.row.IsDicom)"
|
:title="$t('trials:studyList:action:share')" icon="el-icon-share" @click="handleShareImage(scope.row)" />
|
||||||
circle
|
|
||||||
:title="$t('trials:studyList:action:share')"
|
|
||||||
icon="el-icon-share"
|
|
||||||
@click="handleShareImage(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<!-- 分页组件 -->
|
<!-- 分页组件 -->
|
||||||
<pagination
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
class="page"
|
@pagination="getList" />
|
||||||
:total="total"
|
|
||||||
:page.sync="searchData.PageIndex"
|
|
||||||
:limit.sync="searchData.PageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<base-model :config="share_model">
|
<base-model :config="share_model">
|
||||||
|
|
@ -327,30 +237,17 @@
|
||||||
<el-input v-model="extractionCode" style="width: 100px" readonly />
|
<el-input v-model="extractionCode" style="width: 100px" readonly />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" round @click="copyCode"
|
<el-button type="primary" round @click="copyCode">复制链接及提取码</el-button>
|
||||||
>复制链接及提取码</el-button
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</base-model>
|
</base-model>
|
||||||
|
|
||||||
<!-- 预览非Dicom影像 -->
|
<!-- 预览非Dicom影像 -->
|
||||||
<el-dialog
|
<el-dialog v-if="previewNonDicomVisible" :visible.sync="previewNonDicomVisible"
|
||||||
v-if="previewNonDicomVisible"
|
:title="$t('trials:studyList:dialogTitle:view')" :fullscreen="true" append-to-body
|
||||||
:visible.sync="previewNonDicomVisible"
|
custom-class="base-dialog-wrapper">
|
||||||
:title="$t('trials:studyList:dialogTitle:view')"
|
<div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
|
||||||
:fullscreen="true"
|
<NonDicomPreview v-if="previewNonDicomVisible" :none-dicom-id="rowData.Id" />
|
||||||
append-to-body
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="base-modal-body"
|
|
||||||
style="border: 2px solid #ccc; padding: 10px"
|
|
||||||
>
|
|
||||||
<NonDicomPreview
|
|
||||||
v-if="previewNonDicomVisible"
|
|
||||||
:none-dicom-id="rowData.Id"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</BaseContainer>
|
</BaseContainer>
|
||||||
|
|
@ -411,16 +308,36 @@ export default {
|
||||||
trialId: this.$route.query.trialId,
|
trialId: this.$route.query.trialId,
|
||||||
tokenKey: getToken(),
|
tokenKey: getToken(),
|
||||||
openWindow: null,
|
openWindow: null,
|
||||||
bp: [],
|
BodyPart: {}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
this.bp = await this.$getBodyPart(this.$route.query.trialId);
|
this.BodyPart.Bodypart = await this.$getBodyPart(this.$route.query.trialId)
|
||||||
this.getSite();
|
this.getSite();
|
||||||
this.getVisitPlanOptions();
|
this.getVisitPlanOptions();
|
||||||
this.getList();
|
this.getList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getBodyPart(bodyPart, other) {
|
||||||
|
if (!bodyPart && !other) return ''
|
||||||
|
var separator = ','
|
||||||
|
if (bodyPart.indexOf('|') > -1) {
|
||||||
|
separator = '|'
|
||||||
|
} else if (bodyPart.indexOf(',') > -1) {
|
||||||
|
separator = ','
|
||||||
|
} else if (bodyPart.indexOf(',') > -1) {
|
||||||
|
separator = ','
|
||||||
|
}
|
||||||
|
var arr = bodyPart.split(separator)
|
||||||
|
var newArr = arr.map((i) => {
|
||||||
|
return this.$fd('Bodypart', i.trim(), 'Code', this.BodyPart, 'Name')
|
||||||
|
})
|
||||||
|
if (other) {
|
||||||
|
newArr.push(other)
|
||||||
|
}
|
||||||
|
newArr = newArr.filter(Boolean)
|
||||||
|
return newArr.join(' | ')
|
||||||
|
},
|
||||||
// 获取检查列表数据
|
// 获取检查列表数据
|
||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
|
@ -550,28 +467,28 @@ export default {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getBodyPart(bodyPart) {
|
// getBodyPart(bodyPart) {
|
||||||
if (!bodyPart) return "";
|
// if (!bodyPart) return "";
|
||||||
var separator = ",";
|
// var separator = ",";
|
||||||
if (bodyPart.indexOf("|") > -1) {
|
// if (bodyPart.indexOf("|") > -1) {
|
||||||
separator = "|";
|
// separator = "|";
|
||||||
} else if (bodyPart.indexOf(",") > -1) {
|
// } else if (bodyPart.indexOf(",") > -1) {
|
||||||
separator = ",";
|
// separator = ",";
|
||||||
} else if (bodyPart.indexOf(",") > -1) {
|
// } else if (bodyPart.indexOf(",") > -1) {
|
||||||
separator = ",";
|
// separator = ",";
|
||||||
}
|
// }
|
||||||
var arr = bodyPart.split(separator);
|
// var arr = bodyPart.split(separator);
|
||||||
var newArr = arr.map((i) => {
|
// var newArr = arr.map((i) => {
|
||||||
return this.$fd(
|
// return this.$fd(
|
||||||
"Bodypart",
|
// "Bodypart",
|
||||||
i.trim(),
|
// i.trim(),
|
||||||
"Code",
|
// "Code",
|
||||||
{ Bodypart: this.bp },
|
// { Bodypart: this.bp },
|
||||||
"Name"
|
// "Name"
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
return newArr.join(" | ");
|
// return newArr.join(" | ");
|
||||||
},
|
// },
|
||||||
// 复制
|
// 复制
|
||||||
copyCode() {
|
copyCode() {
|
||||||
this.$copyText(`链接: ${this.shareLink} 提取码: ${this.extractionCode}`)
|
this.$copyText(`链接: ${this.shareLink} 提取码: ${this.extractionCode}`)
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@
|
||||||
:title="$t('trials:subject:title:report')" @click="handleMessage(scope.row)" />
|
:title="$t('trials:subject:title:report')" @click="handleMessage(scope.row)" />
|
||||||
<!-- 图表 -->
|
<!-- 图表 -->
|
||||||
<el-button v-hasPermi="['trials:trials-panel:subject:chart']" v-if="isShowChart" icon="el-icon-s-data"
|
<el-button v-hasPermi="['trials:trials-panel:subject:chart']" v-if="isShowChart" icon="el-icon-s-data"
|
||||||
circle :title="$t('trials:subject:title:report')" @click="handleopenSubjectChart(scope.row)" />
|
circle :title="$t('trials:subject:title:chart')" @click="handleopenSubjectChart(scope.row)" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
|
||||||
|
|
@ -423,7 +423,7 @@
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
<!-- 预览影像模态框 -->
|
<!-- 预览影像模态框 -->
|
||||||
<el-dialog v-if="previewVisible" :fullscreen="true" :show-close="true" :visible.sync="previewVisible"
|
<el-dialog v-if="previewVisible" :fullscreen="true" :show-close="true" :visible.sync="previewVisible"
|
||||||
append-to-body>
|
:title="$t('trials:uploadDicoms:title:previewLocalImage')" append-to-body>
|
||||||
<DicomPreview :uid="uid" :studyList="uploadQueues" />
|
<DicomPreview :uid="uid" :studyList="uploadQueues" />
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<!--pet-ct临床数据上传-->
|
<!--pet-ct临床数据上传-->
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue