自定义阅片更改及非dicom阅片添加个性化配置
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
6b10d07e2a
commit
272c28a988
|
@ -76,7 +76,7 @@
|
||||||
<el-input
|
<el-input
|
||||||
v-if="question.Type==='input'"
|
v-if="question.Type==='input'"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
:disabled="question.TableQuestionType === 2"
|
:disabled="question.TableQuestionType === 2 || readingTaskState === 2"
|
||||||
/>
|
/>
|
||||||
<!-- 多行文本输入框 -->
|
<!-- 多行文本输入框 -->
|
||||||
<el-input
|
<el-input
|
||||||
|
@ -84,13 +84,14 @@
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:autosize="{ minRows: 2, maxRows: 4}"
|
:autosize="{ minRows: 2, maxRows: 4}"
|
||||||
|
:disabled="readingTaskState === 2"
|
||||||
/>
|
/>
|
||||||
<!-- 下拉框 -->
|
<!-- 下拉框 -->
|
||||||
<el-select
|
<el-select
|
||||||
v-if="question.Type==='select'"
|
v-if="question.Type==='select'"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
clearable
|
clearable
|
||||||
:disabled="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode"
|
:disabled="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode || readingTaskState === 2"
|
||||||
@change="((val)=>{formItemChange(val, question)})"
|
@change="((val)=>{formItemChange(val, question)})"
|
||||||
>
|
>
|
||||||
<template v-if="question.TableQuestionType === 1">
|
<template v-if="question.TableQuestionType === 1">
|
||||||
|
@ -132,6 +133,7 @@
|
||||||
v-if="question.Type==='radio'"
|
v-if="question.Type==='radio'"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
@change="((val)=>{formItemChange(val, question)})"
|
@change="((val)=>{formItemChange(val, question)})"
|
||||||
|
:disabled="readingTaskState === 2"
|
||||||
>
|
>
|
||||||
<el-radio
|
<el-radio
|
||||||
v-for="val in question.TypeValue.split('|')"
|
v-for="val in question.TypeValue.split('|')"
|
||||||
|
@ -145,6 +147,7 @@
|
||||||
<el-checkbox-group
|
<el-checkbox-group
|
||||||
v-if="question.Type==='checkbox'"
|
v-if="question.Type==='checkbox'"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
|
:disabled="readingTaskState === 2"
|
||||||
>
|
>
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-for="val in question.TypeValue.split('|')"
|
v-for="val in question.TypeValue.split('|')"
|
||||||
|
@ -158,12 +161,12 @@
|
||||||
<el-input
|
<el-input
|
||||||
v-if="question.Type === 'class' && question.ClassifyShowType === 1"
|
v-if="question.Type === 'class' && question.ClassifyShowType === 1"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
:disabled="!question.ClassifyEditType"
|
:disabled="!question.ClassifyEditType || readingTaskState === 2"
|
||||||
/>
|
/>
|
||||||
<el-select
|
<el-select
|
||||||
v-if="question.Type === 'class' && question.ClassifyShowType === 2"
|
v-if="question.Type === 'class' && question.ClassifyShowType === 2"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
:disabled="!question.ClassifyEditType"
|
:disabled="!question.ClassifyEditType || readingTaskState === 2"
|
||||||
@change="(val) => { formItemChange(val, question) }"
|
@change="(val) => { formItemChange(val, question) }"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
|
@ -176,7 +179,7 @@
|
||||||
<el-radio-group
|
<el-radio-group
|
||||||
v-if="question.Type === 'class' && question.ClassifyShowType === 3"
|
v-if="question.Type === 'class' && question.ClassifyShowType === 3"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
:disabled="!question.ClassifyEditType"
|
:disabled="!question.ClassifyEditType || readingTaskState === 2"
|
||||||
@change="(val) => { formItemChange(val, question) }"
|
@change="(val) => { formItemChange(val, question) }"
|
||||||
>
|
>
|
||||||
<el-radio
|
<el-radio
|
||||||
|
@ -190,7 +193,7 @@
|
||||||
<el-input
|
<el-input
|
||||||
v-if="question.Type === 'class' && question.ClassifyShowType === 4"
|
v-if="question.Type === 'class' && question.ClassifyShowType === 4"
|
||||||
type="number"
|
type="number"
|
||||||
:disabled="!question.ClassifyEditType"
|
:disabled="!question.ClassifyEditType || readingTaskState === 2"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
@change="(val) => { formItemNumberChange(val, question) }"
|
@change="(val) => { formItemNumberChange(val, question) }"
|
||||||
/>
|
/>
|
||||||
|
@ -215,6 +218,7 @@
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
clearable
|
clearable
|
||||||
@change="(val) => { formItemNumberChange(val, question) }"
|
@change="(val) => { formItemNumberChange(val, question) }"
|
||||||
|
:disabled="readingTaskState === 2"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="val in question.TypeValue.split('|')"
|
v-for="val in question.TypeValue.split('|')"
|
||||||
|
@ -229,6 +233,7 @@
|
||||||
@change="(val) => { formItemNumberChange(val, question) }"
|
@change="(val) => { formItemNumberChange(val, question) }"
|
||||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
|
:disabled="readingTaskState === 2"
|
||||||
>
|
>
|
||||||
<!-- <template slot="append">1</template> -->
|
<!-- <template slot="append">1</template> -->
|
||||||
<template slot="append" v-if="question.Unit !== 0">{{question.Unit !== 4 ? $fd('ValueUnit', question.Unit) : question.CustomUnit}}</template>
|
<template slot="append" v-if="question.Unit !== 0">{{question.Unit !== 4 ? $fd('ValueUnit', question.Unit) : question.CustomUnit}}</template>
|
||||||
|
@ -238,7 +243,7 @@
|
||||||
type="number"
|
type="number"
|
||||||
v-if="question.Type === 'number' && !question.TypeValue && question.DataSource === 1"
|
v-if="question.Type === 'number' && !question.TypeValue && question.DataSource === 1"
|
||||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||||
:disabled="question.DataSource === 1"
|
:disabled="question.DataSource === 1 || readingTaskState === 2"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
>
|
>
|
||||||
<!-- <template slot="append">2</template> -->
|
<!-- <template slot="append">2</template> -->
|
||||||
|
@ -248,6 +253,7 @@
|
||||||
<!-- 上传图像 -->
|
<!-- 上传图像 -->
|
||||||
<el-upload
|
<el-upload
|
||||||
v-if="question.Type==='upload'"
|
v-if="question.Type==='upload'"
|
||||||
|
:disabled="readingTaskState === 2"
|
||||||
action
|
action
|
||||||
:accept="question.FileType"
|
:accept="question.FileType"
|
||||||
:limit="question.ImageCount === 0 ? 100 : question.ImageCount"
|
:limit="question.ImageCount === 0 ? 100 : question.ImageCount"
|
||||||
|
@ -258,7 +264,7 @@
|
||||||
:file-list="fileList"
|
:file-list="fileList"
|
||||||
:class="{disabled:question.ImageCount === 0 ? false : fileList.length >= question.ImageCount}"
|
:class="{disabled:question.ImageCount === 0 ? false : fileList.length >= question.ImageCount}"
|
||||||
>
|
>
|
||||||
<el-button slot="default" class="el-icon-plus">
|
<el-button slot="default" class="el-icon-plus" v-if="readingTaskState < 2">
|
||||||
{{this.$t('common:button:upload')}}
|
{{this.$t('common:button:upload')}}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
|
@ -446,6 +452,13 @@ export default {
|
||||||
this.formItemNumberChange(this.question.Id, false)
|
this.formItemNumberChange(this.question.Id, false)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
readingTaskState: {
|
||||||
|
deep: true,
|
||||||
|
immediate: true,
|
||||||
|
handler(v, oldv) {
|
||||||
|
console.log(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
var digitPlaces = Number(localStorage.getItem('digitPlaces'))
|
var digitPlaces = Number(localStorage.getItem('digitPlaces'))
|
||||||
|
|
|
@ -194,7 +194,7 @@
|
||||||
</template>
|
</template>
|
||||||
</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
|
<customize-report-page-upload
|
||||||
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"
|
:question="scope.row"
|
||||||
|
@ -202,8 +202,8 @@
|
||||||
:readingTaskState="readingTaskState"
|
: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>
|
></customize-report-page-upload>
|
||||||
<CustomizeReportPageUpload
|
<customize-report-page-upload
|
||||||
v-else-if="scope.row.Type==='upload'"
|
v-else-if="scope.row.Type==='upload'"
|
||||||
:visitTaskId="visitTaskId"
|
:visitTaskId="visitTaskId"
|
||||||
:question="scope.row"
|
:question="scope.row"
|
||||||
|
@ -211,25 +211,25 @@
|
||||||
:readingTaskState="readingTaskState"
|
: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>
|
></customize-report-page-upload>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="scope.row.Type === 'upload'">
|
<template v-else-if="scope.row.Type === 'upload'">
|
||||||
<CustomizeReportPageUpload
|
<customize-report-page-upload
|
||||||
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"
|
:question="scope.row"
|
||||||
:task="task"
|
:task="task"
|
||||||
:readingTaskState="readingTaskState"
|
:readingTaskState="readingTaskState"
|
||||||
:initUrl="scope.row.Answers[task.VisitTaskId]"
|
:initUrl="scope.row.Answers[task.VisitTaskId]"
|
||||||
></CustomizeReportPageUpload>
|
></customize-report-page-upload>
|
||||||
<CustomizeReportPageUpload
|
<customize-report-page-upload
|
||||||
v-else-if="scope.row.Type==='upload'"
|
v-else-if="scope.row.Type==='upload'"
|
||||||
:visitTaskId="visitTaskId"
|
:visitTaskId="visitTaskId"
|
||||||
:question="scope.row"
|
:question="scope.row"
|
||||||
:task="task"
|
:task="task"
|
||||||
:readingTaskState="readingTaskState"
|
:readingTaskState="readingTaskState"
|
||||||
:initUrl="scope.row.Answers[task.VisitTaskId]"
|
:initUrl="scope.row.Answers[task.VisitTaskId]"
|
||||||
></CustomizeReportPageUpload>
|
></customize-report-page-upload>
|
||||||
</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] }}
|
||||||
|
@ -276,6 +276,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { changeCalculationAnswer, getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
|
import { changeCalculationAnswer, getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
|
||||||
import { setSkipReadingCache } from '@/api/reading'
|
import { setSkipReadingCache } from '@/api/reading'
|
||||||
|
import { getAutoCutNextTask } from '@/api/user'
|
||||||
import DicomEvent from './../components/DicomEvent'
|
import DicomEvent from './../components/DicomEvent'
|
||||||
import CustomizeReportPageUpload from './CustomizeReportPageUpload'
|
import CustomizeReportPageUpload from './CustomizeReportPageUpload'
|
||||||
import const_ from '@/const/sign-code'
|
import const_ from '@/const/sign-code'
|
||||||
|
@ -736,15 +737,16 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 签名并确认
|
// 签名并确认
|
||||||
signConfirm(signInfo) {
|
async signConfirm(signInfo) {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
var params = {
|
try {
|
||||||
data: {
|
var params = {
|
||||||
visitTaskId: this.visitTaskId
|
data: {
|
||||||
},
|
visitTaskId: this.visitTaskId
|
||||||
signInfo: signInfo
|
},
|
||||||
}
|
signInfo: signInfo
|
||||||
submitDicomVisitTask(params).then(res => {
|
}
|
||||||
|
let res = await submitDicomVisitTask(params)
|
||||||
if (res.IsSuccess) {
|
if (res.IsSuccess) {
|
||||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
if (this.$refs['signForm']) {
|
if (this.$refs['signForm']) {
|
||||||
|
@ -752,41 +754,36 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.signVisible = false
|
this.signVisible = false
|
||||||
// window.location.reload()
|
|
||||||
// window.opener.postMessage('refreshTaskList', window.location)
|
|
||||||
|
|
||||||
// 设置当前任务阅片状态为已读
|
// 设置当前任务阅片状态为已读
|
||||||
this.readingTaskState = 2
|
this.readingTaskState = 2
|
||||||
store.dispatch('reading/setVisitTaskReadingTaskState', { visitTaskId: this.visitTaskId, readingTaskState: 2 })
|
store.dispatch('reading/setVisitTaskReadingTaskState', { visitTaskId: this.visitTaskId, readingTaskState: 2 })
|
||||||
DicomEvent.$emit('setReadingState', 2)
|
DicomEvent.$emit('setReadingState', 2)
|
||||||
window.opener.postMessage('refreshTaskList', window.location)
|
window.opener.postMessage('refreshTaskList', window.location)
|
||||||
this.$confirm(this.$t('trials:oncologyReview:title:msg2'), {
|
const res = await getAutoCutNextTask()
|
||||||
type: 'warning',
|
let isAutoTask = res.Result.AutoCutNextTask
|
||||||
distinguishCancelAndClose: true
|
if (isAutoTask) {
|
||||||
})
|
window.location.reload()
|
||||||
|
} else {
|
||||||
|
this.$confirm(this.$t('trials:oncologyReview:title:msg2'), {
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true
|
||||||
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// var token = getToken()
|
|
||||||
// var subjectCode = this.$router.currentRoute.query.subjectCode
|
|
||||||
// var subjectId = this.$router.currentRoute.query.subjectId
|
|
||||||
// var trialId = this.$router.currentRoute.query.trialId
|
|
||||||
|
|
||||||
// this.$router.push({
|
|
||||||
// path: `/readingPage?subjectCode=${subjectCode}&subjectId=${subjectId}&trialId=${trialId}&TokenKey=${token}`
|
|
||||||
// })
|
|
||||||
// DicomEvent.$emit('getNextTask')
|
|
||||||
window.location.reload()
|
window.location.reload()
|
||||||
})
|
})
|
||||||
.catch(action => {
|
.catch(action => {
|
||||||
|
|
||||||
})
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}).catch(() => {
|
} catch(e) {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
if (this.$refs['signForm'] && this.$refs['signForm'].btnLoading) {
|
if (this.$refs['signForm'] && this.$refs['signForm'].btnLoading) {
|
||||||
this.$refs['signForm'].btnLoading = false
|
this.$refs['signForm'].btnLoading = false
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
},
|
},
|
||||||
previewDicoms(task) {
|
previewDicoms(task) {
|
||||||
var token = getToken()
|
var token = getToken()
|
||||||
|
|
|
@ -3,30 +3,30 @@
|
||||||
<!-- 访视阅片 -->
|
<!-- 访视阅片 -->
|
||||||
<visit-review v-if="taskInfo && taskInfo.ReadingCategory=== 1" />
|
<visit-review v-if="taskInfo && taskInfo.ReadingCategory=== 1" />
|
||||||
<!-- 全局阅片 -->
|
<!-- 全局阅片 -->
|
||||||
<global-review
|
<global-review
|
||||||
v-else-if="taskInfo && taskInfo.ReadingCategory=== 2"
|
v-else-if="taskInfo && taskInfo.ReadingCategory=== 2"
|
||||||
:trialId="trialId"
|
:trial-id="trialId"
|
||||||
:subjectId="taskInfo.SubjectId"
|
:subject-id="taskInfo.SubjectId"
|
||||||
:visitTaskId="taskInfo.VisitTaskId"
|
:visit-task-id="taskInfo.VisitTaskId"
|
||||||
:readingCategory="taskInfo.ReadingCategory"
|
:reading-category="taskInfo.ReadingCategory"
|
||||||
:subjectCode="taskInfo.SubjectCode"
|
:subject-code="taskInfo.SubjectCode"
|
||||||
:taskBlindName="taskInfo.TaskBlindName"
|
:task-blind-name="taskInfo.TaskBlindName"
|
||||||
:isReadingShowSubjectInfo="taskInfo.IsReadingShowSubjectInfo"
|
:is-reading-show-subject-info="taskInfo.IsReadingShowSubjectInfo"
|
||||||
:isReadingShowPreviousResults="taskInfo.IsReadingShowPreviousResults"
|
:is-reading-show-previous-results="taskInfo.IsReadingShowPreviousResults"
|
||||||
:isExistsClinicalData="taskInfo.IsExistsClinicalData"
|
:is-exists-clinical-data="taskInfo.IsExistsClinicalData"
|
||||||
/>
|
/>
|
||||||
<!-- 裁判阅片 -->
|
<!-- 裁判阅片 -->
|
||||||
<ad-review
|
<ad-review
|
||||||
v-else-if="taskInfo && taskInfo.ReadingCategory=== 4"
|
v-else-if="taskInfo && taskInfo.ReadingCategory=== 4"
|
||||||
:trialId="trialId"
|
:trial-id="trialId"
|
||||||
:subjectId="taskInfo.SubjectId"
|
:subject-id="taskInfo.SubjectId"
|
||||||
:visitTaskId="taskInfo.VisitTaskId"
|
:visit-task-id="taskInfo.VisitTaskId"
|
||||||
:readingCategory="taskInfo.ReadingCategory"
|
:reading-category="taskInfo.ReadingCategory"
|
||||||
:subjectCode="taskInfo.SubjectCode"
|
:subject-code="taskInfo.SubjectCode"
|
||||||
:taskBlindName="taskInfo.TaskBlindName"
|
:task-blind-name="taskInfo.TaskBlindName"
|
||||||
:isReadingShowSubjectInfo="taskInfo.IsReadingShowSubjectInfo"
|
:is-reading-show-subject-info="taskInfo.IsReadingShowSubjectInfo"
|
||||||
:isReadingShowPreviousResults="taskInfo.IsReadingShowPreviousResults"
|
:is-reading-show-previous-results="taskInfo.IsReadingShowPreviousResults"
|
||||||
:isExistsClinicalData="taskInfo.IsExistsClinicalData"
|
:is-exists-clinical-data="taskInfo.IsExistsClinicalData"
|
||||||
/>
|
/>
|
||||||
<!-- 肿瘤学阅片 -->
|
<!-- 肿瘤学阅片 -->
|
||||||
<!-- <oncology-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 5" /> -->
|
<!-- <oncology-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 5" /> -->
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getNextTask, readClinicalData } from '@/api/trials'
|
import { getNextTask, readClinicalData } from '@/api/trials'
|
||||||
|
@ -134,7 +134,7 @@ export default {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -148,7 +148,7 @@ export default {
|
||||||
height:80%;
|
height:80%;
|
||||||
}
|
}
|
||||||
::v-deep .el-dialog__body{
|
::v-deep .el-dialog__body{
|
||||||
padding: 20px 20px 0 20px;
|
padding: 10px;
|
||||||
height: calc(100% - 70px);
|
height: calc(100% - 70px);
|
||||||
}
|
}
|
||||||
.el-dialog__header{
|
.el-dialog__header{
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-loading="loading" class="ecrf-list-container">
|
<div v-loading="loading" class="ecrf-list-container">
|
||||||
<el-form
|
<el-form
|
||||||
|
v-if="taskInfo"
|
||||||
ref="questions"
|
ref="questions"
|
||||||
size="small"
|
size="small"
|
||||||
:model="questionForm"
|
:model="questionForm"
|
||||||
class="ecrf-form"
|
class="ecrf-form"
|
||||||
v-if="taskInfo"
|
|
||||||
>
|
>
|
||||||
<!-- <FormItem
|
<!-- <FormItem
|
||||||
v-for="question of questions"
|
v-for="question of questions"
|
||||||
|
@ -19,18 +19,18 @@
|
||||||
@resetFormItemData="resetFormItemData"
|
@resetFormItemData="resetFormItemData"
|
||||||
/> -->
|
/> -->
|
||||||
<QuestionFormItem
|
<QuestionFormItem
|
||||||
v-for="question of questions"
|
v-for="question of questions"
|
||||||
:key="question.Id"
|
:key="question.Id"
|
||||||
:visitTaskId="visitTaskId"
|
:visit-task-id="visitTaskId"
|
||||||
:question="question"
|
:question="question"
|
||||||
:question-form="questionForm"
|
:question-form="questionForm"
|
||||||
:reading-task-state="readingTaskState"
|
:reading-task-state="readingTaskState"
|
||||||
:criterion-id="criterionId"
|
:criterion-id="criterionId"
|
||||||
:CalculationList="calculationList"
|
:calculation-list="calculationList"
|
||||||
:IsBaseline="isBaseline"
|
:is-baseline="isBaseline"
|
||||||
@resetFormItemData="resetFormItemData"
|
@resetFormItemData="resetFormItemData"
|
||||||
@setFormItemData="setFormItemData"
|
@setFormItemData="setFormItemData"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<el-form-item v-if="readingTaskState < 2">
|
<el-form-item v-if="readingTaskState < 2">
|
||||||
<div style="text-align:center;">
|
<div style="text-align:center;">
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
import { getCustomTableQuestionAnswer, changeDicomReadingQuestionAnswer, getTrialReadingQuestion, saveVisitTaskQuestions, submitVisitTaskQuestionsInDto, getQuestionCalculateRelation } from '@/api/trials'
|
import { getCustomTableQuestionAnswer, changeDicomReadingQuestionAnswer, submitVisitTaskQuestionsInDto, getQuestionCalculateRelation } from '@/api/trials'
|
||||||
import { setSkipReadingCache } from '@/api/reading'
|
import { setSkipReadingCache } from '@/api/reading'
|
||||||
import const_ from '@/const/sign-code'
|
import const_ from '@/const/sign-code'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
@ -125,6 +125,7 @@ export default {
|
||||||
currentTaskState: {
|
currentTaskState: {
|
||||||
immediate: true,
|
immediate: true,
|
||||||
handler(state) {
|
handler(state) {
|
||||||
|
console.log(state)
|
||||||
if (state === 2) {
|
if (state === 2) {
|
||||||
this.readingTaskState = 2
|
this.readingTaskState = 2
|
||||||
}
|
}
|
||||||
|
@ -154,7 +155,7 @@ export default {
|
||||||
this.$set(this.questionForm, v.Id, v.TableQuestions.Answers)
|
this.$set(this.questionForm, v.Id, v.TableQuestions.Answers)
|
||||||
}
|
}
|
||||||
if (v.Type === 'class') {
|
if (v.Type === 'class') {
|
||||||
this.classArr.push({triggerId: v.ClassifyQuestionId, classId: v.Id, classifyAlgorithms: v.ClassifyAlgorithms, classifyType: v.ClassifyType})
|
this.classArr.push({ triggerId: v.ClassifyQuestionId, classId: v.Id, classifyAlgorithms: v.ClassifyAlgorithms, classifyType: v.ClassifyType })
|
||||||
}
|
}
|
||||||
if (v.Type === 'number') {
|
if (v.Type === 'number') {
|
||||||
this.$set(this.questionForm, v.Id, v.Answer === '' ? '' : parseFloat(v.Answer).toFixed(this.digitPlaces))
|
this.$set(this.questionForm, v.Id, v.Answer === '' ? '' : parseFloat(v.Answer).toFixed(this.digitPlaces))
|
||||||
|
@ -166,17 +167,14 @@ export default {
|
||||||
this.questions = res.Result.SinglePage
|
this.questions = res.Result.SinglePage
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
} catch(e) {
|
|
||||||
console.log(e)
|
console.log(e)
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
setChild(obj) {
|
setChild(obj) {
|
||||||
obj.forEach(i => {
|
obj.forEach(i => {
|
||||||
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id && i.Type !== 'table' && i.Type !== 'basicTable') {
|
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id && i.Type !== 'table' && i.Type !== 'basicTable') {
|
||||||
this.$set(this.questionForm, i.Id, i.Answer)
|
this.$set(this.questionForm, i.Id, i.Answer)
|
||||||
}
|
}
|
||||||
if (i.Type === 'table' || i.Type === 'basicTable') {
|
if (i.Type === 'table' || i.Type === 'basicTable') {
|
||||||
|
@ -190,7 +188,7 @@ export default {
|
||||||
this.$set(this.questionForm, i.Id, i.TableQuestions.Answers)
|
this.$set(this.questionForm, i.Id, i.TableQuestions.Answers)
|
||||||
}
|
}
|
||||||
if (i.Type === 'class') {
|
if (i.Type === 'class') {
|
||||||
this.classArr.push({triggerId: i.ClassifyQuestionId, classId: i.Id, classifyAlgorithms: i.ClassifyAlgorithms, classifyType: i.ClassifyType})
|
this.classArr.push({ triggerId: i.ClassifyQuestionId, classId: i.Id, classifyAlgorithms: i.ClassifyAlgorithms, classifyType: i.ClassifyType })
|
||||||
}
|
}
|
||||||
if (i.Type === 'number') {
|
if (i.Type === 'number') {
|
||||||
this.$set(this.questionForm, i.Id, i.Answer === '' ? '' : parseFloat(i.Answer).toFixed(this.digitPlaces))
|
this.$set(this.questionForm, i.Id, i.Answer === '' ? '' : parseFloat(i.Answer).toFixed(this.digitPlaces))
|
||||||
|
@ -207,7 +205,7 @@ export default {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async handleSave(isMsg) {
|
async handleSave(isMsg) {
|
||||||
const valid = await this.$refs['questions'].validate()
|
const valid = await this.$refs['questions'].validate()
|
||||||
if (!valid) return
|
if (!valid) return
|
||||||
|
@ -223,14 +221,14 @@ export default {
|
||||||
visitTaskId: this.visitTaskId,
|
visitTaskId: this.visitTaskId,
|
||||||
answers: answers
|
answers: answers
|
||||||
}
|
}
|
||||||
let res = await changeDicomReadingQuestionAnswer(params)
|
const res = await changeDicomReadingQuestionAnswer(params)
|
||||||
if (res.IsSuccess) {
|
if (res.IsSuccess) {
|
||||||
if (isMsg) {
|
if (isMsg) {
|
||||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
}
|
}
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -366,7 +364,7 @@ export default {
|
||||||
.el-table tr {
|
.el-table tr {
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
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;
|
||||||
|
@ -381,20 +379,24 @@ export default {
|
||||||
::v-deep .el-table--border th.gutter:last-of-type {
|
::v-deep .el-table--border th.gutter:last-of-type {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
::v-deep .el-dialog__header {
|
::v-deep .el-dialog{
|
||||||
background-color: #000;
|
background: #1e1e1e;
|
||||||
color: #fff;
|
border: 1px solid #ddd;
|
||||||
.el-dialog__title {
|
color: #ddd;
|
||||||
color: #fff;
|
.el-dialog__title{
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
|
.el-input .el-input__inner{
|
||||||
|
background-color: transparent;
|
||||||
|
color: #ddd;
|
||||||
|
border: 1px solid #5e5e5e;
|
||||||
|
}
|
||||||
|
.el-input.is-disabled .el-input__inner{
|
||||||
|
background-color: #646464a1;
|
||||||
|
}
|
||||||
|
.el-form-item__label{
|
||||||
|
color: #dfdfdf
|
||||||
}
|
}
|
||||||
}
|
|
||||||
::v-deep .el-dialog__body {
|
|
||||||
background-color: #000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
::v-deep .el-dialog__footer {
|
|
||||||
background-color: #000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -2,104 +2,110 @@
|
||||||
<div class="none-dicom-viewer">
|
<div class="none-dicom-viewer">
|
||||||
<!-- tools -->
|
<!-- tools -->
|
||||||
<div class="tools-wrapper">
|
<div class="tools-wrapper">
|
||||||
<!-- 布局 -->
|
<div class="tools-left">
|
||||||
<div class="tool-item" :title="$t('trials:reading:button:layout')">
|
<!-- 布局 -->
|
||||||
<el-dropdown @command="handleCommand">
|
<div class="tool-item" :title="$t('trials:reading:button:layout')">
|
||||||
<span class="el-dropdown-link">
|
<el-dropdown @command="handleCommand">
|
||||||
<svg-icon icon-class="layout" class="svg-icon" /><i class="el-icon-arrow-down el-icon--right" />
|
<span class="el-dropdown-link">
|
||||||
</span>
|
<svg-icon icon-class="layout" class="svg-icon" /><i class="el-icon-arrow-down el-icon--right" />
|
||||||
<el-dropdown-menu slot="dropdown">
|
</span>
|
||||||
<el-dropdown-item command="1*1">1*1</el-dropdown-item>
|
<el-dropdown-menu slot="dropdown">
|
||||||
<el-dropdown-item command="1*2">1*2</el-dropdown-item>
|
<el-dropdown-item command="1*1">1*1</el-dropdown-item>
|
||||||
<el-dropdown-item command="2*2">2*2</el-dropdown-item>
|
<el-dropdown-item command="1*2">1*2</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
<el-dropdown-item command="2*2">2*2</el-dropdown-item>
|
||||||
</el-dropdown>
|
</el-dropdown-menu>
|
||||||
</div>
|
</el-dropdown>
|
||||||
<!-- 缩放 -->
|
</div>
|
||||||
<div
|
<!-- 缩放 -->
|
||||||
:class="['tool-item', activeTool === 'Zoom' ? 'tool-item-active' : '']"
|
<div
|
||||||
:title="$t('trials:reading:button:zoom')"
|
:class="['tool-item', activeTool === 'Zoom' ? 'tool-item-active' : '']"
|
||||||
@click.prevent="setToolActive('Zoom')"
|
:title="$t('trials:reading:button:zoom')"
|
||||||
>
|
@click.prevent="setToolActive('Zoom')"
|
||||||
<svg-icon icon-class="magnifier" class="svg-icon" />
|
>
|
||||||
</div>
|
<svg-icon icon-class="magnifier" class="svg-icon" />
|
||||||
<!-- 移动 -->
|
</div>
|
||||||
<div
|
<!-- 移动 -->
|
||||||
:class="['tool-item', activeTool === 'Pan' ? 'tool-item-active' : '']"
|
<div
|
||||||
:title="$t('trials:reading:button:move')"
|
:class="['tool-item', activeTool === 'Pan' ? 'tool-item-active' : '']"
|
||||||
@click.prevent="setToolActive('Pan')"
|
:title="$t('trials:reading:button:move')"
|
||||||
>
|
@click.prevent="setToolActive('Pan')"
|
||||||
<svg-icon icon-class="move" class="svg-icon" />
|
>
|
||||||
</div>
|
<svg-icon icon-class="move" class="svg-icon" />
|
||||||
<!-- 旋转 -->
|
</div>
|
||||||
<div
|
<!-- 旋转 -->
|
||||||
:class="['tool-item', activeTool === 'PlanarRotate' ? 'tool-item-active' : '']"
|
<div
|
||||||
:title="$t('trials:reading:button:rotate')"
|
:class="['tool-item', activeTool === 'PlanarRotate' ? 'tool-item-active' : '']"
|
||||||
@click.prevent="setToolActive('PlanarRotate')"
|
:title="$t('trials:reading:button:rotate')"
|
||||||
>
|
@click.prevent="setToolActive('PlanarRotate')"
|
||||||
<svg-icon icon-class="rotate" class="svg-icon" />
|
>
|
||||||
</div>
|
<svg-icon icon-class="rotate" class="svg-icon" />
|
||||||
<!-- 箭头工具 -->
|
</div>
|
||||||
<div
|
<!-- 箭头工具 -->
|
||||||
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'ArrowAnnotate' ? 'tool-item-active' : '']"
|
<div
|
||||||
:title="$t('trials:reading:button:arrowAnnotate')"
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'ArrowAnnotate' ? 'tool-item-active' : '']"
|
||||||
@click.prevent="setAnnotateToolActive('ArrowAnnotate')"
|
:title="$t('trials:reading:button:arrowAnnotate')"
|
||||||
>
|
@click.prevent="setAnnotateToolActive('ArrowAnnotate')"
|
||||||
<svg-icon icon-class="arrow" class="svg-icon" />
|
>
|
||||||
</div>
|
<svg-icon icon-class="arrow" class="svg-icon" />
|
||||||
<!-- 矩形工具 -->
|
</div>
|
||||||
<div
|
<!-- 矩形工具 -->
|
||||||
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'RectangleROI' ? 'tool-item-active' : '']"
|
<div
|
||||||
:title="$t('trials:dicom-show:RectangleRoi')"
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'RectangleROI' ? 'tool-item-active' : '']"
|
||||||
@click.prevent="setAnnotateToolActive('RectangleROI')"
|
:title="$t('trials:dicom-show:RectangleRoi')"
|
||||||
>
|
@click.prevent="setAnnotateToolActive('RectangleROI')"
|
||||||
<svg-icon icon-class="rectangle" class="svg-icon" />
|
>
|
||||||
</div>
|
<svg-icon icon-class="rectangle" class="svg-icon" />
|
||||||
<!-- 自由曲线 -->
|
</div>
|
||||||
<div
|
<!-- 自由曲线 -->
|
||||||
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'PlanarFreehandROI' ? 'tool-item-active' : '']"
|
<div
|
||||||
:title="$t('trials:reading:button:planarFreehandROI')"
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'PlanarFreehandROI' ? 'tool-item-active' : '']"
|
||||||
@click.prevent="setAnnotateToolActive('PlanarFreehandROI')"
|
:title="$t('trials:reading:button:planarFreehandROI')"
|
||||||
>
|
@click.prevent="setAnnotateToolActive('PlanarFreehandROI')"
|
||||||
<svg-icon icon-class="polygon" class="svg-icon" />
|
>
|
||||||
</div>
|
<svg-icon icon-class="polygon" class="svg-icon" />
|
||||||
<!-- <div
|
</div>
|
||||||
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'SplineROITool' ? 'tool-item-active' : '']"
|
<!-- <div
|
||||||
:title="$t('trials:reading:button:SplineROITool')"
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'SplineROITool' ? 'tool-item-active' : '']"
|
||||||
@click.prevent="setAnnotateToolActive('SplineROITool')"
|
:title="$t('trials:reading:button:SplineROITool')"
|
||||||
>
|
@click.prevent="setAnnotateToolActive('SplineROITool')"
|
||||||
<svg-icon icon-class="polygon" class="svg-icon" />
|
>
|
||||||
</div> -->
|
<svg-icon icon-class="polygon" class="svg-icon" />
|
||||||
|
</div> -->
|
||||||
|
|
||||||
<div
|
<div
|
||||||
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'Eraser' ? 'tool-item-active' : '']"
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'Eraser' ? 'tool-item-active' : '']"
|
||||||
:title="$t('trials:dicom-show:Eraser')"
|
:title="$t('trials:dicom-show:Eraser')"
|
||||||
@click.prevent="setAnnotateToolActive('Eraser')"
|
@click.prevent="setAnnotateToolActive('Eraser')"
|
||||||
>
|
>
|
||||||
<svg-icon icon-class="clear" class="svg-icon" />
|
<svg-icon icon-class="clear" class="svg-icon" />
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'Length' ? 'tool-item-active' : '']"
|
||||||
|
:title="$t('trials:nondicom-show:scale')"
|
||||||
|
@click.prevent="setAnnotateToolActive('Length')"
|
||||||
|
>
|
||||||
|
<svg-icon icon-class="length" class="svg-icon" />
|
||||||
|
</div>
|
||||||
|
<!-- 截图 -->
|
||||||
|
<!-- <div
|
||||||
|
class="tool-item"
|
||||||
|
:title="$t('trials:reading:button:screenShot')"
|
||||||
|
@click.prevent="saveImage"
|
||||||
|
>
|
||||||
|
<svg-icon icon-class="image" class="svg-icon" />
|
||||||
|
</div> -->
|
||||||
|
<!-- 重置 -->
|
||||||
|
<div
|
||||||
|
class="tool-item"
|
||||||
|
:title="$t('trials:reading:button:reset')"
|
||||||
|
@click.prevent="resetViewport"
|
||||||
|
>
|
||||||
|
<svg-icon icon-class="refresh" class="svg-icon" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'Length' ? 'tool-item-active' : '']"
|
<div>
|
||||||
:title="$t('trials:nondicom-show:scale')"
|
<el-button type="text" @click="previewConfig">{{ $t('trials:reading:button:customCfg') }}</el-button>
|
||||||
@click.prevent="setAnnotateToolActive('Length')"
|
|
||||||
>
|
|
||||||
<svg-icon icon-class="length" class="svg-icon" />
|
|
||||||
</div>
|
|
||||||
<!-- 截图 -->
|
|
||||||
<!-- <div
|
|
||||||
class="tool-item"
|
|
||||||
:title="$t('trials:reading:button:screenShot')"
|
|
||||||
@click.prevent="saveImage"
|
|
||||||
>
|
|
||||||
<svg-icon icon-class="image" class="svg-icon" />
|
|
||||||
</div> -->
|
|
||||||
<!-- 重置 -->
|
|
||||||
<div
|
|
||||||
class="tool-item"
|
|
||||||
:title="$t('trials:reading:button:reset')"
|
|
||||||
@click.prevent="resetViewport"
|
|
||||||
>
|
|
||||||
<svg-icon icon-class="refresh" class="svg-icon" />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- viewports -->
|
<!-- viewports -->
|
||||||
|
@ -237,6 +243,16 @@
|
||||||
<el-button type="primary" @click="saveForm">{{ $t('common:button:save') }}</el-button>
|
<el-button type="primary" @click="saveForm">{{ $t('common:button:save') }}</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog
|
||||||
|
v-if="personalConfigDialog.visible"
|
||||||
|
:visible.sync="personalConfigDialog.visible"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:title="personalConfigDialog.title"
|
||||||
|
width="600px"
|
||||||
|
>
|
||||||
|
<Others />
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
@ -258,6 +274,7 @@ import hardcodedMetaDataProvider from './../js/hardcodedMetaDataProvider'
|
||||||
import registerWebImageLoader from './../js/registerWebImageLoader'
|
import registerWebImageLoader from './../js/registerWebImageLoader'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
import Others from '@/views/trials/trials-panel/reading/dicoms/components/Others'
|
||||||
const { ViewportType } = Enums
|
const { ViewportType } = Enums
|
||||||
const renderingEngineId = 'myRenderingEngine'
|
const renderingEngineId = 'myRenderingEngine'
|
||||||
const {
|
const {
|
||||||
|
@ -278,6 +295,7 @@ const {
|
||||||
const { MouseBindings, Events: toolsEvents } = csToolsEnums
|
const { MouseBindings, Events: toolsEvents } = csToolsEnums
|
||||||
export default {
|
export default {
|
||||||
name: 'ImageViewer',
|
name: 'ImageViewer',
|
||||||
|
components: { Others },
|
||||||
props: {
|
props: {
|
||||||
relatedStudyInfo: {
|
relatedStudyInfo: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
@ -310,6 +328,7 @@ export default {
|
||||||
imageType: ['image/jpeg', 'image/jpg', 'image/bmp', 'image/png'],
|
imageType: ['image/jpeg', 'image/jpg', 'image/bmp', 'image/png'],
|
||||||
digitPlaces: 2,
|
digitPlaces: 2,
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
|
personalConfigDialog: { visible: false, title: this.$t('trials:reading:button:customCfg') }, // 个性化配置
|
||||||
form: {
|
form: {
|
||||||
length: null,
|
length: null,
|
||||||
annotationObj: {}
|
annotationObj: {}
|
||||||
|
@ -1180,6 +1199,9 @@ export default {
|
||||||
// 查看临床数据
|
// 查看临床数据
|
||||||
viewCD(id) {
|
viewCD(id) {
|
||||||
this.$emit('previewCD', id)
|
this.$emit('previewCD', id)
|
||||||
|
},
|
||||||
|
previewConfig() {
|
||||||
|
this.personalConfigDialog.visible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1194,11 +1216,17 @@ export default {
|
||||||
.tools-wrapper {
|
.tools-wrapper {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-bottom: 1px solid #727272;
|
border-bottom: 1px solid #727272;
|
||||||
color: #ddd;
|
color: #ddd;
|
||||||
|
padding: 0 5px;
|
||||||
|
.tools-left {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
.tool-item {
|
.tool-item {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
margin: 0 5px;
|
margin: 0 5px;
|
||||||
|
@ -1317,5 +1345,24 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
::v-deep .el-dialog{
|
||||||
|
background: #1e1e1e;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
color: #ddd;
|
||||||
|
.el-dialog__title{
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
|
.el-input .el-input__inner{
|
||||||
|
background-color: transparent;
|
||||||
|
color: #ddd;
|
||||||
|
border: 1px solid #5e5e5e;
|
||||||
|
}
|
||||||
|
.el-input.is-disabled .el-input__inner{
|
||||||
|
background-color: #646464a1;
|
||||||
|
}
|
||||||
|
.el-form-item__label{
|
||||||
|
color: #dfdfdf
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -172,7 +172,7 @@
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="scope.row.Type==='upload' && scope.row.Answers[task.VisitTaskId]">
|
<template 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 v-for="(url,index) in scope.row.Answers[task.VisitTaskId].split('|')" :key="url" style="margin-left: 5px;">
|
||||||
<el-button v-if="scope.row.Answers[task.VisitTaskId]" type="text" @click="preview(url)">
|
<el-button v-if="scope.row.Answers[task.VisitTaskId]" type="text" @click="preview(url)">
|
||||||
{{ `${$t('trials:noneDicom:title:attachment')}${index + 1}` }}
|
{{ `${$t('trials:noneDicom:title:attachment')}${index + 1}` }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span>
|
||||||
|
@ -239,6 +239,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { changeCalculationAnswer, getReadingReportEvaluation, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
|
import { changeCalculationAnswer, getReadingReportEvaluation, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
|
||||||
import { setSkipReadingCache } from '@/api/reading'
|
import { setSkipReadingCache } from '@/api/reading'
|
||||||
|
import { getAutoCutNextTask } from '@/api/user'
|
||||||
import const_ from '@/const/sign-code'
|
import const_ from '@/const/sign-code'
|
||||||
import SignForm from '@/views/trials/components/newSignForm'
|
import SignForm from '@/views/trials/components/newSignForm'
|
||||||
import PreviewFile from '@/components/PreviewFile/index'
|
import PreviewFile from '@/components/PreviewFile/index'
|
||||||
|
@ -618,15 +619,16 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 签名并确认
|
// 签名并确认
|
||||||
signConfirm(signInfo) {
|
async signConfirm(signInfo) {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
var params = {
|
try {
|
||||||
data: {
|
var params = {
|
||||||
visitTaskId: this.visitTaskId
|
data: {
|
||||||
},
|
visitTaskId: this.visitTaskId
|
||||||
signInfo: signInfo
|
},
|
||||||
}
|
signInfo: signInfo
|
||||||
submitDicomVisitTask(params).then(res => {
|
}
|
||||||
|
const res = await submitDicomVisitTask(params)
|
||||||
if (res.IsSuccess) {
|
if (res.IsSuccess) {
|
||||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
if (this.$refs['signForm']) {
|
if (this.$refs['signForm']) {
|
||||||
|
@ -634,43 +636,39 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.signVisible = false
|
this.signVisible = false
|
||||||
// window.location.reload()
|
|
||||||
// window.opener.postMessage('refreshTaskList', window.location)
|
|
||||||
|
|
||||||
// 设置当前任务阅片状态为已读
|
// 设置当前任务阅片状态为已读
|
||||||
this.readingTaskState = 2
|
this.readingTaskState = 2
|
||||||
this.taskInfo.ReadingTaskState = 2
|
this.taskInfo.ReadingTaskState = 2
|
||||||
localStorage.setItem('taskInfo', JSON.stringify(this.taskInfo))
|
localStorage.setItem('taskInfo', JSON.stringify(this.taskInfo))
|
||||||
store.dispatch('noneDicomReview/setCurrentTaskState', 2)
|
store.dispatch('noneDicomReview/setCurrentTaskState', 2)
|
||||||
// DicomEvent.$emit('setReadingState', 2)
|
|
||||||
window.opener.postMessage('refreshTaskList', window.location)
|
window.opener.postMessage('refreshTaskList', window.location)
|
||||||
this.$confirm(this.$t('trials:oncologyReview:title:msg2'), {
|
const res = await getAutoCutNextTask()
|
||||||
type: 'warning',
|
const isAutoTask = res.Result.AutoCutNextTask
|
||||||
distinguishCancelAndClose: true
|
if (isAutoTask) {
|
||||||
})
|
window.location.reload()
|
||||||
.then(() => {
|
} else {
|
||||||
// var token = getToken()
|
// '当前阅片任务已完成,是否进入下一个阅片任务?'
|
||||||
// var subjectCode = this.$router.currentRoute.query.subjectCode
|
this.$confirm(this.$t('trials:readingReport:message:msg4'), {
|
||||||
// var subjectId = this.$router.currentRoute.query.subjectId
|
type: 'warning',
|
||||||
// var trialId = this.$router.currentRoute.query.trialId
|
distinguishCancelAndClose: true
|
||||||
|
|
||||||
// this.$router.push({
|
|
||||||
// path: `/readingPage?subjectCode=${subjectCode}&subjectId=${subjectId}&trialId=${trialId}&TokenKey=${token}`
|
|
||||||
// })
|
|
||||||
// DicomEvent.$emit('getNextTask')
|
|
||||||
window.location.reload()
|
|
||||||
})
|
|
||||||
.catch(action => {
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
.then(() => {
|
||||||
|
window.location.reload()
|
||||||
|
})
|
||||||
|
.catch(action => {
|
||||||
|
// changeURLStatic('visitTaskId', this.visitTaskId)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}).catch(() => {
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
this.loading = false
|
this.loading = false
|
||||||
if (this.$refs['signForm'] && this.$refs['signForm'].btnLoading) {
|
if (this.$refs['signForm'] && this.$refs['signForm'].btnLoading) {
|
||||||
this.$refs['signForm'].btnLoading = false
|
this.$refs['signForm'].btnLoading = false
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
},
|
},
|
||||||
previewDicoms(task) {
|
previewDicoms(task) {
|
||||||
var token = getToken()
|
var token = getToken()
|
||||||
|
@ -822,6 +820,25 @@ export default {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
}
|
}
|
||||||
|
::v-deep .el-dialog{
|
||||||
|
background: #1e1e1e;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
color: #ddd;
|
||||||
|
.el-dialog__title{
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
|
.el-input .el-input__inner{
|
||||||
|
background-color: transparent;
|
||||||
|
color: #ddd;
|
||||||
|
border: 1px solid #5e5e5e;
|
||||||
|
}
|
||||||
|
.el-input.is-disabled .el-input__inner{
|
||||||
|
background-color: #646464a1;
|
||||||
|
}
|
||||||
|
.el-form-item__label{
|
||||||
|
color: #dfdfdf
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
::v-deep .el-switch__label{
|
::v-deep .el-switch__label{
|
||||||
color:#fff;
|
color:#fff;
|
||||||
|
|
Loading…
Reference in New Issue