446 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			446 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
| <template>
 | ||
|   <el-form
 | ||
|     ref="selectSubjectForm"
 | ||
|     size="small"
 | ||
|     label-width="130px"
 | ||
|     :inline="true"
 | ||
|   >
 | ||
|     <div class="base-dialog-body">
 | ||
|       <el-divider content-position="left">{{$t('trials:readingPeriod:title:screeningRule')}}</el-divider>
 | ||
|       <el-form-item
 | ||
|         :label="$t('trials:readingPeriod:label:IsJoinEvaluation')"
 | ||
|         prop="IsJoinEvaluation"
 | ||
|       >
 | ||
|         {{$t('trials:readingPeriod:value:IsJoinEvaluation')}}
 | ||
|       </el-form-item>
 | ||
|       <el-divider content-position="left">{{ $t('trials:readingPeriod:title:visitsList') }}</el-divider>
 | ||
|       <el-table
 | ||
|         ref="subjectList"
 | ||
|         v-loading="btnLoading"
 | ||
|         :data="list"
 | ||
|         stripe
 | ||
|       >
 | ||
|         <el-table-column
 | ||
|           prop="VisitName"
 | ||
|           :label="$t('trials:trials-panel:table:VisitName')"
 | ||
|           sortable="custom"
 | ||
|           show-overflow-tooltip
 | ||
|           width="120"
 | ||
|         />
 | ||
|         <el-table-column
 | ||
|           prop="EarliestScanDate"
 | ||
|           :label="$t('trials:trials-panel:table:EarliestScanDate')"
 | ||
|           sortable="custom"
 | ||
|           show-overflow-tooltip
 | ||
|         >
 | ||
|           <template slot-scope="scope">
 | ||
|             {{ scope.row.EarliestScanDate ? moment(scope.row.EarliestScanDate).format('YYYY-MM-DD') : '' }}
 | ||
|           </template>
 | ||
|         </el-table-column>
 | ||
|         <el-table-column
 | ||
|           prop="LatestScanDate"
 | ||
|           :label="$t('trials:trials-panel:table:LatestScanDate')"
 | ||
|           sortable="custom"
 | ||
|           show-overflow-tooltip
 | ||
|         >
 | ||
|           <template slot-scope="scope">
 | ||
|             {{ scope.row.LatestScanDate ? moment(scope.row.LatestScanDate).format('YYYY-MM-DD') : '' }}
 | ||
|           </template>
 | ||
|         </el-table-column>
 | ||
|         <el-table-column
 | ||
|           prop="ImageFilterState"
 | ||
|           :label="$t('trials:trials-panel:table:ImageFilterState')"
 | ||
|           sortable="custom"
 | ||
|           show-overflow-tooltip
 | ||
|         >
 | ||
|           <template slot-scope="scope">
 | ||
|             {{ $fd('ImageFilterState', scope.row.ImageFilterState) }}
 | ||
|           </template>
 | ||
|         </el-table-column>
 | ||
|         <el-table-column
 | ||
|           :label="$t('common:action:action')"
 | ||
|           width="120"
 | ||
|           fixed="right"
 | ||
|         >
 | ||
|           <template slot-scope="scope">
 | ||
|             <!-- 影像筛选 -->
 | ||
|             <el-button
 | ||
|               circle
 | ||
|               :title="$t('trials:subject:table:ImageSelect')"
 | ||
|               icon="el-icon-picture-outline"
 | ||
|               @click="handleImageScreening(scope.row)"
 | ||
|             />
 | ||
|             <!-- 生成任务 -->
 | ||
|             <el-button
 | ||
|               circle
 | ||
|               :disabled="scope.row.ImageFilterState !== 2"
 | ||
|               :title="$t('trials:subject:action:handleCreateTask')"
 | ||
|               icon="el-icon-success"
 | ||
|               @click="handleCreateTask(scope.row)"
 | ||
|             />
 | ||
|           </template>
 | ||
|         </el-table-column>
 | ||
|       </el-table>
 | ||
|       <el-divider content-position="left">{{ $t('trials:readingPeriod:title:taskList') }}</el-divider>
 | ||
|       <el-table
 | ||
|         ref="subjectList"
 | ||
|         v-loading="btnLoading"
 | ||
