bug修复
parent
33be113d8d
commit
d224bf8700
|
@ -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}$
|
||||||
|
|
|
@ -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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ export default
|
||||||
ReadingUnitConfirmation: 108, // 医学审核问题确认
|
ReadingUnitConfirmation: 108, // 医学审核问题确认
|
||||||
MedicalAudit: 215,// 医学审核
|
MedicalAudit: 215,// 医学审核
|
||||||
HeavyReadingApproval: 216,// 重阅审批
|
HeavyReadingApproval: 216,// 重阅审批
|
||||||
|
ResetAndAsyncCriterion: 218, //同步签名
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,19 +153,35 @@ 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
|
||||||
resetTrialCriterionAsyncState(this.TrialReadingCriterionId).then(async res => {
|
const params = {
|
||||||
await this.asyncTrialCriterionDictionary(this.TrialReadingCriterionId)
|
data: {
|
||||||
|
TrialReadingCriterionId: this.TrialReadingCriterionId
|
||||||
|
},
|
||||||
|
signInfo: signInfo
|
||||||
|
}
|
||||||
|
resetAndAsyncCriterion(params).then(async res => {
|
||||||
this.isPaneShow = false
|
this.isPaneShow = false
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
this.signVisible2 = false
|
||||||
this.isPaneShow = true
|
this.isPaneShow = true
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
|
||||||
},
|
},
|
||||||
asyncTrialCriterionDictionary(TrialReadingCriterionId) {
|
asyncTrialCriterionDictionary(TrialReadingCriterionId) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
|
|
|
@ -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: {},
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -7,128 +7,124 @@
|
||||||
<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="hasPermi(['trials:trials-workbench:clinicalDataEntry'])" class="item">
|
<div v-if="!isSignSystemDoc && 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 />
|
<clinicalData :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- 临床数据确认 -->
|
<!-- 临床数据确认 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbench:clinicalDataEntry'])" class="item">
|
<div v-if="!isSignSystemDoc && 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 />
|
<clinicalDataConfirm :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- 影像质疑 -->
|
<!-- 影像质疑 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbench:imageQuestion'])" class="item">
|
<div v-if="!isSignSystemDoc && 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 />
|
<ImageQuestion :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 核查质疑 -->
|
<!-- 核查质疑 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:imageVerification'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageVerification'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<ImageVerification />
|
<ImageVerification :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- 影像重传 -->
|
<!-- 影像重传 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:imageReupload'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageReupload'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<ImageReupload />
|
<ImageReupload :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- 加急影像提交 -->
|
<!-- 加急影像提交 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:imageSubmission'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageSubmission'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<ImageSubmission />
|
<ImageSubmission :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- IQC -->
|
<!-- IQC -->
|
||||||
<!-- 影像质控 -->
|
<!-- 影像质控 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:imageQC'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imageQC'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<ImageQualityControl />
|
<ImageQualityControl :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- QC质疑 -->
|
<!-- QC质疑 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:qcQuestion'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:qcQuestion'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<QcQuestion />
|
<QcQuestion :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- IR -->
|
<!-- IR -->
|
||||||
<!-- 影像待阅 -->
|
<!-- 影像待阅 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:imagesToRead'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:imagesToRead'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<ImagesToRead />
|
<ImagesToRead :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- 医学反馈 -->
|
<!-- 医学反馈 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:medicalFeedback'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:medicalFeedback'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<MedicalFeedback />
|
<MedicalFeedback :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
<!-- MIM -->
|
<!-- MIM -->
|
||||||
<!-- 医学审核 -->
|
<!-- 医学审核 -->
|
||||||
<div v-if="hasPermi(['trials:trials-workbenck:medicalAudit'])" class="item">
|
<div v-if="!isSignSystemDoc && hasPermi(['trials:trials-workbenck:medicalAudit'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<MedicalAudit />
|
<MedicalAudit :trial-id-list="trialIdList" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="!isSignSystemDoc && !hasPermi(['role:zys'])" class="item">
|
||||||
<div v-if="!hasPermi(['role:zys'])" class="item">
|
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<NeedSignTrialDoc />
|
<NeedSignTrialDoc />
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="isSignSystemDoc || hasPermi(['role:zys'])" class="item">
|
<div v-if="isSignSystemDoc || hasPermi(['role:zys'])" class="item">
|
||||||
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
<el-card :body-style="{ padding: '10px'}" style="height:100%">
|
||||||
<NeedSignSysDoc @refreshStats="refreshStats" />
|
<NeedSignSysDoc @refreshStats="refreshStats" />
|
||||||
|
@ -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)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue