836 lines
32 KiB
Plaintext
836 lines
32 KiB
Plaintext
<template>
|
||
<div class="report-wrapper">
|
||
<el-card v-loading="loading" shadow="never" style="display:flex;flex-direction: column;">
|
||
<div slot="header" class="clearfix report-header">
|
||
<h3 style="margin:0;padding:0;">电子影像病例报告表(eICRF)</h3>
|
||
<div style="margin-left:auto">
|
||
<el-switch
|
||
v-model="isShowDetail"
|
||
active-text="展开详情"
|
||
inactive-text="折叠详情"
|
||
style="margin-right:5px"
|
||
@change="handleShowDetail"
|
||
/>
|
||
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="getReportInfo">刷新</el-button>
|
||
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleSave(true)">保存</el-button>
|
||
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleConfirm">提交</el-button>
|
||
</div>
|
||
</div>
|
||
<div style="flex: 1">
|
||
<el-table
|
||
ref="reportList"
|
||
v-adaptive="{bottomOffset:160}"
|
||
: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"
|
||
>
|
||
<template slot-scope="scope">
|
||
<span v-if="scope.row.QuestionName">{{ scope.row.BlindName ? scope.row.QuestionName : scope.row.QuestionName }}</span>
|
||
<span
|
||
v-else
|
||
style="font-weight: bold;font-size: 16px;color: #f44336;"
|
||
>
|
||
{{ scope.row.GroupName }}
|
||
</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-for="task in visitTaskList"
|
||
:key="task.VisitTaskId"
|
||
prop="date"
|
||
show-overflow-tooltip
|
||
width="200px"
|
||
>
|
||
<template slot="header">
|
||
<div v-if="task.IsCurrentTask">
|
||
{{ task.BlindName }}
|
||
</div>
|
||
<div v-else>
|
||
<el-button type="text" size="small" @click="previewDicoms(task)">{{ task.BlindName }}</el-button>
|
||
{{ `(影像点击跳转)` }}
|
||
</div>
|
||
</template>
|
||
<template slot-scope="scope">
|
||
<template v-if="task.VisitTaskId === visitTaskId && (scope.row.Type==='input' || scope.row.Type==='number' || scope.row.Type==='select' || scope.row.Type==='textarea' || scope.row.Type==='radio')">
|
||
<template>
|
||
<!-- 输入框 -->
|
||
<div>
|
||
<el-input
|
||
v-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type==='input' || scope.row.Type==='textarea')"
|
||
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
|
||
size="mini"
|
||
/>
|
||
<el-input
|
||
v-else-if="scope.row.Type==='input' || scope.row.Type==='textarea'"
|
||
v-model="questionForm[scope.row.QuestionId]"
|
||
size="mini"
|
||
/>
|
||
<el-select
|
||
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='select'"
|
||
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
|
||
size="mini"
|
||
clearable
|
||
>
|
||
<template>
|
||
<el-option
|
||
v-for="val in scope.row.TypeValue.split('|')"
|
||
:key="val"
|
||
:label="val"
|
||
:value="val"
|
||
/>
|
||
</template>
|
||
</el-select>
|
||
<el-select
|
||
v-else-if="scope.row.Type==='select' || scope.row.Type==='radio'"
|
||
v-model="questionForm[scope.row.QuestionId]"
|
||
size="mini"
|
||
clearable
|
||
>
|
||
<template>
|
||
<el-option
|
||
v-for="val in scope.row.TypeValue.split('|')"
|
||
:key="val"
|
||
:label="val"
|
||
:value="val"
|
||
/>
|
||
</template>
|
||
</el-select>
|
||
<el-input
|
||
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='number' && (scope.row.xfIndex || scope.row.xfIndex === 0)"
|
||
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
|
||
:disabled="scope.row.DataSource === 1"
|
||
size="mini"
|
||
@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-else-if="scope.row.ValueType === 2">%</template>
|
||
</el-input>
|
||
<el-input
|
||
v-else-if="scope.row.Type==='number'"
|
||
v-model="questionForm[scope.row.QuestionId]"
|
||
:disabled="scope.row.DataSource === 1"
|
||
size="mini"
|
||
@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-else-if="scope.row.ValueType === 2">%</template>
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</template>
|
||
<template v-else-if="scope.row.Type === 'upload'">
|
||
<div style="display: flex;justify-content: space-between;align-items: center">
|
||
<!-- <span style="color:#00D1B2;cursor: pointer">-->
|
||
<!-- {{scope.row.Answers[task.VisitTaskId] === "" ? "0" : scope.row.Answers[task.VisitTaskId].split('|').length}}-->
|
||
<!-- </span>-->
|
||
<!-- <span v-if="task.VisitTaskId === visitTaskId" class="el-icon-plus" style="cursor:pointer;font-weight: bold;color:#f0c78a" circle title="添加"></span>-->
|
||
<CustomizeReportPageUpload
|
||
v-if="scope.row.Type==='upload' && (scope.row.xfIndex || scope.row.xfIndex === 0)"
|
||
:visitTaskId="visitTaskId"
|
||
:question="scope.row"
|
||
:task="task"
|
||
:readingTaskState="readingTaskState"
|
||
: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)}"
|
||
></CustomizeReportPageUpload>
|
||
<CustomizeReportPageUpload
|
||
v-else-if="scope.row.Type==='upload'"
|
||
:visitTaskId="visitTaskId"
|
||
:question="scope.row"
|
||
:task="task"
|
||
:readingTaskState="readingTaskState"
|
||
:initUrl="questionForm[scope.row.QuestionId]"
|
||
@setImageUrl="(url) => {setImageUrl(scope.row.QuestionId, scope.row.xfIndex, scope.row.TableQuestionId, url)}"
|
||
></CustomizeReportPageUpload>
|
||
</div>
|
||
</template>
|
||
<template v-else-if="scope.row.QuestionType=== 22">
|
||
{{ scope.row.Answers[task.VisitTaskId] === '-1' ? '未知' : scope.row.Answers[task.VisitTaskId] }}
|
||
</template>
|
||
<template v-else-if="scope.row.DictionaryCode">
|
||
{{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
|
||
</template>
|
||
<template v-else-if="CriterionType === 10">
|
||
{{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]}` }}
|
||
</template>
|
||
<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}` }}
|
||
</template>
|
||
<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]}%` }}
|
||
</template>
|
||
<template v-else-if="scope.row.Answers && scope.row.Answers.hasOwnProperty(task.VisitTaskId)">
|
||
{{ scope.row.Answers[task.VisitTaskId] }}
|
||
</template>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</div>
|
||
</el-card>
|
||
|
||
<!-- 签名框 -->
|
||
<el-dialog
|
||
v-if="signVisible"
|
||
:visible.sync="signVisible"
|
||
:close-on-click-modal="false"
|
||
width="600px"
|
||
custom-class="base-dialog-wrapper"
|
||
>
|
||
<div slot="title">
|
||
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
|
||
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span>
|
||
</div>
|
||
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||
</el-dialog>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
import { changeCalculationAnswer, getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
|
||
import DicomEvent from '../components/DicomEvent'
|
||
import CustomizeReportPageUpload from './CustomizeReportPageUpload'
|
||
import const_ from '@/const/sign-code'
|
||
import SignForm from '@/views/trials/components/newSignForm'
|
||
import { getToken } from '@/utils/auth'
|
||
import store from '@/store'
|
||
export default {
|
||
name: 'CustomizeReportPage',
|
||
components: { SignForm, CustomizeReportPageUpload },
|
||
props: {
|
||
visitTaskId: {
|
||
type: String,
|
||
required: true
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
currentUser: zzSessionStorage.getItem('userName'),
|
||
signVisible: false,
|
||
signCode: null,
|
||
visitTaskList: [],
|
||
taskQuestions: [],
|
||
loading: false,
|
||
answers: [],
|
||
readingTaskState: 2,
|
||
tumorEvaluate: null,
|
||
currentEvaluateResult: null,
|
||
isExistDisease: null,
|
||
currentExistDisease: null,
|
||
currentTaskReason: '',
|
||
answerArr: [],
|
||
questions: [],
|
||
isShowDetail: false,
|
||
CriterionType: 0,
|
||
CalculationList: [],
|
||
TrialReadingCriterionId: null,
|
||
tableAnswers: {},
|
||
questionForm: {},
|
||
questionId: null
|
||
}
|
||
},
|
||
watch: {
|
||
questionForm: {
|
||
deep: true,
|
||
immediate: true,
|
||
handler(v, oldv) {
|
||
try {
|
||
if (!v[this.questionId] || !oldv[this.questionId]) return
|
||
} catch (e) {
|
||
}
|
||
this.formItemNumberChange(this.questionId, false)
|
||
}
|
||
},
|
||
taskQuestions() {
|
||
this.$nextTick(() => {
|
||
this.setScrollTop()
|
||
})
|
||
}
|
||
},
|
||
mounted() {
|
||
this.CriterionType = parseInt(localStorage.getItem('CriterionType'))
|
||
this.TrialReadingCriterionId = this.$route.query.TrialReadingCriterionId
|
||
window.addEventListener('resize', this.handleResize)
|
||
DicomEvent.$on('getReportInfo', isRefresh => {
|
||
if (!isRefresh) return
|
||
this.getReportInfo()
|
||
})
|
||
this.getReportInfo()
|
||
this.getQuestionCalculateRelation()
|
||
},
|
||
beforeDestroy() {
|
||
DicomEvent.$off('getReportInfo')
|
||
},
|
||
methods: {
|
||
setImageUrl(qid, index, tqid, url, RowId) {
|
||
if (index || index === 0) {
|
||
// 表格问题
|
||
this.$set(this.questionForm[qid][index], tqid, url)
|
||
this.$set(this.questionForm[qid][index], tqid + '_RowId', RowId)
|
||
console.log(this.questionForm[qid][index][tqid])
|
||
// this.questionForm[qid][index][tqid] = url
|
||
} else {
|
||
// 非表格问题
|
||
this.questionForm[qid] = url
|
||
}
|
||
},
|
||
getTagterAnswers(list, questionId) {
|
||
let Answers
|
||
list.forEach(v => {
|
||
if (v.QuestionId === questionId) {
|
||
console.log(v.QuestionName)
|
||
return Object.assign({}, v.Answers)
|
||
} else if (v.Childrens.length > 0){
|
||
return this.getTagterAnswers(v.Childrens, questionId)
|
||
}
|
||
})
|
||
},
|
||
formItemNumberChange(questionId, isTable) {
|
||
if (isTable) {
|
||
this.CalculationList.forEach((v, i) => {
|
||
var find = v.CalculateQuestionList.filter(o => {
|
||
return o.QuestionId === questionId
|
||
})
|
||
// find的自动计算值number
|
||
if (find) {
|
||
var num = this.logic(v)
|
||
if (num !== false) {
|
||
this.$set(this.questionForm, v.QuestionId, num)
|
||
// this.$emit('setFormItemData', { key: v.QuestionId, val: num })
|
||
}
|
||
}
|
||
})
|
||
} else {
|
||
this.CalculationList.forEach(v => {
|
||
var find = v.CalculateQuestionList.filter(o => {
|
||
return o.TableQuestionId === questionId
|
||
})
|
||
// find的自动计算值number
|
||
if (find) {
|
||
var num = this.logic(v)
|
||
if (num !== false) {
|
||
this.$set(this.questionForm, v.QuestionId, num)
|
||
// this.$emit('setFormItemData', { key: v.QuestionId, val: num })
|
||
}
|
||
}
|
||
})
|
||
}
|
||
// this.$emit('formItemNumberChange')
|
||
},
|
||
getTableAnswers(QuestionId, list) {
|
||
var arr = []
|
||
window.xfList = list
|
||
list.forEach((v, i) => {
|
||
var obj = {}
|
||
v.Childrens.forEach((o) => {
|
||
console.log(o , i)
|
||
this.$set(o, 'xfIndex', i)
|
||
obj[o.TableQuestionId + '_RowId'] = o.RowId
|
||
obj[o.TableQuestionId] = o.Answers[this.visitTaskId]
|
||
})
|
||
arr.push(obj)
|
||
})
|
||
console.log('arr', arr)
|
||
return arr
|
||
},
|
||
InitVisitTaskQuestionForm() {
|
||
this.taskQuestions.map((v, i) => {
|
||
if (v.Type === 'group' && v.Childrens.length === 0 && v.Type !== 'table') return
|
||
if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary' && v.Type !== 'table' && v.Type !== 'number') {
|
||
this.$set(this.questionForm, v.QuestionId, v.Answers[this.visitTaskId])
|
||
}
|
||
if (v.Type === 'table') {
|
||
var tableAnswers = this.getTableAnswers(v.QuestionId, v.Childrens, i)
|
||
this.$set(this.questionForm, v.QuestionId, tableAnswers)
|
||
// this.$set(v, 'xfIndex', i)
|
||
}
|
||
if (v.Type === 'number') {
|
||
this.$set(this.questionForm, v.QuestionId, v.Answers[this.visitTaskId] === '' ? '0' : v.Answers[this.visitTaskId])
|
||
}
|
||
if (v.Childrens.length > 0) {
|
||
this.setChild(v.Childrens)
|
||
}
|
||
})
|
||
console.log(this.questionForm)
|
||
},
|
||
setChild(obj) {
|
||
obj.forEach((i, index) => {
|
||
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id && i.Type !== 'table') {
|
||
this.$set(this.questionForm, i.QuestionId, i.Answers[this.visitTaskId])
|
||
}
|
||
if (i.Type === 'table') {
|
||
var tableAnswers = this.getTableAnswers(i.QuestionId, i.Childrens, index)
|
||
this.$set(this.questionForm, i.QuestionId, tableAnswers)
|
||
}
|
||
if (i.Type === 'number') {
|
||
this.$set(this.questionForm, i.QuestionId, i.Answers[this.visitTaskId] === '' ? '0' : i.Answers[this.visitTaskId])
|
||
}
|
||
if (i.Childrens && i.Childrens.length > 0 && i.Type !== 'table') {
|
||
this.setChild(i.Childrens)
|
||
}
|
||
})
|
||
},
|
||
getQuestionCalculateRelation() {
|
||
getQuestionCalculateRelation({
|
||
TrialReadingCriterionId: this.TrialReadingCriterionId
|
||
}).then(res => {
|
||
this.CalculationList = res.Result
|
||
})
|
||
},
|
||
logic(rules, num = 0) {
|
||
try {
|
||
if (rules.CalculateQuestionList.length === 0) {
|
||
return false
|
||
}
|
||
rules.CalculateQuestionList.forEach((o, i) => {
|
||
if (i === 0) {
|
||
if (rules.CustomCalculateMark > 4) {
|
||
switch (rules.CustomCalculateMark) {
|
||
case 5:
|
||
this.questionForm[o.QuestionId].forEach((q, qi) => {
|
||
if (qi === 0) {
|
||
num = parseFloat(q[o.TableQuestionId])
|
||
} else {
|
||
num *= parseFloat(q[o.TableQuestionId])
|
||
}
|
||
})
|
||
break;
|
||
case 6:
|
||
this.questionForm[o.QuestionId].forEach((q, qi) => {
|
||
if (qi === 0) {
|
||
num = parseFloat(q[o.TableQuestionId])
|
||
} else {
|
||
num += parseFloat(q[o.TableQuestionId])
|
||
}
|
||
})
|
||
break;
|
||
case 7:
|
||
this.questionForm[o.QuestionId].forEach((q, qi) => {
|
||
if (qi === 0) {
|
||
num = parseFloat(q[o.TableQuestionId])
|
||
} else {
|
||
num += parseFloat(q[o.TableQuestionId])
|
||
}
|
||
})
|
||
num = this.questionForm[o.QuestionId].length === 0 ? 0 : num / this.questionForm[o.QuestionId].length
|
||
break;
|
||
case 8:
|
||
var arr = []
|
||
this.questionForm[o.QuestionId].forEach(q => {
|
||
arr.push(q[o.TableQuestionId])
|
||
})
|
||
num = arr.length === 0 ? 0 : Math.max(...arr)
|
||
break;
|
||
case 9:
|
||
var arr = []
|
||
this.questionForm[o.QuestionId].forEach(q => {
|
||
arr.push(q[o.TableQuestionId])
|
||
})
|
||
num = arr.length === 0 ? 0 : Math.min(...arr)
|
||
break;
|
||
}
|
||
} else {
|
||
num = parseFloat(this.questionForm[o.TableQuestionId])
|
||
}
|
||
} else {
|
||
switch (rules.CustomCalculateMark) {
|
||
case 1:
|
||
num += parseFloat(this.questionForm[o.TableQuestionId])
|
||
break;
|
||
case 2:
|
||
num -= parseFloat(this.questionForm[o.TableQuestionId])
|
||
break;
|
||
case 3:
|
||
num *= parseFloat(this.questionForm[o.TableQuestionId])
|
||
break;
|
||
case 4:
|
||
num /= parseFloat(this.questionForm[o.TableQuestionId])
|
||
break;
|
||
}
|
||
}
|
||
})
|
||
} catch (e) {
|
||
console.log(e)
|
||
}
|
||
var digitPlaces = parseInt(localStorage.getItem('digitPlaces'))
|
||
if (rules.ValueType === 2) {
|
||
num = num * 100
|
||
}
|
||
return num.toFixed(digitPlaces)
|
||
},
|
||
getReportInfo() {
|
||
this.loading = true
|
||
var params = {
|
||
visitTaskId: this.visitTaskId,
|
||
trialId: this.$router.currentRoute.query.trialId
|
||
}
|
||
|
||
getReadingReportEvaluation(params).then(res => {
|
||
this.readingTaskState = res.Result.ReadingTaskState
|
||
this.tumorEvaluate = res.Result.CalculateResult.TumorEvaluate ? parseInt(res.Result.CalculateResult.TumorEvaluate) : null
|
||
this.isExistDisease = res.Result.CalculateResult.IsExistDisease ? parseInt(res.Result.CalculateResult.IsExistDisease) : null
|
||
this.answerArr = []
|
||
this.questions = res.Result.TaskQuestions.concat()
|
||
var taskQuestions = this.getQuestions(res.Result.TaskQuestions, !this.isShowDetail, null, null)
|
||
this.taskQuestions = []
|
||
taskQuestions.forEach(item => {
|
||
this.$set(this.taskQuestions, this.taskQuestions.length, item)
|
||
})
|
||
this.visitTaskList = res.Result.VisitTaskList
|
||
console.log(this.taskQuestions)
|
||
this.InitVisitTaskQuestionForm()
|
||
this.setScrollTop()
|
||
this.loading = false
|
||
}).catch(() => { this.loading = false })
|
||
},
|
||
setScrollTop(a) {
|
||
setTimeout(() => { this.$refs.reportList.bodyWrapper.scrollTop = this.$refs.reportList.bodyWrapper.scrollHeight }, 50)
|
||
this.$refs.reportList.bodyWrapper.scrollTop = this.$refs.reportList.bodyWrapper.scrollHeight
|
||
},
|
||
getQuestions(questions, isNTFilterLength, lesionType, isLymphNodes) {
|
||
const arr = []
|
||
if (questions.length !== 0) {
|
||
questions.forEach((item) => {
|
||
// 过滤病灶标识 病灶名称 部位 器官 位置 是否淋巴结
|
||
// 非靶病灶和新病灶 过滤长径和短径信息
|
||
// 非淋巴结靶病灶 过滤短径
|
||
|
||
lesionType = item.LesionType
|
||
var filterArr = []
|
||
if ((item.LesionType === 1 || item.LesionType === 2) && isNTFilterLength) {
|
||
filterArr = [0, 1, 3, 4, 5, 6, 2, 8, 10]
|
||
} else {
|
||
filterArr = [3, 4, 5, 6, 2, 8, 10]
|
||
}
|
||
if (lesionType === 0 && isLymphNodes === 0 && !this.isShowDetail && this.CriterionType === 1) {
|
||
filterArr.push(1)
|
||
}
|
||
if (!(filterArr.includes(item.QuestionMark))) {
|
||
const obj = item
|
||
this.$set(obj, 'Answers', {})
|
||
// obj.Answers = {}
|
||
if (item.RowIndex > 0) {
|
||
var idx = item.Childrens.findIndex(i => i.QuestionMark === 8)
|
||
var idxLoc = item.Childrens.findIndex(i => i.QuestionMark === 10)
|
||
|
||
if (idx > -1) {
|
||
if (item.Childrens[idx].Answer.length > 0) {
|
||
var k = item.Childrens[idx].Answer.findIndex(v => v.Answer !== '')
|
||
var part = ''
|
||
if (obj.IsCanEditPosition) {
|
||
part = `${item.Childrens[idx].Answer[k].Answer}--${item.Childrens[idxLoc].Answer[k].Answer}`
|
||
} else {
|
||
part = `${item.Childrens[idx].Answer[k].Answer}`
|
||
}
|
||
|
||
if (item.SplitOrMergeLesionName && k > -1) {
|
||
obj.QuestionName = `${obj.QuestionName} --${part} (Split from ${item.SplitOrMergeLesionName})`
|
||
// obj.QuestionName = `${obj.QuestionName} `
|
||
} else if (!item.SplitOrMergeLesionName && k > -1) {
|
||
obj.QuestionName = `${obj.QuestionName} --${part}`
|
||
// obj.QuestionName = `${obj.QuestionName} `
|
||
} else {
|
||
obj.QuestionName = `${obj.QuestionName} `
|
||
}
|
||
|
||
if (this.CriterionType === 1) {
|
||
var idxLymphNode = item.Childrens.findIndex(i => i.QuestionMark === 2)
|
||
if (idxLymphNode > -1) {
|
||
isLymphNodes = item.Childrens[idxLymphNode].Answer[k].Answer ? parseInt(item.Childrens[idxLymphNode].Answer[k].Answer) : null
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
var digitPlaces = parseInt(localStorage.getItem('digitPlaces')) || 0
|
||
item.Answer.forEach(i => {
|
||
if (item.DictionaryCode) {
|
||
this.$set(obj.Answers, i.VisitTaskId, i.Answer ? parseInt(i.Answer) : null)
|
||
// obj.Answers[i.VisitTaskId] = i.Answer ? parseInt(i.Answer) : null
|
||
} else {
|
||
if (item.Type === 'number') {
|
||
this.$set(obj.Answers, i.VisitTaskId, parseFloat(i.Answer).toFixed(digitPlaces))
|
||
} else {
|
||
this.$set(obj.Answers, i.VisitTaskId, i.Answer)
|
||
}
|
||
// obj.Answers[i.VisitTaskId] = i.Answer
|
||
}
|
||
})
|
||
if (item.Childrens.length >= 1) {
|
||
obj.Childrens = this.getQuestions(item.Childrens, isNTFilterLength, lesionType, isLymphNodes)
|
||
}
|
||
arr.push(obj)
|
||
}
|
||
})
|
||
}
|
||
return arr
|
||
},
|
||
handleShowDetail(val) {
|
||
this.getReportInfo()
|
||
// this.taskQuestions = this.getQuestions(res.Result.TaskQuestions, !this.isShowDetail, null)
|
||
},
|
||
handleExistDiseaseChange(val) {
|
||
// this.currentExistDisease = parseInt(val)
|
||
|
||
if (val === this.isExistDisease && this.tumorEvaluate === this.currentEvaluateResult) {
|
||
this.currentTaskReason = ''
|
||
this.evaluateReasonChange('')
|
||
}
|
||
var idx = this.answerArr.findIndex(i => i.questionType === 15)
|
||
if (idx > -1) {
|
||
this.answerArr[idx].answer = val
|
||
}
|
||
},
|
||
handleEvaluateResultChange(val) {
|
||
// this.currentEvaluateResult = parseInt(val)
|
||
if (val === this.tumorEvaluate && this.isExistDisease === this.currentExistDisease) {
|
||
this.currentTaskReason = ''
|
||
this.evaluateReasonChange('')
|
||
}
|
||
var idx = this.answerArr.findIndex(i => i.questionType === 13)
|
||
if (idx > -1) {
|
||
this.answerArr[idx].answer = val
|
||
}
|
||
},
|
||
|
||
evaluateReasonChange(val) {
|
||
var idx = this.answerArr.findIndex(i => i.questionType === 14)
|
||
if (idx > -1) {
|
||
this.answerArr[idx].answer = val
|
||
}
|
||
},
|
||
async handleConfirm() {
|
||
await this.handleSave(false)
|
||
await this.verifyVisitTaskQuestions()
|
||
const { ImageAssessmentReportConfirmation } = const_.processSignature
|
||
this.signCode = ImageAssessmentReportConfirmation
|
||
this.signVisible = true
|
||
},
|
||
verifyVisitTaskQuestions() {
|
||
return new Promise((resolve, reject) => {
|
||
this.loading = true
|
||
verifyVisitTaskQuestions({ visitTaskId: this.visitTaskId }).then(res => {
|
||
this.loading = false
|
||
resolve()
|
||
}).catch(() => {
|
||
this.loading = false
|
||
reject()
|
||
})
|
||
})
|
||
},
|
||
handleResize() {
|
||
this.$nextTick(() => {
|
||
this.$refs.reportList.doLayout()
|
||
})
|
||
},
|
||
// 关闭签名框
|
||
closeSignDialog(isSign, signInfo) {
|
||
if (isSign) {
|
||
this.signConfirm(signInfo)
|
||
} else {
|
||
this.signVisible = false
|
||
}
|
||
},
|
||
// 签名并确认
|
||
signConfirm(signInfo) {
|
||
this.loading = true
|
||
var params = {
|
||
data: {
|
||
visitTaskId: this.visitTaskId
|
||
},
|
||
signInfo: signInfo
|
||
}
|
||
submitDicomVisitTask(params).then(res => {
|
||
if (res.IsSuccess) {
|
||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||
if (this.$refs['signForm']) {
|
||
this.$refs['signForm'].btnLoading = false
|
||
}
|
||
|
||
this.signVisible = false
|
||
// window.location.reload()
|
||
// window.opener.postMessage('refreshTaskList', window.location)
|
||
|
||
// 设置当前任务阅片状态为已读
|
||
this.readingTaskState = 2
|
||
store.dispatch('reading/setVisitTaskReadingTaskState', { visitTaskId: this.visitTaskId, readingTaskState: 2 })
|
||
DicomEvent.$emit('setReadingState', 2)
|
||
window.opener.postMessage('refreshTaskList', window.location)
|
||
this.$confirm('当前阅片任务已完成,是否进入下一个阅片任务?', {
|
||
type: 'warning',
|
||
distinguishCancelAndClose: true
|
||
})
|
||
.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')
|
||
})
|
||
.catch(action => {
|
||
|
||
})
|
||
}
|
||
this.loading = false
|
||
}).catch(() => {
|
||
this.loading = false
|
||
if (this.$refs['signForm'] && this.$refs['signForm'].btnLoading) {
|
||
this.$refs['signForm'].btnLoading = false
|
||
}
|
||
})
|
||
},
|
||
previewDicoms(task) {
|
||
var token = getToken()
|
||
var subjectCode = this.$router.currentRoute.query.subjectCode
|
||
var subjectId = this.$router.currentRoute.query.subjectId
|
||
var trialId = this.$router.currentRoute.query.trialId
|
||
var isReadingTaskViewInOrder = this.$router.currentRoute.query.isReadingTaskViewInOrder
|
||
var criterionType = this.$router.currentRoute.query.criterionType
|
||
var readingTool = this.$router.currentRoute.query.readingTool
|
||
var path = `/readingDicoms?trialId=${trialId}&subjectCode=${subjectCode}&subjectId=${subjectId}&visitTaskId=${task.VisitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&TokenKey=${token}`
|
||
const routeData = this.$router.resolve({ path })
|
||
window.open(routeData.href, '_blank')
|
||
},
|
||
handleSave(isPrompt) {
|
||
return new Promise((resolve, reject) => {
|
||
this.loading = true
|
||
var answers = []
|
||
var tableQuestionAnswer = []
|
||
for (const k in this.questionForm) {
|
||
if (this.questionForm[k] instanceof Array) {
|
||
this.questionForm[k].forEach((v, i) => {
|
||
Object.keys(v).forEach(o => {
|
||
console.log(o)
|
||
if (o.indexOf('_RowId') === -1) {
|
||
tableQuestionAnswer.push({
|
||
questionId: k,
|
||
answer: v[o],
|
||
tableQuestionId: o,
|
||
rowId: v[o+'_RowId']
|
||
})
|
||
}
|
||
})
|
||
})
|
||
// tableQuestionAnswer.push({})
|
||
} else {
|
||
answers.push({ questionId: k, answer: this.questionForm[k].toString() })
|
||
}
|
||
}
|
||
var params = {
|
||
visitTaskId: this.visitTaskId,
|
||
questionAnswer: answers,
|
||
tableQuestionAnswer: tableQuestionAnswer
|
||
}
|
||
console.log(params)
|
||
changeCalculationAnswer(params).then(res => {
|
||
if (isPrompt) {
|
||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||
}
|
||
this.loading = false
|
||
resolve()
|
||
}).catch(() => {
|
||
this.loading = false
|
||
reject()
|
||
})
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.report-wrapper{
|
||
|
||
height: 100%;
|
||
// background-color: #fff;
|
||
background-color: #000;
|
||
::-webkit-scrollbar {
|
||
width: 7px;
|
||
height: 7px;
|
||
}
|
||
::-webkit-scrollbar-thumb {
|
||
border-radius: 10px;
|
||
background: #d0d0d0;
|
||
}
|
||
.report-header{
|
||
display: flex;
|
||
}
|
||
.el-card{
|
||
background-color: #000;
|
||
color: #ffffff;
|
||
border:none;
|
||
}
|
||
// >>>.el-table__cell{
|
||
// background-color: #000;
|
||
// color: #ffffff;
|
||
// }
|
||
// >>>.el-table{
|
||
// background-color: #000;
|
||
// color: #ffffff;
|
||
// }
|
||
// >>>.el-table__cell{
|
||
// background-color: #000;
|
||
// color: #ffffff;
|
||
// }
|
||
|
||
>>>.el-table, .el-table__expanded-cell {
|
||
background-color: #000;
|
||
color: #fff;
|
||
border-color:#444444;
|
||
}
|
||
|
||
>>>.el-table th, .el-table tr {
|
||
background-color: #000;
|
||
color: #fff;
|
||
border-color:#444444;
|
||
}
|
||
>>>.el-table__body tr > td{
|
||
background-color:#000 !important;
|
||
color: #fff;
|
||
border-color:#444444;
|
||
}
|
||
>>>.el-table__body tr:hover > td{
|
||
background-color:#858282 !important;
|
||
color: #fff;
|
||
border-color:#444444;
|
||
}
|
||
>>>.el-table--border th.gutter:last-of-type{
|
||
border: none;
|
||
}
|
||
>>>.el-card__header{
|
||
border: none;
|
||
padding: 10px;
|
||
}
|
||
>>>.el-upload-list--picture-card .el-upload-list__item{
|
||
width: 30px;
|
||
height: 30px;
|
||
}
|
||
>>>.el-upload--picture-card{
|
||
width: 30px;
|
||
height: 30px;
|
||
line-height: 40px;
|
||
}
|
||
}
|
||
.disabled{
|
||
>>>.el-upload--picture-card {
|
||
display: none;
|
||
}
|
||
}
|
||
.uploadWrapper{
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
}
|
||
</style>
|