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

main
caiyiling 2026-05-13 14:07:49 +08:00
commit dd919f123e
9 changed files with 262 additions and 558 deletions

View File

@ -450,6 +450,7 @@ export default {
let index = 0;
if (seriesId) {
index = this.seriesList.findIndex(item => item.seriesId === seriesId)
this.refreshImage(this.seriesList[index])
}
this.$refs.dicomViewer.loadImageStack(this.seriesList[index], this.labels[this.tpCode])
this.firstInstanceId = this.seriesList[index].imageIds[0]

View File

@ -22,6 +22,11 @@
</el-upload>
</div>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:form:DocLanguageType')" prop="DocLanguageType">
<el-select v-model="form.DocLanguageType" style="width: 100%">
<el-option v-for="item of $d.DocLanguageType" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:form:NeedConfirmedUserTypeIdList')"
prop="NeedConfirmedUserTypeIdList">
<el-select v-model="form.NeedConfirmedUserTypeIdList" style="width: 100%" multiple>
@ -83,6 +88,7 @@ export default {
DocUserSignType: 0,
CurrentStaffTrainDays: 1,
NewStaffTrainDays: 14,
DocLanguageType: null
},
rules: {
FileTypeId: [
@ -92,6 +98,13 @@ export default {
trigger: ['blur'],
},
],
DocLanguageType: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur'],
},
],
SignViewMinimumMinutes: [
{
required: true,
@ -143,6 +156,9 @@ export default {
this.form.DocUserSignType = this.data.DocUserSignType
this.form.CurrentStaffTrainDays = this.data.CurrentStaffTrainDays
this.form.NewStaffTrainDays = this.data.NewStaffTrainDays
this.form.DocLanguageType = this.data.DocLanguageType
} else {
this.form.DocLanguageType = this.$i18n.locale !== 'zh' ? 1 : 0
}
this.loading = false
},

View File

@ -26,6 +26,11 @@
<el-form-item :label="$t('dictionary:signature:search:Name')">
<el-input v-model="searchData.Name" style="width: 130px" clearable />
</el-form-item>
<el-form-item :label="$t('dictionary:signature:search:DocLanguageType')">
<el-select v-model="searchData.DocLanguageType" style="width: 150px" clearable>
<el-option v-for="item of $d.DocLanguageType" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:table:NeedConfirmedUserTypes')">
<el-select v-model="searchData.UserTypeId" style="width: 150px" clearable>
<el-option v-for="item of userTypeOptions" :key="item.Id" :label="item.UserTypeShortName"
@ -90,6 +95,12 @@
</el-button>
</template>
</el-table-column>
<el-table-column prop="DocLanguageType" :label="$t('dictionary:signature:table:DocLanguageType')"
show-overflow-tooltip sortable="custom" min-width="120px">
<template slot-scope="scope">
<span>{{ $fd('DocLanguageType', scope.row.DocLanguageType) }}</span>
</template>
</el-table-column>
<el-table-column prop="SignViewMinimumMinutes" :label="$t('dictionary:signature:table:SignViewMinimumMinutes')"
show-overflow-tooltip sortable="custom" min-width="200px" />
<el-table-column prop="CurrentStaffTrainDays" :label="$t('dictionary:signature:table:CurrentStaffTrainDays')"
@ -161,7 +172,7 @@
<!-- 新增/编辑 -->
<el-dialog v-if="editVisible" :visible.sync="editVisible" :close-on-click-modal="false" :title="title"
width="600px" custom-class="base-dialog-wrapper">
<TemplateForm :data="currentRow" @closeDialog="closeDialog" @getList="getList" />
<TemplateForm :data="currentRow" @closeDialog="closeDialog" v-if="editVisible" @getList="getList" />
</el-dialog>
<!--附件列表-->
<attachmentList v-if="config.visible" :config="config" :rowData="currentRow" :SystemDocumentId="SystemDocumentId"
@ -200,6 +211,7 @@ const searchDataDefault = () => {
IsDeleted: null,
DocUserSignType: null,
UserTypeId: null,
DocLanguageType: null,
Name: '',
PageIndex: 1,
PageSize: 20,

View File

@ -1,13 +1,6 @@
<template>
<el-form
ref="siteForm"
v-loading="loading"
:model="form"
:rules="rules"
class="demo-ruleForm"
size="small"
label-width="150px"
>
<el-form ref="siteForm" v-loading="loading" :model="form" :rules="rules" class="demo-ruleForm" size="small"
label-width="150px">
<div class="base-dialog-body">
<!-- Site Code -->
<el-form-item :label="$t('institutions:sites:label:siteCode')" v-if="form.Id" prop="SiteCode">
@ -15,17 +8,11 @@
</el-form-item>
<!-- 中心名称 -->
<el-form-item
:label="$t('institutions:sites:label:siteName')"
prop="SiteName"
>
<el-form-item :label="$t('institutions:sites:label:siteName')" prop="SiteName">
<el-input v-model="form.SiteName" />
</el-form-item>
<!-- 中心名称CN -->
<el-form-item
:label="$t('institutions:sites:label:siteNameCN')"
prop="SiteNameCN"
>
<el-form-item :label="$t('institutions:sites:label:siteNameCN')" prop="SiteNameCN">
<el-input v-model="form.SiteNameCN" />
</el-form-item>
<!-- Alias Name -->
@ -38,7 +25,9 @@
</el-form-item> -->
<!-- Country -->
<el-form-item :label="$t('institutions:sites:label:country')" prop="Country">
<el-input v-model="form.Country" />
<el-select v-model="form.Country" style="width: 100%">
<el-option v-for="item of $d.SiteCountry" :key="item.id" :label="item.label" :value="item.label" />
</el-select>
</el-form-item>
<!-- City -->
<el-form-item :label="$t('institutions:sites:label:city')" prop="City">
@ -50,17 +39,8 @@
</el-form-item>
<!-- Affiliated Hospital -->
<el-form-item :label="$t('institutions:sites:label:affiliatedHospital')">
<el-select
v-model="form.HospitalId"
clearable
style="width: 100%"
>
<el-option
v-for="item in hospitalList"
:key="item.Id"
:label="item.HospitalName"
:value="item.Id"
/>
<el-select v-model="form.HospitalId" clearable style="width: 100%">
<el-option v-for="item in hospitalList" :key="item.Id" :label="item.HospitalName" :value="item.Id" />
</el-select>
</el-form-item>
<!-- Director Name -->
@ -82,20 +62,10 @@
</div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item>
<el-button
:disabled="btnLoading"
size="small"
type="primary"
@click="handleCancel"
>{{ $t('common:button:cancel') }}</el-button
>
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>{{ $t('common:button:save') }}</el-button
>
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancel">{{
$t('common:button:cancel') }}</el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">{{ $t('common:button:save')
}}</el-button>
</el-form-item>
</div>
</el-form>

