Merge branch 'main' into uat_us

uat_us
wangxiaoshuang 2025-01-22 15:29:37 +08:00
commit d70cffe306
14 changed files with 165 additions and 81 deletions

View File

@ -13,6 +13,7 @@
v-model="searchData[item.prop]"
:placeholder="item.placeholder"
size="mini"
clearable
:style="{ width: item.width }"
:readonly="item.readonly"
/>
@ -22,6 +23,7 @@
v-model="searchData[item.prop]"
:placeholder="item.placeholder"
size="mini"
clearable
:style="{ width: item.width }"
@change="item.change && item.change(that, searchData[item.prop])"
>
@ -37,6 +39,7 @@
v-model="searchData[item.prop]"
:placeholder="item.placeholder"
size="mini"
clearable
:style="{ width: item.width }"
@change="item.change && item.change(that, searchData[item.prop])"
>
@ -96,6 +99,7 @@
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
:picker-options="item.pickerOption"
clearable
/>
<!-- 时间 -->
<el-time-select
@ -104,6 +108,7 @@
:placeholder="item.placeholder"
type=""
:style="{ width: item.width }"
clearable
/>
<!-- 日期时间 -->
<el-date-picker
@ -114,6 +119,7 @@
value-format="yyyy-MM-dd HH:mm:ss"
:disabled="item.disable && item.disable(searchData[item.prop])"
:style="{ width: item.width }"
clearable
/>
<!-- 日期时间段 -->
<el-date-picker

View File

