阅片分屏显示
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-08-22 14:50:20 +08:00
parent 01cd9cf334
commit cd224161bb
4 changed files with 297 additions and 297 deletions

78
src/utils/splitScreen.js Normal file
View File

@ -0,0 +1,78 @@
async function queryWindowManagement() {
return await navigator.permissions.query({ name: 'window-management' });;
}
async function getPermission() {
const permission = await queryWindowManagement();
if (permission.state === "granted") { // 已经授权
return true
} else if (permission.state === "prompt") { // 询问是否授权
// 请求授权
navigator.permissions.request({ name: 'window-management' })
return false
} else if (permission.state === "denied") {
// 权限被拒绝
return false
}
}
function getScreen() {
return new Promise((resolve, reject) => {
let multiScreen = []
if (window.getScreenDetails) {
let getScreensProsime1 = window.getScreenDetails();
getScreensProsime1.then((c) => {
if (c instanceof Array) {
multiScreen = c
} else if (c instanceof Object) {
multiScreen = c.screens
} else {
multiScreen = []
}
resolve(multiScreen)
}).catch((err) => {
reject(err)
});
} else if (window.getScreens) {
let getScreensProsime = window.getScreens();
getScreensProsime.then((c) => {
if (c instanceof Array) {
multiScreen = c
} else if (c instanceof Object) {
multiScreen = c.screens
} else {
multiScreen = []
}
resolve(multiScreen)
}).catch((err) => {
reject(err)
})
}
})
}
export async function openWindow(url, name) {
// 判断浏览器是否兼容
// 高版本的谷歌edge不支持跨屏需要降低浏览器版本86.0版
if (!window.getScreens && !window.getScreenDetails) {
console.log('你的浏览器版本不支持多屏展示功能!');
return window.open(url, name);
}
let permission = await getPermission()
if (!permission) {
alert('使用多屏功能请先进行授权')
return false
}
let multiScreen = await getScreen()
// 判断是否2个屏幕
if (multiScreen.length < 2) {
console.log('请接入多个显示屏!');
return window.open(url, name);
}
// 获取当前屏幕availLeft信息和所有信息比对取另一个屏幕数据
let currentAvailLeft = screen.availLeft ? screen.availLeft : '0'
let newCurr = multiScreen.find((t) => t.availLeft !== currentAvailLeft)
let fulls = ''
for (let key in newCurr) {
fulls += `${key}=${(newCurr[key] || newCurr[key] === 0) ? newCurr[key] : 0},`
}
return window.open(url, name, fulls);
}

View File

