193 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
| <template>
 | |
|   <div class="app-container analysis">
 | |
|     <div class="filter-container">
 | |
|       <el-select v-model="type" style="width:110px" size="small" class="mr" @change="handleTypeChange">
 | |
|         <el-option v-for="item in types" :key="item" :label="item" :value="item" />
 | |
|       </el-select>
 | |
|       <el-select v-show="type=='Trial'" ref="croSelection" v-model="listQuery.CroId" style="width:110px" size="small" placeholder="CRO" clearable class="mr">
 | |
|         <el-option v-for="item of croList" :key="item.Id" :label="item.CROName" :value="item.Id" />
 | |
|       </el-select>
 | |
|       <el-select v-show="type=='Reviewer'" v-model="listQuery.Nation" placeholder="Nation" size="small" style="width:110px;margin-right:5px;" clearable>
 | |
|         <el-option label="CN" value="0" />
 | |
|         <el-option label="US" value="1" />
 | |
|       </el-select>
 | |
|       <el-input v-show="type=='Reviewer'" v-model="listQuery.Reviewer" style="width:120px" size="small" placeholder="Reviewer ID" clearable class="mr" />
 | |
|       <el-select
 | |
|         v-show="type=='Trial'"
 | |
|         v-model="listQuery.AttendedReviewerType"
 | |
|         placeholder="Attended Type"
 | |
|         size="small"
 | |
|         style="width:150px;margin-right:5px;"
 | |
|         clearable
 | |
|       >
 | |
|         <el-option label="CN" value="0" />
 | |
|         <el-option label="US" value="1" />
 | |
|         <el-option label="CN&US" value="2" />
 | |
|       </el-select>
 | |
|       <el-input v-show="type=='Trial'" v-model="listQuery.TrialCode" style="width:120px" size="small" placeholder="Trial ID" clearable class="mr" />
 | |
|       <el-date-picker
 | |
|         v-model="listQuery.BeginDate"
 | |
|         size="small"
 | |
|         placeholder="Beginning Month"
 | |
|         value-format="yyyy-MM"
 | |
|         format="yyyy-MM"
 | |
|         type="month"
 | |
|         style="width:120px;margin-right:5px"
 | |
|         :picker-options="beginPickerOption"
 | |
|         :clearable="false"
 | |
|       />To
 | |
|       <el-date-picker
 | |
|         v-model="listQuery.EndDate"
 | |
|         size="small"
 | |
|         placeholder="End Month"
 | |
|         value-format="yyyy-MM"
 | |
|         format="yyyy-MM"
 | |
|         type="month"
 | |
|         style="width:120px;margin:0 5px"
 | |
|         :picker-options="endpickerOption"
 | |
|         :clearable="false"
 | |
|       />
 | |
|       <el-button type="text" size="small" @click="handleReset">Reset</el-button>
 | |
|       <el-button type="primary" size="small" @click="handleSearch">Search</el-button>
 | |
|       <el-button type="primary" size="small" :disabled="exportDisabled" @click="handleExport">Export Excel</el-button>
 | |
|       <el-button :loading="dialogLoading" type="primary" size="small" @click="handleVerify">Verify</el-button>
 | |
|     </div>
 | |
|     <div ref="listContainer" class="list-container clearfix">
 | |
|       <reviewer-analysis v-if="type=='Reviewer'" ref="Reviewer" :param="listQuery" @selectMore="selectMore" />
 | |
|       <trial-ananlysis v-if="type=='Trial'" ref="Trial" :param="listQuery" @selectMore="selectMore" />
 | |
|     </div>
 | |
|     <el-dialog title="Analysis Verification" :visible.sync="dialogVisible" size="small" width="600px">
 | |
|       <div v-for="(item, index) in monthVerifyList" :key="index" style="margin-bottom:5px;word-break:keep-all;word-wrap:break-word;">
 | |
|         Month:
 | |
|         <span style="font-weight:bold;margin-right:5px">{{ item.YearMonth }}</span>
 | |
|         <span>({{ item.ReviewerNameList.join(', ') }} <span style="color:red;">not locked</span>)</span>
 | |
| 
 | |
|       </div>
 | |
|       <el-divider />
 | |
|       <div v-for="(item) in verifyList" :key="item.trialCode" style="margin-bottom:5px">
 | |
|         Trial ID:
 | |
|         <span style="font-weight:bold;margin-right:5px">{{ item.trialCode }}</span>
 | |
|         <span>({{ item.priceType.join(', ') }} <span style="color:red;">did not set unit price</span>)</span>
 | |
|       </div>
 | |
|     </el-dialog>
 | |
|   </div>
 | |
| </template>
 | |
| <script>
 | |
| import ReviewerAnalysis from './components/ReviewerAnalysis'
 | |
| import TrialAnanlysis from './components/TrialAnanlysis'
 | |
