bug修复

uat_us
熊飞 2024-02-27 16:43:38 +08:00
parent 33be113d8d
commit d224bf8700
24 changed files with 478 additions and 278 deletions

View File

@ -27,7 +27,7 @@ VUE_APP_LOGOUT_FOR_PERMISSION = false
VUE_APP_LOGOUT_FOR_TIME = 1800 VUE_APP_LOGOUT_FOR_TIME = 1800
# 是否开启密码正则验证 true:是 false:否 # 是否开启密码正则验证 true:是 false:否
VUE_APP_PASSWORD_FOR_PERMISSION = true VUE_APP_PASSWORD_FOR_PERMISSION = false
# 密码校验规则 # 密码校验规则
VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$

View File

@ -1747,6 +1747,22 @@ export function deleteTrialExternalUser(id) {
method: 'delete' method: 'delete'
}) })
} }
export function getUserTobeDoneRecord() {
return request({
url: `/PersonalWorkstation/getUserTobeDoneRecord`,
method: 'get'
})
}
export function getNeedSignTrialDocTrialIdList() {
return request({
url: `/PersonalWorkstation/getNeedSignTrialDocTrialIdList`,
method: 'get'
})
}
export function getBasicStat() { export function getBasicStat() {
return request({ return request({
url: `/PersonalWorkstation/getBasicStat`, url: `/PersonalWorkstation/getBasicStat`,
@ -3534,3 +3550,11 @@ export function mergeLesion(param) {
data: param data: param
}) })
} }
export function resetAndAsyncCriterion(param) {
return request({
url: `/Inspection/ReadingCriterion/ResetAndAsyncCriterion`,
method: 'post',
data: param
})
}

View File

@ -27,6 +27,7 @@ export default
ReadingUnitConfirmation: 108, // ReadingUnitConfirmation: 108, //
MedicalAudit: 215,// MedicalAudit: 215,//
HeavyReadingApproval: 216,// HeavyReadingApproval: 216,//
ResetAndAsyncCriterion: 218, //
} }
} }
</script> </script>

View File

@ -167,7 +167,7 @@
{ required: true, message: this.$t('common:ruleMessage:select')} { required: true, message: this.$t('common:ruleMessage:select')}
]" ]"
> >
<el-input :value="$fd('DigitPlaces', ValueType).toString()" :disabled="true"/> <el-input :value="$fd('DigitPlaces', digitPlaces).toString()" :disabled="true"/>
</el-form-item> </el-form-item>
<!-- 单位 --> <!-- 单位 -->
<el-form-item <el-form-item

View File