View File

@ -1,44 +1,28 @@
<template>
<el-form
ref="userForm"
size="small"
:model="user"
:rules="userFormRules"
label-width="150px"
style="width: 800px"
>
<el-form ref="userForm" size="small" :model="user" :rules="userFormRules" label-width="150px" style="width: 800px">
<el-card class="Basic" shadow="never" size="small">
<div slot="header" class="clearfix">
<span>{{ $t('system:userlist:title:Information') }}</span>
</div>
<el-form-item
v-if="user.UserCode"
:label="$t('system:userlist:table:S/N')"
prop="UserCode"
>
<el-form-item v-if="user.UserCode" :label="$t('system:userlist:table:S/N')" prop="UserCode">
<el-input v-model="user.UserCode" disabled />
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:UserName')"
class="my_new_pwd"
prop="UserName"
>
<el-form-item :label="$t('system:userlist:table:UserName')" class="my_new_pwd" prop="UserName">
<el-input v-model="user.UserName" />
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:LastName')"
prop="LastName"
>
<el-form-item :label="$t('system:userlist:table:LastName')" prop="LastName">
<el-input v-model="user.LastName" />
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:FirstName')"
prop="FirstName"
>
<el-form-item :label="$t('system:userlist:table:FirstName')" prop="FirstName">
<el-input v-model="user.FirstName" />
</el-form-item>
<el-form-item :label="$t('system:userlist:table:UserWorkLanguage')" prop="UserWorkLanguage">
<el-select v-model="user.UserWorkLanguage" style="width: 100%">
<el-option v-for="item of $d.UserWorkLanguage" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<!-- <el-form-item :label="$t('system:userlist:table:Gender')" prop="Sex" style="margin-right:40px;">
<el-radio-group v-model="user.Sex">
<el-radio :label="1">Male</el-radio>
@ -51,105 +35,47 @@
<el-form-item :label="$t('system:userlist:table:Phone')" prop="Phone">
<el-input v-model="user.Phone" />
</el-form-item>
<el-form-item
v-if="type == 1"
:label="$t('system:userlist:table:Disable')"
>
<el-switch
v-model="user.Status"
:active-value="1"
:inactive-value="0"
/>
<el-form-item v-if="type == 1" :label="$t('system:userlist:table:Disable')">
<el-switch v-model="user.Status" :active-value="1" :inactive-value="0" />
</el-form-item>
<el-form-item :label="$t('system:userlist:table:IsTestUser')">
<el-radio-group v-model="user.IsTestUser">
<el-radio
v-for="item of $d.YesOrNo"
:key="item.id"
:label="item.value"
>{{ item.label }}</el-radio
>
<el-radio v-for="item of $d.YesOrNo" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:UserType')"
prop="Roles"
v-if="type === 0"
>
<el-form-item :label="$t('system:userlist:table:UserType')" prop="Roles" v-if="type === 0">
<div style="display: flex; align-items: center">
<el-select
ref="userType"
v-model="user.Roles"
size="small"
placeholder="Please select"
multiple
style="width: 100%"
:disabled="user.CanEditUserType === false || type === 1"
@change="handleChange"
>
<el-select ref="userType" v-model="user.Roles" size="small" placeholder="Please select" multiple
style="width: 100%" :disabled="user.CanEditUserType === false || type === 1" @change="handleChange">
<template v-for="userType of userTypeOptions">
<el-option
v-if="![4, 6, 20].includes(userType.UserTypeEnum)"
:key="userType.Id"
:label="userType.UserType"
:value="userType.Id"
/>
<el-option v-if="![4, 6, 20].includes(userType.UserTypeEnum)" :key="userType.Id"
:label="userType.UserType" :value="userType.Id" />
</template>
</el-select>
</div>
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:UserType')"
prop="userTypeId"
v-else
>
<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"
size="small"
placeholder="Please select"
multiple
style="width: 100%"
:disabled="user.CanEditUserType === false || type === 1"
@change="handleChange"
>
<el-select ref="userType" v-model="Roles" size="small" placeholder="Please select" multiple
style="width: 100%" :disabled="user.CanEditUserType === false || type === 1" @change="handleChange">
<template v-for="userType of userTypeOptions">
<el-option
v-if="![4, 6, 20].includes(userType.UserTypeEnum)"
:key="userType.Id"
:label="userType.UserType"
:value="userType.Id"
/>
<el-option v-if="![4, 6, 20].includes(userType.UserTypeEnum)" :key="userType.Id"
:label="userType.UserType" :value="userType.Id" />
</template>
</el-select>
<el-button
type="primary"
size="small"
style="margin-left: 5px"
v-if="type === 1"
@click.stop="openRoleList"
>
<el-button type="primary" size="small" style="margin-left: 5px" v-if="type === 1" @click.stop="openRoleList">
{{ $t('system:userlist:button:roles') }}
</el-button>
</div>
</el-form-item>
</el-card>
<el-card
class="Affiliation"
shadow="never"
style="margin-top: 10px"
size="small"
>
<el-card class="Affiliation" shadow="never" style="margin-top: 10px" size="small">
<div slot="header" class="clearfix">
<span>{{ $t('system:userlist:title:Affiliation') }}</span>
</div>
<el-form-item prop="IsZhiZhun">
<el-radio-group
v-model="user.IsZhiZhun"
@change="OrgnizationTypeChanged"
>
<el-radio-group v-model="user.IsZhiZhun" @change="OrgnizationTypeChanged">
<el-radio :label="true">{{
$t('system:userlist:title:Internal')
}}</el-radio>
@ -158,43 +84,22 @@
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-show="user.IsZhiZhun === false"
:label="$t('system:userlist:table:OrganizationName')"
>
<el-form-item v-show="user.IsZhiZhun === false" :label="$t('system:userlist:table:OrganizationName')">
<el-input v-model="user.OrganizationName" />
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:Department')"
prop="DepartmentName"
>
<el-form-item :label="$t('system:userlist:table:Department')" prop="DepartmentName">
<el-input v-model="user.DepartmentName" />
</el-form-item>
<el-form-item
:label="$t('system:userlist:table:Position')"
prop="PositionName"
>
<el-form-item :label="$t('system:userlist:table:Position')" prop="PositionName">
<el-input v-model="user.PositionName" />
</el-form-item>
</el-card>
<el-form-item>
<el-button
type="primary"
size="small"
:disabled="isDisabled"
style="margin: 10px 15px"
@click="handleSave"
>{{ $t('common:button:save') }}</el-button
>
<el-button type="primary" size="small" :disabled="isDisabled" style="margin: 10px 15px" @click="handleSave">{{
$t('common:button:save') }}</el-button>
</el-form-item>
<roleList
v-if="visible"
:visible.sync="visible"
:userId="userId"
:list="userRoleList"
:userTypeOptions="userTypeOptions"
@getRoleList="getRoleList"
/>
<roleList v-if="visible" :visible.sync="visible" :userId="userId" :list="userRoleList"
:userTypeOptions="userTypeOptions" @getRoleList="getRoleList" />
</el-form>
</template>
<script>
@ -365,11 +270,11 @@ export default {
callback(
lang === 'zh'
? new Error(
'1新建账号用户名字符长度最小为4个字符最大为16个字符只可使用字母、数字、下划线'
)
'1新建账号用户名字符长度最小为4个字符最大为16个字符只可使用字母、数字、下划线'
)
: new Error(
'For a new account, the username must have:1) At least 4 characters;2) At most 16 characters;3)Only letters, numbers, and underscores are allowed.'
)
'For a new account, the username must have:1) At least 4 characters;2) At most 16 characters;3)Only letters, numbers, and underscores are allowed.'
)
)
} else {
callback()
@ -379,6 +284,7 @@ export default {
userRoleList: [],
Roles: [],
user: {
UserWorkLanguage: null,
Roles: [],
UserRoleList: [],
UserName: '',
@ -399,6 +305,13 @@ export default {
UserName: [
{ required: true, validator: validatePassword, trigger: 'blur' },
],
UserWorkLanguage: [
{
required: true,
message: 'Please Select',
trigger: ['blur', 'change'],
},
],
Roles: [
{
required: true,

View File

@ -1,67 +1,42 @@
<template>
<box-content>
<div class="search" style="position: relative">
<SearchForm
:that="this"
:search-data="searchData"
:search-form="searchForm"
:search-handle="searchHandle"
@search="handleSearch"
@reset="handleReset"
@new="handleAddUser"
/>
<SearchForm :that="this" :search-data="searchData" :search-form="searchForm" :search-handle="searchHandle"
@search="handleSearch" @reset="handleReset" @new="handleAddUser" />
</div>
<base-table
v-loading="loading"
:columns="columns"
:list="users"
:search-data="searchData"
:total="total"
@getList="getList"
@editCb="handleEditUser"
@sendCb="addNewUserSendEmail"
@deleteCb="handleDeleteUser"
@sortByColumn="sortByColumn"
>
<base-table v-loading="loading" :columns="columns" :list="users" :search-data="searchData" :total="total"
@getList="getList" @editCb="handleEditUser" @sendCb="addNewUserSendEmail" @deleteCb="handleDeleteUser"
@sortByColumn="sortByColumn">
<!-- 选择自定义slot -->
<template slot="tip-slot" slot-scope="{ scope }">
<i
v-if="
diffTime(scope.row.LastLoginTime) >= 90 &&
diffTime(scope.row.LastChangePassWordTime) >= 90
"
class="el-icon-warning"
style="color: #f56c6c"
:title="$t('system:userlist:tip:overTimeAndoverTimePassWord')"
/>
<i
v-else-if="diffTime(scope.row.LastLoginTime) >= 90"
class="el-icon-warning"
style="color: #f56c6c"
:title="$t('system:userlist:tip:overTime')"
/>
<i
v-else-if="diffTime(scope.row.LastChangePassWordTime) >= 90"
class="el-icon-warning"
style="color: #f56c6c"
:title="$t('system:userlist:tip:overTimePassWord')"
/>
<i v-if="
diffTime(scope.row.LastLoginTime) >= 90 &&
diffTime(scope.row.LastChangePassWordTime) >= 90
" class="el-icon-warning" style="color: #f56c6c"
:title="$t('system:userlist:tip:overTimeAndoverTimePassWord')" />
<i v-else-if="diffTime(scope.row.LastLoginTime) >= 90" class="el-icon-warning" style="color: #f56c6c"
:title="$t('system:userlist:tip:overTime')" />
<i v-else-if="diffTime(scope.row.LastChangePassWordTime) >= 90" class="el-icon-warning" style="color: #f56c6c"
:title="$t('system:userlist:tip:overTimePassWord')" />
</template>
<template slot="genderSlot" slot-scope="{ scope }">
{{ scope.row.Sex ? 'Male' : 'Female' }}
</template>
<template slot="UserWorkLanguageSlot" slot-scope="{ scope }">
{{ $fd('UserWorkLanguage', scope.row.UserWorkLanguage) }}
</template>
<template slot="UserTypeSlot" slot-scope="{ scope }">
{{
Array.isArray(scope.row.UserRoleList) &&
scope.row.UserRoleList.length > 0
scope.row.UserRoleList.length > 0
? scope.row.UserRoleList.filter((item) => !item.IsUserRoleDisabled)
.map((item) => item.UserTypeShortName)
.join(', ')
.map((item) => item.UserTypeShortName)
.join(', ')
: ''
}}
</template>
<template slot="roleSlot" slot-scope="{ scope }">
{{ scope.row.RoleNameList.map((role) => role.RoleName).join(', ') }}
{{scope.row.RoleNameList.map((role) => role.RoleName).join(', ')}}
</template>
<template slot="isZhiZhunSlot" slot-scope="{ scope }">
{{
@ -155,6 +130,14 @@ export default {
sortable: 'custom',
showOverflowTooltip: true,
},
{
// prop: 'UserWorkLanguage',
label: this.$t('system:userlist:table:UserWorkLanguage'),
minWidth: 120,
slot: 'UserWorkLanguageSlot',
sortable: 'custom',
showOverflowTooltip: true,
},
// {
// prop: 'Sex',
// label: this.$t('system:userlist:table:Gender'),
@ -287,6 +270,15 @@ export default {
width: '120px',
placeholder: '',
},
{
type: 'Select',
label: this.$t('system:userlist:label:UserWorkLanguage'),
prop: 'UserWorkLanguage',
width: '100px',
options: [], //
props: { label: 'label', value: 'value' }, //
placeholder: '',
},
{
type: 'Input',
label: this.$t('system:userlist:label:Phone'),
@ -476,8 +468,10 @@ export default {
//
async getInfo() {
const res = await getUserTypeList()
const index = this.findItemIndex('UserType')
let index = this.findItemIndex('UserType')
this.$set(this.searchForm[index], 'options', res.Result)
index = this.findItemIndex('UserWorkLanguage')
this.$set(this.searchForm[index], 'options', this.$d.UserWorkLanguage)
},
handleAddUser() {
this.$router.push({ path: '/system/user/add' })

View File

@ -127,7 +127,7 @@
</el-switch>
<span style="margin-left: 5px;">{{
$t('trials:reading:Segmentations:title:InactiveSegmentationsShow')
}}</span>
}}</span>
</div>
</div>
<template v-if="segmentList.length > 0">
@ -173,9 +173,9 @@
</el-button>
</div>
</div>
<div class="addSegmentBox" @click.stop="addSegment"
<div class="addSegmentBox"
style="display: flex;align-items: center;justify-content: space-between;">
<span v-if="readingTaskState < 2"><i class="el-icon-plus"></i>
<span v-if="readingTaskState < 2" @click.stop="addSegment"><i class="el-icon-plus"></i>
{{ $t('trials:reading:Segmentations:button:addSegment') }}
</span>
<span style="width: 10px;" v-else></span>
@ -302,7 +302,7 @@
<template slot-scope="scope">
<el-button type="text" @click.stop="restoreSegmentationVersion(scope.row)">{{
$t('trials:reading:Segmentations:button:recovery')
}}</el-button>
}}</el-button>
</template>
</el-table-column>
</el-table>
@ -797,7 +797,9 @@ export default {
},
async restoreSegmentationVersion(row) {
try {
let confirm = await this.$confirm(this.$t('trials:reading:Segmentations:confirm:CurrentDataIsLoss'))
this.popoverId = null
let message = this.$t('trials:reading:Segmentations:confirm:CurrentDataIsLoss').replace("xxx", row.Version)
let confirm = await this.$confirm(message)
if (!confirm) return false
let data = {
SegmentationId: this.segmentationId,
@ -863,6 +865,7 @@ export default {
},
async recoverySegmentGroup() {
try {
this.popoverId = null
let res = await this.getSegmentationVersionList(this.segmentationId)
if (!res) return this.$message.warning(this.$t("trials:reading:Segmentations:message:getSegmentationVersionFail"))
this.visible = true

View File

@ -226,10 +226,12 @@ async function readingSegmentByConfig(series, visitInfo, viewportId, segmentatio
)
}
function selectSegmentation(viewportId, segmentationId) {
if (!segmentation.state.getSegmentation(segmentationId)) return false
segmentation.activeSegmentation.setActiveSegmentation(viewportId, segmentationId)
}
function selectSegment(viewportId, segmentationId, segmentIndex) {
if (!segmentIndex || !segmentationId) return false
if (!segmentation.state.getSegmentation(segmentationId)) return false
selectSegmentation(viewportId, segmentationId)
segmentation.segmentIndex.setActiveSegmentIndex(segmentationId, segmentIndex);
}

View File

@ -10,29 +10,24 @@
<el-form-item :label="$t('trials:sitesList:table:siteName')">
<el-input v-model="listQuery.TrialSiteName" class="mr" clearable />
</el-form-item>
<el-form-item :label="$t('trials:sitesList:table:Country')">
<el-select v-model="listQuery.Country" clearable class="mr">
<el-option v-for="item of $d.SiteCountry" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<!-- 中心别名 -->
<!-- <el-form-item :label="$t('trials:sitesList:table:siteAliasName')">
<el-input v-model="listQuery.TrialSiteAliasName" class="mr" clearable />
</el-form-item> -->
<!-- 关键词 -->
<el-form-item :label="$t('trials:sitesList:form:keyWord')">
<el-input
v-model="listQuery.UserKeyInfo"
style="width: 200px"
class="mr"
clearable
:placeholder="$t('trials:sitesList:formPlaceholder:keyWord')"
/>
<el-input v-model="listQuery.UserKeyInfo" style="width: 200px" class="mr" clearable
:placeholder="$t('trials:sitesList:formPlaceholder:keyWord')" />
</el-form-item>
<!-- 状态 -->
<el-form-item :label="$t('trials:sitesList:table:status')">
<el-select v-model="listQuery.IsDeleted" clearable class="mr">
<el-option
v-for="item of $d.IsSiteDisable"
:key="item.label"
:label="item.label"
:value="item.value"
/>
<el-option v-for="item of $d.IsSiteDisable" :key="item.label" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
@ -41,114 +36,61 @@
{{ $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-button
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:questionnaire-record',
]"
type="primary"
icon="el-icon-info"
@click="handleResearchList"
>
<el-button v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:questionnaire-record',
]" type="primary" icon="el-icon-info" @click="handleResearchList">
{{ $t('trials:sitesList:button:siteResearch') }}
</el-button>
<!-- 添加中心 -->
<el-button
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:add-site',
]"
type="primary"
icon="el-icon-plus"
@click="handleAdd"
>
<el-button v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:add-site',
]" type="primary" icon="el-icon-plus" @click="handleAdd">
{{ $t('trials:sitesList:dialogTitle:assignSite') }}
</el-button>
<el-button
type="primary"
icon="el-icon-download"
:disabled="list.length === 0"
@click="handleResearchListExport"
>
<el-button type="primary" icon="el-icon-download" :disabled="list.length === 0"
@click="handleResearchListExport">
{{ $t('common:button:export') }}
</el-button>
<!-- 下载模板 -->
<el-button
type="primary"
icon="el-icon-download"
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:download',
]"
@click="handleDownload"
>
<el-button type="primary" icon="el-icon-download" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:download',
]" @click="handleDownload">
{{ $t('common:button:downloadTpl') }}
</el-button>
<el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:upload']"
type="primary"
icon="el-icon-upload2"
@click="handleUpload"
>
<el-button v-hasPermi="['trials:trials-panel:setting:personnel-manage:upload']" type="primary"
icon="el-icon-upload2" @click="handleUpload">
{{ $t('common:button:upload') }}
</el-button>
</el-form-item>
</el-form>
</div>
<el-table
v-loading="listLoading"
:data="list"
stripe
@sort-change="handleSortByColumn"
>
<el-table v-loading="listLoading" :data="list" stripe @sort-change="handleSortByColumn">
<el-table-column type="index" width="50" />
<!-- 中心编号 -->
<el-table-column
prop="TrialSiteCode"
:label="$t('trials:sitesList:table:siteId')"
show-overflow-tooltip
sortable="custom"
width="120"
>
<el-table-column prop="TrialSiteCode" :label="$t('trials:sitesList:table:siteId')" show-overflow-tooltip
sortable="custom" width="120">
<template slot-scope="scope">
<span v-if="!!scope.row.TrialSiteCode">{{
scope.row.TrialSiteCode
}}</span>
<i
v-else
class="el-icon-warning"
style="color: #f44336; font-size: 14px"
/>
<i v-else class="el-icon-warning" style="color: #f44336; font-size: 14px" />
</template>
</el-table-column>
<!-- 中心名称 -->
<el-table-column
prop="TrialSiteName"
:label="$t('trials:sitesList:table:siteName')"
show-overflow-tooltip
sortable="custom"
min-width="120"
/>
<el-table-column prop="TrialSiteName" :label="$t('trials:sitesList:table:siteName')" show-overflow-tooltip
sortable="custom" min-width="120" />
<!-- 中心别名 -->
<el-table-column
prop="TrialSiteAliasName"
:label="$t('trials:sitesList:table:siteAliasName')"
show-overflow-tooltip
sortable="custom"
min-width="120"
/>
<el-table-column prop="TrialSiteAliasName" :label="$t('trials:sitesList:table:siteAliasName')"
show-overflow-tooltip sortable="custom" min-width="120" />
<el-table-column prop="Country" :label="$t('trials:sitesList:table:Country')" show-overflow-tooltip
sortable="custom" min-width="120" />
<!-- 参与者 -->
<el-table-column
prop="UserNameList"
:label="$t('trials:sitesList:table:staff')"
show-overflow-tooltip
min-width="100"
>
<el-table-column prop="UserNameList" :label="$t('trials:sitesList:table:staff')" show-overflow-tooltip
min-width="100">
<template slot-scope="scope">
<el-button size="small" type="text" @click="getCrcList(scope.row)">
{{
@ -160,29 +102,14 @@
</template>
</el-table-column>
<!-- Subjects -->
<el-table-column
prop="SubjectCount"
min-width="100"
:label="$t('trials:site:table:subjects')"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column prop="SubjectCount" min-width="100" :label="$t('trials:site:table:subjects')"
show-overflow-tooltip sortable="custom" />
<!-- Visits -->
<el-table-column
prop="VisitCount"
min-width="100"
:label="$t('trials:site:table:visits')"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column prop="VisitCount" min-width="100" :label="$t('trials:site:table:visits')" show-overflow-tooltip
sortable="custom" />
<!-- 状态 -->
<el-table-column
prop="IsDeleted"
:label="$t('trials:sitesList:table:status')"
show-overflow-tooltip
sortable
min-width="100"
>
<el-table-column prop="IsDeleted" :label="$t('trials:sitesList:table:status')" show-overflow-tooltip sortable
min-width="100">
<template slot-scope="scope">
<el-tag v-if="scope.row.IsDeleted" type="danger">{{
$fd('IsSiteDisable', scope.row.IsDeleted)
@ -193,21 +120,11 @@
</template>
</el-table-column>
<!-- DICOM AE -->
<el-table-column
v-if="isPACSConnect"
prop="CallingAEList"
:label="$t('trials:sitesList:table:AE')"
show-overflow-tooltip
sortable
min-width="100"
>
<el-table-column v-if="isPACSConnect" prop="CallingAEList" :label="$t('trials:sitesList:table:AE')"
show-overflow-tooltip sortable min-width="100">
<template slot-scope="scope">
<el-button
v-if="scope.row.CallingAEList.length > 0"
size="small"
type="text"
@click="handleConfig(scope.row, 'view')"
>
<el-button v-if="scope.row.CallingAEList.length > 0" size="small" type="text"
@click="handleConfig(scope.row, 'view')">
{{
scope.row.CallingAEList.length > 0
? scope.row.CallingAEList.join(', ')
@ -217,63 +134,32 @@
</template>
</el-table-column>
<!-- 授权时间 -->
<el-table-column
prop="EnabledTime"
:label="$t('trials:sitesList:table:timeAdded')"
show-overflow-tooltip
sortable
min-width="150"
/>
<el-table-column
v-if="
hasPermi([
'trials:trials-panel:setting:personnel-manage:edit-site',
'trials:trials-panel:setting:personnel-manage:remove-site',
'trials:trials-panel:setting:personnel-manage:edit-dicom',
])
"
:label="$t('common:action:action')"
min-width="120"
>
<el-table-column prop="EnabledTime" :label="$t('trials:sitesList:table:timeAdded')" show-overflow-tooltip sortable
min-width="150" />
<el-table-column v-if="
hasPermi([
'trials:trials-panel:setting:personnel-manage:edit-site',
'trials:trials-panel:setting:personnel-manage:remove-site',
'trials:trials-panel:setting:personnel-manage:edit-dicom',
])
" :label="$t('common:action:action')" min-width="120">
<template slot-scope="scope">
<el-button
circle
:title="$t('trials:sitesList:action:assign')"
icon="el-icon-user"
:disabled="scope.row.IsDeleted"
@click="getCrcList(scope.row)"
/>
<el-button circle :title="$t('trials:sitesList:action:assign')" icon="el-icon-user"
:disabled="scope.row.IsDeleted" @click="getCrcList(scope.row)" />
<!-- Edit -->
<el-button
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:edit-site',
]"
circle
:title="$t('common:button:edit')"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
/>
<el-button
v-if="isPACSConnect"
circle
:title="$t('common:button:config')"
icon="el-icon-setting"
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:edit-dicom',
]"
@click="handleConfig(scope.row, 'add')"
/>
<el-button v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:edit-site',
]" circle :title="$t('common:button:edit')" icon="el-icon-edit-outline" @click="handleEdit(scope.row)" />
<el-button v-if="isPACSConnect" circle :title="$t('common:button:config')" icon="el-icon-setting" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:edit-dicom',
]" @click="handleConfig(scope.row, 'add')" />
</template>
</el-table-column>
</el-table>
<div class="pagination" style="text-align: right">
<pagination
:total="total"
:page.sync="listQuery.PageIndex"
:limit.sync="listQuery.PageSize"
@pagination="getList"
/>
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize"
@pagination="getList" />
</div>
<!-- 给site分配crc -->
@ -286,67 +172,37 @@
<!-- 修改site信息 -->
<base-model v-if="edit_model.visible" :config="edit_model">
<template slot="dialog-body">
<el-form
ref="editForm"
:model="form"
label-width="100px"
:rules="rules"
>
<el-form ref="editForm" :model="form" label-width="100px" :rules="rules">
<!-- 中心编号 -->
<el-form-item
:label="$t('trials:sitesList:table:siteId')"
prop="TrialSiteCode"
>
<el-form-item :label="$t('trials:sitesList:table:siteId')" prop="TrialSiteCode">
<el-input v-model="form.TrialSiteCode" />
</el-form-item>
<!-- 中心名称 -->
<el-form-item
:label="$t('trials:sitesList:table:siteName')"
prop="TrialSiteName"
>
<el-autocomplete
clearable
class="inline-input"
style="width: 100%"
v-model="form.TrialSiteName"
:fetch-suggestions="querySearch"
@select="handleSelect"
placeholder=""
@change="handleChange"
></el-autocomplete>
<el-form-item :label="$t('trials:sitesList:table:siteName')" prop="TrialSiteName">
<el-autocomplete clearable class="inline-input" style="width: 100%" v-model="form.TrialSiteName"
:fetch-suggestions="querySearch" @select="handleSelect" placeholder=""
@change="handleChange"></el-autocomplete>
</el-form-item>
<!-- 中心别称 -->
<el-form-item
:label="$t('trials:sitesList:table:siteAliasName')"
prop="TrialSiteAliasName"
>
<el-form-item :label="$t('trials:sitesList:table:siteAliasName')" prop="TrialSiteAliasName">
<el-input v-model="form.TrialSiteAliasName" />
</el-form-item>
<el-form-item :label="$t('trials:sitesList:table:Country')" prop="Country">
<el-select v-model="form.Country" style="width: 100%">
<el-option v-for="item of $d.SiteCountry" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<!-- 状态 -->
<el-form-item :label="$t('trials:sitesList:table:status')">
<el-switch
v-model="form.IsDeleted"
:active-value="false"
:inactive-value="true"
/>
<el-switch v-model="form.IsDeleted" :active-value="false" :inactive-value="true" />
</el-form-item>
</el-form>
</template>
<template slot="dialog-footer">
<el-button
type="primary"
size="small"
:disabled="saveBtnLoading"
@click="edit_model.visible = false"
>
<el-button type="primary" size="small" :disabled="saveBtnLoading" @click="edit_model.visible = false">
{{ $t('common:button:cancel') }}
</el-button>
<el-button
type="primary"
size="small"
:loading="saveBtnLoading"
@click="handleUpdateSiteID"
>
<el-button type="primary" size="small" :loading="saveBtnLoading" @click="handleUpdateSiteID">
{{ $t('common:button:save') }}
</el-button>
</template>
@ -357,29 +213,14 @@
<template slot="dialog-body">
<span style="margin-right: 5px;">{{ $t('trials:internalStaff:table:status') }}:</span>
<el-radio-group v-model="staffStatus">
<el-radio
v-for="item of $d.IsUserExitTrial"
:key="item.label"
:label="item.value"
>{{ item.label }}</el-radio
>
<el-radio v-for="item of $d.IsUserExitTrial" :key="item.label" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</template>
<template slot="dialog-footer">
<el-button
:disabled="btnLoading"
size="small"
type="primary"
@click="status_model.visible = false"
>
<el-button :disabled="btnLoading" size="small" type="primary" @click="status_model.visible = false">
{{ $t('common:button:cancel') }}
</el-button>
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="saveStatus"
>
<el-button size="small" type="primary" :loading="btnLoading" @click="saveStatus">
{{ $t('common:button:save') }}
</el-button>
</template>
@ -389,72 +230,34 @@
<base-model v-if="siteOfcrc_model.visible" :config="siteOfcrc_model">
<template slot="dialog-body">
<div style="text-align: right">
<el-button
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]"
type="primary"
icon="el-icon-plus"
size="small"
@click="crc_model.visible = true"
>
<el-button v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]" type="primary" icon="el-icon-plus" size="small" @click="crc_model.visible = true">
{{ $t('common:button:add') }}
</el-button>
</div>
<el-table
v-loading="userListLoading"
:data="userList"
height="400"
size="small"
>
<el-table v-loading="userListLoading" :data="userList" height="400" size="small">
<!-- 姓名 -->
<el-table-column
prop="FullName"
:label="$t('trials:internalStaff:table:name')"
min-width="100"
show-overflow-tooltip
/>
<el-table-column prop="FullName" :label="$t('trials:internalStaff:table:name')" min-width="100"
show-overflow-tooltip />
<!-- 用户名 -->
<el-table-column
prop="UserName"
:label="$t('trials:internalStaff:table:uid')"
min-width="100"
show-overflow-tooltip
/>
<el-table-column prop="UserName" :label="$t('trials:internalStaff:table:uid')" min-width="100"
show-overflow-tooltip />
<!-- 用户类型 -->
<el-table-column
prop="UserType"
:label="$t('trials:internalStaff:table:userType')"
min-width="100"
show-overflow-tooltip
/>
<el-table-column prop="UserType" :label="$t('trials:internalStaff:table:userType')" min-width="100"
show-overflow-tooltip />
<!-- 电话 -->
<el-table-column
prop="Phone"
:label="$t('trials:internalStaff:table:phone')"
show-overflow-tooltip
min-width="100"
/>
<el-table-column prop="Phone" :label="$t('trials:internalStaff:table:phone')" show-overflow-tooltip
min-width="100" />
<!-- 邮箱 -->
<el-table-column
prop="EMail"
:label="$t('trials:internalStaff:table:email')"
show-overflow-tooltip
min-width="100"
/>
<el-table-column prop="EMail" :label="$t('trials:internalStaff:table:email')" show-overflow-tooltip
min-width="100" />
<!-- 单位 -->
<el-table-column
prop="OrganizationName"
:label="$t('trials:internalStaff:table:organization')"
min-width="100"
/>
<el-table-column prop="OrganizationName" :label="$t('trials:internalStaff:table:organization')"
min-width="100" />
<!-- 状态 -->
<el-table-column
prop="IsDeleted"
:label="$t('trials:internalStaff:table:status')"
show-overflow-tooltip
min-width="100"
>
<el-table-column prop="IsDeleted" :label="$t('trials:internalStaff:table:status')" show-overflow-tooltip
min-width="100">
<template slot-scope="scope">
<el-tag v-if="scope.row.IsDeleted" type="danger">{{
$fd('IsUserExitTrial', scope.row.IsDeleted)
@ -464,37 +267,18 @@
}}</el-tag>
</template>
</el-table-column>
<el-table-column
prop="CreateTime"
:label="$t('trials:internalStaff:table:authorizationTime')"
show-overflow-tooltip
sortable="custom"
min-width="210"
/>
<el-table-column
prop="DeletedTime"
:label="$t('trials:internalStaff:table:disableTime')"
show-overflow-tooltip
sortable
min-width="210"
/>
<el-table-column
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]"
:label="$t('common:action:action')"
width="100"
>
<el-table-column prop="CreateTime" :label="$t('trials:internalStaff:table:authorizationTime')"
show-overflow-tooltip sortable="custom" min-width="210" />
<el-table-column prop="DeletedTime" :label="$t('trials:internalStaff:table:disableTime')"
show-overflow-tooltip sortable min-width="210" />
<el-table-column v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]" :label="$t('common:action:action')" width="100">
<template slot-scope="scope">
<el-button
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]"
circle
:title="$t('trials:internalStaff:action:status')"
icon="el-icon-edit-outline"
@click="handleStatus(scope.row)"
/>
<el-button v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]" circle :title="$t('trials:internalStaff:action:status')" icon="el-icon-edit-outline"
@click="handleStatus(scope.row)" />
</template>
</el-table-column>
</el-table>
@ -503,10 +287,7 @@
<!-- 导入 -->
<base-model v-if="upload_model.visible" :config="upload_model">
<template slot="dialog-body">
<UploadExcel
@closeDialog="upload_model.visible = false"
@getList="getList"
/>
<UploadExcel @closeDialog="upload_model.visible = false" @getList="getList" />
</template>
</base-model>
<!--dicom AE-->
@ -583,6 +364,7 @@ export default {
TrialSiteCode: '',
TrialSiteName: '',
TrialSiteAliasName: '',
Country: '',
IsDeleted: true,
},
upload_model: {
@ -634,6 +416,13 @@ export default {
trigger: 'blur',
},
],
Country: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: 'blur',
},
],
},
trialId: '',
TrialSiteSelectList: [],
@ -656,10 +445,12 @@ export default {
? item.AliasName
: item.SiteName
this.form.SiteId = item.SiteId
this.form.Country = item.Country
},
handleChange(v) {
if (v) return
this.form.TrialSiteAliasName = ''
this.form.Country = this.$i18n.locale !== 'zh' ? this.$fd("SiteCountry", 1) : this.$fd("SiteCountry", 0)
},
querySearch(queryString, cb) {
var TrialSiteSelectList = this.TrialSiteSelectList
@ -728,6 +519,7 @@ export default {
this.form[key] = true
}
})
this.form.Country = this.$i18n.locale !== 'zh' ? this.$fd("SiteCountry", 1) : this.$fd("SiteCountry", 0)
this.edit_model.visible = true
},
// siteCRC
@ -764,6 +556,7 @@ export default {
trialSiteCode: this.form.TrialSiteCode,
trialSiteAliasName: this.form.TrialSiteAliasName,
isDeleted: this.form.IsDeleted,
Country: this.form.Country,
}
if (this.edit_model.model_type === 'add') {
addTrialSites([param])