问题修复
continuous-integration/drone/push Build is passing Details

uat_us
wangxiaoshuang 2025-01-20 11:23:09 +08:00
parent 3a76a7c24d
commit 8ad77f1679
7 changed files with 276 additions and 156 deletions

View File

@ -180,9 +180,9 @@ export default {
this.$i18n.locale = this.$route.query.lang this.$i18n.locale = this.$route.query.lang
this.setLanguage(this.$route.query.lang) this.setLanguage(this.$route.query.lang)
this.$updateDictionary() this.$updateDictionary()
if (!this.password.NewUserName) { // if (!this.password.NewUserName) {
this.$alert(this.$t('recompose:message:warning')) // this.$alert(this.$t('recompose:message:warning'))
} // }
}, },
methods: { methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }), ...mapMutations({ setLanguage: 'lang/setLanguage' }),
@ -194,8 +194,10 @@ export default {
} else { } else {
this.$router.push(`/login`) this.$router.push(`/login`)
} }
this.$i18n.locale = 'zh' if (!this.$i18n.locale) {
this.setLanguage('zh') this.$i18n.locale = 'zh'
this.setLanguage('zh')
}
this.$updateDictionary() this.$updateDictionary()
}, },
save() { save() {

View File

@ -2,7 +2,8 @@
<div class="wscn-http404-container"> <div class="wscn-http404-container">
<div class="wscn-http404" style="display: flex;align-items: center"> <div class="wscn-http404" style="display: flex;align-items: center">
<div class="pic-404"> <div class="pic-404">
<img class="pic-404__parent" src="@/assets/login-bg.png" alt="404"> <!-- <img class="pic-404__parent" src="@/assets/login-bg.png" alt="404"> -->
<svg-icon icon-class="login-bg" style="width: 100%; height: 100%" />
<img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404"> <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404"> <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404"> <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404">
@ -56,8 +57,10 @@ export default {
.pic-404 { .pic-404 {
position: relative; position: relative;
float: left; float: left;
width: 400px; width: 500px;
height: 300px;
overflow: hidden; overflow: hidden;
margin-right: 10px;
&__parent { &__parent {
width: 100%; width: 100%;
} }

View File

@ -1,14 +1,14 @@
<template> <template>
<BaseContainer> <BaseContainer>
<template slot="search-container"> <template slot="search-container">
<div style="margin-left:auto;"> <div style="margin-left: auto">
<!-- Approve --> <!-- Approve -->
</div> </div>
</template> </template>
<template slot="main-container"> <template slot="main-container">
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
v-adaptive="{bottomOffset:65}" v-adaptive="{ bottomOffset: 65 }"
height="100" height="100"
:data="list" :data="list"
class="table" class="table"
@ -27,17 +27,26 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<!-- <el-button type="text" @click="go(`/trialsResume?doctorId=${scope.row.Id}&token=${token}`)">{{ scope.row.LastName }} / {{ scope.row.FirstName }}</el-button> --> <!-- <el-button type="text" @click="go(`/trialsResume?doctorId=${scope.row.Id}&token=${token}`)">{{ scope.row.LastName }} / {{ scope.row.FirstName }}</el-button> -->
<span style="color: #428bca;cursor: pointer;" @click="go(`/trialsResume?doctorId=${scope.row.Id}&trialId=${$route.query.trialId}&token=${token}`)">{{ scope.row.LastName }} / {{ scope.row.FirstName }}</span> <span
style="color: #428bca; cursor: pointer"
@click="
go(
`/trialsResume?doctorId=${scope.row.Id}&trialId=${$route.query.trialId}&token=${token}`
)
"
>{{ scope.row.LastName }} / {{ scope.row.FirstName }}</span
>
</template> </template>
</el-table-column> </el-table-column>
<!-- Name CN --> <!-- Name CN -->
<!-- <el-table-column <el-table-column
v-if="!isEN"
prop="ChineseName" prop="ChineseName"
:label="$t('trials:seletctedReviews:table:nameCN')" :label="$t('trials:seletctedReviews:table:nameCN')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom" sortable="custom"
/> --> />
<!-- ID --> <!-- ID -->
<el-table-column <el-table-column
prop="Code" prop="Code"
@ -53,8 +62,12 @@
min-width="120" min-width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.DoctorTrialState !== 5" type="primary">{{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}</el-tag> <el-tag v-if="scope.row.DoctorTrialState !== 5" type="primary">{{
<el-tag v-else type="danger">{{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}</el-tag> $fd('DoctorTrialState', scope.row.DoctorTrialState)
}}</el-tag>
<el-tag v-else type="danger">{{
$fd('DoctorTrialState', scope.row.DoctorTrialState)
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- Approver --> <!-- Approver -->
@ -70,19 +83,34 @@
min-width="150" min-width="150"
/> />
</el-table> </el-table>
<pagination class="page" :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" /> <pagination
class="page"
:total="total"
:page.sync="listQuery.PageIndex"
:limit.sync="listQuery.PageSize"
@pagination="getList"
/>
</template> </template>
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
import BaseContainer from '@/components/BaseContainer' import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination' import Pagination from '@/components/Pagination'
import { getSubmissionOrApprovalReviewerList, approveReviewer } from '@/api/trials' import {
getSubmissionOrApprovalReviewerList,
approveReviewer,
} from '@/api/trials'
import store from '@/store' import store from '@/store'
const enrollState = 4 const enrollState = 4
export default { export default {
name: 'Approval', name: 'Approval',
components: { BaseContainer, Pagination }, components: { BaseContainer, Pagination },
props: {
isEN: {
type: Boolean,
default: false,
},
},
data() { data() {
return { return {
list: [], list: [],
@ -93,15 +121,17 @@ export default {
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
Asc: false, Asc: false,
SortField: '' SortField: '',
}, },
total: 0, total: 0,
listLoading: false, listLoading: false,
approveIdArr: [], approveIdArr: [],
token: store.getters.token token: store.getters.token,
} }
}, },
created() { this.initPage() }, created() {
this.initPage()
},
methods: { methods: {
go(path) { go(path) {
window.open(path) window.open(path)
@ -112,28 +142,36 @@ export default {
getList() { getList() {
this.listLoading = true this.listLoading = true
this.listQuery.TrialId = this.$route.query.trialId this.listQuery.TrialId = this.$route.query.trialId
getSubmissionOrApprovalReviewerList(this.listQuery).then(res => { getSubmissionOrApprovalReviewerList(this.listQuery)
this.listLoading = false .then((res) => {
this.list = res.Result.CurrentPageData this.listLoading = false
this.total = res.Result.TotalCount this.list = res.Result.CurrentPageData
// eslint-disable-next-line handle-callback-err this.total = res.Result.TotalCount
}).catch(() => { this.listLoading = false }) // eslint-disable-next-line handle-callback-err
})
.catch(() => {
this.listLoading = false
})
}, },
handleApprove() { handleApprove() {
// Confirm the approval? // Confirm the approval?
this.$confirm(this.$t('trials:seletctedReviews:message:msg2'), { this.$confirm(this.$t('trials:seletctedReviews:message:msg2'), {
type: 'warning' type: 'warning',
}).then(() => { }).then(() => {
this.loading = true this.loading = true
const trialId = this.$route.query.trialId const trialId = this.$route.query.trialId
approveReviewer(trialId, this.approveIdArr, 1).then(res => { approveReviewer(trialId, this.approveIdArr, 1)
this.loading = false .then((res) => {
if (res.IsSuccess) { this.loading = false
this.getList() if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully')) this.getList()
this.$emit('nextStep', 'confirmation') this.$message.success(this.$t('common:message:savedSuccessfully'))
} this.$emit('nextStep', 'confirmation')
}).catch(() => {this.loading = false}) }
})
.catch(() => {
this.loading = false
})
}) })
}, },
handleSelectionChange(val) { handleSelectionChange(val) {
@ -158,12 +196,16 @@ export default {
return 'selected' return 'selected'
} }
}, },
handleSelectTable(row) { return row.DoctorTrialState !== 8 }, handleSelectTable(row) {
return row.DoctorTrialState !== 8
},
handleDetail(row) { handleDetail(row) {
const { href } = this.$router.resolve({ path: `/trialsResume?doctorId=${row.Id}&trialId=${this.$route.query.trialId}` }) const { href } = this.$router.resolve({
path: `/trialsResume?doctorId=${row.Id}&trialId=${this.$route.query.trialId}`,
})
window.open(href, '_blank') window.open(href, '_blank')
} },
} },
} }
</script> </script>

View File

@ -50,13 +50,14 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- Name CN --> <!-- Name CN -->
<!-- <el-table-column <el-table-column
v-if="!isEN"
prop="ChineseName" prop="ChineseName"
:label="$t('trials:seletctedReviews:table:nameCN')" :label="$t('trials:seletctedReviews:table:nameCN')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom" sortable="custom"
/> --> />
<!-- ID --> <!-- ID -->
<el-table-column <el-table-column
prop="Code" prop="Code"
@ -119,6 +120,12 @@ import store from '@/store'
export default { export default {
name: 'Confirmation', name: 'Confirmation',
components: { BaseContainer, Pagination }, components: { BaseContainer, Pagination },
props: {
isEN: {
type: Boolean,
default: false,
},
},
data() { data() {
return { return {
list: [], list: [],

View File

@ -186,13 +186,14 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- Name CN --> <!-- Name CN -->
<!-- <el-table-column <el-table-column
v-if="!isEN"
prop="ChineseName" prop="ChineseName"
:label="$t('trials:seletctedReviews:table:nameCN')" :label="$t('trials:seletctedReviews:table:nameCN')"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
width="120" width="120"
/> --> />
<el-table-column <el-table-column
prop="DoctorUserName" prop="DoctorUserName"
@ -483,6 +484,12 @@ export default {
curriculumVitae, curriculumVitae,
}, },
dicts: ['ReadingType', 'Subspeciality', 'Position', 'Rank'], dicts: ['ReadingType', 'Subspeciality', 'Position', 'Rank'],
props: {
isEN: {
type: Boolean,
default: false,
},
},
data() { data() {
return { return {
list: [], list: [],

View File

@ -60,13 +60,14 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- Name CN --> <!-- Name CN -->
<!-- <el-table-column <el-table-column
v-if="!isEN"
prop="ChineseName" prop="ChineseName"
:label="$t('trials:seletctedReviews:table:nameCN')" :label="$t('trials:seletctedReviews:table:nameCN')"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
min-width="120" min-width="120"
/> --> />
<!-- ID --> <!-- ID -->
<el-table-column <el-table-column
prop="Code" prop="Code"
@ -166,6 +167,12 @@ const enrollState = 1
export default { export default {
name: 'Submission', name: 'Submission',
components: { BaseContainer, Pagination }, components: { BaseContainer, Pagination },
props: {
isEN: {
type: Boolean,
default: false,
},
},
data() { data() {
return { return {
list: [], list: [],

View File

@ -8,50 +8,83 @@
<div v-if="trialInfo" class="trial-wrapper"> <div v-if="trialInfo" class="trial-wrapper">
<div class="div-row"> <div class="div-row">
<div class="div-col"> <div class="div-col">
<label class="el-label">{{ $t('trials:trials-list:form:indication:') }}</label> <label class="el-label">{{
<span>{{$fd('Indication', trialInfo.IndicationEnum)}}{{trialInfo.Indication ? '-' + trialInfo.Indication : '' }}</span> $t('trials:trials-list:form:indication:')
</div> }}</label>
<span
<div class="div-col"> >{{ $fd('Indication', trialInfo.IndicationEnum)
<label class="el-label">{{ $t('trials:trials-list:form:declarationType:') }}</label> }}{{
<el-tooltip trialInfo.Indication ? '-' + trialInfo.Indication : ''
class="item" }}</span
:content="trialInfo.DeclarationTypeEnumList.map(v => $fd('DeclarationType', v)).join(', ')"
placement="top"
> >
<span>{{ trialInfo.DeclarationTypeEnumList.map(v => $fd('DeclarationType', v)).join(', ') }}</span>
</el-tooltip>
</div>
<div class="div-col">
<label class="el-label">{{ $t('trials:trials-list:form:criterion:') }}</label>
<el-tooltip
class="item"
:content="(trialInfo.CriterionList && trialInfo.CriterionList.length>0)? trialInfo.CriterionList.join(', '): ''"
placement="top"
>
<span>{{ (trialInfo.CriterionList && trialInfo.CriterionList.length>0)? trialInfo.CriterionList.join(', '): '' }}</span>
</el-tooltip>
</div>
<div class="div-col">
</div> </div>
<div class="div-col">
<label class="el-label">{{
$t('trials:trials-list:form:declarationType:')
}}</label>
<el-tooltip
class="item"
:content="
trialInfo.DeclarationTypeEnumList.map((v) =>
$fd('DeclarationType', v)
).join(', ')
"
placement="top"
>
<span>{{
trialInfo.DeclarationTypeEnumList.map((v) =>
$fd('DeclarationType', v)
).join(', ')
}}</span>
</el-tooltip>
</div>
<div class="div-col">
<label class="el-label">{{
$t('trials:trials-list:form:criterion:')
}}</label>
<el-tooltip
class="item"
:content="
trialInfo.CriterionList && trialInfo.CriterionList.length > 0
? trialInfo.CriterionList.join(', ')
: ''
"
placement="top"
>
<span>{{
trialInfo.CriterionList && trialInfo.CriterionList.length > 0
? trialInfo.CriterionList.join(', ')
: ''
}}</span>
</el-tooltip>
</div>
<div class="div-col"></div>
</div> </div>
<div class="div-row"> <div class="div-row">
<div class="div-col"> <div class="div-col">
<label class="el-label">{{ $t('trials:trials-list:form:expedited:') }}</label> <label class="el-label">{{
<span>{{$fd('YesOrNoForInt', trialInfo.Expedited)}}</span> $t('trials:trials-list:form:expedited:')
}}</label>
<span>{{ $fd('YesOrNoForInt', trialInfo.Expedited) }}</span>
</div> </div>
<div class="div-col"> <div class="div-col">
<label class="el-label">{{ $t('trials:trials-list:form:totalReviewers:') }}</label> <label class="el-label">{{
$t('trials:trials-list:form:totalReviewers:')
}}</label>
<span>{{ trialInfo.TotalReviewers }}</span> <span>{{ trialInfo.TotalReviewers }}</span>
</div> </div>
<div class="div-col"> <div class="div-col">
<label class="el-label">{{ $t('trials:trials-list:form:typeofReviewers:') }}</label> <label class="el-label">{{
<span>{{ trialInfo.AttendedReviewerTypeEnumList.map(v => $fd('AttendedReviewerType', v)).join(', ') }}</span> $t('trials:trials-list:form:typeofReviewers:')
</div> }}</label>
<div class="div-col"> <span>{{
trialInfo.AttendedReviewerTypeEnumList.map((v) =>
$fd('AttendedReviewerType', v)
).join(', ')
}}</span>
</div> </div>
<div class="div-col"></div>
</div> </div>
</div> </div>
<div class="title"> <div class="title">
@ -60,7 +93,12 @@
</div> </div>
</div> </div>
<div class="step-wrapper"> <div class="step-wrapper">
<el-steps :active="activeStatus" style="margin-top: 70px" align-center :space="300"> <el-steps
:active="activeStatus"
style="margin-top: 70px"
align-center
:space="300"
>
<!-- Selection --> <!-- Selection -->
<el-step <el-step
:title="$t('trials:seletctedReviews:timeline:selection')" :title="$t('trials:seletctedReviews:timeline:selection')"
@ -92,22 +130,26 @@
</el-steps> </el-steps>
<div class="step-content"> <div class="step-content">
<Selection <Selection
v-if="activeStatus===0" v-if="activeStatus === 0"
:isEN="isEN"
@nextStep="nextStep" @nextStep="nextStep"
/> />
<Submission <Submission
v-if="activeStatus===1" v-if="activeStatus === 1"
ref="submission" ref="submission"
:isEN="isEN"
@nextStep="nextStep" @nextStep="nextStep"
/> />
<Approval <Approval
v-if="activeStatus===2" v-if="activeStatus === 2"
ref="approval" ref="approval"
:isEN="isEN"
@nextStep="nextStep" @nextStep="nextStep"
/> />
<Confirmation <Confirmation
v-if="activeStatus===3" v-if="activeStatus === 3"
ref="confirmation" ref="confirmation"
:isEN="isEN"
/> />
</div> </div>
</div> </div>
@ -127,18 +169,30 @@ export default {
trialInfo: null, trialInfo: null,
TrialId: '', TrialId: '',
activeStatus: null, activeStatus: null,
TrialMaxState: 0 TrialMaxState: 0,
} }
}, },
mounted() { mounted() {
this.TrialId = this.$route.query.trialId this.TrialId = this.$route.query.trialId
this.initPage() this.initPage()
}, },
computed: {
isEN() {
return this.$i18n.locale !== 'zh'
},
},
methods: { methods: {
initPage() { initPage() {
getTrialInfoAndMaxTrialState(this.TrialId).then(res => { getTrialInfoAndMaxTrialState(this.TrialId).then((res) => {
this.trialInfo = res.Result.TrialView this.trialInfo = res.Result.TrialView
var activeStatus = res.Result.TrialMaxState < 1 ? 0 : res.Result.TrialMaxState < 5 ? 1 : res.Result.TrialMaxState < 8 ? 2 : 3 var activeStatus =
res.Result.TrialMaxState < 1
? 0
: res.Result.TrialMaxState < 5
? 1
: res.Result.TrialMaxState < 8
? 2
: 3
this.activeStatus = activeStatus this.activeStatus = activeStatus
this.TrialMaxState = activeStatus this.TrialMaxState = activeStatus
}) })
@ -147,95 +201,93 @@ export default {
this.activeStatus = step this.activeStatus = step
}, },
nextStep(stepName) { nextStep(stepName) {
this.activeStatus = this.activeStatus === 3 ? 3 : this.activeStatus + 1; this.activeStatus = this.activeStatus === 3 ? 3 : this.activeStatus + 1
if(stepName==='confirmation'){ if (stepName === 'confirmation') {
this.activeStatus = 3; this.activeStatus = 3
} }
this.TrialMaxState = this.activeStatus this.TrialMaxState = this.activeStatus
this.$nextTick( this.$nextTick(
function() { function () {
this.$refs[stepName].getList() this.$refs[stepName].getList()
}.bind(this) }.bind(this)
) )
} },
},
}
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.enroll-container { .enroll-container {
height: 100%; height: 100%;
padding: 0; padding: 0;
margin: 0; margin: 0;
display: flex;
flex-direction: column;
background-color: #fff;
.content-wrapper {
height: 100px;
}
.step-wrapper {
flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background-color: #fff; }
.content-wrapper{ .el-steps {
height: 100px; height: 80px;
}
.step-content {
flex: 1;
}
.title {
height: 40px;
line-height: 40px;
padding-left: 5px;
background: #e4ebf1;
border-left: 3px solid #0fc8e0;
font-size: 13px;
p {
padding: 0;
margin: 0;
} }
.step-wrapper{ }
flex: 1; .trial-wrapper {
height: 60px;
.div-row {
display: flex; display: flex;
flex-direction: column; justify-content: space-between;
} margin: 10px 20px !important;
.el-steps{
height: 80px;
}
.step-content{
flex: 1;
}
.title {
height: 40px;
line-height: 40px;
padding-left: 5px;
background: #e4ebf1;
border-left: 3px solid #0fc8e0;
font-size: 13px; font-size: 13px;
p{ .div-col {
padding: 0; flex: 1;
margin: 0; width: 100px;
} white-space: nowrap !important;
} text-overflow: ellipsis !important;
.trial-wrapper{ word-break: break-word !important;
height: 60px; overflow: hidden !important;
.div-row { label {
display: flex; font-weight: bold;
justify-content: space-between;
margin: 10px 20px !important;
font-size: 13px;
.div-col {
flex: 1;
width: 100px;
white-space: nowrap !important;
text-overflow: ellipsis !important;
word-break: break-word !important;
overflow: hidden !important;
label {
font-weight: bold;
}
}
.div-textarea {
display: inline-block;
} }
}
.div-textarea {
display: inline-block;
}
}
}
} .underline {
// .el-step__title {
// text-decoration: underline;
// }
.el-step__title,
.el-step__title.is-process,
.el-step__title.is-finish {
text-decoration: underline;
} }
}
.underline{ .noneUnderline {
// .el-step__title { .el-step__title {
// text-decoration: underline; text-decoration: none;
// }
.el-step__title,
.el-step__title.is-process,
.el-step__title.is-finish {
text-decoration: underline;
}
}
.noneUnderline{
.el-step__title {
text-decoration: none;
}
} }
}
.el-step__head.is-process, .el-step__head.is-process,
.el-step__title.is-process, .el-step__title.is-process,
.el-step__description.is-process { .el-step__description.is-process {
@ -261,5 +313,5 @@ export default {
.click_cursor { .click_cursor {
cursor: pointer; cursor: pointer;
} }
} }
</style> </style>