irc_web/.svn/pristine/17/178602036c295c90e961936e2c3...

336 lines
13 KiB
Plaintext

<template>
<div v-loading="loading" class="reading-unit-wrapper">
<div v-if="isShow" class="content">
<el-tabs v-model="TrialReadingCriterionId" type="border-card">
<el-tab-pane v-for="item of trialCriterionList" v-if="isPaneShow" :key="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" :name="item.TrialReadingCriterionId">
<div style="text-align: right;padding-bottom: 10px">
<!-- 同步当前标准 -->
<el-button
type="primary"
icon="el-icon-refresh-left"
:loading="loading"
size="mini"
v-if="NODE_ENV !== 'prod'"
@click="handleSync"
>
{{ $t('trials:readingUnit:button:sync') }}
</el-button>
</div>
<el-collapse v-model="activeCollapse" class="setting-config">
<!-- 阅片规则 -->
<el-collapse-item :title="$t('trials:readingUnit:readingRules')" name="1">
<ReadingRules
:ref="`readingRules${item.TrialReadingCriterionId}`"
:trial-reading-criterion-id="TrialReadingCriterionId"
@setConfirm="setConfirm"
@reloadArbitrationRules="reloadArbitrationRules"
@setArbitrationReading="setArbitrationReading"
@setAdditionalAssessment="setAdditionalAssessment"
@setIsClinicalReading="setIsClinicalReading"
@setGlobalReading="setGlobalReading"
@setOncologyReading="setOncologyReading"
@setDigitPlaces="setDigitPlaces"
/>
</el-collapse-item>
<!-- 阅片标准 -->
<el-collapse-item :title="$t('trials:readingUnit:readingCriterion')" name="2">
<ReadingCriterions
:ref="`readingCriterions${item.TrialReadingCriterionId}`"
:trial-reading-criterion-id="TrialReadingCriterionId"
:digit-places="digitPlaces"
:is-additional-assessment="isAdditionalAssessment"
@reloadArbitrationRules="reloadArbitrationRules"
/>
</el-collapse-item>
<!-- 全局阅片 -->
<el-collapse-item v-if="isGlobalReading" :title="$t('trials:readingUnit:GlobalReading')" name="5">
<GlobalReading :ref="`globalReading${item.TrialReadingCriterionId}`" :trial-reading-criterion-id="TrialReadingCriterionId" />
</el-collapse-item>
<!-- 仲裁规则 -->
<el-collapse-item v-if="isArbitrationReading" :title="$t('trials:readingUnit:adRules')" name="3">
<ArbitrationRules :ref="`arbitrationRules${item.TrialReadingCriterionId}`" :trial-reading-criterion-id="TrialReadingCriterionId" />
</el-collapse-item>
<!-- 肿瘤学阅片配置 -->
<!-- v-if="isClinicalReading" -->
<el-collapse-item v-if="isOncologyReading" :title="$t('trials:readingUnit:oncologyReading')" name="4">
<OncologyForm :ref="`oncologyForm${item.TrialReadingCriterionId}`" :trial-reading-criterion-id="TrialReadingCriterionId" />
</el-collapse-item>
</el-collapse>
</el-tab-pane>
</el-tabs>
</div>
<div v-if="!isConfirm && hasPermi(['trials:trials-panel:setting:reading-unit:edit'])" class="bottom">
<!-- 确认 -->
<el-button
type="danger"
@click="handleConfirm"
>
{{ $t('trials:readingUnit:button:confirm') }}
</el-button>
</div>
<!--签名框 -->
<el-dialog
v-if="signVisible"
:visible.sync="signVisible"
:close-on-click-modal="false"
width="600px"
custom-class="base-dialog-wrapper"
>
<div slot="title">
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span>
</div>
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
</el-dialog>
</div>
</template>
<script>
import { resetTrialCriterionAsyncState, asyncTrialCriterionDictionary, getTrialCriterionList, trialReadingInfoSign, trialReadingInfoSignVerify, verifyeCriterionNeedSynchronize, synchronizeCriterion } from '@/api/trials'
import ReadingRules from './components/ReadingRules'
import ReadingCriterions from './components/ReadingCriterions'
import ArbitrationRules from './components/ArbitrationRules'
import GlobalReading from './components/GlobalReading'
import OncologyForm from './components/OncologyForm'
import SignForm from '@/views/trials/components/newSignForm'
import const_ from '@/const/sign-code'
export default {
name: 'ReadingUnit',
components: { GlobalReading, ReadingRules, ReadingCriterions, ArbitrationRules, OncologyForm, SignForm },
data() {
return {
NODE_ENV: process.env.NODE_ENV,
activeCollapse: ['1', '2', '3', '4', '5'],
signCode: null,
signVisible: false,
currentUser: zzSessionStorage.getItem('userName'),
isConfirm: true,
loading: false,
isArbitrationReading: false,
isClinicalReading: false,
trialCriterionList: [],
TrialReadingCriterionId: '0',
trialId: this.$route.query.trialId,
isPaneShow: true,
isShow: false,
isOncologyReading: false,
isGlobalReading: false,
digitPlaces: 0,
isAdditionalAssessment: false
}
},
watch: {
async TrialReadingCriterionId(v) {
await this.asyncTrialCriterionDictionary(v)
this.isPaneShow = false
this.$nextTick(() => {
this.isPaneShow = true
})
}
},
mounted() {
this.getTrialCriterionList()
},
methods: {
handleSync() {
// '确定要同步最新标准配置吗?'
this.$confirm(this.$t('trials:readingUnit:message:sync')).then(() => {
this.loading = true
resetTrialCriterionAsyncState(this.TrialReadingCriterionId).then(async res => {
await this.asyncTrialCriterionDictionary(this.TrialReadingCriterionId)
this.isPaneShow = false
this.$nextTick(() => {
this.isPaneShow = true
this.loading = false
})
})
})
},
asyncTrialCriterionDictionary(TrialReadingCriterionId) {
return new Promise(resolve => {
asyncTrialCriterionDictionary({ TrialReadingCriterionId: this.TrialReadingCriterionId }).then(res => {
resolve()
})
})
},
getTrialCriterionList() {
getTrialCriterionList(this.trialId, false).then(async res => {
this.trialCriterionList = res.Result
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
this.isShow = true
}).catch(() => {
})
},
setConfirm(isConfirm) {
this.isConfirm = isConfirm
},
setDigitPlaces(digitPlaces) {
this.digitPlaces = digitPlaces
},
setIsClinicalReading(isClinicalReading) {
this.isClinicalReading = isClinicalReading
},
setAdditionalAssessment(isAdditionalAssessment) {
this.isAdditionalAssessment = isAdditionalAssessment
},
setArbitrationReading(isArbitrationReading) {
this.isArbitrationReading = isArbitrationReading
},
setGlobalReading(isGlobalReading) {
this.isGlobalReading = isGlobalReading
},
setOncologyReading(isOncologyReading) {
this.isOncologyReading = isOncologyReading
},
updateCriterions() {
this.loading = true
synchronizeCriterion({ trialId: this.$route.query.trialId, TrialReadingCriterionId: this.TrialReadingCriterionId }).then(res => {
this.$router.push({ path: `/trials/trials-panel/setting/reading-unit?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&t=${new Date().getTime()}` })
this.loading = false
}).catch(() => { this.loading = false })
},
handleConfirm() {
this.loading = true
verifyeCriterionNeedSynchronize({ trialId: this.$route.query.trialId, TrialReadingCriterionId: this.TrialReadingCriterionId }).then(async res => {
this.loading = false
if (res.Result !== 1) {
// 系统检测当前阅片标准配置发生更新,是否确认获取最新配置信息?
this.$confirm(this.$t('trials:readingUnit:message:msg1'), {
type: 'warning'
})
.then(() => {
this.updateCriterions()
})
.catch(action => {
})
} else {
try {
var isCheckList = []
if (this.$refs['arbitrationRules' + this.TrialReadingCriterionId] && this.$refs['arbitrationRules' + this.TrialReadingCriterionId].length) {
var arbitrationRules = await this.$refs['arbitrationRules' + this.TrialReadingCriterionId][0].saveAllSync()
isCheckList.push({
isCheck: arbitrationRules,
msg: this.$t('trials:readingUnit:adRules')// '仲裁规则'
})
}
var readingRules = await this.$refs['readingRules' + this.TrialReadingCriterionId][0].handleSave(false)
isCheckList.push({
isCheck: readingRules,
msg: this.$t('trials:readingUnit:readingRules')// '阅片规则'
})
// var readingCriterions = await this.$refs['readingCriterions' + this.TrialReadingCriterionId][0].handleSave(false)
// isCheckList.push({
// isCheck: readingCriterions,
// msg: '阅片标准'
// })
if (this.$refs['globalReading' + this.TrialReadingCriterionId] && this.$refs['globalReading' + this.TrialReadingCriterionId].length) {
var globalReading = await this.$refs['globalReading' + this.TrialReadingCriterionId][0].handleSave(false)
isCheckList.push({
isCheck: globalReading,
msg: this.$t('trials:readingUnit:GlobalReading')// '全局阅片'
})
}
if (this.$refs['oncologyForm' + this.TrialReadingCriterionId] && this.$refs['oncologyForm' + this.TrialReadingCriterionId].length) {
var oncologyForm = await this.$refs['oncologyForm' + this.TrialReadingCriterionId][0].handleSave(false)
isCheckList.push({
isCheck: oncologyForm,
msg: this.$t('trials:readingUnit:oncologyReading')// '肿瘤学阅片配置'
})
}
if (isCheckList.every(v => v.isCheck === true)) {
trialReadingInfoSignVerify({ trialId: this.$route.query.trialId, TrialReadingCriterionId: this.TrialReadingCriterionId }).then(res => {
if (res.IsSuccess) {
const { ReadingUnitConfirmation } = const_.processSignature
this.signCode = ReadingUnitConfirmation
this.signVisible = true
}
})
} else {
var notCheckList = isCheckList.filter(v => v.isCheck === false)
var msg = notCheckList.map(v => v.msg)
msg = this.$t('trials:readingUnit:message:msg2').replace('xxx', msg)
this.$alert(msg) // ${msg}区域信息不完整,请完成后确认!
}
} catch (e) {
console.log(e)
}
}
}).catch(() => {
console.log(222)
this.loading = false
})
},
// 关闭签名框并设置确认状态
closeSignDialog(isSign, signInfo) {
if (isSign) {
this.signConfirm(signInfo)
} else {
this.signVisible = false
}
},
// 签名确认
signConfirm(signInfo) {
this.loading = true
const params = {
data: {
trialId: this.$route.query.trialId,
TrialReadingCriterionId: this.TrialReadingCriterionId
},
signInfo: signInfo
}
trialReadingInfoSign(params).then(res => {
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$refs['signForm'].btnLoading = false
this.signVisible = false
this.isConfirm = true
this.$refs['readingRules' + this.TrialReadingCriterionId][0].initPage()
this.$refs['readingCriterions' + this.TrialReadingCriterionId][0].initPage()
this.$refs['arbitrationRules' + this.TrialReadingCriterionId][0].getList()
this.$refs['oncologyForm' + this.TrialReadingCriterionId][0].initForm()
}
this.loading = false
}).catch(_ => {
this.loading = false
this.$refs['signForm'].btnLoading = false
})
},
reloadArbitrationRules() {
this.$refs['arbitrationRules' + this.TrialReadingCriterionId][0].getList()
this.$refs['arbitrationRules' + this.TrialReadingCriterionId][0].getTrialJudgyInfo()
}
}
}
</script>
<style lang="scss" scoped>
.reading-unit-wrapper{
height: 100%;
background-color: #fff;
display: flex;
flex-direction: column;
.content{
flex: 1;
overflow-y: auto;
}
>>>.el-collapse-item__header{
background:#e5ecef;
padding-left:10px;
}
>>>.el-collapse-item__content{
padding: 10px;
}
.bottom{
height: 50px;
display:flex;
align-items:center;
justify-content:center;
text-align: center;
border-top: 1px solid #e1e1e1;
}
}
</style>