@ -10,8 +10,8 @@
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
:loading="loading" :loading="loading"
size="mini" size="mini"
v-if="NODE_ENV !== 'prod' && !hasPermi(['role:admin'])" v-if="!hasPermi(['role:admin'])"
@click="handleSync" @click="syncSign"
> >
{{ $t('trials:readingUnit:button:sync') }} {{ $t('trials:readingUnit:button:sync') }}
</el-button> </el-button>
@ -84,10 +84,24 @@
</div> </div>
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" /> <SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
</el-dialog> </el-dialog>
<!--签名框 -->
<el-dialog
v-if="signVisible2"
:visible.sync="signVisible2"
: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="signCode2" @closeDialog="closeSignDialog2" />
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { resetTrialCriterionAsyncState, asyncTrialCriterionDictionary, getTrialCriterionList, trialReadingInfoSign, trialReadingInfoSignVerify, verifyeCriterionNeedSynchronize, synchronizeCriterion } from '@/api/trials' import { resetAndAsyncCriterion, resetTrialCriterionAsyncState, asyncTrialCriterionDictionary, getTrialCriterionList, trialReadingInfoSign, trialReadingInfoSignVerify, verifyeCriterionNeedSynchronize, synchronizeCriterion } from '@/api/trials'
import ReadingRules from './components/ReadingRules' import ReadingRules from './components/ReadingRules'
import ReadingCriterions from './components/ReadingCriterions' import ReadingCriterions from './components/ReadingCriterions'
import ArbitrationRules from './components/ArbitrationRules' import ArbitrationRules from './components/ArbitrationRules'
@ -104,7 +118,9 @@ export default {
NODE_ENV: process.env.NODE_ENV, NODE_ENV: process.env.NODE_ENV,
activeCollapse: ['1', '2', '3', '4', '5'], activeCollapse: ['1', '2', '3', '4', '5'],
signCode: null, signCode: null,
signCode2: null,
signVisible: false, signVisible: false,
signVisible2: false,
currentUser: zzSessionStorage.getItem('userName'), currentUser: zzSessionStorage.getItem('userName'),
isConfirm: true, isConfirm: true,
loading: false, loading: false,
@ -137,17 +153,33 @@ export default {
this.getTrialCriterionList() this.getTrialCriterionList()
}, },
methods: { methods: {
handleSync() { closeSignDialog2(isSign, signInfo) {
if (isSign) {
this.handleSync(signInfo)
} else {
this.signVisible2 = false
}
},
syncSign() {
const { ResetAndAsyncCriterion } = const_.processSignature
this.signCode2 = ResetAndAsyncCriterion
this.signVisible2 = true
},
handleSync(signInfo) {
// '' // ''
this.$confirm(this.$t('trials:readingUnit:message:sync')).then(() => { this.loading = true
this.loading = true const params = {
resetTrialCriterionAsyncState(this.TrialReadingCriterionId).then(async res => { data: {
await this.asyncTrialCriterionDictionary(this.TrialReadingCriterionId) TrialReadingCriterionId: this.TrialReadingCriterionId
this.isPaneShow = false },
this.$nextTick(() => { signInfo: signInfo
this.isPaneShow = true }
this.loading = false resetAndAsyncCriterion(params).then(async res => {
}) this.isPaneShow = false
this.$nextTick(() => {
this.signVisible2 = false
this.isPaneShow = true
this.loading = false
}) })
}) })
}, },

View File

@ -67,6 +67,7 @@
icon="el-icon-upload" icon="el-icon-upload"
v-if="scope.row.ToBeDealedCount !== 0 || scope.row.ReadModuleCount !== 0" v-if="scope.row.ToBeDealedCount !== 0 || scope.row.ReadModuleCount !== 0"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:title:UploadClinicalData')" :title="$t('trials:workbench:title:UploadClinicalData')"
@click="handleUpload(scope.row)" @click="handleUpload(scope.row)"
/> />
@ -74,6 +75,7 @@
v-if="scope.row.ToBeVisitCount !== 0" v-if="scope.row.ToBeVisitCount !== 0"
icon="el-icon-link" icon="el-icon-link"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:UploadImage')" :title="$t('trials:workbench:button:UploadImage')"
@click="goVisit(scope.row)" @click="goVisit(scope.row)"
/> />
@ -371,6 +373,12 @@ const searchDataDefault2 = () => {
export default { export default {
name: 'NeedSignDoc', name: 'NeedSignDoc',
components: { Pagination, clinicalDataQuestions, SignForm, BaseContainer }, components: { Pagination, clinicalDataQuestions, SignForm, BaseContainer },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
formRow: {}, formRow: {},

View File

@ -66,6 +66,7 @@
<el-button <el-button
icon="el-icon-upload" icon="el-icon-upload"
v-if="scope.row.ToBeDealedCount !== 0 || scope.row.ReadModuleCount !== 0" v-if="scope.row.ToBeDealedCount !== 0 || scope.row.ReadModuleCount !== 0"
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
circle circle
:title="$t('trials:workbench:title:UploadClinicalData')" :title="$t('trials:workbench:title:UploadClinicalData')"
@click="handleUpload(scope.row)" @click="handleUpload(scope.row)"
@ -378,6 +379,12 @@ const searchDataDefault2 = () => {
export default { export default {
name: 'NeedSignDoc', name: 'NeedSignDoc',
components: { Pagination, clinicalDataQuestions, SignForm, BaseContainer }, components: { Pagination, clinicalDataQuestions, SignForm, BaseContainer },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
isListShow: false, isListShow: false,

View File

@ -58,12 +58,14 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:action:sign')" :title="$t('trials:workbench:action:sign')"
@click="handleUpload(scope.row)" @click="handleUpload(scope.row)"
/> />
<el-button <el-button
icon="el-icon-link" icon="el-icon-link"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:action:access')" :title="$t('trials:workbench:action:access')"
@click="goVisit(scope.row)" @click="goVisit(scope.row)"
/> />
@ -389,6 +391,12 @@ const searchDataDefault = () => {
} }
export default { export default {
name: 'NeedSignDoc', name: 'NeedSignDoc',
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
components: { Pagination, clinicalDataQuestions, SignForm }, components: { Pagination, clinicalDataQuestions, SignForm },
data() { data() {
return { return {

View File

@ -75,6 +75,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:action:sign')" :title="$t('trials:workbench:action:sign')"
@click="handleSign(scope.row)" @click="handleSign(scope.row)"
/> />
@ -98,6 +99,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'NeedSignDoc', name: 'NeedSignDoc',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -72,6 +72,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -95,6 +96,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ImageQC', name: 'ImageQC',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -65,6 +65,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -88,6 +89,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ImageQuestion', name: 'ImageQuestion',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -65,6 +65,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -87,6 +88,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ImageReupload', name: 'ImageReupload',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -65,6 +65,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -88,6 +89,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ImageSubmission', name: 'ImageSubmission',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -65,6 +65,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -88,6 +89,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ImageVerification', name: 'ImageVerification',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -79,6 +79,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -102,6 +103,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ImageToRead', name: 'ImageToRead',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -79,6 +79,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -102,6 +103,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'MedicalAudit', name: 'MedicalAudit',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -72,6 +72,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -95,6 +96,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'MedicalFeedback', name: 'MedicalFeedback',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -65,6 +65,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:handle')" :title="$t('trials:workbench:button:handle')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -88,6 +89,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'QcQuestion', name: 'QcQuestion',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -65,6 +65,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:researchRecord:action:view')" :title="$t('trials:researchRecord:action:view')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -88,6 +89,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'RereadApproval', name: 'RereadApproval',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -70,6 +70,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:seletctedReviews:timeline:approval')" :title="$t('trials:seletctedReviews:timeline:approval')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -93,6 +94,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ReviewerApproval', name: 'ReviewerApproval',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -70,6 +70,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('common:button:confirm')" :title="$t('common:button:confirm')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -93,6 +94,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'ReviewerScreen', name: 'ReviewerScreen',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -57,6 +57,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:pendingSiteResearch:action:audit')" :title="$t('trials:pendingSiteResearch:action:audit')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -79,6 +80,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'SiteResearch', name: 'SiteResearch',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -65,6 +65,7 @@
<el-button <el-button
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
circle circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:table:approve')" :title="$t('trials:workbench:table:approve')"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
@ -88,6 +89,12 @@ const searchDataDefault = () => {
export default { export default {
name: 'RereadApproval', name: 'RereadApproval',
components: { Pagination }, components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() { data() {
return { return {
listLoading: false, listLoading: false,

View File

@ -3,139 +3,135 @@
<div class="workbench-stats"> <div class="workbench-stats">
<PanelCount ref="panelCount" @getSignSystemDocCount="getSignSystemDocCount" /> <PanelCount ref="panelCount" @getSignSystemDocCount="getSignSystemDocCount" />
</div> </div>
<div class="workbench-content"> <div class="workbench-content">
<div class="content-wrapper"> <div class="content-wrapper">
<!-- PM/APM --> <!-- PM/APM -->
<!-- 阅片期 --> <!-- 阅片期 -->
<div v-if="hasPermi(['trials:trials-panel:subject:readingPeriod:edit'])" class="item"> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-panel:subject:readingPeriod:edit'])" class="item">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<clinicalDataPM /> <clinicalDataPM :trial-id-list="trialIdList" />
</el-card> </el-card>
</div> </div>
<!-- 一致性核查 --> <!-- 一致性核查 -->
<div v-if="hasPermi(['trials:trials-workbench:consistencyCheck'])" class="item"> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:consistencyCheck'])" class="item">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<consistencyCheck /> <consistencyCheck :trial-id-list="trialIdList" />
</el-card> </el-card>
</div> </div>
<!-- 重阅审批 --> <!-- 重阅审批 -->
<div v-if="hasPermi(['trials:trials-workbench:rereadApproval'])" class="item"> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:rereadApproval'])" class="item">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<RereadApproval /> <RereadApproval :trial-id-list="trialIdList" />
</el-card> </el-card>
</div> </div>
<!-- 阅片人筛选 --> <!-- 阅片人筛选 -->
<div v-if="hasPermi(['trials:trials-workbench:reviewerScreen'])" class="item"> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:reviewerScreen'])" class="item">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<ReviewerScreen /> <ReviewerScreen :trial-id-list="trialIdList" />
</el-card> </el-card>
</div> </div>
<!-- 中心调研 --> <!-- 中心调研 -->
<div v-hasPermi="['trials:trials-workbench:attachments:site-research']" class="item"> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:attachments:site-research'])" class="item">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<SiteResearch /> <SiteResearch :trial-id-list="trialIdList" />
</el-card> </el-card>
</div> </div>
<!-- 核对临床数据 --> <!-- 核对临床数据 -->
<!-- SPM/CPM --> <!-- SPM/CPM -->
<!-- 阅片人审批 --> <!-- 阅片人审批 -->
<div v-if="hasPermi(['trials:trials-workbench:reviewerApproval'])" class="item"> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:reviewerApproval'])" class="item">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<ReviewerApproval /> <ReviewerApproval :trial-id-list="trialIdList" />
</el-card> </el-card>
</div> </div>
<!-- 重阅审批 --> <!-- 重阅审批 -->
<div v-if="hasPermi(['trials:trials-workbench:spmRereadApproval'])" class="item"> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:spmRereadApproval'])" class="item">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<SpmRereadApproval /> <SpmRereadApproval :trial-id-list="trialIdList" />
</el-card> </el-card>
</div> </div>
<!-- CRC -->
<!-- CRC --> <!-- 临床数据录入 -->
<!-- 临床数据录入 --> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:clinicalDataEntry'])" class="item">
<div v-if="hasPermi(['trials:trials-workbench:clinicalDataEntry'])" class="item"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <clinicalData :trial-id-list="trialIdList" />
<clinicalData /> </el-card>
</el-card> </div>
</div> <!-- 临床数据确认 -->
<!-- 临床数据确认 --> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:clinicalDataEntry'])" class="item">
<div v-if="hasPermi(['trials:trials-workbench:clinicalDataEntry'])" class="item"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <clinicalDataConfirm :trial-id-list="trialIdList" />
<clinicalDataConfirm /> </el-card>
</el-card> </div>
</div> <!-- 影像质疑 -->
<!-- 影像质疑 --> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbench:imageQuestion'])" class="item">
<div v-if="hasPermi(['trials:trials-workbench:imageQuestion'])" class="item"> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<el-card :body-style="{ padding: '10px'}" style="height:100%"> <ImageQuestion :trial-id-list="trialIdList" />
<ImageQuestion /> </el-card>
</el-card> </div>
</div> <!-- 核查质疑 -->
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageVerification'])" class="item">
<!-- 核查质疑 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:imageVerification'])" class="item"> <ImageVerification :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<ImageVerification /> </div>
</el-card> <!-- 影像重传 -->
</div> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageReupload'])" class="item">
<!-- 影像重传 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:imageReupload'])" class="item"> <ImageReupload :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<ImageReupload /> </div>
</el-card> <!-- 加急影像提交 -->
</div> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageSubmission'])" class="item">
<!-- 加急影像提交 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:imageSubmission'])" class="item"> <ImageSubmission :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<ImageSubmission /> </div>
</el-card> <!-- IQC -->
</div> <!-- 影像质控 -->
<!-- IQC --> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageQC'])" class="item">
<!-- 影像质控 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:imageQC'])" class="item"> <ImageQualityControl :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<ImageQualityControl /> </div>
</el-card> <!-- QC质疑 -->
</div> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:qcQuestion'])" class="item">
<!-- QC质疑 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:qcQuestion'])" class="item"> <QcQuestion :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<QcQuestion /> </div>
</el-card> <!-- IR -->
</div> <!-- 影像待阅 -->
<!-- IR --> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imagesToRead'])" class="item">
<!-- 影像待阅 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:imagesToRead'])" class="item"> <ImagesToRead :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<ImagesToRead /> </div>
</el-card> <!-- 医学反馈 -->
</div> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:medicalFeedback'])" class="item">
<!-- 医学反馈 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:medicalFeedback'])" class="item"> <MedicalFeedback :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<MedicalFeedback /> </div>
</el-card> <!-- MIM -->
</div> <!-- 医学审核 -->
<!-- MIM --> <div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:medicalAudit'])" class="item">
<!-- 医学审核 --> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<div v-if="hasPermi(['trials:trials-workbenck:medicalAudit'])" class="item"> <MedicalAudit :trial-id-list="trialIdList" />
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </el-card>
<MedicalAudit /> </div>
</el-card> <div v-if="!isSignSystemDoc && !hasPermi(['role:zys'])" class="item">
</div> <el-card :body-style="{ padding: '10px'}" style="height:100%">
<NeedSignTrialDoc />
<div v-if="!hasPermi(['role:zys'])" class="item"> </el-card>
<el-card :body-style="{ padding: '10px'}" style="height:100%"> </div>
<NeedSignTrialDoc /> <div v-if="isSignSystemDoc || hasPermi(['role:zys'])" class="item">
</el-card> <el-card :body-style="{ padding: '10px'}" style="height:100%">
</div> <NeedSignSysDoc @refreshStats="refreshStats" />
</el-card>
<div v-if="isSignSystemDoc || hasPermi(['role:zys'])" class="item"> </div>
<el-card :body-style="{ padding: '10px'}" style="height:100%">
<NeedSignSysDoc @refreshStats="refreshStats" />
</el-card>
</div> </div>
</div> </div>
</div>
</div> </div>
</template> </template>
@ -161,20 +157,39 @@ import QcQuestion from './components/qcQuestion'
import ImagesToRead from './components/imagesToRead' import ImagesToRead from './components/imagesToRead'
import MedicalFeedback from './components/medicalFeedback' import MedicalFeedback from './components/medicalFeedback'
import MedicalAudit from './components/medicalAudit' import MedicalAudit from './components/medicalAudit'
import { getUserTobeDoneRecord, getNeedSignTrialDocTrialIdList } from '@/api/trials'
export default { export default {
name: 'WorkBench', name: 'WorkBench',
components: { clinicalDataConfirm, clinicalDataPM, PanelCount, NeedSignTrialDoc, SiteResearch, NeedSignSysDoc, consistencyCheck, clinicalData, RereadApproval, ReviewerScreen, ReviewerApproval, SpmRereadApproval, ImageQuestion, ImageVerification, ImageReupload, ImageSubmission, ImageQualityControl, QcQuestion, ImagesToRead, MedicalFeedback, MedicalAudit }, components: { clinicalDataConfirm, clinicalDataPM, PanelCount, NeedSignTrialDoc, SiteResearch, NeedSignSysDoc, consistencyCheck, clinicalData, RereadApproval, ReviewerScreen, ReviewerApproval, SpmRereadApproval, ImageQuestion, ImageVerification, ImageReupload, ImageSubmission, ImageQualityControl, QcQuestion, ImagesToRead, MedicalFeedback, MedicalAudit },
data() { data() {
return { return {
isSignSystemDoc: false isSignSystemDoc: false,
trialIdList: []
} }
}, },
mounted() {
this.getUserTobeDoneRecord()
this.getNeedSignTrialDocTrialIdList()
},
methods: { methods: {
getSignSystemDocCount(count) { getSignSystemDocCount(count) {
this.isSignSystemDoc = count > 0 this.isSignSystemDoc = count > 0
}, },
refreshStats() { refreshStats() {
this.$refs['panelCount'].getData() this.$refs['panelCount'].getData()
},
getNeedSignTrialDocTrialIdList() {
getNeedSignTrialDocTrialIdList().then(res => {
console.log(res)
this.trialIdList = res.Result
})
},
getUserTobeDoneRecord() {
getUserTobeDoneRecord().then(res => {
console.log(res)
})
} }
} }
} }