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

main
caiyiling 2026-01-16 10:31:23 +08:00
commit d5acb0a27c
8 changed files with 194 additions and 203 deletions

View File

@ -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: {

View File

@ -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': ''
}, },

View File

@ -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]

View File

@ -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

View File

@ -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>

View File

@ -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}`)

View File

@ -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>

View File

@ -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临床数据上传-->