@ -503,6 +503,18 @@ export default {
this.loginByRole(this.$store.state.user.roles[0].Id)
return
}
if (
Array.isArray(this.$store.state.user.roles) &&
this.$store.state.user.roles.filter((item) => item.IsUserRoleDisabled)
.length ===
this.$store.state.user.roles.length - 1
) {
let role = this.$store.state.user.roles.find(
(item) => !item.IsUserRoleDisabled
)
this.loginByRole(role.Id)
return
}
return (this.toggleRoleVisible = true)
},
cancel() {

View File

@ -73,7 +73,8 @@
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:UserType')"
prop="UserTypeId"
prop="Roles"
v-if="type === 0"
>
<div style="display: flex; align-items: center">
<el-select
@ -85,7 +86,6 @@
style="width: 100%"
:disabled="user.CanEditUserType === false || type === 1"
@change="handleChange"
v-if="type === 0"
>
<template v-for="userType of userTypeOptions">
<el-option
@ -96,6 +96,14 @@
/>
</template>
</el-select>
</div>
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:UserType')"
prop="userTypeId"
v-else
>
<div style="display: flex; align-items: center">
<el-select
ref="userType"
v-model="Roles"
@ -105,7 +113,6 @@
style="width: 100%"
:disabled="user.CanEditUserType === false || type === 1"
@change="handleChange"
v-else
>
<template v-for="userType of userTypeOptions">
<el-option

View File

@ -71,6 +71,8 @@ export default {
<style lang="scss" scoped>
.notice-marquee_wrapper{
width: 100%;
display: flex;
align-items: center;
/deep/ .el-dialog__header{
padding: 10px;
}

View File

@ -139,7 +139,11 @@ export default {
return this.$store.state.user.roles
},
hasRole() {
return this.roles && this.roles.length > 1
return (
this.roles &&
this.roles.length > 1 &&
this.roles.filter((item) => !item.IsUserRoleDisabled).length > 1
)
},
},
watch: {

View File

@ -119,7 +119,7 @@
v-for="item in roles"
:key="item.Id"
:label="item.Id"
:disabled="item.isUserRoleDisabled"
:disabled="item.IsUserRoleDisabled"
style="margin-bottom: 10px"
>
{{ item.UserTypeShortName }}

View File

@ -17,7 +17,7 @@
<el-form-item :label="$t('trials:notice:table:notificationContent')">
<el-input
v-model="searchData.NoticeContent"
style="width:100px;"
style="width: 100px"
clearable
/>
</el-form-item>
@ -36,7 +36,11 @@
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
@ -44,7 +48,7 @@
</template>
<template slot="main-container">
<el-table
v-adaptive="{bottomOffset:60}"
v-adaptive="{ bottomOffset: 60 }"
v-loading="loading"
:data="list"
stripe
@ -79,7 +83,15 @@
sortable="custom"
>
<template slot-scope="scope">
<el-tag :type="scope.row.ActualNoticeStateEnum === 0 ? 'info' : scope.row.ActualNoticeStateEnum === 1 ? 'success' : 'error'">
<el-tag
:type="
scope.row.ActualNoticeStateEnum === 0
? 'info'
: scope.row.ActualNoticeStateEnum === 1
? 'success'
: 'error'
"
>
{{ $fd('NoticeState', scope.row.ActualNoticeStateEnum) }}
</el-tag>
</template>
@ -113,7 +125,12 @@
sortable="custom"
>
<template slot-scope="scope">
<a :href="OSSclientConfig.basePath + scope.row.Path" target="_blank" style="color:#428bca">{{ scope.row.FileName }}</a>
<a
:href="OSSclientConfig.basePath + scope.row.Path"
target="_blank"
style="color: #428bca"
>{{ scope.row.FileName }}</a
>
</template>
</el-table-column>
<el-table-column
@ -124,11 +141,19 @@
sortable="custom"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.IsRead">{{ $fd('YesOrNo', scope.row.IsRead) }}</el-tag>
<el-tag v-else type="danger">{{ $fd('YesOrNo', scope.row.IsRead) }}</el-tag>
<el-tag v-if="scope.row.IsRead">{{
$fd('YesOrNo', scope.row.IsRead)
}}</el-tag>
<el-tag v-else type="danger">{{
$fd('YesOrNo', scope.row.IsRead)
}}</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" min-width="100" fixed="right">
<el-table-column
:label="$t('common:action:action')"
min-width="100"
fixed="right"
>
<template slot-scope="scope">
<el-button
circle
@ -136,12 +161,17 @@
icon="el-icon-info"
@click="showDetail(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template>
</BaseContainer>
</template>
@ -157,9 +187,10 @@ const searchDataDefault = () => {
ApplicableProjectEnum: null,
NoticeModeEnum: null,
NoticeStateEnum: null,
Asc: true,
Asc: false,
SortField: 'PublishedTime',
PageIndex: 1,
PageSize: 20
PageSize: 20,
}
}
export default {
@ -171,7 +202,7 @@ export default {
searchData: searchDataDefault(),
list: [],
total: 0,
loading: false
loading: false,
}
},
mounted() {
@ -180,17 +211,21 @@ export default {
methods: {
getList() {
this.loading = true
getUserSystemNoticeList(this.searchData).then(res => {
getUserSystemNoticeList(this.searchData)
.then((res) => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
})
.catch(() => {
this.loading = false
})
},
showDetail(row) {
var currentNoticeType = this.$fd('NoteType', row.NoticeTypeEnum)
if (row.IsRead || row.ActualNoticeStateEnum !== 1) {
this.$alert(row.NoticeContent, currentNoticeType, {
showConfirmButton: false
showConfirmButton: false,
})
} else {
const h = this.$createElement
@ -200,18 +235,22 @@ export default {
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
instance.confirmButtonLoading = true
setSystemNoticeHaveRead(row.Id).then(async res => {
setSystemNoticeHaveRead(row.Id)
.then(async (res) => {
if (res.IsSuccess) {
await this.$store.dispatch('global/getNoticeList')
this.getList()
}
instance.confirmButtonLoading = false
done()
}).catch(() => { instance.confirmButtonLoading = false })
})
.catch(() => {
instance.confirmButtonLoading = false
})
} else {
done()
}
}
},
})
}
},
@ -237,10 +276,9 @@ export default {
this.searchData.SortField = column.prop
this.searchData.PageIndex = 1
this.getList()
}
}
},
},
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -11,12 +11,7 @@
<span>({{ record.CreateTime }}) </span>
</p>
<div class="info-content">
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && (record.MedicalDialogCloseEnum!== null || record.Content)">
<div>{{ $t('trials:medicalFeedback:title:closeReasonEnum') }}{{ $fd('MedicalDialogCloseEnum',record.MedicalDialogCloseEnum) }}</div>
<div v-if="record.Content">{{ $t('trials:medicalFeedback:title:closereasonRemarks') }}{{ record.Content }}</div>
</template>
<template v-else-if="[14, 30].includes(record.UserTypeEnumInt) && record.Questioning">
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Questioning">
<div>
<!-- 您好根据医学审核反馈该阅片任务的评估有如下问题需要您确认或澄清 -->
{{ $t('trials:medicalFeedback:message:msg1') }}
@ -60,11 +55,14 @@
{{ $t('trials:medicalFeedback:message:msg4') }}
</div>
</template>
<template v-else-if="[14, 30].includes(record.UserTypeEnumInt)">
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && record.MedicalDialogCloseEnum!== null">
<div>{{ $t('trials:medicalFeedback:title:closeReasonEnum') }}{{ $fd('MedicalDialogCloseEnum',record.MedicalDialogCloseEnum) }}</div>
</template>
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Content ">
<div>{{ record.Content }}</div>
</template>
<template v-else-if="[13].includes(record.UserTypeEnumInt)">
<template v-if="[13].includes(record.UserTypeEnumInt)">
<div>
{{ $t('trials:medicalFeedback:title:isEndorse') }}{{ $fd('MedicalReviewDoctorUserIdea', record.DoctorUserIdeaEnum) }}
</div>

