353 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			353 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
| <template>
 | |
|   <div class="app-container data-list">
 | |
|     <div class="toolbar">
 | |
|       <el-row>
 | |
|         <el-input
 | |
|           v-model="listQuery.Code"
 | |
|           placeholder="Trial ID"
 | |
|           style="width: 160px"
 | |
|           size="small"
 | |
|           clearable
 | |
|         />
 | |
|         <el-input
 | |
|           v-model="listQuery.Indication"
 | |
|           placeholder="Indication"
 | |
|           style="width: 160px"
 | |
|           size="small"
 | |
|           clearable
 | |
|         />
 | |
| 
 | |
|         <el-select
 | |
|           v-model="listQuery.Expedited"
 | |
|           value-key="value"
 | |
|           placeholder="Expedited"
 | |
|           clearable
 | |
|           size="small"
 | |
|           style="width: 160px"
 | |
|         >
 | |
|           <el-option
 | |
|             v-for="item in expeditedOption"
 | |
|             :key="item.value"
 | |
|             :label="item.label"
 | |
|             :value="item.value"
 | |
|           />
 | |
|         </el-select>
 | |
| 
 | |
|         <el-select
 | |
|           v-model="listQuery.EnrollStatus"
 | |
|           value-key="value"
 | |
|           placeholder="Enroll Status"
 | |
|           clearable
 | |
|           size="small"
 | |
|           style="width: 160px"
 | |
|         >
 | |
|           <el-option
 | |
|             v-for="item in enrollStatusOption"
 | |
|             :key="item.value"
 | |
|             :label="item.label"
 | |
|             :value="item.value"
 | |
|           />
 | |
|         </el-select>
 | |
| 
 | |
|         <el-button
 | |
|           type="text"
 | |
|           size="small"
 | |
|           @click="handleReset"
 | |
|         >Reset</el-button>
 | |
|         <el-button
 | |
|           type="primary"
 | |
|           size="small"
 | |
|           @click="handleSearch"
 | |
|         >Search</el-button>
 | |
|       </el-row>
 | |
|     </div>
 | |
|     <div class="data-table">
 | |
|       <el-table
 | |
|         ref="trialsList"
 | |
|         v-loading="listLoading"
 | |
|         :data="list"
 | |
|         stripe
 | |
|         class="table"
 | |
|         size="small"
 | |
|         height="100%"
 | |
|         @sort-change="handleSortChange"
 | |
|       >
 | |
|         <el-table-column type="index" width="50" />
 | |
| 
 | |
|         <el-table-column
 | |
|           prop="Code"
 | |
|           min-width="110"
 | |
|           label="Trial ID"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         />
 | |
| 
 | |
|         <el-table-column
 | |
|           prop="Expedited"
 | |
|           min-width="110"
 | |
|           label="Expedited"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         >
 | |
|           <template slot-scope="scope">{{
 | |
|             scope.row.Expedited == 0
 | |
|               ? 'No'
 | |
|               : scope.row.Expedited == 1
 | |
|                 ? '24H'
 | |
|                 : '48H'
 | |
|           }}</template>
 | |
|         </el-table-column>
 | |
| 
 | |
|         <el-table-column
 | |
|           prop="Indication"
 | |
|           label="Indication"
 | |
|           min-width="120"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         />
 | |
|         <el-table-column
 | |
|           prop="Phase"
 | |
|           min-width="100"
 | |
|           label="Phase"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         />
 | |
|         <el-table-column
 | |
|           prop="ReviewMode"
 | |
|           label="Review Mode"
 | |
|           min-width="120"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         />
 | |
|         <el-table-column
 | |
|           prop="Criterion"
 | |
|           label="Criteria"
 | |
|           min-width="120"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         />
 | |
|         <el-table-column
 | |
|           prop="Modalities"
 | |
|           label="Modalities"
 | |
|           min-width="120"
 | |
|           :formatter="ModalitiesFormatter"
 | |
|           show-overflow-tooltip
 | |
|         />
 | |
