408 lines
14 KiB
Plaintext
408 lines
14 KiB
Plaintext
<template>
|
||
<el-form
|
||
ref="taskAllocationRuleDataForm"
|
||
v-loading="loading"
|
||
:model="form"
|
||
size="small"
|
||
>
|
||
<div>
|
||
<div style="line-height: 32px;margin-bottom: 10px;">
|
||
当前项目阅片模式为:
|
||
<el-tag type="primary">{{ $fd('ReadingMethod', readingType) }}</el-tag>
|
||
</div>
|
||
<div v-if="readingType === 1" style="line-height: 32px;margin-bottom: 10px;">
|
||
阅片人(R1):
|
||
<el-select v-model="form.R1" clearable @change="$forceUpdate()" :disabled="!!q.find(v => v.ArmEnum === 0)" size="mini">
|
||
<el-option v-for="item of DoctorSelectList.R1" :key="`R1${item.DoctorUserId}`" v-if="form.O1 !== item.DoctorUserId && form.AD !== item.DoctorUserId && form.R2 !== item.DoctorUserId && !q.find(v => v.DoctorUser.UserId === item.DoctorUserId) || !!q.find(v => v.ArmEnum === 0)" :label="`${item.UserName}(${item.FullName})`" :value="item.DoctorUserId" />
|
||
</el-select>
|
||
</div>
|
||
<div v-if="readingType === 2" style="line-height: 32px;margin-bottom: 10px;">
|
||
阅片人(R1):
|
||
<el-select v-model="form.R1" clearable @change="$forceUpdate()" :disabled="!!q.find(v => v.ArmEnum === 1)" size="mini">
|
||
<el-option v-for="item of DoctorSelectList.R1" :key="`R1${item.DoctorUserId}`" v-if="form.O1 !== item.DoctorUserId && form.AD !== item.DoctorUserId && form.R2 !== item.DoctorUserId && !q.find(v => v.DoctorUser.UserId === item.DoctorUserId) || !!q.find(v => v.ArmEnum === 1)" :label="`${item.UserName}(${item.FullName})`" :value="item.DoctorUserId" />
|
||
</el-select>
|
||
</div>
|
||
<div v-if="readingType === 2" style="line-height: 32px;margin-bottom: 10px;">
|
||
阅片人(R2):
|
||
<el-select v-model="form.R2" clearable @change="$forceUpdate()" :disabled="!!q.find(v => v.ArmEnum === 2)" size="mini">
|
||
<el-option v-for="item of DoctorSelectList.R2" :key="`R2${item.DoctorUserId}`" v-if="form.O1 !== item.DoctorUserId && form.R1 !== item.DoctorUserId && form.AD !== item.DoctorUserId && !q.find(v => v.DoctorUser.UserId === item.DoctorUserId) || !!q.find(v => v.ArmEnum === 2)" :label="`${item.UserName}(${item.FullName})`" :value="item.DoctorUserId" />
|
||
</el-select>
|
||
</div>
|
||
<div style="line-height: 32px;margin-bottom: 10px;">
|
||
裁判(AD):
|
||
<el-select v-model="form.AD" clearable @change="$forceUpdate()" :disabled="!!q.find(v => v.ArmEnum === 3)" size="mini">
|
||
<el-option v-for="item of DoctorSelectList.AD" :key="`AD${item.DoctorUserId}`" v-if="form.O1 !== item.DoctorUserId && form.R1 !== item.DoctorUserId && form.R2 !== item.DoctorUserId && !q.find(v => v.DoctorUser.UserId === item.DoctorUserId) || !!q.find(v => v.ArmEnum === 3)" :label="`${item.UserName}(${item.FullName})`" :value="item.DoctorUserId" />
|
||
</el-select>
|
||
</div>
|
||
<div style="line-height: 32px;margin-bottom: 10px;">
|
||
肿瘤阅片人(O1):
|
||
<el-select v-model="form.O1" clearable @change="$forceUpdate()" :disabled="!!q.find(v => v.ArmEnum === 4)" size="mini">
|
||
<el-option v-for="item of DoctorSelectList.O1" :key="`O1${item.DoctorUserId}`" v-if="form.AD !== item.DoctorUserId && form.R1 !== item.DoctorUserId && form.R2 !== item.DoctorUserId && !q.find(v => v.DoctorUser.UserId === item.DoctorUserId) || !!q.find(v => v.ArmEnum === 4)" :label="`${item.UserName}(${item.FullName})`" :value="item.DoctorUserId" />
|
||
</el-select>
|
||
</div>
|
||
</div>
|
||
<el-table
|
||
border
|
||
:data="list"
|
||
stripe
|
||
>
|
||
<el-table-column
|
||
prop="UserName"
|
||
label="阅片人"
|
||
min-width="180"
|
||
show-overflow-tooltip
|
||
>
|
||
<template slot-scope="scope">
|
||
{{ `${scope.row.DoctorUser.UserName}(${scope.row.DoctorUser.FullName})` }}
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="PlanSubjectCount"
|
||
label="计划受试者数量"
|
||
min-width="130"
|
||
show-overflow-tooltip
|
||
>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="AssignedSubjectCount"
|
||
label="已分配受试者数量"
|
||
min-width="140"
|
||
show-overflow-tooltip
|
||
>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="UserName"
|
||
label="阅片类型"
|
||
min-width="260"
|
||
show-overflow-tooltip
|
||
>
|
||
<template slot-scope="scope">
|
||
<span v-for="item of scope.row.ReadingCategoryList">
|
||
<el-tag v-if="item === 1" type="primary">{{ $fd('ReadingCategory', item) + '&' + $fd('ReadingCategory', 2) }}</el-tag>
|
||
<el-tag v-if="item === 4" type="danger">{{ $fd('ReadingCategory', item) }}</el-tag>
|
||
<el-tag v-if="item === 5" type="warning">{{ $fd('ReadingCategory', item) }}</el-tag>
|
||
</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="WaitDealAllTaskCount"
|
||
label="待处理任务量(全平台)"
|
||
min-width="180"
|
||
show-overflow-tooltip
|
||
>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="WaitDealTrialTaskCount"
|
||
label="待处理任务量(项目)"
|
||
min-width="180"
|
||
show-overflow-tooltip
|
||
>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="UserName"
|
||
label="访视平均阅片时间(去除离群值后的)"
|
||
min-width="260"
|
||
show-overflow-tooltip
|
||
>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="IsEnable"
|
||
label="状态"
|
||
min-width="100"
|
||
show-overflow-tooltip
|
||
>
|
||
<template slot-scope="scope">
|
||
<el-tag v-if="!scope.row.IsEnable" type="danger">{{ $fd('IsEnable', scope.row.IsEnable) }}</el-tag>
|
||
<el-tag v-else>{{ $fd('IsEnable', scope.row.IsEnable) }}</el-tag>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="Note"
|
||
label="备注"
|
||
min-width="100"
|
||
show-overflow-tooltip
|
||
/>
|
||
</el-table>
|
||
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
|
||
<el-form-item>
|
||
<!-- 取消 -->
|
||
<el-button
|
||
:disabled="loading"
|
||
size="small"
|
||
type="primary"
|
||
@click="close"
|
||
>
|
||
关闭
|
||
</el-button>
|
||
<el-button size="small" type="primary" :loading="loading" style="margin-top: 10px;" @click="save">
|
||
{{ $t('common:button:save') }}
|
||
</el-button>
|
||
</el-form-item>
|
||
</div>
|
||
</el-form>
|
||
</template>
|
||
|
||
<script>
|
||
import { getSubjectAssignAndTaskStatList, batchAssignDoctorToSubject, getDoctorSubjectStat, getDoctorSelectList} from '@/api/trials/reading'
|
||
|
||
export default {
|
||
name: 'ManualAllocationTable',
|
||
props: {
|
||
TrialReadingCriterionId: {
|
||
type: String,
|
||
default() {
|
||
return []
|
||
}
|
||
},
|
||
data: {
|
||
type: Object,
|
||
default() {
|
||
return {}
|
||
}
|
||
},
|
||
SubjectAssignSelectList: {
|
||
type: Array,
|
||
default() {
|
||
return []
|
||
}
|
||
},
|
||
// readingType: {
|
||
// type: Number,
|
||
// default() {
|
||
// return 0
|
||
// }
|
||
// }
|
||
},
|
||
data() {
|
||
return {
|
||
TrialId: this.$route.query.trialId,
|
||
form: {
|
||
R0: null,
|
||
R1: null,
|
||
R2: null,
|
||
AD: null,
|
||
O1: null
|
||
},
|
||
DoctorSelectList: {
|
||
R1: [],
|
||
R2: [],
|
||
AD: [],
|
||
O1: [],
|
||
},
|
||
list: [],
|
||
loading: false,
|
||
btnLoading: false,
|
||
q: [],
|
||
readingType: null,
|
||
isShowInfo: {}
|
||
}
|
||
},
|
||
mounted() {
|
||
this.TrialId = this.$route.query.trialId
|
||
this.getDoctorSubjectStat()
|
||
var arr = []
|
||
arr.push(this.getDoctorSelectList(1))
|
||
arr.push(this.getDoctorSelectList(2))
|
||
arr.push(this.getDoctorSelectList(4))
|
||
arr.push(this.getDoctorSelectList(5))
|
||
var q = []
|
||
if (Object.keys(this.data).length && this.data.SubjectId) {
|
||
} else {
|
||
this.SubjectAssignSelectList.forEach(v => {
|
||
v.NowDoctorUserList.forEach(v1 => {
|
||
q.push(v1)
|
||
})
|
||
this.q = q
|
||
})
|
||
}
|
||
console.log(q)
|
||
Promise.all(arr).then(() => {
|
||
if (Object.keys(this.data).length && this.data.SubjectId) {
|
||
this.form.R0 = this.findDoctorUser(this.data.NowDoctorUserList, 0).DoctorUser ? this.findDoctorUser(this.data.NowDoctorUserList, 0).DoctorUser.UserId : null
|
||
this.form.R1 = this.findDoctorUser(this.data.NowDoctorUserList, 1).DoctorUser ? this.findDoctorUser(this.data.NowDoctorUserList, 1).DoctorUser.UserId : null
|
||
this.form.R2 = this.findDoctorUser(this.data.NowDoctorUserList, 2).DoctorUser ? this.findDoctorUser(this.data.NowDoctorUserList, 2).DoctorUser.UserId : null
|
||
this.form.AD = this.findDoctorUser(this.data.NowDoctorUserList, 3).DoctorUser ? this.findDoctorUser(this.data.NowDoctorUserList, 3).DoctorUser.UserId : null
|
||
this.form.O1 = this.findDoctorUser(this.data.NowDoctorUserList, 4).DoctorUser ? this.findDoctorUser(this.data.NowDoctorUserList, 4).DoctorUser.UserId : null
|
||
this.data.NowDoctorUserList.forEach(v1 => {
|
||
q.push(v1)
|
||
})
|
||
this.q = q
|
||
} else {
|
||
var userList = {
|
||
R0: [],
|
||
R1: [],
|
||
R2: [],
|
||
AD: [],
|
||
O1: []
|
||
}
|
||
this.SubjectAssignSelectList.forEach(v1 => {
|
||
v1.NowDoctorUserList.forEach(v => {
|
||
if (v.ArmEnum === 0) {
|
||
userList.R0.push(v)
|
||
}
|
||
if (v.ArmEnum === 1) {
|
||
userList.R1.push(v)
|
||
}
|
||
if (v.ArmEnum === 2) {
|
||
userList.R2.push(v)
|
||
}
|
||
if (v.ArmEnum === 3) {
|
||
userList.AD.push(v)
|
||
}
|
||
if (v.ArmEnum === 4) {
|
||
userList.O1.push(v)
|
||
}
|
||
})
|
||
})
|
||
var isShowInfo = {}
|
||
for (var key in userList) {
|
||
var itemList = userList[key]
|
||
var id
|
||
isShowInfo[key] = this.checkArrayObjectValueRepeat(itemList, 'DoctorUserId')
|
||
}
|
||
this.isShowInfo = isShowInfo
|
||
if (!isShowInfo.R0) {
|
||
this.form.R0 = this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 0).DoctorUser ? this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 0).DoctorUser.UserId : null
|
||
}
|
||
if (!isShowInfo.R1) {
|
||
this.form.R1 = this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 1).DoctorUser ? this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 1).DoctorUser.UserId : null
|
||
}
|
||
if (!isShowInfo.R2) {
|
||
this.form.R2 = this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 2).DoctorUser ? this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 2).DoctorUser.UserId : null
|
||
}
|
||
if (!isShowInfo.AD) {
|
||
this.form.AD = this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 3).DoctorUser ? this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 3).DoctorUser.UserId : null
|
||
}
|
||
if (!isShowInfo.O1) {
|
||
this.form.O1 = this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 4).DoctorUser ? this.findDoctorUser(this.SubjectAssignSelectList[0].NowDoctorUserList, 4).DoctorUser.UserId : null
|
||
}
|
||
}
|
||
})
|
||
},
|
||
methods: {
|
||
checkArrayObjectValueRepeat(dataArr, key) {
|
||
console.log(dataArr)
|
||
var a = null
|
||
var b = false
|
||
console.log(this.SubjectAssignSelectList.length)
|
||
if (this.SubjectAssignSelectList.length === 1) {
|
||
return false
|
||
}
|
||
dataArr.forEach((v,i) => {
|
||
if(i === 0){
|
||
a = v[key]
|
||
}
|
||
if (v[key] !== a) {
|
||
b = true
|
||
}
|
||
if (dataArr.length === 1) {
|
||
b = true
|
||
}
|
||
})
|
||
return b
|
||
},
|
||
findDoctorUser(list, type) {
|
||
var a
|
||
if (list.length > 0) {
|
||
a = list.find(v => {
|
||
return v.ArmEnum === type
|
||
}) ? list.find(v => {
|
||
return v.ArmEnum === type
|
||
}) : {
|
||
DoctorUser: null
|
||
}
|
||
}
|
||
return a
|
||
},
|
||
getDoctorSelectList(ReadingCategory) {
|
||
return new Promise(resolve => {
|
||
getDoctorSelectList({
|
||
TrialId: this.$route.query.trialId,
|
||
ReadingCategory: ReadingCategory,
|
||
TrialReadingCriterionId: this.TrialReadingCriterionId
|
||
}).then(res => {
|
||
switch (ReadingCategory) {
|
||
case 1:
|
||
this.$set(this.DoctorSelectList, 'R1', res.Result)
|
||
break;
|
||
case 2:
|
||
this.$set(this.DoctorSelectList, 'R2', res.Result)
|
||
break;
|
||
case 4:
|
||
this.$set(this.DoctorSelectList, 'AD', res.Result)
|
||
break;
|
||
case 5:
|
||
this.$set(this.DoctorSelectList, 'O1', res.Result)
|
||
break;
|
||
}
|
||
resolve()
|
||
})
|
||
})
|
||
},
|
||
getDoctorSubjectStat() {
|
||
this.loading = true
|
||
getDoctorSubjectStat(this.TrialId, this.TrialReadingCriterionId).then(res => {
|
||
this.readingType = res.OtherInfo.ReadingType
|
||
this.list = res.Result
|
||
this.loading = false
|
||
}).catch(() => {
|
||
this.loading = false
|
||
})
|
||
},
|
||
save() {
|
||
var DoctorArmList = []
|
||
if (this.form.R0) {
|
||
DoctorArmList.push({
|
||
ArmEnum: 0,
|
||
DoctorUserId: this.form.R0
|
||
})
|
||
}
|
||
if (this.form.R1) {
|
||
DoctorArmList.push({
|
||
ArmEnum: 1,
|
||
DoctorUserId: this.form.R1
|
||
})
|
||
}
|
||
if (this.form.R2) {
|
||
DoctorArmList.push({
|
||
ArmEnum: 2,
|
||
DoctorUserId: this.form.R2
|
||
})
|
||
}
|
||
if (this.form.AD) {
|
||
DoctorArmList.push({
|
||
ArmEnum: 3,
|
||
DoctorUserId: this.form.AD
|
||
})
|
||
}
|
||
if (this.form.O1) {
|
||
DoctorArmList.push({
|
||
ArmEnum: 4,
|
||
DoctorUserId: this.form.O1
|
||
})
|
||
}
|
||
var params = {
|
||
TrialId: this.TrialId,
|
||
TrialReadingCriterionId: this.TrialReadingCriterionId,
|
||
SubjectIdList: this.SubjectAssignSelectList.map(v => v.SubjectId),
|
||
DoctorArmList: DoctorArmList
|
||
}
|
||
this.loading = true
|
||
batchAssignDoctorToSubject(params).then(res => {
|
||
this.$message.success('保存成功')
|
||
this.loading = false
|
||
this.$emit('getList')
|
||
this.close()
|
||
}).catch(() => {
|
||
this.loading = false
|
||
})
|
||
},
|
||
close() { this.$emit('close') }
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
|
||
</style>
|