irc_web/.svn/pristine/10/10b3e5b2f85cd34806a199745bb...

1001 lines
41 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/* eslint-disable */
<template>
<BaseContainer>
<el-tabs type="border-card" v-model="TrialReadingCriterionId">
<el-tab-pane :label="i.TrialReadingCriterionName" :name="i.TrialReadingCriterionId" v-for="i of trialCriterionList" :key="i.TrialReadingCriterionId">
<div v-if="TrialReadingCriterionId === i.TrialReadingCriterionId">
<div slot="search-container">
<el-form :inline="true">
<el-form-item :label="$t('trials:reviewAssign:table:siteCode')">
<el-select v-model="searchData.SiteId" clearable filterable style="width:120px;">
<el-option
v-for="(item,index) of siteOptions"
:key="'taskSearchData' + index"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:reviewAssign:table:subjectCode')">
<el-input v-model="searchData.SubjectCode" style="width:100px;" />
</el-form-item>
<!-- 阅片人 -->
<el-form-item :label="$t('trials:reviewAssign:searchForm:reader')">
<el-select v-model="searchData.DoctorUserId" clearable style="width:120px;">
<el-option v-for="item of DoctorUserList" :key="'taskSearchData' + item.DoctorUserId" :value="item.DoctorUserId" :label="`${item.UserName}(${item.FullName})`" />
</el-select>
</el-form-item>
<!-- 查询 -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getList">
{{ $t('common:button:search') }}
</el-button>
<!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
</el-button>
<!-- 分配规则 -->
<el-button type="primary" icon="el-icon-edit-outline" v-hasPermi="['trials:trials-panel:reading:readTaskAllocation:edit']" @click="openAllocationConfigVisible">
{{ $t('trials:reviewAssign:button:assignRules') }}
</el-button>
<!-- 手动分配 -->
<el-button type="primary" :loading="btnLoading" v-hasPermi="['trials:trials-panel:reading:readTaskAllocation:edit']" @click="manualAllocation()">
{{ $t('trials:reviewAssign:button:manualAllocation') }}
</el-button>
<!-- 访视、全局、肿瘤学阅片任务 -->
<el-button type="primary" :loading="btnLoading" @click="openAllocation('task')">
{{ $t('trials:reviewAssign:button:visitReadingTasks') }}
</el-button>
<!-- 裁判阅片任务 -->
<el-button type="primary" :loading="btnLoading" @click="openAllocation('referee')">
{{$t('trials:reviewAssign:button:adReadingTasks')}}
</el-button>
</el-form-item>
</el-form>
</div>
<div slot="main-container">
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:85}"
border
:data="list"
stripe
height="100"
@selection-change="handleSubjectAssignListSelectChange"
>
<el-table-column type="selection" align="left" width="45" />
<!-- 中心编号 -->
<el-table-column
prop="TrialSiteCode"
:label="$t('trials:reviewAssign:table:siteCode')"
width="140"
show-overflow-tooltip
/>
<!-- 受试者编号 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:reviewAssign:table:subjectCode')"
width="140"
show-overflow-tooltip
/>
<!-- 访视 -->
<el-table-column
prop="VisitTaskTypeCount"
:label="$t('trials:reviewAssign:table:visit')"
width="140"
show-overflow-tooltip
>
<template slot-scope="scope">
<span @click="openAllocation('task', 1, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.VisitTaskTypeCount}}</span>
</template>
</el-table-column>
<!-- 全局 -->
<el-table-column
prop="GlobalTaskTypeCount"
:label="$t('trials:reviewAssign:table:global')"
width="140"
show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsGlobalReading"
>
<template slot-scope="scope">
<span @click="openAllocation('task', 2, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.GlobalTaskTypeCount}}</span>
</template>
</el-table-column>
<!-- 裁判 -->
<el-table-column
prop="JudgeTaskTypeCount"
:label="$t('trials:reviewAssign:table:ad')"
width="140"
show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsArbitrationReading && ReadingType === 2"
>
<template slot-scope="scope">
<span @click="openAllocation('referee', 4, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.JudgeTaskTypeCount}}</span>
</template>
</el-table-column>
<!-- 肿瘤学 -->
<el-table-column
prop="OncologyTaskTypeCount"
:label="$t('trials:reviewAssign:table:oncology')"
width="140"
show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsOncologyReading"
>
<template slot-scope="scope">
<span @click="openAllocation('task', 5, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.OncologyTaskTypeCount}}</span>
</template>
</el-table-column>
<!-- 阅片人R1 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:reviewAssign:table:r1')"
min-width="100"
show-overflow-tooltip
v-if="ReadingType === 1"
>
<template slot-scope="scope">
<div v-if="scope.row.NowDoctorUserList.length" style="display: flex;justify-content: left;align-items: center">
<el-tag v-if="findDoctorUser(scope.row.NowDoctorUserList, 0).DoctorUser">
{{ `${findDoctorUser(scope.row.NowDoctorUserList, 0).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 1).DoctorUser.FullName})` }}
</el-tag>
</div>
</template>
</el-table-column>
<!-- 阅片人R1 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:reviewAssign:table:r1')"
min-width="100"
show-overflow-tooltip
v-if="ReadingType === 2"
>
<template slot-scope="scope">
<div v-if="scope.row.NowDoctorUserList.length" style="display: flex;justify-content: left;align-items: center">
<el-tag v-if="findDoctorUser(scope.row.NowDoctorUserList, 1).DoctorUser">
{{ `${findDoctorUser(scope.row.NowDoctorUserList, 1).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 1).DoctorUser.FullName})` }}
</el-tag>
</div>
</template>
</el-table-column>
<!-- 阅片人R2 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:reviewAssign:table:r2')"
min-width="100"
show-overflow-tooltip
v-if="ReadingType === 2"
>
<template slot-scope="scope">
<div v-if="scope.row.NowDoctorUserList.length" style="display: flex;justify-content: left;align-items: center">
<el-tag v-if="findDoctorUser(scope.row.NowDoctorUserList, 2).DoctorUser">
{{ `${findDoctorUser(scope.row.NowDoctorUserList, 2).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 2).DoctorUser.FullName})` }}
</el-tag>
</div>
</template>
</el-table-column>
<!-- 裁判(AD) -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:reviewAssign:table:ad')"
min-width="100"
show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsArbitrationReading && ReadingType === 2"
>
<template slot-scope="scope">
<div v-if="scope.row.NowDoctorUserList.length" style="display: flex;justify-content: left;align-items: center">
<el-tag v-if="findDoctorUser(scope.row.NowDoctorUserList, 3).DoctorUser">
{{ `${findDoctorUser(scope.row.NowDoctorUserList, 3).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 3).DoctorUser.FullName})` }}
</el-tag>
</div>
</template>
</el-table-column>
<!-- 肿瘤阅片人O1 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:reviewAssign:table:o1')"
min-width="100"
show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsOncologyReading"
>
<template slot-scope="scope">
<div v-if="scope.row.NowDoctorUserList.length" style="display: flex;justify-content: left;align-items: center">
<el-tag v-if="findDoctorUser(scope.row.NowDoctorUserList, 4).DoctorUser">
{{ `${findDoctorUser(scope.row.NowDoctorUserList, 4).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 4).DoctorUser.FullName})` }}
</el-tag>
</div>
</template>
</el-table-column>
<el-table-column
prop=""
:label="$t('common:action:action')"
width="180"
show-overflow-tooltip
v-if="hasPermi(['trials:trials-panel:reading:readTaskAllocation:edit'])"
>
<template slot-scope="scope">
<!-- 手动分配 -->
<el-button
circle
:disabled="scope.row.NowDoctorUserList.length === 4"
icon="el-icon-thumb"
:title="$t('trials:reviewAssign:tableAction:manualAssignment')"
@click="manualAllocation(scope.row)"
/>
<!-- 清除阅片人 -->
<el-button
circle
:disabled="scope.row.NowDoctorUserList.length === 0"
icon="el-icon-close"
:title="$t('trials:reviewAssign:tableAction:clearReaders')"
@click="openClearAudience(scope.row)"
/>
<!-- 查看取消历史 -->
<el-button
circle
icon="el-icon-document-copy"
:title="$t('trials:reviewAssign:tableAction:viewHistory')"
@click="openSubjectCancelDoctorHistoryList(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<pagination style="text-align: right;margin-top: 10px;" class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<!-- 分配规则 -->
<el-dialog
:title="$t('trials:reviewAssign:dialog:allocationRules')"
:visible.sync="AllocationConfigVisible"
width="1400px"
:close-on-click-modal="false"
custom-class="base-dialog-wrapper"
>
<div class="base-dialog-body" style="position: relative;">
<!-- 阅片人列表 -->
<el-divider content-position="left" style="margin-bottom: 40px;">
{{$t('trials:reviewAssign:allocationRules:title:readersList')}}
</el-divider>
<el-form
style="margin-top: 40px"
ref="signForm"
size="small"
label-width="0px"
>
<el-form-item>
<el-table
v-loading="loading"
border
:data="TaskAllocationRuleList"
stripe
>
<!-- 阅片人 -->
<el-table-column
prop="DoctorUser.UserName"
:label="$t('trials:reviewAssign:allocationRules:table:reader')"
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="$t('trials:reviewAssign:allocationRules:table:plannedCount')"
min-width="130"
show-overflow-tooltip
/>
<!-- 阅片类型 -->
<el-table-column
prop="ReadingCategorys"
:label="$t('trials:reviewAssign:allocationRules:table:readingType')"
:width="360 * TrialReadingCriterionList.length"
show-overflow-tooltip
>
<el-table-column
v-for="ite of TrialReadingCriterionList"
:label="ite.TrialReadingCriterionName"
:key="ite.TrialReadingCriterionId"
width="260"
show-overflow-tooltip
>
<template slot-scope="scope">
<span v-for="item of scope.row.CriterionCategoryList.find(v => {return v.TrialReadingCriterionId === ite.TrialReadingCriterionId}) ? scope.row.CriterionCategoryList.find(v => {return v.TrialReadingCriterionId === ite.TrialReadingCriterionId}).ReadingCategorys : []" :key="item">
<el-tag v-if="item === 1" type="primary">{{ $fd('ReadingCategory', item) + ' & ' + $fd('ReadingCategory', 2) }}</el-tag>
<!-- <el-tag v-if="item === 2" type="info">{{ $fd('ReadingCategory', item) }}</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>
<!-- 状态 -->
<el-table-column
prop="IsEnable"
:label="$t('trials:reviewAssign:allocationRules:table:status')"
min-width="80"
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="$t('trials:reviewAssign:allocationRules:table:remark')"
min-width="100"
show-overflow-tooltip
/>
<el-table-column
fixed="right"
:label="$t('common:action:action')"
width="80"
>
<template slot-scope="scope">
<!-- 编辑 -->
<el-button
circle
icon="el-icon-edit-outline"
:title="$t('common:button:edit')"
@click="addOrEdit(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</el-form-item>
<!-- 后续分配规则 -->
<el-divider content-position="left">
{{$t('trials:reviewAssign:allocationRules:title:subsequentAllocationRules')}}
</el-divider>
<el-descriptions class="margin-top" :column="1">
<el-descriptions-item>
<template slot="label">
<el-checkbox v-model="TrialTaskInfo.IsFollowVisitAutoAssign" disabled>
<!-- 同一病例随访阅片任务自动分配(在拟分配的阅片人未标记为退出项目状态时)默认状态 -->
{{$t('trials:reviewAssign:allocationRules:message1')}} {{$fd('AutoAssignDefaultState', TrialTaskInfo.FollowVisitAutoAssignDefaultState)}} </el-checkbox>
</template>
<div style="margin-left: 10px;">
</div>
</el-descriptions-item>
<!-- 同一病例随访阅片任务自动分配(在拟分配的阅片人未标记为退出项目状态时) -->
<el-descriptions-item :label="$t('trials:reviewAssign:allocationRules:message2')">
<template slot="label">
<el-checkbox v-model="TrialTaskInfo.IsFollowGlobalVisitAutoAssign" disabled>
<!-- 同一病例全局任务自动分配(在拟分配的阅片人未标记为退出项目状态时 默认状态 -->
{{$t('trials:reviewAssign:allocationRules:message3')}} {{$fd('AutoAssignDefaultState', TrialTaskInfo.FollowGlobalVisitAutoAssignDefaultState)}} </el-checkbox>
</template>
<div style="margin-left: 10px;">
</div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<el-checkbox v-model="TrialTaskInfo.IsFollowJudgeTaskAutoAssign" disabled>
<!-- 同一病例第二次裁判任务自动分配(在拟分配的阅片人未标记为退出项目状态时)默认状态 -->
{{$t('trials:reviewAssign:allocationRules:message4')}} {{$fd('AutoAssignDefaultState', TrialTaskInfo.FollowJudgeTaskAutoAssignDefaultState)}} </el-checkbox>
</template>
<div style="margin-left: 10px;" />
</el-descriptions-item>
</el-descriptions>
</el-form>
</div>
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
<!-- 取消 -->
<el-button
:disabled="btnLoading"
size="small"
type="primary"
@click="handleCancel"
>
{{ $t('common:button:cancel') }}
</el-button>
<!-- 保存 -->
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">
{{ $t('common:button:save') }}
</el-button>
</div>
</el-dialog>
<el-dialog
v-if="taskAllocationRuleVisible"
:title="title"
:visible.sync="taskAllocationRuleVisible"
width="600px"
:close-on-click-modal="false"
>
<AddOrEditTaskAllocationRule :data="rowData" :TaskAllocationRuleList="TaskAllocationRuleList" :doctor-user-list="DoctorUserList" @close="() => {taskAllocationRuleVisible = false}" @getList="openAllocationConfigVisible" />
</el-dialog>
<!--分配阅片人 -->
<el-dialog
v-if="manualAllocationVisible"
:title="$t('trials:reviewAssign:dialog:assignReader')"
:visible.sync="manualAllocationVisible"
width="1610px"
:close-on-click-modal="false"
>
<ManualAllocationTable :TrialReadingCriterionId="TrialReadingCriterionId" :data="rowData" :reading-type="ReadingType" :SubjectAssignSelectList="SubjectAssignSelectList" @close="() => {manualAllocationVisible = false}" @getList="getList"></ManualAllocationTable>
</el-dialog>
<!-- 清除阅片人 -->
<el-dialog
v-if="ClearAudienceVisible"
:title="$t('trials:reviewAssign:dialog:clearReader')"
:visible.sync="ClearAudienceVisible"
width="500px"
:close-on-click-modal="false"
>
<ClearAudienceList :TrialReadingCriterionId="TrialReadingCriterionId" :data="rowData" @close="() => {ClearAudienceVisible = false}" @getList="getList"></ClearAudienceList>
</el-dialog>
<!-- 访视/全局/肿瘤学阅片任务 : 裁判阅片任务 -->
<el-dialog
v-if="AllocationVisible"
:title="AllocationType === 'task' ? $t('trials:reviewAssign:button:visitReadingTasks') : $t('trials:reviewAssign:button:adReadingTasks')"
:visible.sync="AllocationVisible"
:fullscreen="true"
:close-on-click-modal="false"
>
<taskAllacation :trialReadingCriterionId="TrialReadingCriterionId" :allocationReadingCategory="AllocationReadingCategory" :allocationSubjectCode="AllocationSubjectCode" v-if="AllocationType === 'task'"></taskAllacation>
<refereeAllacation :trialReadingCriterionId="TrialReadingCriterionId" :allocationReadingCategory="AllocationReadingCategory" :allocationSubjectCode="AllocationSubjectCode" v-else></refereeAllacation>
</el-dialog>
<!-- 取消历史 -->
<el-dialog
v-if="SubjectCancelDoctorHistoryVisible"
:title="$t('trials:reviewAssign:dialog:cancelHistory')"
:visible.sync="SubjectCancelDoctorHistoryVisible"
width="800px"
:close-on-click-modal="false"
>
<el-table
border
:data="SubjectCancelDoctorHistoryList"
stripe
>
<!-- 取消时间 -->
<el-table-column
prop="CreateTime"
:label="$t('trials:reviewAssign:cancelHistory:table:cancelTime')"
width="180"
show-overflow-tooltip
/>
<!-- 原因 -->
<el-table-column
prop="Note"
:label="$t('trials:reviewAssign:cancelHistory:table:cancelReason')"
show-overflow-tooltip
/>
</el-table>
</el-dialog>
</div>
</div>
</el-tab-pane>
</el-tabs>
</BaseContainer>
</template>
<script>
import { getTrialSiteSelect } from '@/api/trials'
import { getTrialCriterionList, getSubjectCancelDoctorHistoryList, getSubjectAssignAndTaskStatList, getDoctorPlanAllocationRuleList, getSubjectApplyDoctorTaskStatList, assignSubjectTaskToDoctor, manualAssignDoctorApplyTask, autoSubjectAssignDoctor, getTaskAllocationRuleList, getSubjectAssignList, assignSubjectDoctor, cancelSubjectAssignDoctor, deleteTaskAllocationRule, configTrialTaskInfo, getDoctorUserSelectList } from '@/api/trials/reading'
import AddOrEditTaskAllocationRule from './components/AddOrEditTaskAllocationRule'
import ManualAllocationTable from './components/ManualAllocationTable'
import ClearAudienceList from './components/ClearAudienceList'
import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination'
import taskAllacation from '../task-allocation/index'
import refereeAllacation from '../referee-allocation/index'
const searchDataDefault = () => {
return {
PageIndex: 1,
PageSize: 20,
Asc: true,
SortField: '',
TrialId: null,
SiteId: null,
SubjectId: null,
SubjectCode: null,
DoctorUserId: null,
IsHaveAssigned: null,
IsAssignConfirmed: null,
TrialReadingCriterionId: null
}
}
const taskSearchDataDefault = () => {
return {
PageIndex: 1,
PageSize: 20,
Asc: true,
SortField: '',
TrialId: null,
SiteId: null,
SubjectId: null,
SubjectCode: null,
IsUrgent: null,
TaskName: null,
TaskState: null,
DoctorUserId: null,
ReadingCategory: null,
TaskAllocationState: null,
BeginAllocateDate: null,
EndAllocateDate: null
}
}
export default {
name: 'TrialsNotice',
components: { BaseContainer, Pagination, AddOrEditTaskAllocationRule, ManualAllocationTable, ClearAudienceList, taskAllacation, refereeAllacation },
data() {
return {
TrialReadingCriterionId: '0',
searchData: searchDataDefault(),
taskSearchData: taskSearchDataDefault(),
maxLength: 0,
list: [],
siteOptions: [],
total: 0,
SubjectAssignListTotal: 0,
loading: false,
AllocationVisible: false,
AllocationConfigVisible: false,
taskAllocationRuleVisible: false,
AutoAlloctionVisible: false,
ClearAudienceVisible: false,
WaitApplyVisible: false,
applyVisible: false,
manualAllocationVisible: false,
SubjectCancelDoctorHistoryVisible: false,
trialId: this.$route.query.trialId,
AllocationType: null,
currentData: {},
param: {},
DoctorUserList: [],
TaskAllocationRuleList: [],
btnLoading: false,
value: true,
value1: true,
TrialTaskInfo: {
TrialId: null,
TaskAllocateObjEnum: 0,
FollowVisitAutoAssignDefaultState: 0,
FollowGlobalVisitAutoAssignDefaultState: 0,
TaskAllocateDefaultState: 1,
IsFollowVisitAutoAssign: true,
IsFollowGlobalVisitAutoAssign: true
},
ReadingType: null,
rules: {
DoctorUserId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }]
},
title: '',
rowData: {},
ApplyTaskInfo: {},
timeList: [],
WaitApplyList: [],
SubjectAssignList: [],
SubjectAssignSelectList: [],
TaskAllocationRuleSelectList: [],
readVisible: false,
TaskOptType: null,
OtherInfo: null,
SubjectCancelDoctorHistoryList: [],
trialCriterionList: [],
TrialReadingCriterionList: [],
AllocationReadingCategory: null,
AllocationSubjectCode: null
}
},
watch: {
TrialReadingCriterionId (v) {
if (v) {
this.getList()
}
}
},
mounted() {
this.getDoctorUserSelectList()
this.getSite()
this.getTrialCriterionList()
},
methods: {
getTrialCriterionList() {
getTrialCriterionList(this.trialId).then(res => {
this.trialCriterionList = res.Result
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
}).catch(() => {})
},
openSubjectCancelDoctorHistoryList(row) {
getSubjectCancelDoctorHistoryList(row.SubjectId).then((res) => {
this.SubjectCancelDoctorHistoryVisible = true
this.SubjectCancelDoctorHistoryList = res.Result
})
},
openAllocation(AllocationType, ReadingCategory, SubjectCode) {
this.AllocationVisible = true
this.AllocationType = AllocationType
this.AllocationReadingCategory = ReadingCategory
this.AllocationSubjectCode = SubjectCode
},
openClearAudience(row) {
this.rowData = {...row}
this.ClearAudienceVisible = true
},
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
},
assignSubjectTaskToDoctor(row, type) {
this.rowData = { ...row }
this.rowData.TaskOptType = type
if (type === 1 || type === 2) {
this.readVisible = true
} else if (type === 3) {
// 是否确定分配?
this.$confirm(this.$t('trials:reviewAssign:message:message01')).then(() => {
this.btnLoading = true
this.loading = true
var params = Object.assign({}, this.rowData)
assignSubjectTaskToDoctor(params).then(res => {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.btnLoading = false
this.loading = false
this.readVisible = false
this.getList()
}).catch(() => {
this.btnLoading = false
this.loading = false
})
})
} else if (type === 4) {
// 是否确定取消分配?
this.$confirm(this.$t('trials:reviewAssign:message:message02')).then(() => {
this.btnLoading = true
this.loading = true
var params = Object.assign({}, this.rowData)
assignSubjectTaskToDoctor(params).then(res => {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.btnLoading = false
this.loading = false
this.readVisible = false
this.getList()
}).catch(() => {
this.btnLoading = false
this.loading = false
})
})
}
},
assignSubjectTaskToDoctorSave() {
this.$refs.readDataForm.validate(valid => {
if (!valid) return
this.btnLoading = true
this.loading = true
var params = Object.assign({}, this.rowData)
assignSubjectTaskToDoctor(params).then(res => {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.btnLoading = false
this.loading = false
this.readVisible = false
this.getList()
}).catch(() => {
this.btnLoading = false
this.loading = false
})
})
},
manualAssignDoctorApplyTaskSave() {
this.loading = true
this.btnLoading = true
manualAssignDoctorApplyTask(this.ApplyTaskInfo).then(res => {
this.loading = false
this.btnLoading = false
// 生效成功!
this.$message.success(this.$t('trials:reviewAssign:message:message03'))
this.WaitApplyVisible = false
this.getList()
this.openAutoAlloction()
}).catch(() => {
this.loading = false
this.btnLoading = false
})
},
manualAssignDoctorApplyTask(row) {
var params = {
TrialId: this.trialId,
SubjectIdList: Object.assign([], this.SubjectAssignSelectList.map(v => v.SubjectId))
}
this.ApplyTaskInfo = {
TrialId: this.trialId,
SubjectDoctorUserList: Object.assign([], this.SubjectAssignSelectList.map(v => {
v.DoctorUserIdArmList = v.DoctorUserList
return v
}))
}
if (row) {
params.SubjectIdList = [row.SubjectId]
var param = Object.assign({}, row)
param.DoctorUserIdArmList = param.DoctorUserList
this.ApplyTaskInfo = Object.assign({}, row)
delete this.ApplyTaskInfo.DoctorUserList
delete this.ApplyTaskInfo.DoctorUserIdList
this.ApplyTaskInfo.SubjectDoctorUserList = [
param
]
}
this.loading = true
this.btnLoading = true
getSubjectApplyDoctorTaskStatList(params).then(res => {
if (res.Result.length === 0) {
// 该项目没有有效阅片人!
this.$alert(this.$t('trials:reviewAssign:message:message04'))
return
}
this.WaitApplyList = res.Result
this.WaitApplyVisible = true
this.loading = false
this.btnLoading = false
}).catch(() => {
this.loading = false
this.btnLoading = false
})
},
autoSubjectAssignDoctor() {
// 确定执行自动分配?
this.$confirm(this.$t('trials:reviewAssign:message:message05')).then(() => {
this.loading = true
this.btnLoading = true
autoSubjectAssignDoctor({ TrialId: this.trialId }).then(res => {
this.loading = false
this.btnLoading = false
// 自动分配成功!
this.$message.success(this.$t('trials:reviewAssign:message:message06'))
this.getList()
this.openAutoAlloction()
}).catch(() => {
this.loading = false
this.btnLoading = false
})
})
},
handleSaveTaskAllocationRuleSelectList() {
if (this.TaskAllocationRuleSelectList.length === 0) {
// 请选择阅片人
this.$alert(this.$t('trials:reviewAssign:message:message07'))
return
}
var num
if (this.ReadingType === 2) {
num = 2
} else {
num = 1
}
if (this.TaskAllocationRuleSelectList.length !== num) {
// 当前阅片模式为xxx请选择正确阅片人数量
var msg = this.$t('trials:reviewAssign:message:message08')
msg = msg.replaceAll('xxx',this.$fd('ReadingMethod', this.ReadingType))
this.$alert(msg)
return
}
this.loading = true
this.btnLoading = true
var params = {
DoctorUserIdArmList: this.TaskAllocationRuleSelectList.map((v, i) => { return { DoctorUserId: v.DoctorUserId, ArmEnum: this.ReadingType === 1 ? 1 : i + 1 } }),
SubjectIdList: this.SubjectAssignSelectList.map(v => v.SubjectId),
TrialId: this.trialId,
IsReAssign: true,
}
assignSubjectDoctor(params).then(v => {
this.loading = false
this.btnLoading = false
this.openAutoAlloction()
this.TaskAllocationRuleSelectList = []
this.SubjectAssignSelectList = []
this.getDoctorUserSelectList()
// 分配成功!
this.$message.success(this.$t('trials:reviewAssign:message:message09'))
this.manualAllocationVisible = false
}).catch(() => {
this.loading = false
this.btnLoading = false
})
},
selectable(row) {
var num
if (this.ReadingType === 2) {
num = 2
} else {
num = 1
}
if (this.TaskAllocationRuleSelectList.length === num && !this.TaskAllocationRuleSelectList.find(v => { return v.UserName === row.UserName })) {
return false
} else {
return true
}
},
manualAllocation(row) {
this.rowData = {}
if (row) {
this.rowData = { ...row }
this.SubjectAssignSelectList = [row]
}
if (this.SubjectAssignSelectList.length === 0) {
// 请勾选要分配的受试者!
this.$alert(this.$t('trials:reviewAssign:message:message10'))
return
}
this.manualAllocationVisible = true
},
handleTaskAllocationRuleListSelectChange(e) {
this.TaskAllocationRuleSelectList = e
},
handleSubjectAssignListSelectChange(e) {
this.SubjectAssignSelectList = e
},
changeTimeList() {
if (this.timeList) {
this.searchData.BeginAllocateDate = this.timeList[0]
this.searchData.EndAllocateDate = this.timeList[1]
} else {
this.searchData.BeginAllocateDate = null
this.searchData.EndAllocateDate = null
}
},
handleCancel() {
this.AllocationConfigVisible = false
},
handleSave() {
this.btnLoading = true
this.loading = true
var params = Object.assign({}, this.TrialTaskInfo)
params.TrialId = this.$route.query.trialId
params.TrialReadingCriterionId = this.TrialReadingCriterionId
configTrialTaskInfo(params).then(res => {
this.btnLoading = false
this.loading = false
this.getList()
this.AllocationConfigVisible = false
// '保存成功'
this.$message.success(this.$t('common:message:savedSuccessfully'))
}).catch(() => {
this.btnLoading = false
this.loading = false
})
},
handleDelete(row) {
// 确定要删除${row.DoctorUser.UserName}(${row.DoctorUser.FullName})的任务分配规则?
var msg = this.$t('trials:reviewAssign:message:message11')
msg = msg.replaceAll('xxx',`${row.DoctorUser.UserName}(${row.DoctorUser.FullName})`)
this.$confirm(msg, {
type: 'warning',
distinguishCancelAndClose: true
}).then(() => {
this.loading = true
deleteTaskAllocationRule(row.Id, false).then(res => {
this.loading = false
// 删除成功
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.openAllocationConfigVisible()
}).catch(() => { this.loading = false })
})
},
addOrEdit(row) {
if (row) {
// 编辑
this.rowData = { ...row }
this.title = this.$t('trials:reviewAssign:allocationRules:edit')
} else {
// 新增
this.rowData = {}
this.title = this.$t('trials:reviewAssign:allocationRules:add')
}
this.taskAllocationRuleVisible = true
},
openAllocationConfigVisible() {
this.loading = true
getDoctorPlanAllocationRuleList({
TrialId: this.$route.query.trialId
}).then(res => {
this.loading = false
this.TaskAllocationRuleList = res.Result
if (this.list.length > 0) {
this.TrialReadingCriterionList = this.TaskAllocationRuleList[0].TrialReadingCriterionList
}
this.TrialTaskInfo = Object.assign({}, res.OtherInfo)
this.AllocationConfigVisible = true
this.taskAllocationRuleVisible = false
}).catch(() => { this.loading = false })
},
openAutoAlloction() {
this.loading = true
getTaskAllocationRuleList({
TrialId: this.$route.query.trialId
}).then(async(res) => {
this.taskSearchData.TrialId = this.$route.query.trialId
var params = Object.assign({}, this.taskSearchData)
var SubjectAssignListRes = await getSubjectAssignList(params)
this.SubjectAssignList = SubjectAssignListRes.Result.CurrentPageData
this.SubjectAssignListTotal = SubjectAssignListRes.Result.TotalCount
this.loading = false
this.TaskAllocationRuleList = res.Result
this.TrialTaskInfo = Object.assign({}, res.OtherInfo)
this.AutoAlloctionVisible = true
}).catch(() => { this.loading = false })
},
getDoctorUserSelectList() {
getDoctorUserSelectList(this.$route.query.trialId).then(res => {
this.DoctorUserList = res.Result
})
},
getList() {
this.searchData.TrialId = this.$route.query.trialId
this.loading = true
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
getSubjectAssignAndTaskStatList(this.searchData).then(res => {
this.loading = false
this.OtherInfo = res.OtherInfo
this.ReadingType = this.OtherInfo.ReadingType
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.ClearAudienceVisible = false
this.SubjectAssignSelectList = []
}).catch(() => { this.loading = false })
},
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
},
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
handleReset2() {
this.taskSearchData = taskSearchDataDefault()
this.openAutoAlloction()
},
getSite() {
getTrialSiteSelect(this.trialId).then(res => {
this.siteOptions = res.Result
})
},
// 排序
handleSortChange(column) {
if (column.order === 'ascending') {
this.searchData.Asc = true
} else {
this.searchData.Asc = false
}
this.searchData.SortField = column.prop
this.searchData.PageIndex = 1
this.getList()
}
}
}
</script>
<style lang="scss" scoped>
>>>.hidden-row{
display: none;
}
>>>.el-dialog__body {
padding: 15px 20px;
}
>>>.el-tag--danger.el-tag--dark {
// background-color: #f56c6c!important;
border-color: none!important;
// color: #fff!important;
}
>>>#TaskAllocationRuleList thead .el-checkbox__inner{
display: none;
}
>>>.el-descriptions-item__label.has-colon:after{
display: none;
}
>>>.base-dialog-wrapper .base-dialog-body{
max-height: 1000px;
}
</style>