Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details

uat_us
caiyiling 2024-12-30 15:58:55 +08:00
commit 6c50257972
16 changed files with 458 additions and 169 deletions

View File

@ -120,6 +120,7 @@
v-if="item.type === 'Daterange'" v-if="item.type === 'Daterange'"
v-model="searchData[item.prop]" v-model="searchData[item.prop]"
type="datetimerange" type="datetimerange"
:default-time="['00:00:00', '23:59:59']"
:range-separator="$t('baseForm:daterange:rangeSeparator')" :range-separator="$t('baseForm:daterange:rangeSeparator')"
:start-placeholder="$t('baseForm:daterange:startPlaceholder')" :start-placeholder="$t('baseForm:daterange:startPlaceholder')"
:end-placeholder="$t('baseForm:daterange:startendPlaceholder')" :end-placeholder="$t('baseForm:daterange:startendPlaceholder')"

View File

@ -40,6 +40,7 @@
type="primary" type="primary"
size="small" size="small"
@click="save" @click="save"
:disabled="saveDisabled"
:loading="loading" :loading="loading"
v-if="hasRole" v-if="hasRole"
> >
@ -78,6 +79,9 @@ export default {
hasRole() { hasRole() {
return this.roles && this.roles.length > 0 return this.roles && this.roles.length > 0
}, },
saveDisabled() {
return this.form.userRoleId === zzSessionStorage.getItem('userId')
},
}, },
methods: { methods: {
cancel() { cancel() {
@ -98,11 +102,13 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.roles { .roles {
width: 100%; max-width: 365px;
width: fit-content;
display: flex; display: flex;
align-content: center; align-content: center;
justify-content: center; // justify-content: center;
flex-wrap: wrap; flex-wrap: wrap;
margin: auto;
} }
/deep/ .el-radio__original { /deep/ .el-radio__original {
@ -113,4 +119,7 @@ export default {
.el-radio__inner { .el-radio__inner {
box-shadow: none !important; box-shadow: none !important;
} }
.el-radio {
width: 60px;
}
</style> </style>

View File

@ -14,13 +14,13 @@
<div class="right-menu"> <div class="right-menu">
<div class="navbar-flex-wrapper"> <div class="navbar-flex-wrapper">
<template v-if="device!=='mobile'"> <template v-if="device !== 'mobile'">
<screenfull id="screenfull" class="right-menu-item hover-effect" /> <screenfull id="screenfull" class="right-menu-item hover-effect" />
</template> </template>
<!-- <div class="avatar-container"> <!-- <div class="avatar-container">
<img src="@/assets/avatar.png" class="user-avatar"> <img src="@/assets/avatar.png" class="user-avatar">
</div> --> </div> -->
<div style="margin-left:20px;"> <div style="margin-left: 20px">
<el-dropdown class="dropdown-container" trigger="click"> <el-dropdown class="dropdown-container" trigger="click">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
{{ `${name} (${userTypeShortName})` }} {{ `${name} (${userTypeShortName})` }}
@ -30,10 +30,20 @@
</span> </span>
<el-dropdown-menu slot="dropdown" class="user-dropdown"> <el-dropdown-menu slot="dropdown" class="user-dropdown">
<el-dropdown-item v-if="!isReviewer"> <el-dropdown-item v-if="!isReviewer">
<span style="display:block;" @click="editInfo">{{$t('system:navbar:button:Profile')}}</span> <span style="display: block" @click="editInfo">{{
$t('system:navbar:button:Profile')
}}</span>
</el-dropdown-item>
<!-- 切换角色 -->
<el-dropdown-item divided v-if="hasRole">
<span style="display: block" @click="openToggleRole">{{
$t('system:navbar:button:toggleRole')
}}</span>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item divided> <el-dropdown-item divided>
<span style="display:block;" @click="logout">{{$t('system:navbar:button:Log Out')}}</span> <span style="display: block" @click="logout">{{
$t('system:navbar:button:Log Out')
}}</span>
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
@ -41,38 +51,119 @@
<TopLang></TopLang> <TopLang></TopLang>
</div> </div>
</div> </div>
<toggleRole
v-if="toggleRoleVisible"
:visible.sync="toggleRoleVisible"
:loading="toggleRoleLoading"
@save="loginByRole"
/>
</div> </div>
</template> </template>
<script> <script>
import {mapGetters, mapMutations} from 'vuex' import { mapGetters, mapMutations } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb' import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger' import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull' import Screenfull from '@/components/Screenfull'
import TopLang from './topLang' import TopLang from './topLang'
import toggleRole from '@/components/toggleRole'
import { resetRouter } from '@/router'
export default { export default {
components: { components: {
Breadcrumb, Breadcrumb,
Hamburger, Hamburger,
Screenfull, Screenfull,
TopLang TopLang,
toggleRole,
}, },
data() { data() {
return { return {
isReviewer: false, isReviewer: false,
userTypeShortName: zzSessionStorage.getItem('userTypeShortName') toggleRoleVisible: false,
toggleRoleLoading: false,
} }
}, },
computed: { computed: {
...mapGetters(['sidebar', 'name', 'device']) ...mapGetters(['sidebar', 'name', 'device', 'userTypeShortName']),
roles() {
return this.$store.state.user.roles
},
hasRole() {
return this.roles && this.roles.length > 1
},
}, },
created() { created() {
// this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer')) // this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer'))
}, },
methods: { methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }), ...mapMutations({ setLanguage: 'lang/setLanguage' }),
openToggleRole() {
this.$store.dispatch('user/getUserInfo').then((res) => {
this.toggleRoleVisible = true
})
},
loginByRole(userRoleId) {
if (this.$store.state.user.userId === userRoleId) {
this.toggleRoleVisible = false
this.toggleRoleLoading = false
return false
}
this.toggleRoleLoading = true
this.$store
.dispatch('user/loginByRole', { userRoleId })
.then((res) => {
if (res) {
this.$store
.dispatch('permission/generateRoutes')
.then(async (res) => {
if (res && res.length > 0) {
resetRouter()
await this.$store.dispatch('global/getNoticeList')
this.$router.addRoutes(res)
this.toggleRoleLoading = false
if (this.loginType === 'DevOps') {
this.$router.replace({ path: res[0].path })
return
}
if (this.hasPermi(['role:radmin'])) {
this.$router.replace({ path: res[0].path })
return
}
if (
this.hasPermi([
'role:air',
'role:rpm',
'role:rcrc',
'role:rir',
])
) {
history.replaceState(null, null, '/trials/trials-list')
history.go(0)
} else {
history.replaceState(null, null, '/trials/trials-workbench')
history.go(0)
}
this.toggleRoleVisible = false
this.toggleRoleLoading = false
this.$EventBus.$emit('reload')
} else {
//
this.toggleRoleLoading = false
this.$message.warning(this.$t('login:message:login2'))
}
})
.catch((err) => {
console.log(err)
this.toggleRoleLoading = false
})
} else {
this.toggleRoleLoading = false
}
})
.catch(() => {
this.toggleRoleLoading = false
})
},
toggleSideBar() { toggleSideBar() {
this.$store.dispatch('app/toggleSideBar') this.$store.dispatch('app/toggleSideBar')
}, },
@ -91,16 +182,16 @@ export default {
editInfo() { editInfo() {
this.$router.push({ name: 'BaiscInfo' }) this.$router.push({ name: 'BaiscInfo' })
}, },
} },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.navbar-flex-wrapper{ .navbar-flex-wrapper {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
} }
.navbar { .navbar {
height: 50px; height: 50px;
overflow: hidden; overflow: hidden;

View File

@ -308,6 +308,8 @@ export default {
Img1, Img1,
toggleRoleVisible: false, toggleRoleVisible: false,
toggleRoleLoading: false, toggleRoleLoading: false,
LoginState: 0,
} }
}, },
computed: { computed: {
@ -383,10 +385,12 @@ export default {
loginIn(Id) { loginIn(Id) {
this.loading = true this.loading = true
this.showCode = false this.showCode = false
this.LoginState = 0
if (Id) this.loginForm.UserId = Id if (Id) this.loginForm.UserId = Id
this.$store this.$store
.dispatch('user/login', this.loginForm) .dispatch('user/login', this.loginForm)
.then((res) => { .then((res) => {
this.LoginState = res.BasicInfo.LoginState
if (res.BasicInfo.IsFirstAdd) { if (res.BasicInfo.IsFirstAdd) {
// , // ,
this.$message.success(this.$t('login:message:login1')) this.$message.success(this.$t('login:message:login1'))
@ -422,11 +426,12 @@ export default {
}, },
}) })
return return
} else if (res.BasicInfo.LoginState === 2) {
// IP'
// this.$alert(this.$t('login:message:login4'), this.$t('common:title:warning'))
this.$message.warning(this.$t('login:message:login4'))
} }
// else if (res.BasicInfo.LoginState === 2) {
// // IP'
// // this.$alert(this.$t('login:message:login4'), this.$t('common:title:warning'))
// this.$message.warning(this.$t('login:message:login4'))
// }
if ( if (
Array.isArray(this.$store.state.user.roles) && Array.isArray(this.$store.state.user.roles) &&
this.$store.state.user.roles.length === 1 this.$store.state.user.roles.length === 1
@ -455,6 +460,9 @@ export default {
if (res && res.length > 0) { if (res && res.length > 0) {
this.$store.dispatch('global/getNoticeList') this.$store.dispatch('global/getNoticeList')
this.$router.addRoutes(res) this.$router.addRoutes(res)
if (this.LoginState === 2) {
this.$message.warning(this.$t('login:message:login4'))
}
if (this.loginType === 'DevOps') { if (this.loginType === 'DevOps') {
this.$router.replace({ path: res[0].path }) this.$router.replace({ path: res[0].path })
return return

View File

@ -49,6 +49,8 @@ export default {
title: this.$t('system:loginLog:dialog:title'), title: this.$t('system:loginLog:dialog:title'),
width: '500px', width: '500px',
top: '10vh', top: '10vh',
appendToBody: true,
bodyStyle: `min-height: 100px; max-height: 650px;overflow-y: auto;padding: 10px;border: 1px solid #e0e0e0;`,
} }
}, },
}, },
@ -86,4 +88,9 @@ export default {
}, },
}, },
} }
</script> </script>
<style lang="scss" scoped>
::v-deep .el-form-item__label {
font-weight: bold;
}
</style>

View File

@ -123,13 +123,13 @@
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
<el-table-column <!-- <el-table-column
:label="$t('system:loginLog:table:LoginFaildName')" :label="$t('system:loginLog:table:LoginFaildName')"
prop="LoginFaildName" prop="LoginFaildName"
min-width="180" min-width="180"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> /> -->
<el-table-column <el-table-column
:label="$t('system:loginLog:table:LoginUserName')" :label="$t('system:loginLog:table:LoginUserName')"
prop="ActionUserName" prop="ActionUserName"
@ -137,6 +137,13 @@
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
<el-table-column
:label="$t('system:loginLog:table:Aetionlserlype')"
prop="ActionUserType"
min-width="100"
show-overflow-tooltip
sortable="custom"
/>
<!-- <el-table-column <!-- <el-table-column
:label="$t('system:loginLog:table:LoginUserType')" :label="$t('system:loginLog:table:LoginUserType')"
prop="LoginUserTypeEnum" prop="LoginUserTypeEnum"

View File

@ -89,7 +89,7 @@
> >
<template v-for="userType of userTypeOptions"> <template v-for="userType of userTypeOptions">
<el-option <el-option
v-if="userType.UserTypeEnum !== 20" v-if="![4, 6, 20].includes(userType.UserTypeEnum)"
:key="userType.Id" :key="userType.Id"
:label="userType.UserType" :label="userType.UserType"
:value="userType.Id" :value="userType.Id"
@ -109,7 +109,7 @@
> >
<template v-for="userType of userTypeOptions"> <template v-for="userType of userTypeOptions">
<el-option <el-option
v-if="userType.UserTypeEnum !== 20" v-if="![4, 6, 20].includes(userType.UserTypeEnum)"
:key="userType.Id" :key="userType.Id"
:label="userType.UserType" :label="userType.UserType"
:value="userType.Id" :value="userType.Id"

View File

@ -155,7 +155,8 @@ export default {
roleList() { roleList() {
let arr = this.list.map((item) => item.UserTypeId) let arr = this.list.map((item) => item.UserTypeId)
return this.userTypeOptions.filter( return this.userTypeOptions.filter(
(item) => !arr.includes(item.Id) && item.UserTypeEnum !== 20 (item) =>
!arr.includes(item.Id) && ![4, 6, 20].includes(item.UserTypeEnum)
) )
}, },
}, },

View File

@ -40,13 +40,13 @@
Array.isArray(scope.row.UserRoleList) && Array.isArray(scope.row.UserRoleList) &&
scope.row.UserRoleList.length > 0 scope.row.UserRoleList.length > 0
? scope.row.UserRoleList.map((item) => item.UserTypeShortName).join( ? scope.row.UserRoleList.map((item) => item.UserTypeShortName).join(
',' ', '
) )
: '' : ''
}} }}
</template> </template>
<template slot="roleSlot" slot-scope="{ scope }"> <template slot="roleSlot" slot-scope="{ scope }">
{{ scope.row.RoleNameList.map((role) => role.RoleName).join(',') }} {{ scope.row.RoleNameList.map((role) => role.RoleName).join(', ') }}
</template> </template>
<template slot="isZhiZhunSlot" slot-scope="{ scope }"> <template slot="isZhiZhunSlot" slot-scope="{ scope }">
{{ {{
@ -95,8 +95,12 @@ const searchDataDefault = () => {
RealName: '', RealName: '',
BeginCreateTime: '', BeginCreateTime: '',
EndCreateTime: '', EndCreateTime: '',
EndLastLoginTime: null,
EndLastChangePassWordTime: null,
BeginLastChangePassWordTime: null,
CreateTimeArr: [], CreateTimeArr: [],
LastLoginTimeArr: [], LastLoginTimeArr: [],
LastChangePassWordTimeArr: [],
SortField: 'CreateTime', SortField: 'CreateTime',
} }
} }
@ -202,6 +206,13 @@ export default {
sortable: 'custom', sortable: 'custom',
showOverflowTooltip: true, showOverflowTooltip: true,
}, },
{
prop: 'LastChangePassWordTime',
label: this.$t('system:userlist:table:LastChangePassWordTime'),
minWidth: 250,
sortable: 'custom',
showOverflowTooltip: true,
},
{ {
prop: 'CreateTime', prop: 'CreateTime',
label: this.$t('system:userlist:table:createTime'), label: this.$t('system:userlist:table:createTime'),
@ -213,7 +224,7 @@ export default {
type: 'operate', type: 'operate',
label: this.$t('common:action:action'), label: this.$t('common:action:action'),
minWidth: 200, minWidth: 200,
fixed:"right", fixed: 'right',
operates: [ operates: [
{ {
name: this.$t('common:button:edit'), name: this.$t('common:button:edit'),
@ -338,6 +349,13 @@ export default {
width: '400px', width: '400px',
placeholder: '', placeholder: '',
}, },
{
type: 'Daterange',
label: this.$t('system:userlist:label:LastChangePassWordTime'),
prop: 'LastChangePassWordTimeArr',
width: '400px',
placeholder: '',
},
{ {
type: 'Daterange', type: 'Daterange',
label: this.$t('system:userlist:label:CreateTime'), label: this.$t('system:userlist:label:CreateTime'),
@ -442,6 +460,12 @@ export default {
this.searchData.BeginLastLoginTime = this.searchData.LastLoginTimeArr[0] this.searchData.BeginLastLoginTime = this.searchData.LastLoginTimeArr[0]
this.searchData.EndLastLoginTime = this.searchData.LastLoginTimeArr[1] this.searchData.EndLastLoginTime = this.searchData.LastLoginTimeArr[1]
} }
if (this.searchData.LastChangePassWordTimeArr.length > 0) {
this.searchData.BeginLastChangePassWordTime =
this.searchData.LastChangePassWordTimeArr[0]
this.searchData.EndLastChangePassWordTime =
this.searchData.LastChangePassWordTimeArr[1]
}
this.getList() this.getList()
}, },
}, },

View File

@ -127,7 +127,7 @@
</el-radio-group> </el-radio-group>
<!-- 修改 --> <!-- 修改 -->
<el-button <el-button
:disabled="!userRoleId" :disabled="!userRoleId || saveDisabled"
class="saveBtn" class="saveBtn"
:loading="toggleRoleLoading" :loading="toggleRoleLoading"
type="primary" type="primary"
@ -215,6 +215,9 @@ export default {
hasRole() { hasRole() {
return this.roles && this.roles.length > 1 return this.roles && this.roles.length > 1
}, },
saveDisabled() {
return this.userRoleId === zzSessionStorage.getItem('userId')
},
}, },
methods: { methods: {
// //
@ -336,4 +339,12 @@ export default {
}, },
}, },
} }
</script> </script>
<style lang="scss" scoped>
.el-radio-group {
margin-top: 12px;
}
.el-radio {
width: 60px;
}
</style>

View File

@ -307,23 +307,21 @@
</div> </div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item v-if="adInfo.ReadingTaskState < 2">
<div style="text-align: center">
<el-button type="primary" @click="skipTask">
<!-- 跳过 -->
{{ $t("trials:readingReport:button:skip") }}
</el-button>
<!-- 保存 -->
<el-button type="primary" @click="handleSave">{{
$t("common:button:save")
}}</el-button>
<!-- 提交 -->
<el-button type="primary" @click="handleSubmit">{{
$t("common:button:submit")
}}</el-button>
</div>
</el-form-item>
</el-form> </el-form>
<div style="text-align: center;width:100%" v-if="adInfo.ReadingTaskState < 2">
<el-button type="primary" @click="skipTask">
<!-- 跳过 -->
{{ $t("trials:readingReport:button:skip") }}
</el-button>
<!-- 保存 -->
<el-button type="primary" @click="handleSave">{{
$t("common:button:save")
}}</el-button>
<!-- 提交 -->
<el-button type="primary" @click="handleSubmit">{{
$t("common:button:submit")
}}</el-button>
</div>
</el-card> </el-card>
<el-card <el-card

View File

@ -140,7 +140,7 @@
<span>{{ <span>{{
scope.row.TrialUserRoleList.map( scope.row.TrialUserRoleList.map(
(item) => item.UserTypeShortName (item) => item.UserTypeShortName
).join(',') ).join(', ')
}}</span> }}</span>
</el-button> </el-button>
</template> </template>

View File

@ -1,6 +1,6 @@
<template> <template>
<el-container class="participant-container"> <el-container class="participant-container">
<el-header style="height:50px"> <el-header style="height: 50px">
<div class="filter-container"> <div class="filter-container">
<!-- 姓名 --> <!-- 姓名 -->
<span>{{ $t('trials:externalStaff:table:name') }}:</span> <span>{{ $t('trials:externalStaff:table:name') }}:</span>
@ -12,23 +12,54 @@
<span>{{ $t('trials:externalStaff:table:phone') }}:</span> <span>{{ $t('trials:externalStaff:table:phone') }}:</span>
<el-input v-model="listQuery.Phone" size="mini" class="mr" clearable /> <el-input v-model="listQuery.Phone" size="mini" class="mr" clearable />
<!-- 查询 --> <!-- 查询 -->
<el-button type="primary" size="mini" icon="el-icon-search" @click="handleSearch"> <el-button
type="primary"
size="mini"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button size="mini" type="primary" icon="el-icon-refresh-left" @click="handleReset"> <el-button
size="mini"
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }} {{ $t('common:button:reset') }}
</el-button> </el-button>
<!-- 权限配置 --> <!-- 权限配置 -->
<el-button type="primary" size="mini" style="margin-left:auto" :loading="assignLoadStatus" @click="openPermission"> <el-button
type="primary"
size="mini"
style="margin-left: auto"
:loading="assignLoadStatus"
@click="openPermission"
>
{{ $t('trials:staff:button:permissionConfiguration') }} {{ $t('trials:staff:button:permissionConfiguration') }}
</el-button> </el-button>
<!-- 发送邮件 --> <!-- 发送邮件 -->
<el-button type="primary" size="mini" style="margin-left:10px" :disabled="selectArr.length === 0" :loading="assignLoadStatus" icon="el-icon-message" @click="sendEmail"> <el-button
type="primary"
size="mini"
style="margin-left: 10px"
:disabled="selectArr.length === 0"
:loading="assignLoadStatus"
icon="el-icon-message"
@click="sendEmail"
>
{{ $t('trials:staff:button:sendEmail') }} {{ $t('trials:staff:button:sendEmail') }}
</el-button> </el-button>
<!-- 添加 --> <!-- 添加 -->
<el-button type="primary" icon="el-icon-plus" size="mini" style="margin-left:10px" :loading="assignLoadStatus" @click="handleAdd"> <el-button
type="primary"
icon="el-icon-plus"
size="mini"
style="margin-left: 10px"
:loading="assignLoadStatus"
@click="handleAdd"
>
{{ $t('trials:staff:button:addExternalStaff') }} {{ $t('trials:staff:button:addExternalStaff') }}
</el-button> </el-button>
</div> </div>
@ -57,7 +88,9 @@
sortable="custom" sortable="custom"
min-width="100" min-width="100"
> >
<template slot-scope="scope">{{ scope.row.LastName + ' / ' + scope.row.FirstName }}</template> <template slot-scope="scope">{{
scope.row.LastName + ' / ' + scope.row.FirstName
}}</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="UserType" prop="UserType"
@ -67,7 +100,13 @@
min-width="120" min-width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ userTypeOptions.length > 0 ? userTypeOptions.find((v) => { return v.Id == scope.row.UserTypeId }).UserTypeShortName : '' }} {{
userTypeOptions.length > 0
? userTypeOptions.find((v) => {
return v.Id == scope.row.UserTypeId
}).UserTypeShortName
: ''
}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -100,9 +139,15 @@
sortable="custom" sortable="custom"
min-width="120" min-width="120"
> >
<template slot-scope="scope">{{ $fd('IsJoin', scope.row.IsJoin) }}</template> <template slot-scope="scope">{{
$fd('IsJoin', scope.row.IsJoin)
}}</template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('common:action:action')" fixed="right" min-width="150"> <el-table-column
:label="$t('common:action:action')"
fixed="right"
min-width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
circle circle
@ -116,23 +161,57 @@
</el-table> </el-table>
</div> </div>
</el-main> </el-main>
<StaffExternalAdd ref="StaffExternalAdd" :user-type-options="userTypeOptions" @getList="refeshList" /> <StaffExternalAdd
ref="StaffExternalAdd"
:user-type-options="userTypeOptions"
@getList="refeshList"
/>
<base-model v-if="model_config.visible" :config="model_config"> <base-model v-if="model_config.visible" :config="model_config">
<template slot="dialog-body"> <template slot="dialog-body">
<el-form :model="permission" :rules="permissionRole" ref="permissionForm" label-width="140px" class="demo-ruleForm"> <el-form
<el-form-item :label="$t('trials:externalStaff:form:IsSPMJoinReReadingApproval')" prop="IsSPMJoinReReadingApproval"> :model="permission"
:rules="permissionRole"
ref="permissionForm"
label-width="140px"
class="demo-ruleForm"
>
<el-form-item
:label="$t('trials:externalStaff:form:IsSPMJoinReReadingApproval')"
prop="IsSPMJoinReReadingApproval"
>
<el-radio-group v-model="permission.IsSPMJoinReReadingApproval"> <el-radio-group v-model="permission.IsSPMJoinReReadingApproval">
<el-radio v-for="item in $d.YesOrNo" :key="item.id" :label="item.value">{{ item.label }}</el-radio> <el-radio
v-for="item in $d.YesOrNo"
:key="item.id"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item :label="$t('trials:externalStaff:form:IsSPMJoinReviewerSelect')" prop="IsSPMJoinReviewerSelect"> <el-form-item
:label="$t('trials:externalStaff:form:IsSPMJoinReviewerSelect')"
prop="IsSPMJoinReviewerSelect"
>
<el-radio-group v-model="permission.IsSPMJoinReviewerSelect"> <el-radio-group v-model="permission.IsSPMJoinReviewerSelect">
<el-radio v-for="item in $d.YesOrNo" :key="item.id" :label="item.value">{{ item.label }}</el-radio> <el-radio
v-for="item in $d.YesOrNo"
:key="item.id"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item :label="$t('trials:externalStaff:form:IsSPMJoinSiteSurvey')" prop="IsSPMJoinSiteSurvey"> <el-form-item
:label="$t('trials:externalStaff:form:IsSPMJoinSiteSurvey')"
prop="IsSPMJoinSiteSurvey"
>
<el-radio-group v-model="permission.IsSPMJoinSiteSurvey"> <el-radio-group v-model="permission.IsSPMJoinSiteSurvey">
<el-radio v-for="item in $d.YesOrNo" :key="item.id" :label="item.value">{{ item.label }}</el-radio> <el-radio
v-for="item in $d.YesOrNo"
:key="item.id"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -159,7 +238,14 @@
</el-container> </el-container>
</template> </template>
<script> <script>
import { getTrialExternalUserList, addTrialUsers, getUserTypeList, sendExternalUserJoinEmail, getTrialConfigInfo, configTrialSPMInfo } from '@/api/trials' import {
getTrialExternalUserList,
addTrialUsers,
getUserTypeList,
sendExternalUserJoinEmail,
getTrialConfigInfo,
configTrialSPMInfo,
} from '@/api/trials'
import { deleteTrialExternalUser } from '@/api/trials/setting.js' import { deleteTrialExternalUser } from '@/api/trials/setting.js'
import StaffExternalAdd from './staffExternalAdd' import StaffExternalAdd from './staffExternalAdd'
import BaseModel from '@/components/BaseModel' import BaseModel from '@/components/BaseModel'
@ -167,11 +253,11 @@ const getListQueryDefault = () => {
return { return {
Phone: '', Phone: '',
Email: '', Email: '',
Name: '' Name: '',
} }
} }
export default { export default {
components: { StaffExternalAdd,BaseModel }, components: { StaffExternalAdd, BaseModel },
data() { data() {
return { return {
list: [], list: [],
@ -181,17 +267,26 @@ export default {
assignLoadStatus: false, assignLoadStatus: false,
// isAdmin: JSON.parse(zzSessionStorage.getItem('IsAdmin')), // isAdmin: JSON.parse(zzSessionStorage.getItem('IsAdmin')),
userTypeOptions: [], userTypeOptions: [],
stateList: ['WaitSent', 'HasSend', 'UserConfirmed', 'UserReject', 'OverTime'], stateList: [
'WaitSent',
'HasSend',
'UserConfirmed',
'UserReject',
'OverTime',
],
trialId: '', trialId: '',
model_config:{ model_config: {
visible: false, title: this.$t('trials:staff:dialogTitle:permissionConfiguration'), width: '500px', appendToBody: true visible: false,
title: this.$t('trials:staff:dialogTitle:permissionConfiguration'),
width: '500px',
appendToBody: true,
}, },
permission:{ permission: {
IsSPMJoinReReadingApproval: false, IsSPMJoinReReadingApproval: false,
IsSPMJoinReviewerSelect: false, IsSPMJoinReviewerSelect: false,
IsSPMJoinSiteSurvey: false, IsSPMJoinSiteSurvey: false,
}, },
permissionRole:{} permissionRole: {},
} }
}, },
mounted() { mounted() {
@ -201,42 +296,42 @@ export default {
}, },
methods: { methods: {
// //
async getPermission(){ async getPermission() {
try{ try {
let res = await getTrialConfigInfo(this.trialId); let res = await getTrialConfigInfo(this.trialId)
if(res.IsSuccess){ if (res.IsSuccess) {
Object.keys(this.permission).forEach(key=>{ Object.keys(this.permission).forEach((key) => {
this.permission[key] = res.Result[key] this.permission[key] = res.Result[key]
}) })
} }
}catch(err){ } catch (err) {
console.log(err) console.log(err)
} }
}, },
// //
async openPermission(){ async openPermission() {
try{ try {
await this.getPermission(); await this.getPermission()
this.model_config.visible = true; this.model_config.visible = true
}catch(err){ } catch (err) {
console.log(err); console.log(err)
} }
}, },
// //
async savePermission(){ async savePermission() {
try{ try {
let validate =await this.$refs.permissionForm.validate(); let validate = await this.$refs.permissionForm.validate()
if(!validate) return false; if (!validate) return false
this.assignLoadStatus = true; this.assignLoadStatus = true
let data = Object.assign({ Id: this.trialId },this.permission) let data = Object.assign({ Id: this.trialId }, this.permission)
let res = await configTrialSPMInfo(data); let res = await configTrialSPMInfo(data)
this.assignLoadStatus = false; this.assignLoadStatus = false
if(res.IsSuccess){ if (res.IsSuccess) {
this.model_config.visible = false; this.model_config.visible = false
this.$message.success(this.$t("common:message:updatedSuccessfully")) this.$message.success(this.$t('common:message:updatedSuccessfully'))
} }
}catch(err){ } catch (err) {
this.assignLoadStatus = false; this.assignLoadStatus = false
console.log(err) console.log(err)
} }
}, },
@ -249,83 +344,108 @@ export default {
}, },
handleEdit(row) { handleEdit(row) {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['StaffExternalAdd'].openDialog(this.$t('trials:externalStaff:dialogTitle:edit'), row) this.$refs['StaffExternalAdd'].openDialog(
this.$t('trials:externalStaff:dialogTitle:edit'),
row
)
}) })
}, },
handleAdd() { handleAdd() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['StaffExternalAdd'].openDialog(this.$t('trials:externalStaff:dialogTitle:add'), {}) this.$refs['StaffExternalAdd'].openDialog(
this.$t('trials:externalStaff:dialogTitle:add'),
{}
)
}) })
}, },
deleteTrialExternalUser(row) { deleteTrialExternalUser(row) {
this.$confirm(this.$t('trials:externalStaff:message:delete'), { this.$confirm(this.$t('trials:externalStaff:message:delete'), {
type: 'warning', type: 'warning',
distinguishCancelAndClose: true distinguishCancelAndClose: true,
}).then(() => {
this.loading = true
deleteTrialExternalUser(row.Id, row.IsSystemUser, row.SystemUserId)
.then((res) => {
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.getList()
this.loading = false
})
.catch(() => {
this.loading = false
})
}) })
.then(() => {
this.loading = true
deleteTrialExternalUser(row.Id, row.IsSystemUser, row.SystemUserId)
.then(res => {
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.getList()
this.loading = false
}).catch(() => { this.loading = false })
})
}, },
sendEmail() { sendEmail() {
const loading = this.$loading({ const loading = this.$loading({
target: document.querySelector('.participant-table-list'), target: document.querySelector('.participant-table-list'),
fullscreen: false, fullscreen: false,
lock: true lock: true,
}) })
// var BaseUrl = document.domain + `/#/login` // var BaseUrl = document.domain + `/#/login`
var BaseUrl = `${location.protocol}//${location.host}/login` var BaseUrl = `${location.protocol}//${location.host}/login`
var joinUrl = `${location.protocol}//${location.host}/email-recompose` var joinUrl = `${location.protocol}//${location.host}/email-recompose`
var sendEmailUserArr = this.selectArr.map((v) => { return { Id: v.Id, Email: v.Email, IsSystemUser: v.IsSystemUser, SystemUserId: v.SystemUserId } }) var sendEmailUserArr = this.selectArr.map((v) => {
return {
Id: v.Id,
Email: v.Email,
IsSystemUser: v.IsSystemUser,
SystemUserId: v.SystemUserId,
UserTypeId: v.UserTypeId,
}
})
sendExternalUserJoinEmail({ sendExternalUserJoinEmail({
TrialId: this.trialId, TrialId: this.trialId,
SendUsers: sendEmailUserArr, SendUsers: sendEmailUserArr,
BaseUrl: BaseUrl, BaseUrl: BaseUrl,
RouteUrl: joinUrl RouteUrl: joinUrl,
}).then(() => { })
loading.close() .then(() => {
this.$message.success(this.$t('common:message:savedSuccessfully')) loading.close()
this.getList() this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$emit('getList') this.getList()
}).catch(() => { loading.close() }) this.$emit('getList')
})
.catch(() => {
loading.close()
})
}, },
getList() { getList() {
const loading = this.$loading({ const loading = this.$loading({
target: document.querySelector('.participant-table-list'), target: document.querySelector('.participant-table-list'),
fullscreen: false, fullscreen: false,
lock: true lock: true,
}) })
this.listQuery.TrialId = this.trialId this.listQuery.TrialId = this.trialId
getTrialExternalUserList(this.listQuery).then(res => { getTrialExternalUserList(this.listQuery)
loading.close() .then((res) => {
this.list = res.Result loading.close()
}).catch(() => { loading.close() }) this.list = res.Result
})
.catch(() => {
loading.close()
})
}, },
handleAssign() { handleAssign() {
this.$confirm(this.$t('trials:externalStaff:message:add'), { this.$confirm(this.$t('trials:externalStaff:message:add'), {
type: 'warning', type: 'warning',
distinguishCancelAndClose: true distinguishCancelAndClose: true,
}).then(() => { }).then(() => {
const loading = this.$loading({ const loading = this.$loading({
target: document.querySelector('.participant-table-list'), target: document.querySelector('.participant-table-list'),
fullscreen: false, fullscreen: false,
lock: true lock: true,
}) })
this.assignLoadStatus = true this.assignLoadStatus = true
addTrialUsers(this.selectArr) addTrialUsers(this.selectArr)
.then(res => { .then((res) => {
this.assignLoadStatus = false this.assignLoadStatus = false
loading.close() loading.close()
if (res.IsSuccess) { if (res.IsSuccess) {
this.$emit('closeDialog') this.$emit('closeDialog')
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$message.success(this.$t('common:message:savedSuccessfully'))
} }
}).catch(() => { })
.catch(() => {
loading.close() loading.close()
this.assignLoadStatus = false this.assignLoadStatus = false
}) })
@ -360,35 +480,35 @@ export default {
} }
}, },
getUserType() { getUserType() {
getUserTypeList(1).then(res => { getUserTypeList(1).then((res) => {
this.userTypeOptions = res.Result this.userTypeOptions = res.Result
}) })
} },
} },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.participant-container{ .participant-container {
height: 100%; height: 100%;
.el-header{ .el-header {
.filter-container{ .filter-container {
display: flex; display: flex;
align-items: center; align-items: center;
span{ span {
font-size:13px; font-size: 13px;
margin-right:5px; margin-right: 5px;
} }
.mr{ .mr {
margin-right: 5px; margin-right: 5px;
width: 120px; width: 120px;
}
} }
} }
.el-main{
padding: 0px;
}
.el-footer{
padding: 0 20px;
}
} }
.el-main {
padding: 0px;
}
.el-footer {
padding: 0 20px;
}
}
</style> </style>

View File

@ -72,12 +72,10 @@
" "
:label="item.value" :label="item.value"
v-if=" v-if="
(JudgyInfo.ArbitrationRule === 1 && item.value < 4 ||
(item.value < 4 || (item.value > 3 &&
(item.value > 3 && (QuestionList[index].Type === 'number' ||
(QuestionList[index].Type === 'number' || QuestionList[index].Type === 'calculation'))
QuestionList[index].Type === 'calculation')))) ||
(JudgyInfo.ArbitrationRule === 2 && item.value < 4)
" "
> >
{{ item.label }} {{ item.label }}

View File

@ -135,14 +135,14 @@
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> --> /> -->
<el-table-column <!-- <el-table-column
v-if="!isMine" v-if="!isMine"
:label="$t('trials:loginLog:table:incorrectUserName')" :label="$t('trials:loginLog:table:incorrectUserName')"
prop="LoginFaildName" prop="LoginFaildName"
min-width="90" min-width="90"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> /> -->
<el-table-column <el-table-column
:label="$t('trials:loginLog:table:userName')" :label="$t('trials:loginLog:table:userName')"
prop="ActionUserName" prop="ActionUserName"
@ -150,6 +150,13 @@
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
<el-table-column
:label="$t('trials:loginLog:table:Aetionlserlype')"
prop="ActionUserType"
min-width="100"
show-overflow-tooltip
sortable="custom"
/>
<!-- <el-table-column <!-- <el-table-column
:label="$t('trials:loginLog:table:userType')" :label="$t('trials:loginLog:table:userType')"
prop="LoginUserTypeEnum" prop="LoginUserTypeEnum"

View File

@ -742,7 +742,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="tip" v-if="[0].includes($store.state.trials.config.CollectImagesEnum)"> <div
class="tip"
v-if="[0].includes($store.state.trials.config.CollectImagesEnum)"
>
<i class="el-icon-warning-outline"></i> <i class="el-icon-warning-outline"></i>
<div v-html="$t('trials:uploadedDicoms:tip:message')"></div> <div v-html="$t('trials:uploadedDicoms:tip:message')"></div>
</div> </div>
@ -1754,12 +1757,10 @@ export default {
this.selected.TrialId = this.subjectRowData.TrialId this.selected.TrialId = this.subjectRowData.TrialId
this.selected.SubjectId = this.subjectRowData.SubjectId this.selected.SubjectId = this.subjectRowData.SubjectId
this.isShow = true this.isShow = true
console.log(res)
}) })
} }
}, },
handleView2(row) { handleView2(row) {
console.log(row)
this.rowData = { ...row } this.rowData = { ...row }
this.openType = 'look' this.openType = 'look'
this.preview.visible = true this.preview.visible = true
@ -1914,7 +1915,6 @@ export default {
this.list = res.Result.CurrentPageData this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount this.total = res.Result.TotalCount
this.otherInfo = res.OtherInfo this.otherInfo = res.OtherInfo
console.log(this.otherInfo)
}) })
.catch(() => { .catch(() => {
this.loading = false this.loading = false
@ -2053,9 +2053,16 @@ export default {
this.otherInfo.ClinicalInformationTransmissionEnum > 0 && this.otherInfo.ClinicalInformationTransmissionEnum > 0 &&
this.rowData.IsBaseLine this.rowData.IsBaseLine
) { ) {
const { ClinicalDataConfirmation } = const_.processSignature getVisitClinicalDataName({ id: this.rowData.Id })
this.signCode = ClinicalDataConfirmation .then((res) => {
this.signVisible = true this.signReplaceText = res.Result.ClinicalDataName
const { ClinicalDataConfirmation } = const_.processSignature
this.signCode = ClinicalDataConfirmation
this.signVisible = true
})
.catch((err) => {
console.log(err)
})
} else { } else {
this.submit() this.submit()
} }