442 lines
16 KiB
Plaintext
442 lines
16 KiB
Plaintext
<template>
|
||
<div class="workload">
|
||
<el-form
|
||
ref="workloadForm"
|
||
size="small"
|
||
:model="workloadForm"
|
||
:rules="workloadRules"
|
||
class="demo-ruleForm"
|
||
label-width="180px"
|
||
>
|
||
<!-- Expedited -->
|
||
<el-form-item :label="$t('trials:stats:form:expedited')">
|
||
<el-select v-model="trialExpeditedState" disabled>
|
||
<el-option v-for="item of $d.TrialExpeditedState" :label="item.label" :value="item.value" />
|
||
</el-select>
|
||
</el-form-item>
|
||
<!-- 展示所有 -->
|
||
<el-form-item :label="$t('trials:stats:form:dispalyAll')">
|
||
<el-switch v-model="trialExpeditedDisplayAll" />
|
||
</el-form-item>
|
||
<!-- Work Month -->
|
||
<el-form-item v-if="workloadForm.DataFrom!=0" :label="$t('trials:stats:form:workmonth')" prop="WorkTime">
|
||
<el-date-picker
|
||
v-model="workloadForm.WorkTime"
|
||
type="month"
|
||
value-format="yyyy-MM"
|
||
:picker-options="pickerOption"
|
||
disabled
|
||
/>
|
||
</el-form-item>
|
||
<!-- Work Date -->
|
||
<el-form-item v-if="workloadForm.DataFrom==0" :label="$t('trials:stats:form:workdate')" prop="WorkTime">
|
||
<el-date-picker
|
||
v-model="workloadForm.WorkTime"
|
||
type="date"
|
||
:default-value="defaultDate"
|
||
value-format="yyyy-MM-dd"
|
||
:picker-options="pickerOption"
|
||
@change="datePickerChange"
|
||
/>
|
||
</el-form-item>
|
||
<!-- Source -->
|
||
<el-form-item :label="$t('trials:stats:form:source')" prop="DataFrom">
|
||
<el-select v-model="workloadForm.DataFrom" style="width:100%;" value-key="value" disabled>
|
||
<el-option
|
||
v-for="item in statusOption"
|
||
:key="item.value"
|
||
:label="item.label"
|
||
:value="item.value"
|
||
/>
|
||
</el-select>
|
||
</el-form-item>
|
||
<!-- Training -->
|
||
<el-form-item :label="$t('trials:enrolledReviews:table:training')">
|
||
<el-input-number v-model="workloadForm.Training" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Training') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Training from client is {{ info.clientData.Training }}. -->
|
||
{{ `${$t('trials:stats:message:training')} ${info.clientData.Training}` }}
|
||
</span>
|
||
</el-form-item>
|
||
<!-- Refresher Training -->
|
||
<el-form-item :label="$t('trials:enrolledReviews:table:refresherTraining')">
|
||
<el-input-number v-model="workloadForm.RefresherTraining" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Refresher Training') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Refresher Training from client is {{ info.clientData.RefresherTraining }}. -->
|
||
{{ `${$t('trials:stats:message:refresherTraining')} ${info.clientData.RefresherTraining}` }}
|
||
</span>
|
||
</el-form-item>
|
||
<div v-show="trialExpeditedState==0||trialExpeditedDisplayAll">
|
||
<!-- Timepoint -->
|
||
<el-form-item :label="$t('trials:enrolledReviews:table:tpRegular')">
|
||
<el-input-number v-model="workloadForm.Timepoint" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Timepoint') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Timepoint from client is {{ info.clientData.Timepoint }}. -->
|
||
{{ `${$t('trials:stats:message:tp')} ${info.clientData.Timepoint}` }}
|
||
</span>
|
||
</el-form-item>
|
||
<!-- Adjudication -->
|
||
<el-form-item label="Adjudication:">
|
||
<el-input-number v-model="workloadForm.Adjudication" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Adjudication') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Adjudication from client is {{ info.clientData.Adjudication }}. -->
|
||
{{ `${$t('trials:stats:message:ad')} ${info.clientData.Adjudication}` }}
|
||
</span>
|
||
</el-form-item>
|
||
</div>
|
||
<div v-show="trialExpeditedState==1||trialExpeditedDisplayAll">
|
||
<!-- Timepoint 24H -->
|
||
<el-form-item label="Timepoint 24H:">
|
||
<el-input-number v-model="workloadForm.TimepointIn24H" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Timepoint 24H') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Timepoint 24H from client is {{ info.clientData.TimepointIn24H }}. -->
|
||
{{ `${$t('trials:stats:message:tp24H')} ${info.clientData.TimepointIn24H}` }}
|
||
</span>
|
||
</el-form-item>
|
||
<!-- Adjudication 24H -->
|
||
<el-form-item label="Adjudication 24H:">
|
||
<el-input-number v-model="workloadForm.AdjudicationIn24H" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Adjudication 24H') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Adjudication 24H from client is {{ info.clientData.AdjudicationIn24H }}. -->
|
||
{{ `${$t('trials:stats:message:ad24H')} ${info.clientData.AdjudicationIn24H}` }}
|
||
</span>
|
||
</el-form-item>
|
||
</div>
|
||
<div v-show="trialExpeditedState==2||trialExpeditedDisplayAll">
|
||
<!-- Timepoint 48H -->
|
||
<el-form-item label="Timepoint 48H:">
|
||
<el-input-number v-model="workloadForm.TimepointIn48H" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Timepoint 48H') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Timepoint 48H from client is {{ info.clientData.TimepointIn48H }}. -->
|
||
{{ `${$t('trials:stats:message:tp48H')} ${info.clientData.TimepointIn48H}` }}
|
||
</span>
|
||
</el-form-item>
|
||
<!-- Adjudication 48H -->
|
||
<el-form-item label="Adjudication 48H:">
|
||
<el-input-number v-model="workloadForm.AdjudicationIn48H" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Adjudication 48H') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Adjudication 48H from client is {{ info.clientData.AdjudicationIn48H }}. -->
|
||
{{ `${$t('trials:stats:message:ad48H')} ${info.clientData.AdjudicationIn48H}` }}
|
||
</span>
|
||
</el-form-item>
|
||
</div>
|
||
<!-- Global -->
|
||
<el-form-item label="Global:">
|
||
<el-input-number v-model="workloadForm.Global" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Global') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Global from client is {{ info.clientData.Global }}. -->
|
||
{{ `${$t('trials:stats:message:global')} ${info.clientData.Global}` }}
|
||
</span>
|
||
</el-form-item>
|
||
<!-- Downtime -->
|
||
<el-form-item label="Downtime:">
|
||
<el-input-number v-model="workloadForm.Downtime" :min="0" style="width:100%" />
|
||
<span
|
||
v-if="workloadForm.DataFrom == 2 && info.clientData && incorrectItem.indexOf('Downtime') !== -1"
|
||
style="color:#00D1B2;font-size:13px;"
|
||
>
|
||
<!-- Downtime from client is {{ info.clientData.Downtime }}. -->
|
||
{{ `${$t('trials:stats:message:downtime')} ${info.clientData.Downtime}` }}
|
||
</span>
|
||
</el-form-item>
|
||
|
||
<el-row>
|
||
<el-form-item>
|
||
<!-- Save -->
|
||
<el-button
|
||
size="small"
|
||
type="primary"
|
||
style="float:right;"
|
||
:disabled="btnDisabled"
|
||
@click="saveWorkload"
|
||
>
|
||
{{ $t('common:button:save') }}
|
||
</el-button>
|
||
</el-form-item>
|
||
</el-row>
|
||
</el-form>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
import { existWorkLoad, workLoadAddOrUpdate } from '@/api/trials'
|
||
import { parseISOLocal } from '@/utils/formatter'
|
||
export default {
|
||
props: {
|
||
trialId: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
doctorId: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
id: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
info: {
|
||
type: Object,
|
||
default: () => {}
|
||
},
|
||
yearMonth: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
trialExpeditedState: {
|
||
type: Number,
|
||
default: 0
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
trialExpeditedDisplayAll: false,
|
||
defaultDate: '',
|
||
YearMonthStr: '',
|
||
isExist: false,
|
||
existObj: '',
|
||
workloadForm: {
|
||
Id: '',
|
||
DoctorId: '',
|
||
TrialId: '',
|
||
Training: 0,
|
||
Timepoint: '',
|
||
TimepointIn24H: 0,
|
||
TimepointIn48H: 0,
|
||
Adjudication: 0,
|
||
AdjudicationIn24H: 0,
|
||
AdjudicationIn48H: 0,
|
||
Global: 0,
|
||
Downtime: 0,
|
||
RefresherTraining: 0,
|
||
WorkTime: '',
|
||
DataFrom: 0
|
||
},
|
||
statusOption: [
|
||
{ label: 'Data from Reviewer', value: 0 },
|
||
{ label: 'Data from Client', value: 1 },
|
||
{ label: 'Reconciled Data', value: 2 }
|
||
],
|
||
workloadRules: {
|
||
WorkTime: [
|
||
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }
|
||
],
|
||
DataFrom: [
|
||
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
|
||
]
|
||
},
|
||
pickerOption: {
|
||
disabledDate: (time) => {
|
||
var minDate = parseISOLocal(this.yearMonth + '-01')
|
||
var maxDate = parseISOLocal(this.yearMonth + '-01')
|
||
maxDate.setMonth(maxDate.getMonth() + 1)
|
||
maxDate.setDate(maxDate.getDate() - 1)
|
||
return (
|
||
time.getTime() < minDate.getTime() ||
|
||
time.getTime() > maxDate.getTime() ||
|
||
time.getTime() > Date.now()
|
||
)
|
||
}
|
||
},
|
||
btnDisabled: false,
|
||
incorrectItem: []
|
||
}
|
||
},
|
||
mounted() {
|
||
if (this.id) {
|
||
this.workloadForm = {
|
||
Training: this.info.Training,
|
||
Timepoint: this.info.Timepoint,
|
||
TimepointIn24H: this.info.TimepointIn24H,
|
||
TimepointIn48H: this.info.TimepointIn48H,
|
||
Adjudication: this.info.Adjudication,
|
||
AdjudicationIn24H: this.info.AdjudicationIn24H,
|
||
AdjudicationIn48H: this.info.AdjudicationIn48H,
|
||
Global: this.info.Global,
|
||
RefresherTraining: this.info.RefresherTraining,
|
||
Downtime: this.info.Downtime,
|
||
WorkTime: this.info.WorkTimeStr,
|
||
DataFrom: this.info.DataFrom
|
||
}
|
||
if (this.info.Id) {
|
||
this.workloadForm.Id = this.info.Id
|
||
}
|
||
this.YearMonthStr = this.info.YearMonthStr
|
||
} else {
|
||
this.defaultDate = parseISOLocal(this.yearMonth + '-01')
|
||
this.workloadForm.DataFrom = 0
|
||
}
|
||
},
|
||
methods: {
|
||
datePickerChange() {
|
||
this.existworkLoad()
|
||
},
|
||
|
||
existworkLoad() {
|
||
const param = {
|
||
TrialId: this.trialId,
|
||
DoctorId: this.doctorId,
|
||
WorkDate: this.workloadForm.WorkTime,
|
||
DataFrom: 0
|
||
}
|
||
|
||
var that = this
|
||
existWorkLoad(param).then((res) => {
|
||
if (res.IsSuccess) {
|
||
that.isExist = res.Result.IsExist
|
||
that.existObj = res.Result.WorkLoad
|
||
|
||
if (that.isExist && that.id) {
|
||
that
|
||
.$confirm(this.$t('trials:stats:message:editWorkload'), {
|
||
type: 'warning'
|
||
})
|
||
.then(() => {
|
||
that.$emit('setTitle', this.$t('trials:stats:dialogTitle:edit'))
|
||
that.workloadForm.Id = that.existObj.Id
|
||
that.workloadForm.DoctorId = that.existObj.DoctorId
|
||
that.workloadForm.TrialId = that.existObj.TrialId
|
||
that.workloadForm.Training = that.existObj.Training
|
||
that.workloadForm.Timepoint = that.existObj.Timepoint
|
||
that.workloadForm.TimepointIn24H = that.existObj.TimepointIn24H
|
||
that.workloadForm.TimepointIn48H = that.existObj.TimepointIn48H
|
||
that.workloadForm.Adjudication = that.existObj.Adjudication
|
||
that.workloadForm.AdjudicationIn24H =
|
||
that.existObj.AdjudicationIn24H
|
||
that.workloadForm.AdjudicationIn48H =
|
||
that.existObj.AdjudicationIn48H
|
||
that.workloadForm.Global = that.existObj.Global
|
||
that.workloadForm.RefresherTraining = that.existObj.RefresherTraining
|
||
that.workloadForm.Downtime = that.existObj.Downtime
|
||
that.workloadForm.WorkTime === that.existObj.WorkTime
|
||
})
|
||
.catch(() => {
|
||
//
|
||
that.workloadForm.WorkTime = ''
|
||
})
|
||
}
|
||
} else {
|
||
this.$message.error(res.ErrorMessage)
|
||
}
|
||
})
|
||
},
|
||
saveWorkload() {
|
||
this.$refs.workloadForm.validate((valid) => {
|
||
if (valid) {
|
||
this.workloadForm.DoctorId = this.doctorId
|
||
this.workloadForm.TrialId = this.trialId
|
||
this.addWorkload()
|
||
}
|
||
})
|
||
},
|
||
|
||
addWorkload() {
|
||
this.incorrectItem = []
|
||
if (
|
||
this.workloadForm.Timepoint +
|
||
this.workloadForm.TimepointIn24H +
|
||
this.workloadForm.TimepointIn48H +
|
||
this.workloadForm.Global +
|
||
this.workloadForm.Training +
|
||
this.workloadForm.Downtime +
|
||
this.workloadForm.Adjudication +
|
||
this.workloadForm.AdjudicationIn24H +
|
||
this.workloadForm.AdjudicationIn48H + this.workloadForm.RefresherTraining ===
|
||
0
|
||
) {
|
||
this.$message({
|
||
showClose: true,
|
||
message: this.$t('trials:stats:message:editWorkloadWarning1'),
|
||
type: 'error'
|
||
})
|
||
|
||
return
|
||
}
|
||
if (this.info.DataFrom === 2) {
|
||
const items = []
|
||
if (this.workloadForm.Training !== this.info.clientData.Training) items.push('Training')
|
||
if (this.workloadForm.Timepoint !== this.info.clientData.Timepoint) items.push('Timepoint')
|
||
if (this.workloadForm.TimepointIn24H !== this.info.clientData.TimepointIn24H) items.push('Timepoint 24H')
|
||
if (this.workloadForm.TimepointIn48H !== this.info.clientData.TimepointIn48H) items.push('Timepoint 48H')
|
||
|
||
if (this.workloadForm.Adjudication !== this.info.clientData.Adjudication) items.push('Adjudication')
|
||
if (this.workloadForm.AdjudicationIn24H !== this.info.clientData.AdjudicationIn24H) items.push('Adjudication 24H')
|
||
if (this.workloadForm.AdjudicationIn48H !== this.info.clientData.AdjudicationIn48H) items.push('Adjudication 48H')
|
||
if (this.workloadForm.Global !== this.info.clientData.Global) items.push('Global')
|
||
if (this.workloadForm.RefresherTraining !== this.info.clientData.RefresherTraining) items.push('Refresher Training')
|
||
if (this.workloadForm.Downtime !== this.info.clientData.Downtime) items.push('Downtime')
|
||
if (items.length === 0) {
|
||
this.workLoadAddOrUpdate()
|
||
} else {
|
||
const confirmMsg = this.$t('trials:stats:message:editWorkloadWarning2')
|
||
|
||
this.$confirm(confirmMsg, {
|
||
type: 'warning'
|
||
})
|
||
.then(() => {
|
||
this.workLoadAddOrUpdate()
|
||
})
|
||
.catch(() => {
|
||
this.incorrectItem = items
|
||
})
|
||
}
|
||
} else {
|
||
this.workLoadAddOrUpdate()
|
||
}
|
||
},
|
||
workLoadAddOrUpdate() {
|
||
this.btnDisabled = true
|
||
workLoadAddOrUpdate(this.workloadForm)
|
||
.then((res) => {
|
||
this.btnDisabled = false
|
||
if (res.IsSuccess) {
|
||
if (!this.workloadForm.Id) {
|
||
this.workloadForm.Id = res.Result
|
||
}
|
||
// this.$message.success('Saved successfully')
|
||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||
this.$emit('handleClose')
|
||
}
|
||
})
|
||
.catch(() => {
|
||
this.btnDisabled = false
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style scoped>
|
||
.workload .el-date-editor.el-input,
|
||
.workload .el-input-number--small,
|
||
.workload .el-date-editor.el-input__inner {
|
||
width: 100%;
|
||
}
|
||
|
||
</style>
|