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
# 是否开启密码正则验证 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}$

View File

@ -1747,6 +1747,22 @@ export function deleteTrialExternalUser(id) {
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() {
return request({
url: `/PersonalWorkstation/getBasicStat`,
@ -3534,3 +3550,11 @@ export function mergeLesion(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, //
MedicalAudit: 215,//
HeavyReadingApproval: 216,//
ResetAndAsyncCriterion: 218, //
}
}
</script>

View File

@ -167,7 +167,7 @@
{ 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

View File

@ -10,8 +10,8 @@
icon="el-icon-refresh-left"
:loading="loading"
size="mini"
v-if="NODE_ENV !== 'prod' && !hasPermi(['role:admin'])"
@click="handleSync"
v-if="!hasPermi(['role:admin'])"
@click="syncSign"
>
{{ $t('trials:readingUnit:button:sync') }}
</el-button>
@ -84,10 +84,24 @@
</div>
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
</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>
</template>
<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 ReadingCriterions from './components/ReadingCriterions'
import ArbitrationRules from './components/ArbitrationRules'
@ -104,7 +118,9 @@ export default {
NODE_ENV: process.env.NODE_ENV,
activeCollapse: ['1', '2', '3', '4', '5'],
signCode: null,
signCode2: null,
signVisible: false,
signVisible2: false,
currentUser: zzSessionStorage.getItem('userName'),
isConfirm: true,
loading: false,
@ -137,17 +153,33 @@ export default {
this.getTrialCriterionList()
},
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
resetTrialCriterionAsyncState(this.TrialReadingCriterionId).then(async res => {
await this.asyncTrialCriterionDictionary(this.TrialReadingCriterionId)
this.isPaneShow = false
this.$nextTick(() => {
this.isPaneShow = true
this.loading = false
})
this.loading = true
const params = {
data: {
TrialReadingCriterionId: this.TrialReadingCriterionId
},
signInfo: signInfo
}
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"
v-if="scope.row.ToBeDealedCount !== 0 || scope.row.ReadModuleCount !== 0"
circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:title:UploadClinicalData')"
@click="handleUpload(scope.row)"
/>
@ -74,6 +75,7 @@
v-if="scope.row.ToBeVisitCount !== 0"
icon="el-icon-link"
circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:workbench:button:UploadImage')"
@click="goVisit(scope.row)"
/>
@ -371,6 +373,12 @@ const searchDataDefault2 = () => {
export default {
name: 'NeedSignDoc',
components: { Pagination, clinicalDataQuestions, SignForm, BaseContainer },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() {
return {
formRow: {},

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,131 +1,138 @@
<template>
<div class="siteResearch-wrapper">
<el-row>
<el-col :span="12">
<!-- 中心调研 -->
<h3>{{ $t('trials:workbench:title:pendingSiteResearch') }}</h3>
</el-col>
<el-col :span="12" style="text-align:right;">
<h3>
<Pagination class="page" :total="total" :page.sync="listQuery.pageIndex" :limit.sync="listQuery.pageSize" layout="total, sizes, prev, pager, next" :background="false" style="display: inline-block;" @pagination="getList" />
<!-- 重置 -->
<el-button icon="el-icon-refresh-left" circle :title="$t('common:button:reset')" size="small" @click="handleReset" />
</h3>
</el-col>
</el-row>
<el-table
ref="siteResearchList"
v-loading="listLoading"
:data="list"
:show-header="true"
height="calc(100% - 100px)"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- 项目编号 -->
<el-table-column
:label="$t('trials:workbench:table:trialId')"
prop="TrialCode"
show-overflow-tooltip
sortable="custom"
/>
<!-- 试验名称 -->
<el-table-column
:label="$t('trials:workbench:table:experimentName')"
prop="ExperimentName"
show-overflow-tooltip
sortable="custom"
/>
<!-- 研究方案号 -->
<el-table-column
:label="$t('trials:workbench:table:researchNo')"
prop="ResearchProgramNo"
show-overflow-tooltip
sortable="custom"
/>
<!-- 待审批中心数量 -->
<el-table-column
:label="$t('trials:pendingSiteResearch:table:siteCount')"
prop="ApprovalRequiredSiteCount"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('common:action:action')"
>
<template slot-scope="scope">
<el-button
icon="el-icon-edit-outline"
circle
:title="$t('trials:pendingSiteResearch:action:audit')"
@click="handleAudit(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { getSiteSurveyApprovalList } from '@/api/trials'
import Pagination from '@/components/Pagination'
const searchDataDefault = () => {
return {
pageIndex: 1,
pageSize: 20,
asc: true,
sortField: ''
}
}
export default {
name: 'SiteResearch',
components: { Pagination },
data() {
return {
listLoading: false,
list: [],
listQuery: searchDataDefault(),
total: 0
}
},
mounted() {
this.getList()
},
methods: {
getList() {
this.listLoading = true
getSiteSurveyApprovalList(this.listQuery).then(res => {
this.listLoading = false
this.total = res.Result.TotalCount
this.list = res.Result.CurrentPageData
}).catch(() => { this.listLoading = false })
},
handleAudit(row) {
this.$router.push({ path: `/trials/trials-panel/attachments/site-research?trialId=${row.Id}&trialCode=${row.TrialCode}&researchProgramNo=${row.ResearchProgramNo}` })
},
handleReset() {
this.listQuery = searchDataDefault()
this.getList()
this.$nextTick(() => {
this.$refs.siteResearchList.clearSort()
})
},
//
handleSortByColumn(column) {
if (column.order === 'ascending') {
this.listQuery.asc = true
} else {
this.listQuery.asc = false
}
this.listQuery.sortField = column.prop
this.getList()
}
}
}
</script>
<style lang="scss" scoped>
.siteResearch-wrapper{
height: 100%;
}
</style>
<template>
<div class="siteResearch-wrapper">
<el-row>
<el-col :span="12">
<!-- 中心调研 -->
<h3>{{ $t('trials:workbench:title:pendingSiteResearch') }}</h3>
</el-col>
<el-col :span="12" style="text-align:right;">
<h3>
<Pagination class="page" :total="total" :page.sync="listQuery.pageIndex" :limit.sync="listQuery.pageSize" layout="total, sizes, prev, pager, next" :background="false" style="display: inline-block;" @pagination="getList" />
<!-- 重置 -->
<el-button icon="el-icon-refresh-left" circle :title="$t('common:button:reset')" size="small" @click="handleReset" />
</h3>
</el-col>
</el-row>
<el-table
ref="siteResearchList"
v-loading="listLoading"
:data="list"
:show-header="true"
height="calc(100% - 100px)"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- 项目编号 -->
<el-table-column
:label="$t('trials:workbench:table:trialId')"
prop="TrialCode"
show-overflow-tooltip
sortable="custom"
/>
<!-- 试验名称 -->
<el-table-column
:label="$t('trials:workbench:table:experimentName')"
prop="ExperimentName"
show-overflow-tooltip
sortable="custom"
/>
<!-- 研究方案号 -->
<el-table-column
:label="$t('trials:workbench:table:researchNo')"
prop="ResearchProgramNo"
show-overflow-tooltip
sortable="custom"
/>
<!-- 待审批中心数量 -->
<el-table-column
:label="$t('trials:pendingSiteResearch:table:siteCount')"
prop="ApprovalRequiredSiteCount"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('common:action:action')"
>
<template slot-scope="scope">
<el-button
icon="el-icon-edit-outline"
circle
:disabled="!!~trialIdList.indexOf(scope.row.TrialId)"
:title="$t('trials:pendingSiteResearch:action:audit')"
@click="handleAudit(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { getSiteSurveyApprovalList } from '@/api/trials'
import Pagination from '@/components/Pagination'
const searchDataDefault = () => {
return {
pageIndex: 1,
pageSize: 20,
asc: true,
sortField: ''
}
}
export default {
name: 'SiteResearch',
components: { Pagination },
props: {
trialIdList: {
type: Array,
default() { return [] }
}
},
data() {
return {
listLoading: false,
list: [],
listQuery: searchDataDefault(),
total: 0
}
},
mounted() {
this.getList()
},
methods: {
getList() {
this.listLoading = true
getSiteSurveyApprovalList(this.listQuery).then(res => {
this.listLoading = false
this.total = res.Result.TotalCount
this.list = res.Result.CurrentPageData
}).catch(() => { this.listLoading = false })
},
handleAudit(row) {
this.$router.push({ path: `/trials/trials-panel/attachments/site-research?trialId=${row.Id}&trialCode=${row.TrialCode}&researchProgramNo=${row.ResearchProgramNo}` })
},
handleReset() {
this.listQuery = searchDataDefault()
this.getList()
this.$nextTick(() => {
this.$refs.siteResearchList.clearSort()
})
},
//
handleSortByColumn(column) {
if (column.order === 'ascending') {
this.listQuery.asc = true
} else {
this.listQuery.asc = false
}
this.listQuery.sortField = column.prop
this.getList()
}
}
}
</script>
<style lang="scss" scoped>
.siteResearch-wrapper{
height: 100%;
}
</style>

View File

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

View File

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