|         :data="list2"
 | ||
|         stripe
 | ||
|       >
 | ||
|         <el-table-column
 | ||
|           prop="VisitName"
 | ||
|           :label="$t('trials:trials-panel:table:VisitName')"
 | ||
|           sortable="custom"
 | ||
|           show-overflow-tooltip
 | ||
|         />
 | ||
|         <el-table-column
 | ||
|           prop="UpdateTime"
 | ||
|           :label="$t('trials:trials-panel:table:UpdateTime')"
 | ||
|           sortable="custom"
 | ||
|           show-overflow-tooltip
 | ||
|         />
 | ||
|         <el-table-column
 | ||
|           :label="$t('common:action:action')"
 | ||
|           width="180"
 | ||
|         >
 | ||
|           <template slot-scope="scope">
 | ||
|             <!-- 影像筛选 -->
 | ||
|             <el-button
 | ||
|               circle
 | ||
|               :title="$t('trials:subject:action:ImageSelect')"
 | ||
|               icon="el-icon-picture-outline"
 | ||
|               @click="handleImageScreening(scope.row)"
 | ||
|             />
 | ||
|             <el-button
 | ||
|               circle
 | ||
|               :title="$t('trials:subject:action:openReReadingOrBackList')"
 | ||
|               icon="el-icon-back"
 | ||
|               @click="openReReadingOrBackList(scope.row)"
 | ||
|             />
 | ||
|             <el-button
 | ||
|               circle
 | ||
|               :title="$t('trials:subject:action:handleOpenTaskAllocation')"
 | ||
|               icon="el-icon-document"
 | ||
|               @click="handleOpenTaskAllocation(scope.row)"
 | ||
|             />
 | ||
|           </template>
 | ||
|         </el-table-column>
 | ||
|       </el-table>
 | ||
|     </div>
 | ||
|     <div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
 | ||
|       <el-form-item>
 | ||
|         <!-- 取消 -->
 | ||
|         <el-button
 | ||
|           :disabled="btnLoading"
 | ||
|           size="small"
 | ||
|           type="primary"
 | ||
|           @click="close"
 | ||
|         >
 | ||
|           {{ $t('common:button:cancel') }}
 | ||
|         </el-button>
 | ||
|       </el-form-item>
 | ||
|     </div>
 | ||
|     <el-dialog
 | ||
|       v-if="selectSubjectImage.visible"
 | ||
|       :title="selectSubjectImage.title"
 | ||
|       :visible.sync="selectSubjectImage.visible"
 | ||
|       :fullscreen="true"
 | ||
|       :append-to-body="true"
 | ||
|     >
 | ||
|       <subject-study :data="rowData" @close="selectSubjectImage.visible = false" @getList="getList"></subject-study>
 | ||
|     </el-dialog>
 | ||
|     <el-dialog
 | ||
|       v-if="taskAllocationVisible.visible"
 | ||
|       :title="taskAllocationVisible.title"
 | ||
|       :visible.sync="taskAllocationVisible.visible"
 | ||
|       :fullscreen="true"
 | ||
|       :append-to-body="true"
 | ||
|     >
 | ||
|       <task-allacation :data="rowData" @close="taskAllocationVisible.visible = false"></task-allacation>
 | ||
|     </el-dialog>
 | ||
|     <el-dialog
 | ||
|       v-if="ReReadingOrBackVisible"
 | ||
|       :title="$t('trials:reviewTrack:dialog:backImpactList')"
 | ||
|       :visible.sync="ReReadingOrBackVisible"
 | ||
|       width="1460px"
 | ||
|       append-to-body
 | ||
|       :close-on-click-modal="false"
 | ||
|       custom-class="base-dialog-wrapper"
 | ||
|     >
 | ||
|       <div class="base-dialog-body">
 | ||
|         <el-table
 | ||
|           v-loading="btnLoading"
 | ||
|           :data="InfluenceTaskList"
 | ||
|           stripe
 | ||
|           height="100"
 | ||
|           style="min-height: 400px;"
 | ||
|         >
 | ||
|           <!-- 任务编号 -->
 | ||
|           <el-table-column
 | ||
|             prop="TaskCode"
 | ||
|             :label="$t('trials:reviewTrack:table:taskCode')"
 | ||
|             min-width="100"
 | ||
|             show-overflow-tooltip
 | ||
|           />
 | ||
|           <!-- 中心编号 -->
 | ||
|           <el-table-column
 | ||
|             prop="TrialSiteCode"
 | ||
|             :label="$t('trials:reviewTrack:table:siteCode')"
 | ||
|             min-width="100"
 | ||
|             show-overflow-tooltip
 | ||
|           />
 | ||
|           <!-- 受试者编号 -->
 | ||
|           <el-table-column
 | ||
|             prop="SubjectCode"
 | ||
|             :label="$t('trials:reviewTrack:table:subjectCode')"
 | ||
|             min-width="120"
 | ||
|             show-overflow-tooltip
 | ||
|           />
 | ||
|           <!-- 任务名称 -->
 | ||
|           <el-table-column
 | ||
|             prop="VisitTaskNum"
 | ||
|             :label="$t('trials:reviewTrack:table:taskName')"
 | ||
|             min-width="120"
 | ||
|             show-overflow-tooltip
 | ||
|           >
 | ||
|             <template slot-scope="scope">
 | ||
|               {{scope.row.TaskName}}
 | ||
|             </template>
 | ||
|           </el-table-column>
 | ||
|           <!-- 盲态任务标识 -->
 | ||
|           <el-table-column
 | ||
|             prop="TaskBlindName"
 | ||
|             :label="$t('trials:reviewTrack:table:blindName')"
 | ||
|             min-width="120"
 | ||
|             show-overflow-tooltip
 | ||
|           />
 | ||
|           <!-- 阅片标准 -->
 | ||
|           <el-table-column
 | ||
|             prop="TrialReadingCriterionName"
 | ||
|             :label="$t('trials:reviewTrack:table:criterionName')"
 | ||
|             min-width="100"
 | ||
|             show-overflow-tooltip
 | ||
|           >
 | ||
|           </el-table-column>
 | ||
|           <!-- 任务状态 -->
 | ||
|           <el-table-column
 | ||
|             prop="TaskState"
 | ||
|             :label="$t('trials:reviewTrack:table:taskStatus')"
 | ||
|             min-width="100"
 | ||
|             show-overflow-tooltip
 | ||
|           >
 | ||
|             <template slot-scope="scope">
 | ||
|               <el-tag v-if="scope.row.TaskState === 0" type="primary">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.TaskState === 1" type="info">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.TaskState === 3" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.TaskState === 4" type="warning">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.TaskState === 5" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
 | ||
|             </template>
 | ||
|           </el-table-column>
 | ||
|           <!-- 任务类型 -->
 | ||
|           <el-table-column
 | ||
|             prop="ReadingCategory"
 | ||
|             min-width="100"
 | ||
|             :label="$t('trials:reviewTrack:table:taskType')"
 | ||
|             show-overflow-tooltip
 | ||
|           >
 | ||
|             <template slot-scope="scope">
 | ||
|               <el-tag v-if="scope.row.ReadingCategory === 1" type="primary">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.ReadingCategory === 2" type="info">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.ReadingCategory === 4" type="danger">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.ReadingCategory === 5" type="warning">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
 | ||
|             </template>
 | ||
|           </el-table-column>
 | ||
|           <!-- 阅片状态 -->
 | ||
|           <el-table-column
 | ||
|             prop="ReadingTaskState"
 | ||
|             :label="$t('trials:reviewTrack:table:readingStatus')"
 | ||
|             min-width="100"
 | ||
|             show-overflow-tooltip
 | ||
|           >
 | ||
|             <template slot-scope="scope">
 | ||
|               <el-tag v-if="scope.row.ReadingTaskState === 2" type="primary">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</el-tag>
 | ||
|               <el-tag v-else type="danger">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</el-tag>
 | ||
|             </template>
 | ||
|           </el-table-column>
 | ||
|           <!-- 生效后影响 -->
 | ||
|           <el-table-column
 | ||
|             prop="OptType"
 | ||
|             :label="$t('trials:reviewTrack:applyReread:title:postEffectiveImpacts')"
 | ||
|             min-width="100"
 | ||
|             show-overflow-tooltip
 | ||
|           >
 | ||
|             <template slot-scope="scope">
 | ||
