360 lines
11 KiB
Plaintext
360 lines
11 KiB
Plaintext
<template>
|
|
<BaseContainer>
|
|
<template slot="search-container">
|
|
<el-form :inline="true">
|
|
<!-- Modality -->
|
|
<el-form-item :label="$t('trials:seletctedReviews:form:modality')">
|
|
<el-select
|
|
v-model="listQuery.ReadingTypeIds"
|
|
class="handle-select"
|
|
clearable
|
|
multiple
|
|
collapse-tags
|
|
>
|
|
<el-option
|
|
v-for="item of $d.ReadingType"
|
|
:key="item.id"
|
|
:label="item.label"
|
|
:value="item.id"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<!-- Subspeciality -->
|
|
<el-form-item :label="$t('trials:seletctedReviews:form:subspeciality')">
|
|
<el-select
|
|
v-model="listQuery.SubspecialityIds"
|
|
class="handle-select"
|
|
clearable
|
|
multiple
|
|
collapse-tags
|
|
>
|
|
<el-option
|
|
v-for="item of $d.Subspeciality"
|
|
:key="item.id"
|
|
:label="item.label"
|
|
:value="item.id"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<!-- Position -->
|
|
<el-form-item :label="$t('trials:seletctedReviews:form:position')">
|
|
<el-select
|
|
v-model="listQuery.PositionId"
|
|
class="handle-select"
|
|
clearable
|
|
>
|
|
<el-option
|
|
v-for="item of $d.Position"
|
|
:key="item.id"
|
|
:label="item.label"
|
|
:value="item.id"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<!-- Rank -->
|
|
<el-form-item :label="$t('trials:seletctedReviews:form:rank')">
|
|
<el-select v-model="listQuery.RankId" :placeholder="$t('trials:seletctedReviews:form:rank')" class="handle-select" clearable>
|
|
<el-option
|
|
v-for="item of $d.Rank"
|
|
:key="item.id"
|
|
:label="item.label"
|
|
:value="item.id"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<!-- Institution -->
|
|
<el-form-item :label="$t('trials:seletctedReviews:form:institution')">
|
|
<el-select
|
|
v-model="listQuery.HospitalId"
|
|
:placeholder="$t('trials:seletctedReviews:form:institution')"
|
|
class="handle-select mr10"
|
|
clearable
|
|
>
|
|
<el-option
|
|
v-for="(item,index) in hospitalList"
|
|
:key="index"
|
|
:label="item.HospitalName"
|
|
:value="item.Id"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<!-- 查询 -->
|
|
<el-button type="primary" icon="el-icon-search" :loading="loading" @click="handleSearch">
|
|
{{ $t('common:button:search') }}
|
|
</el-button>
|
|
<!-- 重置 -->
|
|
<el-button type="primary" icon="el-icon-refresh-left" :loading="loading" @click="handleReset">
|
|
{{ $t('common:button:reset') }}
|
|
</el-button>
|
|
<el-button
|
|
v-if="hasPermi(['role:pm'])"
|
|
type="primary"
|
|
:disabled="selectIdArr.length==0"
|
|
icon="el-icon-check"
|
|
:loading="loading"
|
|
@click="handleApply"
|
|
>
|
|
{{ $t('trials:seletctedReviews:button:select') }}
|
|
</el-button>
|
|
</el-form>
|
|
</template>
|
|
<template slot="main-container">
|
|
<el-table
|
|
ref="selectionList"
|
|
v-loading="listLoading"
|
|
v-adaptive="{bottomOffset:65}"
|
|
height="100"
|
|
:data="list"
|
|
class="table"
|
|
:row-class-name="handleHighLighRow"
|
|
@sort-change="handleSortChange"
|
|
@selection-change="handleSelectionChange"
|
|
>
|
|
<el-table-column type="selection" :selectable="handleSelectTable" />
|
|
<el-table-column type="index" width="40" />
|
|
<!-- Name -->
|
|
<el-table-column
|
|
prop="LastName"
|
|
:label="$t('trials:seletctedReviews:table:name')"
|
|
show-overflow-tooltip
|
|
width="120"
|
|
sortable="custom"
|
|
>
|
|
<template slot-scope="scope">
|
|
<router-link
|
|
style="color: #00d1b2;"
|
|
tag="a"
|
|
:to="{
|
|
path: `/trialsResume?doctorId=${scope.row.Id}&token=${token}`,
|
|
}"
|
|
target="_blank"
|
|
>{{ scope.row.LastName }} / {{ scope.row.FirstName }}</router-link>
|
|
</template>
|
|
</el-table-column>
|
|
<!-- Name CN -->
|
|
<el-table-column
|
|
prop="ChineseName"
|
|
:label="$t('trials:seletctedReviews:table:nameCN')"
|
|
show-overflow-tooltip
|
|
sortable="custom"
|
|
width="120"
|
|
/>
|
|
<!-- ID -->
|
|
<!-- <el-table-column-->
|
|
<!-- prop="ReviewerCode"-->
|
|
<!-- :label="$t('trials:seletctedReviews:table:id')"-->
|
|
<!-- show-overflow-tooltip-->
|
|
<!-- sortable="custom"-->
|
|
<!-- width="120"-->
|
|
<!-- />-->
|
|
<!-- Status -->
|
|
<el-table-column
|
|
prop="DoctorTrialState"
|
|
:label="$t('trials:seletctedReviews:table:status')"
|
|
width="120"
|
|
>
|
|
<template slot-scope="scope">
|
|
<el-tag v-if="scope.row.DoctorTrialState === 1" type="primary">{{ $fd('DoctorTrialState', 16) }}</el-tag>
|
|
</template>
|
|
</el-table-column>
|
|
<!-- Submitted -->
|
|
<el-table-column
|
|
prop="Submitted"
|
|
:label="$t('trials:seletctedReviews:table:submitted')"
|
|
show-overflow-tooltip
|
|
sortable="custom"
|
|
width="120"
|
|
/>
|
|
<!-- Approved -->
|
|
<el-table-column
|
|
prop="Approved"
|
|
:label="$t('trials:seletctedReviews:table:approved')"
|
|
show-overflow-tooltip
|
|
sortable="custom"
|
|
width="120"
|
|
/>
|
|
<!-- Reading -->
|
|
<el-table-column
|
|
prop="Reading"
|
|
:label="$t('trials:seletctedReviews:table:reading')"
|
|
show-overflow-tooltip
|
|
sortable="custom"
|
|
width="120"
|
|
/>
|
|
<!-- Specialty -->
|
|
<el-table-column
|
|
prop="Speciality"
|
|
:label="$t('trials:seletctedReviews:table:specialty')"
|
|
show-overflow-tooltip
|
|
min-width="120"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ scope.row.SpecialityId === otherId?(scope.row.SpecialityOther?scope.row.SpecialityOther:'Other'): scope.row.Speciality }}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- Subspecialty -->
|
|
<el-table-column
|
|
prop="Subspeciality"
|
|
:label="$t('trials:seletctedReviews:table:subspecialty')"
|
|
show-overflow-tooltip
|
|
min-width="150"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ scope.row.SubspecialityIds.map(v => {return $fd('Subspeciality', v, 'id')}).toString() }}
|
|
<!-- {{ scope.row.SubspecialityList.length > 0 ? scope.row.SubspecialityList.join(', ') : '' }}-->
|
|
</template>
|
|
</el-table-column>
|
|
<!-- Institution -->
|
|
<el-table-column
|
|
prop="HospitalName"
|
|
:label="$t('trials:seletctedReviews:table:institution')"
|
|
show-overflow-tooltip
|
|
width="150"
|
|
/>
|
|
<!-- City -->
|
|
<el-table-column
|
|
prop="City"
|
|
:label="$t('trials:seletctedReviews:table:city')"
|
|
show-overflow-tooltip
|
|
width="150"
|
|
/>
|
|
<!-- Country -->
|
|
<el-table-column
|
|
prop="Country"
|
|
:label="$t('trials:seletctedReviews:table:country')"
|
|
show-overflow-tooltip
|
|
width="150"
|
|
/>
|
|
<!-- Selector -->
|
|
<el-table-column
|
|
prop="OptUserName"
|
|
:label="$t('trials:seletctedReviews:table:selector')"
|
|
width="150"
|
|
/>
|
|
<!-- Selection Time -->
|
|
<el-table-column
|
|
prop="OptTimeStr"
|
|
:label="$t('trials:seletctedReviews:table:selectionTime')"
|
|
width="150"
|
|
/>
|
|
</el-table>
|
|
<pagination class="page" :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
|
|
</template>
|
|
</BaseContainer>
|
|
</template>
|
|
<script>
|
|
import BaseContainer from '@/components/BaseContainer'
|
|
import Pagination from '@/components/Pagination'
|
|
import store from '@/store'
|
|
import { mapGetters } from 'vuex'
|
|
import { getSelectionReviewerList, selectReviewers } from '@/api/trials'
|
|
const getListQueryDefault = () => {
|
|
return {
|
|
TrialId: '',
|
|
ReadingTypeIds: [],
|
|
SubspecialityIds: [],
|
|
PageIndex: 1,
|
|
PageSize: 20,
|
|
PositionId: '',
|
|
RankId: '',
|
|
HospitalId: '',
|
|
Asc: false,
|
|
SortField: '',
|
|
AcceptingNewTrial: true,
|
|
InformationConfirmed: true,
|
|
ContractorStatus: 1
|
|
}
|
|
}
|
|
export default {
|
|
name: 'Selection',
|
|
components: { BaseContainer, Pagination },
|
|
dicts: ['ReadingType', 'Subspeciality', 'Position', 'Rank'],
|
|
data() {
|
|
return {
|
|
list: [],
|
|
listQuery: getListQueryDefault(),
|
|
total: 0,
|
|
loading: false,
|
|
listLoading: false,
|
|
selectIdArr: [],
|
|
otherId: 'ef84e9cb-f1a6-49d7-b6da-34be2c12abd5',
|
|
token: store.getters.token
|
|
}
|
|
},
|
|
computed: {
|
|
...mapGetters(['hospitalList'])
|
|
},
|
|
created() { this.initPage() },
|
|
methods: {
|
|
initPage() {
|
|
this.getList()
|
|
store.dispatch('global/getHospital')
|
|
},
|
|
getList() {
|
|
this.listLoading = true
|
|
this.listQuery.TrialId = this.$route.query.trialId
|
|
getSelectionReviewerList(this.listQuery).then(res => {
|
|
this.listLoading = false
|
|
this.list = res.Result.CurrentPageData
|
|
this.total = res.Result.TotalCount
|
|
// eslint-disable-next-line handle-callback-err
|
|
}).catch(() => { this.listLoading = false })
|
|
},
|
|
handleApply() {
|
|
this.$confirm(this.$t('trials:seletctedReviews:message:msg1'), {
|
|
type: 'warning'
|
|
}).then(() => {
|
|
this.loading = true
|
|
const trialId = this.$route.query.trialId
|
|
selectReviewers(trialId, this.selectIdArr).then(res => {
|
|
this.loading = false
|
|
if (res.IsSuccess) {
|
|
this.getList()
|
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
|
this.$emit('nextStep', 'submission')
|
|
}
|
|
}).catch(() => {
|
|
this.loading = false
|
|
})
|
|
})
|
|
},
|
|
handleSelectionChange(val) {
|
|
const arr = []
|
|
for (let index = 0; index < val.length; index++) {
|
|
arr.push(val[index].Id)
|
|
}
|
|
this.selectIdArr = arr
|
|
},
|
|
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()
|
|
},
|
|
handleHighLighRow({ row, rowIndex }) {
|
|
if (row.DoctorTrialState === 1) {
|
|
return 'selected'
|
|
}
|
|
},
|
|
handleSelectTable(row) { return row.DoctorTrialState !== 1 },
|
|
handleDetail(row) {
|
|
const { href } = this.$router.resolve({ path: `/trialsResume?doctorId=${row.Id}` })
|
|
window.open(href, '_blank')
|
|
},
|
|
handleSearch() {
|
|
this.listQuery.PageIndex = 1
|
|
this.getList()
|
|
},
|
|
handleReset() {
|
|
this.listQuery = getListQueryDefault()
|
|
this.getList()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|