856 lines
30 KiB
Plaintext
856 lines
30 KiB
Plaintext
<template>
|
||
<div class="ImageReviewTask-list app-container">
|
||
<el-collapse v-model="activeNames">
|
||
<!-- <el-collapse-item
|
||
title="Image Quality Assessment"
|
||
name="ImageQualityAssessment"
|
||
> -->
|
||
<el-form ref="qualifiedForm" :model="reportResult">
|
||
<el-form-item
|
||
prop="Qualified"
|
||
label="Qualified for Review:"
|
||
label-width="200px"
|
||
:rules="[{ required: true, message: '', trigger: 'blur' }]"
|
||
>
|
||
<el-radio-group
|
||
v-model="reportResult.Qualified"
|
||
:disabled="isReportSaved"
|
||
>
|
||
<el-radio :label="true">Qualified</el-radio>
|
||
<el-radio :label="false">Non-Qualified</el-radio>
|
||
</el-radio-group>
|
||
|
||
<div v-if="reportResult.Qualified===false">
|
||
<el-radio-group
|
||
v-model="reportResult.AffectRead"
|
||
:disabled="isReportSaved"
|
||
>
|
||
<el-radio :label="true">Affect</el-radio>
|
||
<el-radio :label="false">Non-Affect</el-radio>
|
||
</el-radio-group>
|
||
|
||
<el-input
|
||
v-model="reportResult.AffectReadNote"
|
||
type="textarea"
|
||
:rows="4"
|
||
placeholder="Please input Reason Or Note"
|
||
/>
|
||
</div>
|
||
</el-form-item>
|
||
</el-form>
|
||
<!-- </el-collapse-item> -->
|
||
|
||
<el-collapse-item
|
||
title="Non-nodular Target Lesions (Non-lymph Node Target Lesions)"
|
||
name="Non-lymphNodeTarget"
|
||
disabled
|
||
>
|
||
<el-table
|
||
ref="Non-lymphNodeTarget"
|
||
:data="NonlymphNodeTargetList"
|
||
stripe
|
||
size="small"
|
||
>
|
||
<el-table-column type="index" width="60" />
|
||
<el-table-column
|
||
prop="TULNKID"
|
||
label="Lesion No"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
/>
|
||
<el-table-column
|
||
prop="Anatomy"
|
||
label="Anatomy"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
>
|
||
<template slot-scope="scope">{{
|
||
scope.row.TULOC + ' ' + scope.row.TULAT + ' ' + scope.row.TUDIR
|
||
}}</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="TRORRES"
|
||
label="Long Axis Measurement(mm)"
|
||
show-overflow-tooltip
|
||
min-width="150"
|
||
/>
|
||
<el-table-column label="Anatomy Description" min-width="100">
|
||
<template slot-scope="scope">
|
||
<el-input
|
||
v-model="scope.row.LocDescription"
|
||
type="text"
|
||
placeholder=""
|
||
size="small"
|
||
:disabled="isReportSaved"
|
||
/>
|
||
</template>
|
||
</el-table-column>
|
||
|
||
<el-table-column
|
||
prop="Note"
|
||
label="Comments"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
>
|
||
<template slot-scope="scope">
|
||
<el-input
|
||
v-model="scope.row.Note"
|
||
type="text"
|
||
placeholder=""
|
||
size="small"
|
||
:disabled="isReportSaved"
|
||
/>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</el-collapse-item>
|
||
|
||
<el-collapse-item
|
||
title="Nodular Target Lesions (Lymph Node Target Lesions)"
|
||
name="LymphNodeTarget"
|
||
disabled
|
||
>
|
||
<el-table
|
||
ref="Non-lymphNodeTarget"
|
||
:data="LymphNodeTargetList"
|
||
stripe
|
||
size="small"
|
||
>
|
||
<el-table-column type="index" width="60" />
|
||
<el-table-column
|
||
prop="TULNKID"
|
||
label="Lesion No"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
/>
|
||
<el-table-column
|
||
prop="Anatomy"
|
||
label="Anatomy"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
>
|
||
<template slot-scope="scope">{{
|
||
scope.row.TULOC + ' ' + scope.row.TULAT + ' ' + scope.row.TUDIR
|
||
}}</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="TRORRES"
|
||
label="Short Axis Measurement(mm)"
|
||
show-overflow-tooltip
|
||
min-width="150"
|
||
/>
|
||
<el-table-column
|
||
prop="LocDescription"
|
||
label="Anatomy Description"
|
||
min-width="100"
|
||
>
|
||
<template slot-scope="scope">
|
||
<el-input
|
||
v-model="scope.row.LocDescription"
|
||
type="text"
|
||
placeholder=""
|
||
size="small"
|
||
:disabled="isReportSaved"
|
||
/>
|
||
</template>
|
||
</el-table-column>
|
||
|
||
<el-table-column
|
||
prop="Note"
|
||
label="Comments"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
>
|
||
<template slot-scope="scope">
|
||
<el-input
|
||
v-model="scope.row.Note"
|
||
type="text"
|
||
placeholder=""
|
||
size="small"
|
||
:disabled="isReportSaved"
|
||
/>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</el-collapse-item>
|
||
|
||
<el-collapse-item
|
||
title="Non-target Lesion"
|
||
name="Non-targetLesion"
|
||
disabled
|
||
>
|
||
<el-table
|
||
ref="Non-lymphNodeTarget"
|
||
:data="NontargetLesionList"
|
||
stripe
|
||
size="small"
|
||
>
|
||
<el-table-column type="index" width="60" />
|
||
<el-table-column
|
||
prop="TULNKID"
|
||
label="Lesion No"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
/>
|
||
<el-table-column
|
||
prop="Anatomy"
|
||
label="Anatomy"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
>
|
||
<template slot-scope="scope">{{
|
||
scope.row.TULOC + ' ' + scope.row.TULAT + ' ' + scope.row.TUDIR
|
||
}}</template>
|
||
</el-table-column>
|
||
|
||
<el-table-column
|
||
prop="LocDescription"
|
||
label="Anatomy Description"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
>
|
||
<template slot-scope="scope">
|
||
<el-input
|
||
v-model="scope.row.LocDescription"
|
||
type="text"
|
||
placeholder=""
|
||
size="small"
|
||
:disabled="isReportSaved"
|
||
/>
|
||
</template>
|
||
</el-table-column>
|
||
|
||
<el-table-column
|
||
prop="Note"
|
||
label="Comments"
|
||
show-overflow-tooltip
|
||
min-width="100"
|
||
:disabled="isReportSaved"
|
||
>
|
||
<template slot-scope="scope">
|
||
<el-input
|
||
v-model="scope.row.Note"
|
||
type="text"
|
||
placeholder=""
|
||
size="small"
|
||
/>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</el-collapse-item>
|
||
|
||
<el-collapse-item
|
||
title="Measurements Calculation"
|
||
name="MeasurementsCalculation"
|
||
disabled
|
||
>
|
||
<el-row :gutter="20">
|
||
<el-col
|
||
:span="6"
|
||
><div class="grid-content bg-purple">
|
||
<span style="margin-left: 10px">SOD(mm):</span>
|
||
<el-input v-model="SOD" disabled /></div></el-col>
|
||
<el-col
|
||
:span="6"
|
||
:offset="6"
|
||
><div class="grid-content bg-purple">
|
||
<span style="margin-left: 10px">Non-nodular Lesions SOD(mm):</span>
|
||
<el-input v-model="NonnodularLesionsSOD" disabled /></div></el-col>
|
||
</el-row>
|
||
</el-collapse-item>
|
||
|
||
<el-collapse-item
|
||
title="Disease Situation"
|
||
name="DiseaseSituation"
|
||
disabled
|
||
>
|
||
<el-form ref="situationForm" :model="reportResult" label-width="100px">
|
||
<el-form-item
|
||
prop="DiseaseSituation"
|
||
label="Disease present or absent:"
|
||
label-width="200px"
|
||
:rules="[{ required: true, message: '', trigger: 'blur' }]"
|
||
>
|
||
<el-radio-group
|
||
v-model="reportResult.DiseaseSituation"
|
||
:disabled="isReportSaved"
|
||
>
|
||
<el-radio :label="1">Present</el-radio>
|
||
<el-radio :label="2">Absent</el-radio>
|
||
<el-radio :label="3">NE</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
|
||
<el-form-item prop="Comments" label="Comments">
|
||
<el-input
|
||
v-model="reportResult.Comment"
|
||
type="textarea"
|
||
:rows="2"
|
||
style="margin: 10px"
|
||
placeholder="Comment"
|
||
:disabled="isReportSaved"
|
||
/>
|
||
</el-form-item>
|
||
</el-form>
|
||
|
||
<!-- <div style="margin: 10px 0px">
|
||
<span style="margin-left: 10px">Disease present or absent:</span>
|
||
<el-radio-group
|
||
v-model="reportResult.DiseaseSituation"
|
||
:disabled="isReportSaved"
|
||
>
|
||
<el-radio :label="1">Present</el-radio>
|
||
<el-radio :label="2">Absent</el-radio>
|
||
<el-radio :label="3">NE</el-radio>
|
||
</el-radio-group>
|
||
|
||
<el-input
|
||
type="textarea"
|
||
:rows="2"
|
||
style="margin: 10px"
|
||
placeholder="Comment"
|
||
v-model="reportResult.Comment"
|
||
:disabled="isReportSaved"
|
||
>
|
||
</el-input>
|
||
</div> -->
|
||
</el-collapse-item>
|
||
</el-collapse>
|
||
<div id="footer">
|
||
<el-button
|
||
type="primary"
|
||
style="float: left; margin-left: 500px"
|
||
:disabled="isReportSaved"
|
||
@click="addBaseLine"
|
||
>Save</el-button>
|
||
<el-button
|
||
type="primary"
|
||
style="float: left; margin-left: 600px"
|
||
:disabled="isReportSaved"
|
||
@click="submiteReport"
|
||
>Submit Report</el-button>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
import {
|
||
addBaseLineLesion,
|
||
getBLLineLesion,
|
||
submiteReport,
|
||
saveImageLabelList
|
||
} from '@/api/reading'
|
||
export default {
|
||
name: 'WorkloadTask',
|
||
data() {
|
||
return {
|
||
isReportSaved: false,
|
||
pageTPInfo: '',
|
||
activeNames: [
|
||
'ImageQualityAssessment',
|
||
'Non-lymphNodeTarget',
|
||
'LymphNodeTarget',
|
||
'Non-targetLesion',
|
||
'MeasurementsCalculation',
|
||
'DiseaseSituation'
|
||
],
|
||
|
||
NonlymphNodeTargetEditVisible: false,
|
||
LymphNodeTargetEditVisible: false,
|
||
NontargetLesionEditVisible: false,
|
||
|
||
lymphNodeTargetFormModel: {},
|
||
nonlymphNodeTargetFormModel: {},
|
||
nontargetLesionFormModel: {},
|
||
NonlymphNodeTargetList: [
|
||
// {
|
||
// TULNKID: '',
|
||
// TULOC: 'lung',
|
||
// TULAT: ' left',
|
||
// TUDIR: 'lower lobe',
|
||
// TRORRES: '10',
|
||
// LocDescription: 'Tumor Identification',
|
||
// Note: 'cc'
|
||
// }
|
||
],
|
||
LymphNodeTargetList: [
|
||
// {
|
||
// TULNKID: 'T05',
|
||
// TULOC: 'lymph node hilum of liver',
|
||
// TULAT: ' ',
|
||
// TUDIR: '',
|
||
// TRORRES: '27.7',
|
||
// LocDescription: 'Tumor Identification',
|
||
// Note: 'cc'
|
||
// },
|
||
],
|
||
NontargetLesionList: [],
|
||
|
||
imageLabelList: [],
|
||
imageDataHasUpdate: false,
|
||
|
||
reportResult: {
|
||
TpCode: '',
|
||
Qualified: '',
|
||
DiseaseProgression: '',
|
||
NotEvaluable: '',
|
||
Timepoint: '',
|
||
TrialCode: '',
|
||
SubjectCode: '',
|
||
VisitNum: '',
|
||
VisitName: '',
|
||
DiseaseSituation: '',
|
||
Comment: '',
|
||
TPId: '',
|
||
DicomStudyId: ''
|
||
}
|
||
}
|
||
},
|
||
computed: {
|
||
// 计算属性的 getter
|
||
SOD: function() {
|
||
var sum = 0
|
||
this.NonlymphNodeTargetList.forEach((t) => (sum += parseInt(t.TRORRES)))
|
||
this.LymphNodeTargetList.forEach((t) => (sum += parseInt(t.TRORRES)))
|
||
return sum
|
||
},
|
||
NonnodularLesionsSOD: function() {
|
||
var sum = 0
|
||
this.NonlymphNodeTargetList.forEach((t) => (sum += parseInt(t.TRORRES)))
|
||
return sum
|
||
}
|
||
},
|
||
|
||
created() {
|
||
this.pageTPInfo = this.$route.query
|
||
|
||
this.reportResult.TpCode = this.pageTPInfo.WorkloadCode
|
||
this.reportResult.TrialCode = this.pageTPInfo.TrialCode
|
||
this.reportResult.SubjectCode = this.pageTPInfo.SubjectCode
|
||
this.reportResult.VisitNum = this.pageTPInfo.VisitNum
|
||
this.reportResult.VisitName = this.pageTPInfo.VisitName
|
||
this.reportResult.TPId = this.pageTPInfo.WorkloadId
|
||
this.reportResult.DicomStudyId = this.pageTPInfo.StudyId
|
||
|
||
this.isReportSaved = this.pageTPInfo.Status === 80
|
||
|
||
this.getBLLineLesion()
|
||
},
|
||
|
||
mounted() {
|
||
var that = this
|
||
window.addEventListener('storage', function(e) {
|
||
// 判断是影像界面 设置了数据 设置的key而且一定是'measureData' 防止其他界面操作localStorage 从而进入
|
||
if (e.url.indexOf('baseLine') !== -1 && e.key === 'measureData') {
|
||
var measureData = JSON.parse(e.newValue)
|
||
var tpData = measureData[that.pageTPInfo.WorkloadCode]
|
||
|
||
if (measureData) {
|
||
that.imageDataHasUpdate = true
|
||
that.imageLabelList = []
|
||
tpData.forEach((t) => that.imageLabelList.push(t))
|
||
|
||
var lesionType1 = tpData.filter((t) => t.lesionType === 1)
|
||
var lesionType2 = tpData.filter((t) => t.lesionType === 2)
|
||
var lesionType3 = tpData.filter((t) => t.lesionType === 3)
|
||
|
||
// that.NonlymphNodeTargetList = []
|
||
if (lesionType1.length > 0) {
|
||
lesionType1.forEach((element) => {
|
||
var location = element.lesionLocation.split('-')
|
||
element.TRORRES = element.lesionValue.substring(
|
||
0,
|
||
element.lesionValue.length - 2
|
||
)
|
||
element.TULOC = location[0] || ''
|
||
element.TULAT = location[1] || ''
|
||
element.TUDIR = location[2] || ''
|
||
|
||
var old = that.NonlymphNodeTargetList.filter(
|
||
(t) =>
|
||
t.lesionValue === element.lesionValue &&
|
||
t.lesionLocation === element.lesionLocation
|
||
)[0]
|
||
if (old) {
|
||
element.LocDescription = old.LocDescription
|
||
element.Note = old.Note
|
||
}
|
||
})
|
||
|
||
that.NonlymphNodeTargetList = lesionType1
|
||
}
|
||
|
||
// that.LymphNodeTargetList = []
|
||
if (lesionType2.length > 0) {
|
||
lesionType2.forEach((element) => {
|
||
var location = element.lesionLocation.split('-')
|
||
element.TRORRES = element.lesionValue.substring(
|
||
0,
|
||
element.lesionValue.length - 2
|
||
)
|
||
element.TULOC = location[0] || ''
|
||
element.TULAT = location[1] || ''
|
||
element.TUDIR = location[2] || ''
|
||
|
||
var old = that.LymphNodeTargetList.filter(
|
||
(t) =>
|
||
t.lesionValue === element.lesionValue &&
|
||
t.lesionLocation === element.lesionLocation
|
||
)[0]
|
||
if (old) {
|
||
element.LocDescription = old.LocDescription
|
||
element.Note = old.Note
|
||
}
|
||
})
|
||
that.LymphNodeTargetList = lesionType2
|
||
}
|
||
|
||
// that.NontargetLesionList = []
|
||
if (lesionType3.length > 0) {
|
||
lesionType3.forEach((element) => {
|
||
var location = element.lesionLocation.split('-')
|
||
element.TULOC = location[0] || ''
|
||
element.TULAT = location[1] || ''
|
||
element.TUDIR = location[2] || ''
|
||
|
||
var old = that.NontargetLesionList.filter(
|
||
(t) => t.lesionLocation === element.lesionLocation
|
||
)[0]
|
||
if (old) {
|
||
element.LocDescription = old.LocDescription
|
||
element.Note = old.Note
|
||
}
|
||
})
|
||
that.NontargetLesionList = lesionType3
|
||
}
|
||
|
||
// 删除localStorage本次数据
|
||
delete measureData[that.pageTPInfo.WorkloadCode]
|
||
localStorage.setItem('measureData', JSON.stringify(measureData))
|
||
}
|
||
}
|
||
})
|
||
},
|
||
|
||
methods: {
|
||
getBLLineLesion() {
|
||
var that = this
|
||
getBLLineLesion(
|
||
this.pageTPInfo.TrialCode,
|
||
this.pageTPInfo.SubjectCode,
|
||
this.pageTPInfo.WorkloadCode
|
||
).then((res) => {
|
||
if (res.Result.LesionInformation.length > 0) {
|
||
that.NonlymphNodeTargetList = res.Result.LesionInformation.filter(
|
||
(t) => t.LesionType === 1
|
||
)
|
||
that.LymphNodeTargetList = res.Result.LesionInformation.filter(
|
||
(t) => t.LesionType === 2
|
||
)
|
||
that.NontargetLesionList = res.Result.LesionInformation.filter(
|
||
(t) => t.LesionType === 3
|
||
)
|
||
}
|
||
if (res.Result.ReportResult) {
|
||
that.reportResult = res.Result.ReportResult
|
||
}
|
||
|
||
that.reportResult.TpCode = this.pageTPInfo.WorkloadCode
|
||
})
|
||
},
|
||
|
||
addBaseLine() {
|
||
var that = this
|
||
this.$refs.qualifiedForm.validate((valid) => {
|
||
if (valid) {
|
||
this.$refs.situationForm.validate((valid) => {
|
||
if (valid) {
|
||
// 验证规则 靶病灶 总数量不大于5,每个器官不多于2
|
||
var errorMsgArray = []
|
||
|
||
if (that.NonlymphNodeTargetList.length + that.LymphNodeTargetList.length > 5) {
|
||
errorMsgArray.push('The number of target lesions should not exceed 5 .')
|
||
}
|
||
|
||
var TULOCArray1 = that.NonlymphNodeTargetList.map((obj, index) => {
|
||
if (obj.TULOC) return obj.TULOC
|
||
})
|
||
|
||
var TULOCArray2 = that.LymphNodeTargetList.map((obj, index) => {
|
||
if (obj.TULOC) return obj.TULOC
|
||
})
|
||
|
||
var TULOCArray = TULOCArray1.concat(TULOCArray2)
|
||
|
||
// 统计每个器官的数量,并返回最高的次数
|
||
var top = that.getCount(TULOCArray, 1)
|
||
|
||
if (top[0].count > 2) {
|
||
errorMsgArray.push('The number of lesions in the same organ should not exceed 2 ')
|
||
|
||
var tips = errorMsgArray.join('\n')
|
||
this.$alert(tips, 'target lesion', {
|
||
confirmButtonText: '确定'
|
||
})
|
||
// return
|
||
}
|
||
|
||
var postArray = []
|
||
// 非淋巴结靶病灶
|
||
this.NonlymphNodeTargetList.forEach((element) => {
|
||
postArray.push({
|
||
LesionType: 1, // 病灶类型
|
||
STUDYID: this.pageTPInfo.TrialCode, // 项目Id
|
||
USUBJID: this.pageTPInfo.SubjectCode, // 受试者Id
|
||
TUSPID: this.pageTPInfo.Sponsor,
|
||
// TUSEQ="" //病灶序号 不传递
|
||
// TUGRPID:"",//病灶分组
|
||
// TUREFID:"" //医学影像 ID
|
||
// TULNKID:"" //关联测量结果,及TUGRPID一起,标识分裂及合并
|
||
TUTESTCD: 'TUMIDENT',
|
||
TUTEST: 'Tumor Identification',
|
||
TUORRES: 'TARGET', // 标识结果 1:target 2:None target 3: New
|
||
TUSTRESC: 'TARGET',
|
||
TUNAM: 'zhizhun', // /完成肿瘤标识的供应商名称或标识
|
||
LocDescription: element.LocDescription, // 部位描述
|
||
TULOC: element.TULOC, // 解剖学位置
|
||
TULAT: element.TULAT, // 左侧 右侧。。。
|
||
TUDIR: element.TUDIR, // 方向
|
||
TUPORTOT: '', // 更详细的分布,安排,分配的修饰语, 比如,全部的,单一的,部分的,多数的。
|
||
TUMETHOD: '', // 标识肿瘤的方法
|
||
TUEVAL: '', // 评估者的角色。 例如:研究者,独立评估者。
|
||
TUEVALID: '', // 这个特定的评估者变量是与 TUEVAL一起使用来提供更详 细的信息
|
||
TUACPTFL: '', // 双人阅片 这个标帜用来认定能够被接受的一条评估记录。
|
||
VISITNUM: this.pageTPInfo.VisitNum,
|
||
VISIT: this.pageTPInfo.VisitName,
|
||
VISITDY: 0,
|
||
EPOCH: '', // 时期
|
||
TUDTC: '', // 检查日期
|
||
TUDY: 0, // 检查日
|
||
TRTESTCD: '', // 检查简称
|
||
TRTEST: '', // 检查项名称
|
||
TRORRES: element.TRORRES, // 原始结果
|
||
TRORRESU: '', // 原始单位
|
||
TRSTRESC: '', // 标准化结果
|
||
TRSTRESN: 0, // 标准化结果(N)
|
||
TRSTRESU: '', // // 标准化单位
|
||
TRSTAT: '', // 未做状态
|
||
TRREASND: '', // 未做原因
|
||
Note: element.Note,
|
||
TRGRPID: '', // 用于关联域内同一受试者的一组相关记录
|
||
TRDTC: '', // 检查日期
|
||
TRDY: 0 // 检查日
|
||
})
|
||
})
|
||
|
||
// 淋巴结靶病灶
|
||
this.LymphNodeTargetList.forEach((element) => {
|
||
postArray.push({
|
||
LesionType: 2, // 病灶类型
|
||
STUDYID: this.pageTPInfo.TrialCode, // 项目Id
|
||
USUBJID: this.pageTPInfo.SubjectCode, // 受试者Id
|
||
TUSPID: this.pageTPInfo.Sponsor,
|
||
// TUSEQ="" //病灶序号 不传递
|
||
// TUGRPID:"",//病灶分组
|
||
// TUREFID:"" //医学影像 ID
|
||
// TULNKID:"" //关联测量结果,及TUGRPID一起,标识分裂及合并
|
||
TUTESTCD: 'TUMIDENT',
|
||
TUTEST: 'Tumor Identification',
|
||
TUORRES: 'TARGET', // 标识结果 1:target 2:None target 3: New
|
||
TUSTRESC: 'TARGET',
|
||
TUNAM: 'zhizhun', // /完成肿瘤标识的供应商名称或标识
|
||
LocDescription: element.LocDescription, // 部位描述
|
||
TULOC: element.TULOC, // 解剖学位置
|
||
TULAT: element.TULAT, // 左侧 右侧。。。
|
||
TUDIR: element.TUDIR, // 方向
|
||
TUPORTOT: '', // 更详细的分布,安排,分配的修饰语, 比如,全部的,单一的,部分的,多数的。
|
||
TUMETHOD: '', // 标识肿瘤的方法
|
||
TUEVAL: '', // 评估者的角色。 例如:研究者,独立评估者。
|
||
TUEVALID: '', // 这个特定的评估者变量是与 TUEVAL一起使用来提供更详 细的信息
|
||
TUACPTFL: '', // 双人阅片 这个标帜用来认定能够被接受的一条评估记录。
|
||
VISITNUM: this.pageTPInfo.VisitNum,
|
||
VISIT: this.pageTPInfo.VisitName,
|
||
VISITDY: 0,
|
||
EPOCH: '', // 时期
|
||
TUDTC: '', // 检查日期
|
||
TUDY: 0, // 检查日
|
||
TRTESTCD: '', // 检查简称
|
||
TRTEST: '', // 检查项名称
|
||
TRORRES: element.TRORRES, // 原始结果
|
||
TRORRESU: '', // 原始单位
|
||
TRSTRESC: '', // 标准化结果
|
||
TRSTRESN: 0, // 标准化结果(N)
|
||
TRSTRESU: '', // // 标准化单位
|
||
TRSTAT: '', // 未做状态
|
||
TRREASND: '', // 未做原因
|
||
Note: element.Note,
|
||
TRGRPID: '', // 用于关联域内同一受试者的一组相关记录
|
||
TRDTC: '', // 检查日期
|
||
TRDY: 0 // 检查日
|
||
})
|
||
})
|
||
|
||
// 非靶病灶
|
||
this.NontargetLesionList.forEach((element) => {
|
||
postArray.push({
|
||
LesionType: 3, // 病灶类型
|
||
STUDYID: this.pageTPInfo.TrialCode, // 项目Id
|
||
USUBJID: this.pageTPInfo.SubjectCode, // 受试者Id
|
||
TUSPID: this.pageTPInfo.Sponsor,
|
||
// TUSEQ="" //病灶序号 不传递
|
||
// TUGRPID:"",//病灶分组
|
||
// TUREFID:"" //医学影像 ID
|
||
// TULNKID:"" //关联测量结果,及TUGRPID一起,标识分裂及合并
|
||
TUTESTCD: 'TUMIDENT',
|
||
TUTEST: 'Tumor Identification',
|
||
TUORRES: 'None TARGET', // 标识结果 1:target 2:None target 3: New
|
||
TUSTRESC: 'None TARGET',
|
||
TUNAM: 'zhizhun', // /完成肿瘤标识的供应商名称或标识
|
||
LocDescription: element.LocDescription, // 部位描述
|
||
TULOC: element.TULOC, // 解剖学位置
|
||
TULAT: element.TULAT, // 左侧 右侧。。。
|
||
TUDIR: element.TUDIR, // 方向
|
||
TUPORTOT: '', // 更详细的分布,安排,分配的修饰语, 比如,全部的,单一的,部分的,多数的。
|
||
TUMETHOD: '', // 标识肿瘤的方法
|
||
TUEVAL: '', // 评估者的角色。 例如:研究者,独立评估者。
|
||
TUEVALID: '', // 这个特定的评估者变量是与 TUEVAL一起使用来提供更详 细的信息
|
||
TUACPTFL: '', // 双人阅片 这个标帜用来认定能够被接受的一条评估记录。
|
||
VISITNUM: this.pageTPInfo.VisitNum,
|
||
VISIT: this.pageTPInfo.VisitName,
|
||
VISITDY: 0,
|
||
EPOCH: '', // 时期
|
||
TUDTC: '', // 检查日期
|
||
TUDY: 0, // 检查日
|
||
TRTESTCD: '', // 检查简称
|
||
TRTEST: '', // 检查项名称
|
||
TRORRES: element.TRORRES, // 原始结果
|
||
TRORRESU: '', // 原始单位
|
||
TRSTRESC: '', // 标准化结果
|
||
TRSTRESN: 0, // 标准化结果(N)
|
||
TRSTRESU: '', // // 标准化单位
|
||
TRSTAT: '', // 未做状态
|
||
TRREASND: '', // 未做原因
|
||
Note: element.Note,
|
||
TRGRPID: '', // 用于关联域内同一受试者的一组相关记录
|
||
TRDTC: '', // 检查日期
|
||
TRDY: 0 // 检查日
|
||
})
|
||
})
|
||
|
||
this.$confirm('Sure fill in all the information?', {
|
||
type: 'warning',
|
||
distinguishCancelAndClose: true,
|
||
confirmButtonText: 'Ok',
|
||
cancelButtonText: 'Cancel'
|
||
}).then(() => {
|
||
addBaseLineLesion({
|
||
lesionInformation: postArray,
|
||
reportResult: this.reportResult,
|
||
sumOfDiameter: this.SOD,
|
||
sumDiameterOfNonLymphNode: this.NonnodularLesionsSOD
|
||
}).then((res) => {
|
||
// this.isReportSaved = true;
|
||
this.getBLLineLesion()
|
||
|
||
this.$message.success('saved successfully')
|
||
})
|
||
})
|
||
|
||
if (that.imageDataHasUpdate) {
|
||
that.saveImageLabel()
|
||
}
|
||
}
|
||
})
|
||
}
|
||
})
|
||
},
|
||
|
||
saveImageLabel() {
|
||
var param = {}
|
||
param.TpCode = this.pageTPInfo.WorkloadCode
|
||
param.ImageLabelList = []
|
||
this.imageLabelList.forEach((element) => {
|
||
param.ImageLabelList.push({
|
||
StudyId: this.pageTPInfo.StudyId,
|
||
LabelValue: JSON.stringify(element),
|
||
SeriesId: element.seriesId,
|
||
InstanceId: element.instanceId
|
||
|
||
})
|
||
})
|
||
|
||
saveImageLabelList(param).then((res) => {
|
||
this.imageDataHasUpdate = false
|
||
this.$message.success('saved imgeLable successfully')
|
||
})
|
||
},
|
||
|
||
submiteReport() {
|
||
submiteReport(this.pageTPInfo.WorkloadId).then((res) => {
|
||
this.$message.success('Report saved successfully')
|
||
this.isReportSaved = true
|
||
})
|
||
},
|
||
|
||
getCount(arr, rank, ranktype) {
|
||
var obj = {}; var k; var arr1 = []
|
||
for (var i = 0, len = arr.length; i < len; i++) {
|
||
k = arr[i]
|
||
if (obj[k]) { obj[k]++ } else { obj[k] = 1 }
|
||
}
|
||
// 保存结果{el-'元素',count-出现次数}
|
||
for (var o in obj) {
|
||
arr1.push({ el: o, count: obj[o] })
|
||
}
|
||
// 排序(降序)
|
||
arr1.sort(function(n1, n2) {
|
||
return n2.count - n1.count
|
||
})
|
||
// 如果ranktype为1,则为升序,反转数组
|
||
if (ranktype === 1) {
|
||
arr1 = arr1.reverse()
|
||
}
|
||
var rank1 = rank || arr1.length
|
||
return arr1.slice(0, rank1)
|
||
|
||
// getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2])//默认情况,返回所有元素出现的次数
|
||
// getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3)//传参(rank=3),只返回出现次数排序前三的
|
||
// getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],null,1)//传参(ranktype=1,rank=null),升序返回所有元素出现次数
|
||
// getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3,1)//传参(rank=3,ranktype=1),只返回出现次数排序(升序)前三的
|
||
}
|
||
|
||
}
|
||
}
|
||
</script>
|
||
<style lang="scss">
|
||
.ImageReviewTask-list {
|
||
height: 100%;
|
||
|
||
.el-collapse-item.is-disabled .el-collapse-item__header {
|
||
color: black;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.el-collapse-item__header {
|
||
background-color: #f0f0f0;
|
||
height: 50px;
|
||
line-height: 50px;
|
||
padding: 0 5px;
|
||
}
|
||
.el-collapse-item__wrap {
|
||
padding: 0 5px;
|
||
}
|
||
.el-collapse {
|
||
margin-bottom: 100px;
|
||
}
|
||
#footer {
|
||
position: fixed;
|
||
bottom: 30px;
|
||
width: 100%;
|
||
// height: 30px; /*脚部的高度*/
|
||
// background: #6cf;
|
||
// clear: both;
|
||
}
|
||
}
|
||
</style>
|
||
|