窗口联动关闭

uat_us
wangxiaoshuang 2026-04-27 11:15:49 +08:00
parent b4fc5d970f
commit b2a9f279a1
3 changed files with 113 additions and 192 deletions

View File

@ -52,27 +52,21 @@
<GlobalReview v-else-if="isShow && readingCategory === 2" :trial-id="trialId" :subject-id="subjectId" <GlobalReview v-else-if="isShow && readingCategory === 2" :trial-id="trialId" :subject-id="subjectId"
:visit-task-id="visitTaskId" :reading-category="readingCategory" :subject-code="subjectCode" :visit-task-id="visitTaskId" :reading-category="readingCategory" :subject-code="subjectCode"
:task-blind-name="taskBlindName" :is-reading-show-subject-info="isReadingShowSubjectInfo" :task-blind-name="taskBlindName" :is-reading-show-subject-info="isReadingShowSubjectInfo"
:is-reading-show-previous-results="isReadingShowPreviousResults" :is-reading-show-previous-results="isReadingShowPreviousResults" :is-exists-clinical-data="isExistsClinicalData"
:is-exists-clinical-data="isExistsClinicalData" :imageToolType="1" />
:imageToolType="1"
/>
<!-- 裁判阅片 --> <!-- 裁判阅片 -->
<AdReview v-else-if="isShow && readingCategory === 4" :trial-id="trialId" :subject-id="subjectId" <AdReview v-else-if="isShow && readingCategory === 4" :trial-id="trialId" :subject-id="subjectId"
:visit-task-id="visitTaskId" :reading-category="readingCategory" :subject-code="subjectCode" :visit-task-id="visitTaskId" :reading-category="readingCategory" :subject-code="subjectCode"
:task-blind-name="taskBlindName" :is-reading-show-subject-info="isReadingShowSubjectInfo" :task-blind-name="taskBlindName" :is-reading-show-subject-info="isReadingShowSubjectInfo"
:is-reading-show-previous-results="isReadingShowPreviousResults" :is-reading-show-previous-results="isReadingShowPreviousResults" :is-exists-clinical-data="isExistsClinicalData"
:is-exists-clinical-data="isExistsClinicalData" :imageToolType="1" />
:imageToolType="1"
/>
<!-- 肿瘤学阅片 --> <!-- 肿瘤学阅片 -->
<OncologyReview v-else-if="isShow && readingCategory === 5" :trial-id="trialId" :subject-id="subjectId" <OncologyReview v-else-if="isShow && readingCategory === 5" :trial-id="trialId" :subject-id="subjectId"
:visit-task-id="visitTaskId" :reading-category="readingCategory" :subject-code="subjectCode" :visit-task-id="visitTaskId" :reading-category="readingCategory" :subject-code="subjectCode"
:task-blind-name="taskBlindName" :is-reading-show-subject-info="isReadingShowSubjectInfo" :task-blind-name="taskBlindName" :is-reading-show-subject-info="isReadingShowSubjectInfo"
:is-reading-show-previous-results="isReadingShowPreviousResults" :is-reading-show-previous-results="isReadingShowPreviousResults" :is-exists-clinical-data="isExistsClinicalData"
:is-exists-clinical-data="isExistsClinicalData" :imageToolType="1" />
:imageToolType="1"
/>
<el-dialog :visible.sync="dialogVisible" :custom-class="isFullscreen ? 'full-dialog-container' : 'dialog-container'" <el-dialog :visible.sync="dialogVisible" :custom-class="isFullscreen ? 'full-dialog-container' : 'dialog-container'"
:show-close="false" :close-on-click-modal="false" :fullscreen="isFullscreen"> :show-close="false" :close-on-click-modal="false" :fullscreen="isFullscreen">
@ -291,6 +285,13 @@ export default {
store.dispatch('reading/resetVisitTasks') store.dispatch('reading/resetVisitTasks')
this.getTaskInfo() this.getTaskInfo()
window.addEventListener('beforeunload', this.handleWindowClose) window.addEventListener('beforeunload', this.handleWindowClose)
window.addEventListener('storage', (event) => {
if (event.key === 'closePage') {
if (this.$router.currentRoute.query.pageType && this.$router.currentRoute.query.pageType === 'History') {
window.close()
}
}
});
}, },
beforeDestroy() { beforeDestroy() {
DicomEvent.$off('getNextTask') DicomEvent.$off('getNextTask')

View File

@ -961,7 +961,7 @@ export default {
this.$router.currentRoute.query.isReadingTaskViewInOrder this.$router.currentRoute.query.isReadingTaskViewInOrder
var criterionType = this.$router.currentRoute.query.criterionType var criterionType = this.$router.currentRoute.query.criterionType
var readingTool = this.$router.currentRoute.query.readingTool var readingTool = this.$router.currentRoute.query.readingTool
var path = `/readingDicoms?TrialReadingCriterionId=${trialReadingCriterionId}&trialId=${trialId}&subjectCode=${subjectCode}&subjectId=${subjectId}&visitTaskId=${task.VisitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&TokenKey=${token}` var path = `/readingDicoms?TrialReadingCriterionId=${trialReadingCriterionId}&trialId=${trialId}&subjectCode=${subjectCode}&subjectId=${subjectId}&visitTaskId=${task.VisitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&pageType=History&TokenKey=${token}`
const routeData = this.$router.resolve({ path }) const routeData = this.$router.resolve({ path })
const res = await getAutoCutNextTask({imageToolType: 1}) const res = await getAutoCutNextTask({imageToolType: 1})
let IsDoubleScreen = false let IsDoubleScreen = false

View File

@ -10,46 +10,30 @@
</el-button> </el-button>
<el-button v-if="readingTaskState < 2" type="primary" size="small" @click="getReportInfo"> <el-button v-if="readingTaskState < 2" type="primary" size="small" @click="getReportInfo">
{{ {{
$t('trials:readingReport:button:refresh') }} $t('trials:readingReport:button:refresh') }}
</el-button> </el-button>
<el-button <el-button v-if="readingTaskState < 2" type="primary" size="small" @click="handleSave(true)">
v-if="readingTaskState < 2"
type="primary"
size="small"
@click="handleSave(true)"
>
{{ {{
$t('common:button:save') }} $t('common:button:save') }}
</el-button> </el-button>
<el-button v-if="readingTaskState < 2" type="primary" size="small" @click="handleConfirm"> <el-button v-if="readingTaskState < 2" type="primary" size="small" @click="handleConfirm">
{{ {{
$t('common:button:submit') }} $t('common:button:submit') }}
</el-button> </el-button>
</div> </div>
</div> </div>
<div style="flex: 1"> <div style="flex: 1">
<el-table <el-table v-if="taskQuestions.length > 0" ref="reportList" v-adaptive="{ bottomOffset: 0 }"
v-if="taskQuestions.length > 0" :data="taskQuestions" row-key="Id" border default-expand-all height="100"
ref="reportList" :tree-props="{ children: 'Childrens', hasChildren: 'hasChildren' }" size="mini">
v-adaptive="{ bottomOffset: 0 }"
:data="taskQuestions"
row-key="Id"
border
default-expand-all
height="100"
:tree-props="{ children: 'Childrens', hasChildren: 'hasChildren' }"
size="mini"
>
<el-table-column prop label show-overflow-tooltip width="350px"> <el-table-column prop label show-overflow-tooltip width="350px">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.QuestionName"> <span v-if="scope.row.QuestionName">
{{ scope.row.BlindName ? scope.row.QuestionName : {{ scope.row.BlindName ? scope.row.QuestionName :
scope.row.QuestionName }} scope.row.QuestionName }}
<svg-icon <svg-icon
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && scope.row.ReportLayType === 1)" v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && scope.row.ReportLayType === 1)"
icon-class="readingChart" icon-class="readingChart" class="svg-icon svg-readingChart-mini" @click.stop="(e) => handleReadingChart({
class="svg-icon svg-readingChart-mini"
@click.stop="(e) => handleReadingChart({
e, e,
data: { data: {
QuestionId: scope.row.RowIndex ? null : scope.row.QuestionId, QuestionId: scope.row.RowIndex ? null : scope.row.QuestionId,
@ -58,22 +42,13 @@
ReportChartTypeEnum: scope.row.LesionType === 0 && scope.row.ReportLayType === 1 ? 0 : null, ReportChartTypeEnum: scope.row.LesionType === 0 && scope.row.ReportLayType === 1 ? 0 : null,
QuestionName: scope.row.QuestionName QuestionName: scope.row.QuestionName
} }
})" })" />
/>
</span> </span>
<span <span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">{{ scope.row.GroupName }}</span>
v-else
style="font-weight: bold;font-size: 16px;color: #f44336;"
>{{ scope.row.GroupName }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column v-for="task in visitTaskList" :key="task.VisitTaskId" prop="date" show-overflow-tooltip
v-for="task in visitTaskList" width="200px">
:key="task.VisitTaskId"
prop="date"
show-overflow-tooltip
width="200px"
>
<template slot="header"> <template slot="header">
<div v-if="task.IsCurrentTask">{{ task.BlindName }}</div> <div v-if="task.IsCurrentTask">{{ task.BlindName }}</div>
<div v-else> <div v-else>
@ -87,201 +62,156 @@
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<template <template
v-if="readingTaskState < 2 && task.VisitTaskId === visitTaskId && (scope.row.Type === 'input' || scope.row.Type === 'number' || scope.row.Type === 'select' || scope.row.Type === 'textarea' || scope.row.Type === 'radio')" v-if="readingTaskState < 2 && task.VisitTaskId === visitTaskId && (scope.row.Type === 'input' || scope.row.Type === 'number' || scope.row.Type === 'select' || scope.row.Type === 'textarea' || scope.row.Type === 'radio')">
>
<!-- 输入框 --> <!-- 输入框 -->
<div> <div>
<template <template
v-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" />
/>
<el-input <el-input
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]" v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
size="mini" size="mini" />
/>
<span <span
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea')" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea')">{{
>{{ questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}</span> questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}</span>
<el-input <el-input
v-else-if="(scope.row.Type === 'input' || scope.row.Type === 'textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="(scope.row.Type === 'input' || scope.row.Type === 'textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId]" v-model="questionForm[scope.row.QuestionId]" size="mini" />
size="mini" <span v-else-if="scope.row.Type === 'input' || scope.row.Type === 'textarea'">{{
/> questionForm[scope.row.QuestionId] }}</span>
<span
v-else-if="scope.row.Type === 'input' || scope.row.Type === 'textarea'"
>{{ questionForm[scope.row.QuestionId] }}</span>
<el-select <el-select
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]" v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
size="mini" size="mini" clearable :multiple="scope.row.OptionTypeEnum === 1">
clearable
:multiple="scope.row.OptionTypeEnum === 1"
>
<template> <template>
<el-option <el-option v-for="val in scope.row.TypeValue.split('|')" :key="val" :label="val" :value="val" />
v-for="val in scope.row.TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
/>
</template> </template>
</el-select> </el-select>
<span <span
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && questionForm[scope.row.QuestionId][scope.row.xfIndex] && (scope.row.Type === 'select' || scope.row.Type === 'radio')" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && questionForm[scope.row.QuestionId][scope.row.xfIndex] && (scope.row.Type === 'select' || scope.row.Type === 'radio')">
>
{{ {{
Array.isArray(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]) Array.isArray(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])
? ?
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId].join(',') : questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId].join(',') :
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]
}} }}
</span> </span>
<el-select <el-select
v-else-if="(scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="(scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId]" v-model="questionForm[scope.row.QuestionId]" size="mini" clearable
size="mini" :multiple="scope.row.OptionTypeEnum === 1">
clearable
:multiple="scope.row.OptionTypeEnum === 1"
>
<template> <template>
<el-option <el-option v-for="val in scope.row.TypeValue.split('|')" :key="val" :label="val" :value="val" />
v-for="val in scope.row.TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
/>
</template> </template>
</el-select> </el-select>
<span v-else-if="scope.row.Type === 'select' || scope.row.Type === 'radio'"> <span v-else-if="scope.row.Type === 'select' || scope.row.Type === 'radio'">
{{ {{
questionForm[scope.row.QuestionId] && Array.isArray(questionForm[scope.row.QuestionId]) ? questionForm[scope.row.QuestionId] && Array.isArray(questionForm[scope.row.QuestionId]) ?
questionForm[scope.row.QuestionId].join(',') : questionForm[scope.row.QuestionId].join(',') :
questionForm[scope.row.QuestionId] questionForm[scope.row.QuestionId]
}} }}
</span> </span>
<el-input <el-input
v-else-if="scope.row.DataSource !== 1 && questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0) && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="scope.row.DataSource !== 1 && questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0) && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]" v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
:disabled="scope.row.DataSource === 1" :disabled="scope.row.DataSource === 1" size="mini"
size="mini"
@blur="limitBlur(questionForm[scope.row.QuestionId][scope.row.xfIndex], scope.row.TableQuestionId, scope.row.ValueType)" @blur="limitBlur(questionForm[scope.row.QuestionId][scope.row.xfIndex], scope.row.TableQuestionId, scope.row.ValueType)"
@focus="() => { questionId = scope.row.QuestionId }" @focus="() => { questionId = scope.row.QuestionId }">
>
<template v-if="scope.row.Unit !== 0" slot="append"> <template v-if="scope.row.Unit !== 0" slot="append">
{{ scope.row.Unit !== 4 ? $fd('ValueUnit', {{ scope.row.Unit !== 4 ? $fd('ValueUnit',
scope.row.Unit) : scope.row.CustomUnit }} scope.row.Unit) : scope.row.CustomUnit }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2" slot="append">%</template> <template v-else-if="scope.row.ValueType === 2" slot="append">%</template>
</el-input> </el-input>
<span <span
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0)" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0)">
> <template v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
<template
v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit"
>
{{ {{
isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))
? ?
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] : questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] :
`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} `${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}
${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }} ${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2"> <template v-else-if="scope.row.ValueType === 2">
{{ {{
isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))
? ?
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] : questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] :
`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} `${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}
%` }} %` }}
</template> </template>
<template v-else> <template v-else>
{{ {{
isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))
? ?
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] : questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] :
`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}` `${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}`
}} }}
</template> </template>
</span> </span>
<el-input <el-input
v-else-if="scope.row.DataSource !== 1 && scope.row.Type === 'number' && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="scope.row.DataSource !== 1 && scope.row.Type === 'number' && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId]" v-model="questionForm[scope.row.QuestionId]" :disabled="scope.row.DataSource === 1" size="mini"
:disabled="scope.row.DataSource === 1"
size="mini"
@blur="limitBlur(questionForm, scope.row.QuestionId, scope.row.ValueType)" @blur="limitBlur(questionForm, scope.row.QuestionId, scope.row.ValueType)"
@focus="() => { questionId = scope.row.QuestionId }" @focus="() => { questionId = scope.row.QuestionId }">
>
<template v-if="scope.row.Unit !== 0" slot="append"> <template v-if="scope.row.Unit !== 0" slot="append">
{{ scope.row.Unit !== 4 ? $fd('ValueUnit', {{ scope.row.Unit !== 4 ? $fd('ValueUnit',
scope.row.Unit) : scope.row.CustomUnit }} scope.row.Unit) : scope.row.CustomUnit }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2" slot="append">%</template> <template v-else-if="scope.row.ValueType === 2" slot="append">%</template>
</el-input> </el-input>
<span v-else-if="scope.row.Type === 'number'"> <span v-else-if="scope.row.Type === 'number'">
<template <template v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit"
>
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ?
questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} ${scope.row.Unit !== 4 questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} ${scope.row.Unit !== 4
? ?
$fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }} $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2"> <template v-else-if="scope.row.ValueType === 2">
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ?
questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} %` }} questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} %` }}
</template> </template>
<template v-else> <template v-else>
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId] : {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId] :
questionForm[scope.row.QuestionId] }} questionForm[scope.row.QuestionId] }}
</template> </template>
</span> </span>
</div> </div>
</template> </template>
<template <template v-else-if="scope.row.Type === 'upload' && scope.row.Answers[task.VisitTaskId]">
v-else-if="scope.row.Type === 'upload' && scope.row.Answers[task.VisitTaskId]" <span v-for="(url, index) in scope.row.Answers[task.VisitTaskId].split('|')" :key="url"
> style="margin-left: 5px;">
<span <el-button v-if="scope.row.Answers[task.VisitTaskId]" type="text" @click="preview(url)">{{
v-for="(url, index) in scope.row.Answers[task.VisitTaskId].split('|')" `${$t('trials:noneDicom:title:attachment')}${index + 1}` }}</el-button>
:key="url"
style="margin-left: 5px;"
>
<el-button
v-if="scope.row.Answers[task.VisitTaskId]"
type="text"
@click="preview(url)"
>{{ `${$t('trials:noneDicom:title:attachment')}${index + 1}` }}</el-button>
</span> </span>
</template> </template>
<template v-else-if="scope.row.DictionaryCode"> <template v-else-if="scope.row.DictionaryCode">
{{scope.row.Answers[task.VisitTaskId] instanceof Array {{scope.row.Answers[task.VisitTaskId] instanceof Array
? scope.row.Answers[task.VisitTaskId].map(item => $fd(scope.row.DictionaryCode, ? scope.row.Answers[task.VisitTaskId].map(item => $fd(scope.row.DictionaryCode,
item)).join(",") : $fd(scope.row.DictionaryCode, item)).join(",") : $fd(scope.row.DictionaryCode,
scope.row.Answers[task.VisitTaskId])}} scope.row.Answers[task.VisitTaskId])}}
</template> </template>
<template v-else-if="criterionType === 10"> <template v-else-if="criterionType === 10">
{{ {{
isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] : isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] :
`${scope.row.Answers[task.VisitTaskId]}` `${scope.row.Answers[task.VisitTaskId]}`
}} }}
</template> </template>
<template <template
v-else-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" />
/> <template v-else-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
<template
v-else-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit"
>
{{ {{
isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] : isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] :
`${scope.row.Answers[task.VisitTaskId]} `${scope.row.Answers[task.VisitTaskId]}
${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }} ${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2"> <template v-else-if="scope.row.ValueType === 2">
{{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? {{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ?
scope.row.Answers[task.VisitTaskId] : `${scope.row.Answers[task.VisitTaskId]} %` }} scope.row.Answers[task.VisitTaskId] : `${scope.row.Answers[task.VisitTaskId]} %` }}
</template> </template>
<template <template v-else-if="scope.row.Answers && scope.row.Answers.hasOwnProperty(task.VisitTaskId)">{{
v-else-if="scope.row.Answers && scope.row.Answers.hasOwnProperty(task.VisitTaskId)" scope.row.Answers[task.VisitTaskId] }}</template>
>{{ scope.row.Answers[task.VisitTaskId] }}</template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -289,30 +219,19 @@
</el-card> </el-card>
<!-- 签名框 --> <!-- 签名框 -->
<el-dialog <el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px"
v-if="signVisible" custom-class="base-dialog-wrapper">
:visible.sync="signVisible"
:close-on-click-modal="false"
width="600px"
custom-class="base-dialog-wrapper"
>
<div slot="title"> <div slot="title">
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span> <span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
<span <span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${currentUser})` }}</span>
style="font-size:12px;margin-left:5px"
>{{ `(${$t('common:label:sign')}${currentUser})` }}</span>
</div> </div>
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" /> <SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
</el-dialog> </el-dialog>
<!-- 预览文件 --> <!-- 预览文件 -->
<viewer <viewer ref="picture_perview_customizeReportPage" style="margin: 0 10px"
ref="picture_perview_customizeReportPage"
style="margin: 0 10px"
v-if="currentType && ['png', 'jpg', 'jpeg'].includes(currentType.toLowerCase())" v-if="currentType && ['png', 'jpg', 'jpeg'].includes(currentType.toLowerCase())"
:images="[`${OSSclientConfig.basePath}${currentPath}`]" :images="[`${OSSclientConfig.basePath}${currentPath}`]" :options="viewerOptions">
:options="viewerOptions"
>
<img v-show="false" :src="`${OSSclientConfig.basePath}${currentPath}`" alt="Image" /> <img v-show="false" :src="`${OSSclientConfig.basePath}${currentPath}`" alt="Image" />
</viewer> </viewer>
<readingChart ref="readingChart_report" /> <readingChart ref="readingChart_report" />
@ -385,7 +304,7 @@ export default {
handler(v, oldv) { handler(v, oldv) {
try { try {
if (!v[this.questionId] || !oldv[this.questionId]) return if (!v[this.questionId] || !oldv[this.questionId]) return
} catch (e) {} } catch (e) { }
this.formItemNumberChange(this.questionId, false) this.formItemNumberChange(this.questionId, false)
}, },
}, },
@ -771,8 +690,8 @@ export default {
dataArr.length === 0 dataArr.length === 0
? 0 ? 0
: dataArr.reduce((acc, curr) => { : dataArr.reduce((acc, curr) => {
return acc + (typeof curr === 'number' ? curr : 0) return acc + (typeof curr === 'number' ? curr : 0)
}, 0) / dataArr.length }, 0) / dataArr.length
break break
case 11: case 11:
if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) { if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) {
@ -800,8 +719,8 @@ export default {
dataArr.length === 0 dataArr.length === 0
? 0 ? 0
: dataArr.reduce((acc, curr) => acc && curr) : dataArr.reduce((acc, curr) => acc && curr)
? 1 ? 1
: 0 : 0
break break
case 14: case 14:
if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) { if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) {
@ -813,8 +732,8 @@ export default {
dataArr.length === 0 dataArr.length === 0
? 0 ? 0
: dataArr.reduce((acc, curr) => acc || curr, 0) : dataArr.reduce((acc, curr) => acc || curr, 0)
? 1 ? 1
: 0 : 0
break break
case 15: case 15:
if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) { if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) {
@ -839,8 +758,8 @@ export default {
return isNaN(num) return isNaN(num)
? '' ? ''
: isFinite(num) : isFinite(num)
? num.toFixed(this.digitPlaces) ? num.toFixed(this.digitPlaces)
: '∞' : '∞'
}, },
getReportInfo() { getReportInfo() {
this.loading = true this.loading = true
@ -987,7 +906,7 @@ export default {
this.readingTaskState = 2 this.readingTaskState = 2
this.$emit('setReadingTaskState', 2) this.$emit('setReadingTaskState', 2)
window.opener.postMessage('refreshTaskList', window.location) window.opener.postMessage('refreshTaskList', window.location)
const res = await getAutoCutNextTask({imageToolType: 1}) const res = await getAutoCutNextTask({ imageToolType: 1 })
const isAutoTask = res.Result.AutoCutNextTask const isAutoTask = res.Result.AutoCutNextTask
if (isAutoTask) { if (isAutoTask) {
window.location.reload() window.location.reload()
@ -1029,9 +948,9 @@ export default {
this.$router.currentRoute.query.isReadingTaskViewInOrder this.$router.currentRoute.query.isReadingTaskViewInOrder
var criterionType = this.$router.currentRoute.query.criterionType var criterionType = this.$router.currentRoute.query.criterionType
var readingTool = this.$router.currentRoute.query.readingTool var readingTool = this.$router.currentRoute.query.readingTool
var path = `/readingDicoms?TrialReadingCriterionId=${trialReadingCriterionId}&trialId=${trialId}&subjectCode=${subjectCode}&subjectId=${subjectId}&visitTaskId=${task.VisitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&TokenKey=${token}` var path = `/readingDicoms?TrialReadingCriterionId=${trialReadingCriterionId}&trialId=${trialId}&subjectCode=${subjectCode}&subjectId=${subjectId}&visitTaskId=${task.VisitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&pageType=History&TokenKey=${token}`
const routeData = this.$router.resolve({ path }) const routeData = this.$router.resolve({ path })
const res = await getAutoCutNextTask({imageToolType: 1}) const res = await getAutoCutNextTask({ imageToolType: 1 })
let IsDoubleScreen = false let IsDoubleScreen = false
if (res.IsSuccess) { if (res.IsSuccess) {
IsDoubleScreen = res.Result.IsDoubleScreen IsDoubleScreen = res.Result.IsDoubleScreen
@ -1044,8 +963,8 @@ export default {
)}</span><a style="color:#409EFF" )}</span><a style="color:#409EFF"
href="/screen.pdf" href="/screen.pdf"
target="blank">${this.$t( target="blank">${this.$t(
'trials:reading:tip:openFile' 'trials:reading:tip:openFile'
)}</a></div>` )}</a></div>`
let confirm = await this.$confirm(html, '', { let confirm = await this.$confirm(html, '', {
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
}) })
@ -1059,6 +978,7 @@ export default {
'noopener,noreferrer' 'noopener,noreferrer'
) )
} }
localStorage.setItem('closePage', Date.now());
}, },
handleSave(isPrompt) { handleSave(isPrompt) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -1205,13 +1125,13 @@ export default {
border-color: #444444; border-color: #444444;
} }
::v-deep .el-table__body tr > td { ::v-deep .el-table__body tr>td {
background-color: #000 !important; background-color: #000 !important;
color: #fff; color: #fff;
border-color: #444444; border-color: #444444;
} }
::v-deep .el-table__body tr:hover > td { ::v-deep .el-table__body tr:hover>td {
background-color: #858282 !important; background-color: #858282 !important;
color: #fff; color: #fff;
border-color: #444444; border-color: #444444;