|               <el-tag v-if="scope.row.OptType === 0" type="primary">{{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.OptType === 1" type="danger">{{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}</el-tag>
 | ||
|               <el-tag v-if="scope.row.OptType === 2" type="warning">{{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}</el-tag>
 | ||
|             </template>
 | ||
|           </el-table-column>
 | ||
|           <!-- 阅片人 -->
 | ||
|           <el-table-column
 | ||
|             prop="UserName"
 | ||
|             :label="$t('trials:reviewTrack:table:reader')"
 | ||
|             min-width="160"
 | ||
|             show-overflow-tooltip
 | ||
|           >
 | ||
|             <template v-if="scope.row.DoctorUser" slot-scope="scope">
 | ||
|               {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
 | ||
|             </template>
 | ||
|           </el-table-column>
 | ||
|         </el-table>
 | ||
|         <div style="font-size: 12px;color: #f66;margin-top: 10px;" v-if="ReReadingOtherInfo && ReReadingOtherInfo.IsIRAppyTaskInfluenced">
 | ||
|           <!-- 注意!列表中存在IR已申请重阅的任务! -->
 | ||
|           {{$t('trials:reviewTrack:applyReread:title:msg1')}}
 | ||
|         </div>
 | ||
|       </div>
 | ||
|       <div slot="footer" class="dialog-footer">
 | ||
|         <!-- 取消 -->
 | ||
|         <el-button :disabled="btnLoading" size="small" type="primary" @click="ReReadingOrBackVisible = false">
 | ||
|           {{ $t('common:button:cancel') }}
 | ||
|         </el-button>
 | ||
|         <!-- 确定 -->
 | ||
|         <el-button :loading="btnLoading" size="small" type="primary" @click="PMSetTaskBack">
 | ||
|           {{$t('trials:reviewTrack:impactList:save')}}
 | ||
|         </el-button>
 | ||
|       </div>
 | ||
|     </el-dialog>
 | ||
|   </el-form>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| import { getCriteriaVisitBackInfluenceTaskList, confirmBackCriteriaVisitTask, getSubjectCriteriaEvaluationVisitFilterList, getHaveGeneratedTaskList, batchGenerateTask, getVisitStudyAndSeriesList, batchAddSubjectCriteriaEvaluationVisitStudyFilter } from '@/api/trials/subject'
 | ||
| import subjectStudy from "./subjectStudy";
 | ||
| import moment from "moment";
 | ||
| import taskAllacation from './taskAllocation'
 | ||
| export default {
 | ||
|   name: 'selectSubjectImage',
 | ||
|   components: { subjectStudy, taskAllacation },
 | ||
|   props: {
 | ||
|     data: {
 | ||
|       type: Object,
 | ||
|       default: () => {}
 | ||
|     }
 | ||
|   },
 | ||
|   data() {
 | ||
|     return {
 | ||
|       trialId: this.$route.query.trialId,
 | ||
|       btnLoading: false,
 | ||
|       list: [],
 | ||
|       list2: [],
 | ||
|       selectSubjectImage: { visible: false, title: this.$t('trials:subject:table:ImageSelect') },
 | ||
|       rowData: null,
 | ||
|       moment,
 | ||
|       taskAllocationVisible:  { visible: false, title: this.$t('trials:readingPeriod:title:taskAllocationVisible') },
 | ||
|       InfluenceTaskList: [],
 | ||
|       ReReadingOrBackVisible: false,
 | ||
|       ReReadingOtherInfo: {
 | ||
|         IsIRAppyTaskInfluenced: false
 | ||
|       },
 | ||
|     }
 | ||
|   },
 | ||
|   mounted() {
 | ||
|     this.getList()
 | ||
|   },
 | ||
|   methods: {
 | ||
|     PMSetTaskBack() {
 | ||
|       this.loading = true
 | ||
|       confirmBackCriteriaVisitTask({
 | ||
|         TrialReadingCriterionId: this.rowData.TrialReadingCriterionId,
 | ||
|         TrialId: this.trialId,
 | ||
|         SubjectId: this.rowData.SubjectId,
 | ||
|         SubjectVisitId: this.rowData.SubjectVisitId
 | ||
|       }).then(res => {
 | ||
|         this.loading = false
 | ||
|         this.ReReadingOrBackVisible = false
 | ||
|         this.getList()
 | ||
|         // '退回成功'
 | ||
|         this.$message.success(this.$t('trials:reviewTrack:message:returnedSuccessfully'))
 | ||
|       }).catch(() => {this.loading = false})
 | ||
|     },
 | ||
|     openReReadingOrBackList(row) {
 | ||
|       this.btnLoading = true
 | ||
|       this.rowData = {...row}
 | ||
|       getCriteriaVisitBackInfluenceTaskList({
 | ||
|         TrialReadingCriterionId: row.TrialReadingCriterionId,
 | ||
|         TrialId: this.trialId,
 | ||
|         SubjectId: row.SubjectId,
 | ||
|         SubjectVisitId: row.SubjectVisitId
 | ||
|       }).then(res => {
 | ||
|         this.InfluenceTaskList = res.Result
 | ||
|         this.ReReadingOtherInfo = res.OtherInfo
 | ||
|         this.ReReadingOrBackVisible = true
 | ||
|         this.btnLoading = false
 | ||
|       }).catch(() => {this.btnLoading = false})
 | ||
|     },
 | ||
|     handleOpenTaskAllocation(row) {
 | ||
|       this.rowData = {...row}
 | ||
|       this.taskAllocationVisible.visible = true
 | ||
|     },
 | ||
|     close() {
 | ||
|       this.$emit('close')
 | ||
|     },
 | ||
|     getHaveGeneratedTaskList() {
 | ||
|       var params = {
 | ||
|         IsGeneratedTask: true,
 | ||
|         TrialReadingCriterionId: this.data.TrialReadingCriterionId,
 | ||
|         SubjectId: this.data.SubjectId
 | ||
|       }
 | ||
|       this.btnLoading = true
 | ||
|       getSubjectCriteriaEvaluationVisitFilterList(params).then(res => {
 | ||
|         this.btnLoading = false
 | ||
|         this.list2 = res.Result
 | ||
|       }).catch(() => {
 | ||
|         this.btnLoading = false
 | ||
|       })
 | ||
|       // getHaveGeneratedTaskList(params).then(res => {
 | ||
|       //   this.list2 = res.Result
 | ||
|       //   this.btnLoading = false
 | ||
|       // }).catch(() => {
 | ||
|       //   this.btnLoading = false
 | ||
|       // })
 | ||
|     },
 | ||
|     handleImageScreening(row) {
 | ||
|       this.rowData = row
 | ||
|       this.selectSubjectImage.visible = true
 | ||
|       this.selectSubjectImage.title = `${this.$t('trials:subject:table:ImageSelect')}(${row.SubjectCode})`
 | ||
|     },
 | ||
|     handleCreateTask(row) {
 | ||
|       var params = {
 | ||
|         TrialReadingCriterionId: row.TrialReadingCriterionId,
 | ||
|         TrialId: this.trialId,
 | ||
|         SubjectId: row.SubjectId,
 | ||
|         SubjectVisitIdList: [row.SubjectVisitId],
 | ||
|       }
 | ||
|       this.btnLoading = true
 | ||
|       batchGenerateTask(params).then(res => {
 | ||
|         this.$message.success(this.$t('trials:readingPeriod:message:batchGenerateTask'))
 | ||
|         this.getList()
 | ||
|         this.btnLoading = false
 | ||
|       }).catch(() => {
 | ||
|         this.btnLoading = false
 | ||
|       })
 | ||
|     },
 | ||
|     getList() {
 | ||
|       var params = {
 | ||
|         IsGeneratedTask: false,
 | ||
|         TrialReadingCriterionId: this.data.TrialReadingCriterionId,
 | ||
|         SubjectId: this.data.SubjectId
 | ||
|       }
 | ||
|       this.btnLoading = true
 | ||
|       getSubjectCriteriaEvaluationVisitFilterList(params).then(res => {
 | ||
|         this.btnLoading = false
 | ||
|         this.list = res.Result
 | ||
|         this.getHaveGeneratedTaskList()
 | ||
|       }).catch(() => {
 | ||
|         this.btnLoading = false
 | ||
|       })
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| </script>
 | ||
| 
 | ||
| <style scoped>
 | ||
| 
 | ||
| </style>
 |