View File

@ -11,12 +11,8 @@
<span>({{ record.CreateTime }}) </span>
</p>
<div class="info-content">
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && (record.MedicalDialogCloseEnum!== null || record.Content)">
<div>{{ $t('trials:medicalFeedback:title:closeReasonEnum') }}{{ $fd('MedicalDialogCloseEnum',record.MedicalDialogCloseEnum) }}</div>
<div v-if="record.Content">{{ $t('trials:medicalFeedback:title:closereasonRemarks') }}{{ record.Content }}</div>
</template>
<template v-else-if="[14, 30].includes(record.UserTypeEnumInt) && record.Questioning">
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Questioning">
<div>
<!-- 您好根据医学审核反馈该阅片任务的评估有如下问题需要您确认或澄清 -->
{{ $t('trials:medicalFeedback:message:msg1') }}
@ -60,11 +56,14 @@
{{ $t('trials:medicalFeedback:message:msg4') }}
</div>
</template>
<template v-else-if="[14, 30].includes(record.UserTypeEnumInt)">
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && record.MedicalDialogCloseEnum!== null">
<div>{{ $t('trials:medicalFeedback:title:closeReasonEnum') }}{{ $fd('MedicalDialogCloseEnum',record.MedicalDialogCloseEnum) }}</div>
</template>
<template v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Content">
<div>{{ record.Content }}</div>
</template>
<template v-else-if="[13].includes(record.UserTypeEnumInt)">
<template v-if="[13].includes(record.UserTypeEnumInt)">
<div>
{{ $t('trials:medicalFeedback:title:isEndorse') }}{{ $fd('MedicalReviewDoctorUserIdea', record.DoctorUserIdeaEnum) }}
</div>

View File

@ -260,7 +260,11 @@ export default {
if (Object.keys(this.medicalReviewInfo).length > 0) {
for (const k in this.form) {
if (this.medicalReviewInfo.hasOwnProperty(k)) {
this.form[k] = this.medicalReviewInfo[k];
if (k === 'IsHaveQuestion' && this.medicalReviewInfo.AuditState === 0) {
this.form[k] = null
} else {
this.form[k] = this.medicalReviewInfo[k]
}
}
}
this.fileList = [];

View File

@ -22,12 +22,15 @@
<el-table-column
v-for="item in exportInfo.DicList"
:key="item.Code"
:label="$i18n.locale === 'zh' ? item.ValueCN : item.Value">
:label="$i18n.locale === 'zh' ? item.ValueCN : item.Value"
>
<template v-slot="scope">
<el-checkbox
@change="() => changeState(scope, item.Code)"
:checked="getCheckState(scope, item.Code)"
:disabled="getDisabledState(scope.row, item)"
v-show="!scope.row.IsGroup || !scope.row.HasChildren"
>
</el-checkbox>
</template>
@ -43,6 +46,7 @@
v-model="scope.row.CDISCCode"
size="mini"
:disabled="scope.row.HasChildren || scope.row.IsTableQuestion"
v-show="!scope.row.IsGroup || !scope.row.HasChildren"
>
</el-input>
</template>
@ -91,29 +95,7 @@ export default {
async submit() {
this.loading = true
try {
let params= {
questionList: [],
tableQuestionList: []
}
params.questionList = this.exportInfo.QuestionList.map(i => {
return {
questionId: i.QuestionId,
tableQuestionId: i.TableQuestionId,
exportResult: i.ExportResult,
CDISCCode: i.CDISCCode
}
})
this.exportInfo.QuestionList.forEach(i => {
let childlist = i.Children.map(k => {
return {
questionId: i.QuestionId,
tableQuestionId: k.TableQuestionId,
exportResult: k.ExportResult,
CDISCCode: k.CDISCCode
}
})
params.tableQuestionList = params.tableQuestionList.concat(childlist)
})
let params = this.filterQuestions(this.exportInfo.QuestionList)
let res = await setTrialQuestionExportResult(params)
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
@ -124,6 +106,36 @@ export default {
console.log(e)
}
},
filterQuestions(arr) {
let params= {
questionList: [],
tableQuestionList: []
}
for (let i of arr) {
if (!i.IsGroup && !i.IsTableQuestion) {
params.questionList.push({
questionId: i.QuestionId,
tableQuestionId: i.TableQuestionId,
exportResult: i.ExportResult,
CDISCCode: i.CDISCCode
})
}
if (i.TableQuestionId) {
params.tableQuestionList.push({
questionId: i.QuestionId,
tableQuestionId: i.TableQuestionId,
exportResult: i.ExportResult,
CDISCCode: i.CDISCCode
})
}
if (i.Children && i.Children.length > 0) {
const childResults = this.filterQuestions(i.Children)
params.questionList = params.questionList.concat(childResults.questionList)
params.tableQuestionList = params.tableQuestionList.concat(childResults.tableQuestionList)
}
}
return params;
},
//
getCheckState(item, code) {
return item.row.ExportResult.indexOf(code) > -1

View File

@ -24,6 +24,7 @@
<el-button
size="mini"
type="primary"
style="margin-right: 10px"
icon="el-icon-refresh-left"
@click="handleReset"
>
@ -491,6 +492,7 @@ export default {
.participant-container {
height: 100%;
.el-header {
padding-right: 5px;
.filter-container {
display: flex;
align-items: center;

View File

@ -59,7 +59,7 @@
/>
<el-table-column
:label="$t('trials:sysDocBeSigned:table:uploadTime')"
prop="UpdateTime"
prop="CreateTime"
show-overflow-tooltip
sortable="custom"
/>
@ -168,7 +168,7 @@ const searchDataDefault = () => {
pageIndex: 1,
pageSize: 20,
asc: false,
sortField: 'UpdateTime',
sortField: 'CreateTime',
}
}
export default {

View File

@ -38,7 +38,7 @@
/>
<el-table-column
:label="$t('trials:sysDocBeSigned:table:uploadTime')"
prop="UpdateTime"
prop="CreateTime"
show-overflow-tooltip
sortable="custom"
/>
@ -130,7 +130,7 @@ const searchDataDefault = () => {
pageIndex: 1,
pageSize: 20,
asc: false,
sortField: 'UpdateTime'
sortField: 'CreateTime'
}
}
export default {