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

View File

@ -503,6 +503,18 @@ export default {
this.loginByRole(this.$store.state.user.roles[0].Id) this.loginByRole(this.$store.state.user.roles[0].Id)
return 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) return (this.toggleRoleVisible = true)
}, },
cancel() { cancel() {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -260,7 +260,11 @@ export default {
if (Object.keys(this.medicalReviewInfo).length > 0) { if (Object.keys(this.medicalReviewInfo).length > 0) {
for (const k in this.form) { for (const k in this.form) {
if (this.medicalReviewInfo.hasOwnProperty(k)) { 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 = []; this.fileList = [];

View File

@ -22,12 +22,15 @@
<el-table-column <el-table-column
v-for="item in exportInfo.DicList" v-for="item in exportInfo.DicList"
:key="item.Code" :key="item.Code"
:label="$i18n.locale === 'zh' ? item.ValueCN : item.Value"> :label="$i18n.locale === 'zh' ? item.ValueCN : item.Value"
>
<template v-slot="scope"> <template v-slot="scope">
<el-checkbox <el-checkbox
@change="() => changeState(scope, item.Code)" @change="() => changeState(scope, item.Code)"
:checked="getCheckState(scope, item.Code)" :checked="getCheckState(scope, item.Code)"
:disabled="getDisabledState(scope.row, item)" :disabled="getDisabledState(scope.row, item)"
v-show="!scope.row.IsGroup || !scope.row.HasChildren"
> >
</el-checkbox> </el-checkbox>
</template> </template>
@ -43,6 +46,7 @@
v-model="scope.row.CDISCCode" v-model="scope.row.CDISCCode"
size="mini" size="mini"
:disabled="scope.row.HasChildren || scope.row.IsTableQuestion" :disabled="scope.row.HasChildren || scope.row.IsTableQuestion"
v-show="!scope.row.IsGroup || !scope.row.HasChildren"
> >
</el-input> </el-input>
</template> </template>
@ -91,29 +95,7 @@ export default {
async submit() { async submit() {
this.loading = true this.loading = true
try { try {
let params= { let params = this.filterQuestions(this.exportInfo.QuestionList)
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 res = await setTrialQuestionExportResult(params) let res = await setTrialQuestionExportResult(params)
if (res.IsSuccess) { if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$message.success(this.$t('common:message:savedSuccessfully'))
@ -124,6 +106,36 @@ export default {
console.log(e) 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) { getCheckState(item, code) {
return item.row.ExportResult.indexOf(code) > -1 return item.row.ExportResult.indexOf(code) > -1

View File

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

View File

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

View File

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