| // eslint-disable-next-line no-unused-vars
 | |
| import { FormatTime } from '@/utils/formatter'
 | |
| import store from '@/store'
 | |
| import { mapGetters } from 'vuex'
 | |
| import { getAnalysisVerifyList } from '@/api/financials'
 | |
| export default {
 | |
|   components: { ReviewerAnalysis, TrialAnanlysis },
 | |
|   data() {
 | |
|     return {
 | |
|       listQuery: { Reviewer: '', CroId: '', TrialCode: '', BeginDate: new Date(new Date().setMonth(new Date().getMonth() - 5)).format('yyyy-MM'), EndDate: new Date().format('yyyy-MM'), Nation: '', AttendedReviewerType: '' },
 | |
|       types: ['Reviewer', 'Trial'],
 | |
|       type: 'Reviewer',
 | |
|       exportDisabled: true,
 | |
|       dialogVisible: false,
 | |
|       dialogLoading: false,
 | |
|       verifyList: [],
 | |
|       monthVerifyList: [],
 | |
|       beginPickerOption: {
 | |
|         disabledDate: time => {
 | |
|           if (this.listQuery.EndDate) {
 | |
|             return time.getTime() > new Date(this.listQuery.EndDate).getTime()
 | |
|           } else {
 | |
|             return time.getTime() > Date.now()
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|       endpickerOption: {
 | |
|         disabledDate: time => {
 | |
|           if (this.listQuery.BeginDate) {
 | |
|             return time.getTime() > Date.now() || time.getTime() <= new Date(this.listQuery.BeginDate).getTime()
 | |
|           } else {
 | |
|             return time.getTime() > Date.now()
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   computed: {
 | |
|     ...mapGetters(['croList'])
 | |
|   },
 | |
|   created() { store.dispatch('global/getCROList') },
 | |
|   methods: {
 | |
|     handleSearch() {
 | |
|       this.$refs[this.type].getList()
 | |
|     },
 | |
|     handleReset() {
 | |
|       this.listQuery.Reviewer = ''
 | |
|       this.listQuery.EndDate = new Date().format('yyyy-MM')
 | |
|       this.listQuery.BeginDate = new Date(new Date().setMonth(new Date().getMonth() - 5)).format('yyyy-MM')
 | |
|       this.$refs[this.type].resetList()
 | |
|     },
 | |
|     handleTypeChange() {
 | |
|       this.type === 'Trial' ? this.exportDisabled = false : this.exportDisabled = true
 | |
|       this.listQuery.Reviewer = ''
 | |
|       this.listQuery.CroId = ''
 | |
|       this.listQuery.TrialCode = ''
 | |
|       this.listQuery.EndDate = new Date().format('yyyy-MM')
 | |
|       this.listQuery.BeginDate = new Date(new Date().setMonth(new Date().getMonth() - 5)).format('yyyy-MM')
 | |
|     },
 | |
|     handleExport() {
 | |
|       this.$refs[this.type].export()
 | |
|     },
 | |
|     selectMore(val) {
 | |
|       this.exportDisabled = val
 | |
|     },
 | |
|     handleVerify() {
 | |
|       this.dialogLoading = true
 | |
|       const param = {
 | |
|         beginDate: this.listQuery.BeginDate,
 | |
|         endDate: this.listQuery.EndDate
 | |
|       }
 | |
|       getAnalysisVerifyList(param).then(res => {
 | |
|         this.dialogVisible = true
 | |
|         this.dialogLoading = false
 | |
|         this.monthVerifyList = res.Result.MonthVerifyResult
 | |
|         this.verifyList = []
 | |
|         if (res.Result.RevenuesVerifyList) {
 | |
|           res.Result.RevenuesVerifyList.forEach(item => {
 | |
|             const obj = {}
 | |
|             obj.trialCode = item.TrialCode
 | |
|             obj.priceType = []
 | |
|             for (var i in item) {
 | |
|               if (item[i] === false) {
 | |
|                 obj.priceType.push(i)
 | |
|               }
 | |
|             }
 | |
|             this.verifyList.push(obj)
 | |
|           })
 | |
|         }
 | |
|       })
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| <style lang="scss">
 | |
| .analysis{
 | |
|   padding:0px;
 | |
|   height: 100%;
 | |
|   display: flex;
 | |
|   flex-direction: column;
 | |
|   .list-container{
 | |
|     padding: 5px 0px;
 | |
|     flex: 1;
 | |
|   }
 | |
| 
 | |
|   .el-dialog__header{
 | |
|     padding: 10px;
 | |
|   }
 | |
|   .el-dialog__body{
 | |
|     padding: 10px;
 | |
|     min-height: 300px;
 | |
|     font-size: 13px;
 | |
|   }
 | |
| }
 | |
| </style>
 |