|         <el-table-column
 | |
|           prop="CRO"
 | |
|           label="CRO"
 | |
|           min-width="120"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         />
 | |
|         <el-table-column
 | |
|           prop="Sponsor"
 | |
|           label="Sponsor"
 | |
|           min-width="120"
 | |
|           show-overflow-tooltip
 | |
|           sortable="custom"
 | |
|         />
 | |
|         <el-table-column
 | |
|           prop="CreateTime"
 | |
|           label="Date Created"
 | |
|           min-width="120"
 | |
|           show-overflow-tooltip
 | |
|           :formatter="timeFormatter"
 | |
|           sortable="custom"
 | |
|         />
 | |
| 
 | |
|         <el-table-column
 | |
|           prop="EnrollStatus"
 | |
|           label="Enroll State"
 | |
|           min-width="120"
 | |
|           show-overflow-tooltip
 | |
|           :formatter="enrollStatusFormatter"
 | |
|           sortable="custom"
 | |
|         />
 | |
| 
 | |
|         <el-table-column
 | |
|           label="Action"
 | |
|           min-width="150"
 | |
|           align="left"
 | |
|           fixed="right"
 | |
|         >
 | |
|           <template slot-scope="scope">
 | |
|             <el-button
 | |
|               v-if="scope.row.EnrollStatus>=10"
 | |
|               type="text"
 | |
|               size="small"
 | |
|               @click="handleToWorkLoad(scope.row)"
 | |
|             >WorkLoad</el-button>
 | |
|             <el-button
 | |
|               :disabled="scope.row.EnrollStatus!=8"
 | |
|               type="text"
 | |
|               size="small"
 | |
|               @click="
 | |
|                 enrollVisible = true
 | |
|                 trialId = scope.row.Id
 | |
|                 enrollStatus=scope.row.EnrollStatus
 | |
|               "
 | |
|             >Enroll</el-button>
 | |
|           </template>
 | |
|         </el-table-column>
 | |
|       </el-table>
 | |
|     </div>
 | |
|     <div class="pagination">
 | |
|       <pagination
 | |
|         :total="total"
 | |
|         :page.sync="listQuery.PageIndex"
 | |
|         :limit.sync="listQuery.PageSize"
 | |
|         @pagination="getList"
 | |
|       />
 | |
|     </div>
 | |
|     <el-dialog
 | |
|       title="Enroll"
 | |
|       :visible.sync="enrollVisible"
 | |
|       width="400px"
 | |
|       size="small"
 | |
|       :close-on-click-modal="false"
 | |
|     >
 | |
|       <el-radio-group v-model="enrollStatus">
 | |
|         <el-radio :label="9">Reject Enroll</el-radio>
 | |
|         <el-radio :label="10">Confirm Enroll</el-radio>
 | |
|       </el-radio-group>
 | |
|       <div slot="footer" class="dialog-footer">
 | |
|         <el-button size="small" @click="enrollVisible = false">Cancel</el-button>
 | |
|         <el-button
 | |
|           size="small"
 | |
|           type="primary"
 | |
|           :disabled="btnDisable"
 | |
|           @click="handleEnroll"
 | |
|         >OK</el-button>
 | |
|       </div>
 | |
|     </el-dialog>
 | |
|   </div>
 | |
| </template>
 | |
| <script>
 | |
| import Pagination from '@/components/Pagination'
 | |
| import { formatUTCTime } from '@/utils/formatter'
 | |
| import { getTrialListByReviewer, updateEnrollStatus } from '@/api/reading'
 | |
| const getListQueryDefault = () => {
 | |
|   return {
 | |
|     Code: '',
 | |
|     Expedited: '',
 | |
|     Indication: '',
 | |
|     EnrollStatus: '',
 | |
|     PageIndex: 1,
 | |
|     PageSize: 20,
 | |
|     Asc: false,
 | |
|     SortField: ''
 | |
|   }
 | |
| }
 | |
