bug修复
parent
33be113d8d
commit
d224bf8700
|
@ -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}$
|
||||
|
|
|
@ -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
|
||||
})
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ export default
|
|||
ReadingUnitConfirmation: 108, // 医学审核问题确认
|
||||
MedicalAudit: 215,// 医学审核
|
||||
HeavyReadingApproval: 216,// 重阅审批
|
||||
ResetAndAsyncCriterion: 218, //同步签名
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
})
|
||||
})
|
||||
},
|
||||
|
|
|
@ -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: {},
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue