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>
 | 
						||
 |