@ -220,6 +220,7 @@ import { changeURLStatic } from '@/utils/history.js'
import AdditionalAssessment from './AdditionalAssessment' import AdditionalAssessment from './AdditionalAssessment'
import { showReadReport, showTumorReport } from "@/api/export"; import { showReadReport, showTumorReport } from "@/api/export";
import PreviewFileDialog from "@/components/PreviewFileDialog/PreviewFileDialog"; import PreviewFileDialog from "@/components/PreviewFileDialog/PreviewFileDialog";
import { openWindow } from "@/utils/splitScreen";
export default { export default {
name: 'ReportPage', name: 'ReportPage',
components: { SignForm, AdditionalAssessment, PreviewFileDialog }, components: { SignForm, AdditionalAssessment, PreviewFileDialog },
@ -701,7 +702,7 @@ export default {
} }
} }
}, },
previewDicoms(task) { async previewDicoms(task) {
if (this.openWindow) { if (this.openWindow) {
this.openWindow.close() this.openWindow.close()
} }
@ -716,7 +717,10 @@ export default {
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}&TokenKey=${token}`
const routeData = this.$router.resolve({ path }) const routeData = this.$router.resolve({ path })
this.openWindow = window.open(routeData.href, '_blank') this.openWindow = await openWindow(routeData.href)
// if (this.openWindow) {
// this.$setOpenWindow(this.openWindow);
// }
}, },
handleSave(isPrompt) { handleSave(isPrompt) {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {

View File

@ -4,63 +4,36 @@
<div slot="header" class="clearfix report-header"> <div slot="header" class="clearfix report-header">
<h3 style="margin:0;padding:0;">{{ $t('trials:readingReport:title:eicrf') }}</h3> <h3 style="margin:0;padding:0;">{{ $t('trials:readingReport:title:eicrf') }}</h3>
<div style="margin-left:auto"> <div style="margin-left:auto">
<el-switch <el-switch v-model="isShowDetail" :active-text="$t('trials:readingReport:title:expandDetails')"
v-model="isShowDetail" :inactive-text="$t('trials:readingReport:title:collapseDetails')" style="margin-right:5px"
:active-text="$t('trials:readingReport:title:expandDetails')" @change="handleShowDetail" />
:inactive-text="$t('trials:readingReport:title:collapseDetails')" <el-button v-if="readingTaskState < 2" type="primary" size="small" @click="skipTask">
style="margin-right:5px"
@change="handleShowDetail"
/>
<el-button
v-if="readingTaskState<2"
type="primary"
size="small"
@click="skipTask"
>
<!-- 跳过 --> <!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }} {{ $t('trials:readingReport:button:skip') }}
</el-button> </el-button>
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="getReportInfo">{{$t('trials:readingReport:button:refresh')}}</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="handleSave(true)">{{$t('common:button:save')}}</el-button> $t('trials:readingReport:button:refresh') }}</el-button>
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleConfirm">{{$t('common:button:submit')}}</el-button> <el-button v-if="readingTaskState < 2" type="primary" size="small" @click="handleSave(true)">{{
$t('common:button:save') }}</el-button>
<el-button v-if="readingTaskState < 2" type="primary" size="small" @click="handleConfirm">{{
$t('common:button:submit') }}</el-button>
</div> </div>
</div> </div>
<div style="flex: 1"> <div style="flex: 1">
<el-table <el-table ref="reportList" v-adaptive="{ bottomOffset: 0 }" :data="taskQuestions"
ref="reportList" v-if="taskQuestions.length > 0" row-key="Id" border default-expand-all height="100"
v-adaptive="{bottomOffset:0}" :tree-props="{ children: 'Childrens', hasChildren: 'hasChildren' }" size="mini">
:data="taskQuestions" <el-table-column prop="" label="" show-overflow-tooltip width="350px">
v-if="taskQuestions.length > 0"
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"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.QuestionName">{{ scope.row.BlindName ? scope.row.QuestionName : scope.row.QuestionName }}</span> <span v-if="scope.row.QuestionName">{{ scope.row.BlindName ? scope.row.QuestionName :
<span scope.row.QuestionName }}</span>
v-else <span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">
style="font-weight: bold;font-size: 16px;color: #f44336;"
>
{{ scope.row.GroupName }} {{ scope.row.GroupName }}
</span> </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"> <div v-if="task.IsCurrentTask">
{{ task.BlindName }} {{ task.BlindName }}
@ -72,122 +45,128 @@
<span class="el-icon-view"></span> <span class="el-icon-view"></span>
</el-button> </el-button>
</div> </div>
<!-- <div v-if="task.LatestScanDate">--> <!-- <div v-if="task.LatestScanDate">-->
<!-- {{ task.LatestScanDate.split(' ')[0] }}--> <!-- {{ task.LatestScanDate.split(' ')[0] }}-->
<!-- </div>--> <!-- </div>-->
<!-- {{ `(影像点击跳转)` }} --> <!-- {{ `(影像点击跳转)` }} -->
<!-- {{ $t('trials:readingReport:button:jump') }}--> <!-- {{ $t('trials:readingReport:button:jump') }}-->
</div> </div>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<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' || scope.row.Type === 'class')"> <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' || scope.row.Type === 'class')">
<template> <template>
<!-- 输入框 --> <!-- 输入框 -->
<div> <div>
<template v-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"> <template
v-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)">
</template> </template>
<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]}} {{ questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}
</span> </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 v-else-if="scope.row.Type==='input' || scope.row.Type==='textarea'">
{{questionForm[scope.row.QuestionId]}}
</span> </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>
clearable
>
<template> <template>
<el-option <el-option v-for="val in scope.row.TypeValue.split('|')" :key="val" :label="val.trim()"
v-for="val in scope.row.TypeValue.split('|')" :value="val.trim()" />
:key="val"
:label="val.trim()"
:value="val.trim()"
/>
</template> </template>
</el-select> </el-select>
<span v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='select' || scope.row.Type==='radio'"> <span
{{questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}} v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'select' || scope.row.Type === 'radio'">
{{ 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"
clearable
>
<template> <template>
<el-option <el-option v-for="val in scope.row.TypeValue.split('|')" :key="val" :label="val.trim()"
v-for="val in scope.row.TypeValue.split('|')" :value="val.trim()" />
:key="val"
:label="val.trim()"
:value="val.trim()"
/>
</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]}} {{ questionForm[scope.row.QuestionId] }}
</span> </span>
<span v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='class'"> <span v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'class'">
{{questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}} {{ questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}
</span> </span>
<span v-else-if="scope.row.Type==='class'"> <span v-else-if="scope.row.Type === 'class'">
{{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"
onblur="value=parseFloat(value).toFixed(parseInt(localStorage.getItem('digitPlaces')))" onblur="value=parseFloat(value).toFixed(parseInt(localStorage.getItem('digitPlaces')))"
@input="limitInput($event, questionForm[scope.row.QuestionId][scope.row.xfIndex], scope.row.TableQuestionId)" @input="limitInput($event, questionForm[scope.row.QuestionId][scope.row.xfIndex], scope.row.TableQuestionId)"
size="mini" size="mini" @focus="() => { questionId = scope.row.QuestionId }">
@focus="() => {questionId = scope.row.QuestionId}" <template slot="append" v-if="scope.row.Unit !== 0">{{ scope.row.Unit !== 4 ? $fd('ValueUnit',
> scope.row.Unit) : scope.row.CustomUnit }}</template>
<template slot="append" v-if="scope.row.Unit !== 0">{{scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}}</template>
<template slot="append" v-else-if="scope.row.ValueType === 2">%</template> <template slot="append" v-else-if="scope.row.ValueType === 2">%</template>
</el-input> </el-input>
<span v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='number' && (scope.row.xfIndex || scope.row.xfIndex === 0)"> <span
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]))? 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}` }} {{
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]}
${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])) ? questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]:`${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]}
%` }}
</template> </template>
<template v-else> <template v-else>
{{ 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]}` }} {{
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]}`
}}
</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"
:disabled="scope.row.DataSource === 1"
onblur="value=parseFloat(value).toFixed(parseInt(localStorage.getItem('digitPlaces')))" onblur="value=parseFloat(value).toFixed(parseInt(localStorage.getItem('digitPlaces')))"
@input="limitInput($event, questionForm, scope.row.QuestionId)" @input="limitInput($event, questionForm, scope.row.QuestionId)" size="mini"
size="mini" @focus="() => { questionId = scope.row.QuestionId }">
@focus="() => {questionId = scope.row.QuestionId}" <template slot="append" v-if="scope.row.Unit !== 0">{{ scope.row.Unit !== 4 ? $fd('ValueUnit',
> scope.row.Unit) : scope.row.CustomUnit }}</template>
<template slot="append" v-if="scope.row.Unit !== 0">{{scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}}</template>
<template slot="append" v-else-if="scope.row.ValueType === 2">%</template> <template slot="append" v-else-if="scope.row.ValueType === 2">%</template>
</el-input> </el-input>
<span v-else-if="scope.row.Type==='number'"> <span v-else-if="scope.row.Type === 'number'">
<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]))? questionForm[scope.row.QuestionId]:`${questionForm[scope.row.QuestionId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }} {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ?
questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} ${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])) ? questionForm[scope.row.QuestionId]:`${questionForm[scope.row.QuestionId]} %` }} {{ isNaN(parseInt(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] : questionForm[scope.row.QuestionId]}} {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId] :
questionForm[scope.row.QuestionId] }}
</template> </template>
</span> </span>
</div> </div>
@ -195,58 +174,50 @@
</template> </template>
<template v-else-if="task.VisitTaskId === visitTaskId && scope.row.Type === 'upload'"> <template v-else-if="task.VisitTaskId === visitTaskId && scope.row.Type === 'upload'">
<CustomizeReportPageUpload <CustomizeReportPageUpload
v-if="scope.row.Type==='upload' && (scope.row.xfIndex || scope.row.xfIndex === 0)" v-if="scope.row.Type === 'upload' && (scope.row.xfIndex || scope.row.xfIndex === 0)"
:visitTaskId="visitTaskId" :visitTaskId="visitTaskId" :question="scope.row" :task="task" :readingTaskState="readingTaskState"
:question="scope.row"
:task="task"
:readingTaskState="readingTaskState"
:initUrl="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]" :initUrl="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
@setImageUrl="(url) => {setImageUrl(scope.row.QuestionId, scope.row.xfIndex, scope.row.TableQuestionId, url, scope.row.RowId)}" @setImageUrl="(url) => { setImageUrl(scope.row.QuestionId, scope.row.xfIndex, scope.row.TableQuestionId, url, scope.row.RowId) }">
></CustomizeReportPageUpload> </CustomizeReportPageUpload>
<CustomizeReportPageUpload <CustomizeReportPageUpload v-else-if="scope.row.Type === 'upload'" :visitTaskId="visitTaskId"
v-else-if="scope.row.Type==='upload'" :question="scope.row" :task="task" :readingTaskState="readingTaskState"
:visitTaskId="visitTaskId"
:question="scope.row"
:task="task"
:readingTaskState="readingTaskState"
:initUrl="questionForm[scope.row.QuestionId]" :initUrl="questionForm[scope.row.QuestionId]"
@setImageUrl="(url) => {setImageUrl(scope.row.QuestionId, scope.row.xfIndex, scope.row.TableQuestionId, url)}" @setImageUrl="(url) => { setImageUrl(scope.row.QuestionId, scope.row.xfIndex, scope.row.TableQuestionId, url) }">
></CustomizeReportPageUpload> </CustomizeReportPageUpload>
</template> </template>
<template v-else-if="scope.row.Type === 'upload'"> <template v-else-if="scope.row.Type === 'upload'">
<CustomizeReportPageUpload <CustomizeReportPageUpload
v-if="scope.row.Type==='upload' && (scope.row.xfIndex || scope.row.xfIndex === 0)" v-if="scope.row.Type === 'upload' && (scope.row.xfIndex || scope.row.xfIndex === 0)"
:visitTaskId="visitTaskId" :visitTaskId="visitTaskId" :question="scope.row" :task="task" :readingTaskState="readingTaskState"
:question="scope.row" :initUrl="scope.row.Answers[task.VisitTaskId]"></CustomizeReportPageUpload>
:task="task" <CustomizeReportPageUpload v-else-if="scope.row.Type === 'upload'" :visitTaskId="visitTaskId"
:readingTaskState="readingTaskState" :question="scope.row" :task="task" :readingTaskState="readingTaskState"
:initUrl="scope.row.Answers[task.VisitTaskId]" :initUrl="scope.row.Answers[task.VisitTaskId]"></CustomizeReportPageUpload>
></CustomizeReportPageUpload>
<CustomizeReportPageUpload
v-else-if="scope.row.Type==='upload'"
:visitTaskId="visitTaskId"
:question="scope.row"
:task="task"
:readingTaskState="readingTaskState"
:initUrl="scope.row.Answers[task.VisitTaskId]"
></CustomizeReportPageUpload>
</template> </template>
<template v-else-if="scope.row.QuestionType=== 22"> <template v-else-if="scope.row.QuestionType === 22">
{{ scope.row.Answers[task.VisitTaskId] === '-1' ? '未知' : scope.row.Answers[task.VisitTaskId] }} {{ scope.row.Answers[task.VisitTaskId] === '-1' ? '未知' : scope.row.Answers[task.VisitTaskId] }}
</template> </template>
<template v-else-if="scope.row.DictionaryCode"> <template v-else-if="scope.row.DictionaryCode">
{{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }} {{ $fd(scope.row.DictionaryCode, 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]:`${scope.row.Answers[task.VisitTaskId]}` }} {{
isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] :
`${scope.row.Answers[task.VisitTaskId]}`
}}
</template> </template>
<template v-else-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"> <template
v-else-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)">
</template> </template>
<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]:`${scope.row.Answers[task.VisitTaskId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }} {{
isNaN(parseInt(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}` }}
</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])) ? 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]} %` }}
</template> </template>
<template v-else-if="scope.row.Answers && scope.row.Answers.hasOwnProperty(task.VisitTaskId)"> <template v-else-if="scope.row.Answers && scope.row.Answers.hasOwnProperty(task.VisitTaskId)">
{{ scope.row.Answers[task.VisitTaskId] }} {{ scope.row.Answers[task.VisitTaskId] }}
@ -258,16 +229,11 @@
</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 style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span> <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>
@ -282,6 +248,7 @@ import const_ from '@/const/sign-code'
import SignForm from '@/views/trials/components/newSignForm' import SignForm from '@/views/trials/components/newSignForm'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import store from '@/store' import store from '@/store'
import { openWindow } from "@/utils/splitScreen";
export default { export default {
name: 'CustomizeReportPage', name: 'CustomizeReportPage',
components: { SignForm, CustomizeReportPageUpload }, components: { SignForm, CustomizeReportPageUpload },
@ -314,7 +281,8 @@ export default {
TrialReadingCriterionId: null, TrialReadingCriterionId: null,
tableAnswers: {}, tableAnswers: {},
questionForm: {}, questionForm: {},
questionId: null questionId: null,
openWindow: null
} }
}, },
watch: { watch: {
@ -378,7 +346,7 @@ export default {
list.forEach(v => { list.forEach(v => {
if (v.QuestionId === questionId) { if (v.QuestionId === questionId) {
return Object.assign({}, v.Answers) return Object.assign({}, v.Answers)
} else if (v.Childrens.length > 0){ } else if (v.Childrens.length > 0) {
return this.getTagterAnswers(v.Childrens, questionId) return this.getTagterAnswers(v.Childrens, questionId)
} }
}) })
@ -585,12 +553,12 @@ export default {
setScrollTop(a) { setScrollTop(a) {
setTimeout(() => { setTimeout(() => {
this.$nextTick(() => { this.$nextTick(() => {
if(this.$refs.reportList){ if (this.$refs.reportList) {
this.$refs.reportList.bodyWrapper.scrollTop = this.$refs.reportList.bodyWrapper.scrollHeight this.$refs.reportList.bodyWrapper.scrollTop = this.$refs.reportList.bodyWrapper.scrollHeight
this.$refs.reportList.bodyWrapper.scrollTop = this.$refs.reportList.bodyWrapper.scrollHeight this.$refs.reportList.bodyWrapper.scrollTop = this.$refs.reportList.bodyWrapper.scrollHeight
} }
}) })
},50) }, 50)
}, },
getQuestions(questions, isNTFilterLength, lesionType, isLymphNodes) { getQuestions(questions, isNTFilterLength, lesionType, isLymphNodes) {
const arr = [] const arr = []
@ -789,7 +757,10 @@ export default {
} }
}) })
}, },
previewDicoms(task) { async previewDicoms(task) {
if (this.openWindow) {
this.openWindow.close()
}
var token = getToken() var token = getToken()
// var subjectCode = this.$router.currentRoute.query.subjectCode // var subjectCode = this.$router.currentRoute.query.subjectCode
var subjectCode = localStorage.getItem('subjectCode') var subjectCode = localStorage.getItem('subjectCode')
@ -801,7 +772,7 @@ export default {
var trialReadingCriterionId = this.$router.currentRoute.query.TrialReadingCriterionId var trialReadingCriterionId = this.$router.currentRoute.query.TrialReadingCriterionId
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}&TokenKey=${token}`
const routeData = this.$router.resolve({ path }) const routeData = this.$router.resolve({ path })
window.open(routeData.href, '_blank') this.openWindow = await openWindow(routeData.href)
}, },
handleSave(isPrompt) { handleSave(isPrompt) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -817,7 +788,7 @@ export default {
questionId: k, questionId: k,
answer: v[o], answer: v[o],
tableQuestionId: o, tableQuestionId: o,
rowId: v[o+'_RowId'] rowId: v[o + '_RowId']
}) })
} }
}) })
@ -871,27 +842,32 @@ export default {
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.report-wrapper{ .report-wrapper {
height: 100%; height: 100%;
// background-color: #fff; // background-color: #fff;
background-color: #000; background-color: #000;
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 7px; width: 7px;
height: 7px; height: 7px;
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
border-radius: 10px; border-radius: 10px;
background: #d0d0d0; background: #d0d0d0;
} }
.report-header{
.report-header {
display: flex; display: flex;
} }
.el-card{
.el-card {
background-color: #000; background-color: #000;
color: #ffffff; color: #ffffff;
border:none; border: none;
} }
// /deep/ .el-table__cell{ // /deep/ .el-table__cell{
// background-color: #000; // background-color: #000;
// color: #ffffff; // color: #ffffff;
@ -905,51 +881,62 @@ export default {
// color: #ffffff; // color: #ffffff;
// } // }
/deep/ .el-table, .el-table__expanded-cell { /deep/ .el-table,
.el-table__expanded-cell {
background-color: #000; background-color: #000;
color: #fff; color: #fff;
border-color:#444444; border-color: #444444;
} }
/deep/ .el-table th, .el-table tr { /deep/ .el-table th,
.el-table tr {
background-color: #000; background-color: #000;
color: #fff; color: #fff;
border-color:#444444; border-color: #444444;
} }
/deep/ .el-table__body tr > td{
background-color:#000 !important; /deep/ .el-table__body tr>td {
background-color: #000 !important;
color: #fff; color: #fff;
border-color:#444444; border-color: #444444;
} }
/deep/ .el-table__body tr:hover > td{
background-color:#858282 !important; /deep/ .el-table__body tr:hover>td {
background-color: #858282 !important;
color: #fff; color: #fff;
border-color:#444444; border-color: #444444;
} }
/deep/ .el-table--border th.gutter:last-of-type{
/deep/ .el-table--border th.gutter:last-of-type {
border: none; border: none;
} }
/deep/ .el-card__header{
/deep/ .el-card__header {
border: none; border: none;
padding: 10px; padding: 10px;
} }
/deep/ .el-upload-list--picture-card .el-upload-list__item{
/deep/ .el-upload-list--picture-card .el-upload-list__item {
width: 30px; width: 30px;
height: 30px; height: 30px;
} }
/deep/ .el-upload--picture-card{
/deep/ .el-upload--picture-card {
width: 30px; width: 30px;
height: 30px; height: 30px;
line-height: 40px; line-height: 40px;
} }
} }
/deep/ .el-switch__label{
color:#fff; /deep/ .el-switch__label {
color: #fff;
} }
/deep/ .el-switch__label.is-active{
/deep/ .el-switch__label.is-active {
color: #428bca; color: #428bca;
} }
.uploadWrapper{
.uploadWrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;

View File

@ -4,27 +4,15 @@
<el-form :inline="true"> <el-form :inline="true">
<!-- 受试者编号 --> <!-- 受试者编号 -->
<el-form-item :label="$t('trials:reviewTrack:table:subjectCode')"> <el-form-item :label="$t('trials:reviewTrack:table:subjectCode')">
<el-input <el-input v-model="searchData.SubjectCode" style="width: 150px" clearable />
v-model="searchData.SubjectCode"
style="width: 150px"
clearable
/>
</el-form-item> </el-form-item>
<!-- 患者编号 --> <!-- 患者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')"> <el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input <el-input v-model="searchData.PatientIdStr" style="width: 150px" clearable />
v-model="searchData.PatientIdStr"
style="width: 150px"
clearable
/>
</el-form-item> </el-form-item>
<!-- 患者姓名 --> <!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')"> <el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input <el-input v-model="searchData.SubjectName" style="width: 150px" clearable />
v-model="searchData.SubjectName"
style="width: 150px"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<!-- 查询 --> <!-- 查询 -->
@ -32,45 +20,23 @@
{{ $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>
</el-form> </el-form>
</div> </div>
<div slot="main-container"> <div slot="main-container">
<el-table <el-table v-adaptive="{ bottomOffset: 75 }" :data="list" stripe height="100" @sort-change="handleSortChange">
v-adaptive="{ bottomOffset: 75 }"
:data="list"
stripe
height="100"
@sort-change="handleSortChange"
>
<el-table-column type="index" width="40" align="left" /> <el-table-column type="index" width="40" align="left" />
<!-- 受试者编号 --> <!-- 受试者编号 -->
<el-table-column <el-table-column prop="SubjectCode" min-width="100" :label="$t('trials:reviewTrack:table:subjectCode')"
prop="SubjectCode" show-overflow-tooltip sortable="custom" />
min-width="100"
:label="$t('trials:reviewTrack:table:subjectCode')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 患者编号 --> <!-- 患者编号 -->
<el-table-column <el-table-column prop="PatientIdStr" min-width="100" :label="$t('trials:uploadDicomList:table:pId')"
prop="PatientIdStr" show-overflow-tooltip>
min-width="100"
:label="$t('trials:uploadDicomList:table:pId')"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<span <span v-for="(item, index) in scope.row.PatientList" :key="`${index}${item.PatientId}`">
v-for="(item, index) in scope.row.PatientList"
:key="`${index}${item.PatientId}`"
>
{{ {{
index === scope.row.PatientList.length - 1 index === scope.row.PatientList.length - 1
? item.PatientIdStr ? item.PatientIdStr
@ -80,31 +46,15 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 患者姓名 --> <!-- 患者姓名 -->
<el-table-column <el-table-column prop="SubjectName" min-width="100" :label="$t('trials:uploadDicomList:table:patientName')"
prop="SubjectName" show-overflow-tooltip sortable="custom" />
min-width="100"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 剩余阅片量 --> <!-- 剩余阅片量 -->
<el-table-column <el-table-column prop="UnReadCanReadTaskCount" min-width="100"
prop="UnReadCanReadTaskCount" :label="$t('trials:pendingReadingTasks:table:remainingReadingVolume')" show-overflow-tooltip
min-width="100" sortable="custom" />
:label="$t('trials:pendingReadingTasks:table:remainingReadingVolume')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 建议完成时间 --> <!-- 建议完成时间 -->
<el-table-column <el-table-column prop="SuggesteFinishedTime" min-width="100" :label="$t('trials:pendingReadingTasks:table:suggestedCompletionTime')
prop="SuggesteFinishedTime" " show-overflow-tooltip sortable="custom">
min-width="100"
:label="
$t('trials:pendingReadingTasks:table:suggestedCompletionTime')
"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
scope.row.SuggesteFinishedTime scope.row.SuggesteFinishedTime
@ -114,48 +64,25 @@
</template> </template>
</el-table-column> </el-table-column>
<!--操作--> <!--操作-->
<el-table-column <el-table-column :label="$t('common:action:action')" width="250" fixed="right">
:label="$t('common:action:action')"
width="250"
fixed="right"
>
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 阅片 --> <!-- 阅片 -->
<el-button <el-button :disabled="scope.row.ExistReadingApply ||
:disabled="
scope.row.ExistReadingApply ||
(scope.row.ClaimUserId && scope.row.ClaimUserId !== userId) (scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)
" " circle :title="scope.row.ExistReadingApply
circle
:title="
scope.row.ExistReadingApply
? $t('trials:pendingReadingTasks:button:ExistReadingApply') ? $t('trials:pendingReadingTasks:button:ExistReadingApply')
: $t('trials:pendingReadingTasks:button:review') : $t('trials:pendingReadingTasks:button:review')
" " icon="el-icon-edit-outline" @click="handleReadImage(scope.row)" />
icon="el-icon-edit-outline"
@click="handleReadImage(scope.row)"
/>
<!-- 释放 --> <!-- 释放 -->
<el-button <el-button :disabled="!scope.row.ClaimUserId ||
:disabled="
!scope.row.ClaimUserId ||
(scope.row.ClaimUserId && scope.row.ClaimUserId !== userId) (scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)
" " circle :title="$t('trials:pendingReadingTasks:button:release')" icon="el-icon-s-release"
circle @click="handleReleaseTasks(scope.row)" />
:title="$t('trials:pendingReadingTasks:button:release')"
icon="el-icon-s-release"
@click="handleReleaseTasks(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"
/>
</div> </div>
</BaseContainer> </BaseContainer>
</template> </template>
@ -168,6 +95,7 @@ import { claimOrCancelSubject, clearSkipReadingCache } from "@/api/reading";
import BaseContainer from "@/components/BaseContainer"; import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination"; import Pagination from "@/components/Pagination";
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import { openWindow } from "@/utils/splitScreen";
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
SubjectCode: "", SubjectCode: "",
@ -279,7 +207,7 @@ export default {
this.loading = true; this.loading = true;
await clearSkipReadingCache() await clearSkipReadingCache()
verifyReadingRestTime() verifyReadingRestTime()
.then((_) => { .then(async (_) => {
this.loading = false; this.loading = false;
window.localStorage.setItem( window.localStorage.setItem(
@ -296,8 +224,11 @@ export default {
} }
var routeData = this.$router.resolve({ path }); var routeData = this.$router.resolve({ path });
this.openWindow = window.open(routeData.href, "_blank"); // this.openWindow = window.open(routeData.href, "_blank");
this.openWindow = await openWindow(routeData.href)
if (this.openWindow) {
this.$setOpenWindow(this.openWindow); this.$setOpenWindow(this.openWindow);
}
}) })
.catch(() => { .catch(() => {
this.loading = false; this.loading = false;