| export default {
 | |
|   name: 'ReviewerTrials',
 | |
|   components: { Pagination },
 | |
|   data() {
 | |
|     return {
 | |
|       btnDisable: false,
 | |
|       trialId: '',
 | |
|       enrollStatus: '',
 | |
|       enrollVisible: false,
 | |
|       listQuery: getListQueryDefault(),
 | |
|       list: [],
 | |
|       listLoading: false,
 | |
|       total: 0,
 | |
| 
 | |
|       expeditedOption: [
 | |
|         { value: 0, label: 'No' },
 | |
|         { value: 2, label: '48-Hour' },
 | |
|         { value: 1, label: '24-Hour' }
 | |
|       ],
 | |
|       enrollStatusOption: [
 | |
|         { value: 8, label: 'Enrolling' },
 | |
|         { value: 9, label: 'Rejected' },
 | |
|         { value: 10, label: 'Reading' },
 | |
|         { value: 14, label: 'End' }
 | |
| 
 | |
|       ]
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   created() {
 | |
|     this.getList()
 | |
|   },
 | |
|   methods: {
 | |
|     getList() {
 | |
|       this.listLoading = true
 | |
| 
 | |
|       getTrialListByReviewer(this.listQuery)
 | |
|         .then((res) => {
 | |
|           this.list = res.Result.CurrentPageData
 | |
|           this.total = res.Result.TotalCount
 | |
|           this.listLoading = false
 | |
|         })
 | |
|         .catch(() => {
 | |
|           this.listLoading = false
 | |
|         })
 | |
|     },
 | |
|     handleSelectSearch() {
 | |
|       this.isShow = false
 | |
|       this.getList()
 | |
|     },
 | |
|     handleSearch() {
 | |
|       this.listQuery.PageIndex = 1
 | |
|       this.getList()
 | |
|     },
 | |
|     handleReset() {
 | |
|       this.listQuery = getListQueryDefault()
 | |
|       this.getList()
 | |
|     },
 | |
|     handleEnroll() {
 | |
|       this.btnDisable = true
 | |
|       updateEnrollStatus(this.trialId, this.enrollStatus)
 | |
|         .then((res) => {
 | |
|           this.enrollVisible = false
 | |
| 
 | |
|           if (this.enrollStatus === 9) { this.$message.success('Reject successfully') } else { this.$message.success('Enroll successfully') }
 | |
| 
 | |
|           this.getList()
 | |
|         })
 | |
|         .catch(() => {
 | |
|           this.btnDisable = false
 | |
|         })
 | |
|     },
 | |
| 
 | |
|     handleToWorkLoad(row) {
 | |
|       this.$router.push({
 | |
|         name: 'WorkloadPannel',
 | |
|         query: {
 | |
|           TrialId: row.Id
 | |
|         }
 | |
|       })
 | |
|     },
 | |
| 
 | |
|     ModalitiesFormatter(row, column) {
 | |
|       if (row.ModalityList.length > 0) return row.ModalityList.join(', ')
 | |
|     },
 | |
| 
 | |
|     timeFormatter(row) {
 | |
|       if (row.CreateTime) {
 | |
|         return formatUTCTime(row.CreateTime)
 | |
|       }
 | |
|     },
 | |
|     enrollStatusFormatter(row) {
 | |
|       if (row.EnrollStatus === 8) { return 'Need Confirm' } else if (row.EnrollStatus === 9) { return 'Rejected' } else if (row.EnrollStatus === 10 || row.EnrollStatus === 12 || row.EnrollStatus === 13) {
 | |
|         return 'Reading'
 | |
|       } else {
 | |
|         return 'End'
 | |
|       }
 | |
|     },
 | |
|     handleSortChange(column) {
 | |
|       if (column.order === 'ascending') {
 | |
|         this.listQuery.Asc = true
 | |
|       } else {
 | |
|         this.listQuery.Asc = false
 | |
|       }
 | |
|       this.listQuery.SortField = column.prop
 | |
|       this.listQuery.PageIndex = 1
 | |
|       this.getList()
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 |