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-22 12:29:04 +08:00
commit b7c57c3c27
8 changed files with 595 additions and 50 deletions

View File

@ -391,3 +391,35 @@ export function getReSendEmail(data) {
data
})
}
// 获取系统基础配置
export function getSystemBasicConfigInfo() {
return request({
url: `/DeployConfig/getSystemBasicConfigInfo`,
method: 'get',
})
}
// 更新系统基础配置
export function updateSystemBasicConfig(data) {
return request({
url: `/DeployConfig/updateSystemBasicConfig`,
method: 'post',
data
})
}
// 获取系统邮件配置
export function getEmailConfigInfo() {
return request({
url: `/DeployConfig/getEmailConfigInfo`,
method: 'get',
})
}
// 更新系统邮件配置
export function updateSystemEmailConfig(data) {
return request({
url: `/DeployConfig/updateSystemEmailConfig`,
method: 'post',
data
})
}

View File

@ -50,11 +50,11 @@ export const constantRoutes = [
component: () => import('@/views/login/index'),
hidden: true
},
{
path: '/test',
component: () => import('@/views/test/index'),
hidden: true
},
// {
// path: '/test',
// component: () => import('@/views/test/index'),
// hidden: true
// },
{
path: '/resetpassword',
component: () => import('@/views/forgetpassword/index'),

View File

@ -1,8 +1,8 @@
<template>
<el-form ref="equipmentForm" :model="form" :rules="rules" label-width="150px">
<el-form ref="equipmentForm" :model="form" :rules="rules" label-width="300px">
<div class="base-dialog-body">
<!-- 扫描设备 -->
<el-form-item :label="$t('trials:equiptResearch:form:equipment')" prop="EquipmentTypeId"
<el-form-item :label="$t('trials:equiptResearch:form:equipment')" prop="EquipmentTypeEnum"
v-if="EquipmentControlFieldList.includes('EquipmentTypeEnum')">
<div style="display: flex;align-items: center;">
<el-select v-model="form.EquipmentTypeEnum" style="width:100%" @change="form.OtherEquipmentType = null">
@ -16,12 +16,12 @@
</el-form-item>
<!-- 扫描参数 -->
<el-form-item :label="$t('trials:equiptResearch:form:param')"
v-if="EquipmentControlFieldList.includes('Parameters')">
v-if="EquipmentControlFieldList.includes('Parameters')" prop="Parameters">
<el-input v-model="form.Parameters" />
</el-form-item>
<!-- 扫描仪器制造商名称 -->
<el-form-item :label="$t('trials:equiptResearch:form:manufacturer')"
v-if="EquipmentControlFieldList.includes('ManufacturerType')">
v-if="EquipmentControlFieldList.includes('ManufacturerType')" prop="ManufacturerType">
<div style="display: flex;align-items: center;">
<el-select v-model="form.ManufacturerType" style="width:100%" @change="form.ManufacturerName = null">
<el-option v-for="item of $d.ManufacturerType" :key="item.id" :label="item.label" :value="item.value" />
@ -33,12 +33,12 @@
</el-form-item>
<!-- 扫描仪型号 -->
<el-form-item :label="$t('trials:equiptResearch:form:model')"
v-if="EquipmentControlFieldList.includes('ScannerType')">
v-if="EquipmentControlFieldList.includes('ScannerType')" prop="ScannerType">
<el-input v-model="form.ScannerType" />
</el-form-item>
<!-- 磁场强度 -->
<el-form-item :label="$t('trials:equiptResearch:form:MagneticFieldStrengthType')"
v-if="EquipmentControlFieldList.includes('MagneticFieldStrengthType')">
v-if="EquipmentControlFieldList.includes('MagneticFieldStrengthType')" prop="MagneticFieldStrengthType">
<el-select v-model="form.MagneticFieldStrengthType" style="width:100%">
<el-option v-for="item of $d.MagneticFieldStrengthType" :key="item.id" :label="item.label"
:value="item.value" />
@ -46,21 +46,15 @@
</el-form-item>
<!-- 体部线圈通道数 -->
<el-form-item :label="$t('trials:equiptResearch:form:BodyCoilChannelCount')"
v-if="EquipmentControlFieldList.includes('BodyCoilChannelCount')">
v-if="EquipmentControlFieldList.includes('BodyCoilChannelCount')" prop="BodyCoilChannelCount">
<el-select v-model="form.BodyCoilChannelCount" style="width:100%">
<el-option v-for="item of $d.BodyCoilChannelCount" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<!-- 是否具备专用的PDFF脂肪定量序列CSE-MRI序列 -->
<el-form-item :label="$t('trials:equiptResearch:form:HasDedicatedPdfFatQuantificationSequence')"
v-if="EquipmentControlFieldList.includes('HasDedicatedPdfFatQuantificationSequence')">
<el-select v-model="form.HasDedicatedPdfFatQuantificationSequence" style="width:100%">
<el-option v-for="item of $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<!-- 是否具备专用的PDFF脂肪定量序列CSE-MRI序列 -->
<el-form-item :label="$t('trials:equiptResearch:form:HasDedicatedPdfFatQuantificationSequence')"
v-if="EquipmentControlFieldList.includes('HasDedicatedPdfFatQuantificationSequence')">
v-if="EquipmentControlFieldList.includes('HasDedicatedPdfFatQuantificationSequence')"
prop="HasDedicatedPdfFatQuantificationSequence">
<el-select v-model="form.HasDedicatedPdfFatQuantificationSequence" style="width:100%"
@change="form.PdfFatQuantificationSequenceType = null, form.OtherSequenceSpecification = null">
<el-option v-for="item of $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
@ -68,6 +62,7 @@
</el-form-item>
<!-- PDFF脂肪定量序列 -->
<el-form-item :label="$t('trials:equiptResearch:form:PdfFatQuantificationSequenceType')"
prop="PdfFatQuantificationSequenceType"
v-if="form.HasDedicatedPdfFatQuantificationSequence && EquipmentControlFieldList.includes('PdfFatQuantificationSequenceType')">
<div style="display: flex;align-items: center;">
<el-select v-model="form.PdfFatQuantificationSequenceType" style="width:100%"
@ -81,7 +76,7 @@
</div>
</el-form-item>
<!-- 是否包含 T2/R2 校正用于铁沉积校正 -->
<el-form-item :label="$t('trials:equiptResearch:form:HasT2R2Correction')"
<el-form-item :label="$t('trials:equiptResearch:form:HasT2R2Correction')" prop="HasT2R2Correction"
v-if="EquipmentControlFieldList.includes('HasT2R2Correction')">
<el-select v-model="form.HasT2R2Correction" style="width:100%">
<el-option v-for="item of $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
@ -89,13 +84,14 @@
</el-form-item>
<!-- 是否可完整导出 PDFF 参数图及全部原始 DICOM 数据 -->
<el-form-item :label="$t('trials:equiptResearch:form:CanFullyExportPdfParameterMapsAndRawDicom')"
prop="CanFullyExportPdfParameterMapsAndRawDicom"
v-if="EquipmentControlFieldList.includes('CanFullyExportPdfParameterMapsAndRawDicom')">
<el-select v-model="form.CanFullyExportPdfParameterMapsAndRawDicom" style="width:100%">
<el-option v-for="item of $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<!-- 备注 -->
<el-form-item :label="$t('trials:equiptResearch:form:remark')"
<el-form-item :label="$t('trials:equiptResearch:form:remark')" prop="Note"
v-if="EquipmentControlFieldList.includes('Note')">
<el-input v-model="form.Note" />
</el-form-item>
@ -160,8 +156,65 @@ export default {
},
rules: {
EquipmentTypeEnum: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] },
{
validator: (rule, value, callback) => {
if (this.form.EquipmentTypeEnum === -1 && !this.form.OtherEquipmentType) {
callback(this.$t('common:ruleMessage:specify'));
} else {
callback()
}
}, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change']
},
],
Parameters: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change'] }
],
Note: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change'] }
],
ManufacturerType: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] },
{
validator: (rule, value, callback) => {
if (this.form.ManufacturerType === -1 && !this.form.ManufacturerName) {
callback(this.$t('common:ruleMessage:specify'));
} else {
callback()
}
}, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change']
},
],
ScannerType: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change'] }
],
MagneticFieldStrengthType: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] }
]
],
BodyCoilChannelCount: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] }
],
HasDedicatedPdfFatQuantificationSequence: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] }
],
PdfFatQuantificationSequenceType: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] },
{
validator: (rule, value, callback) => {
if (this.form.PdfFatQuantificationSequenceType === -1 && !this.form.OtherSequenceSpecification) {
callback(this.$t('common:ruleMessage:specify'));
} else {
callback()
}
}, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change']
},
],
HasT2R2Correction: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] }
],
CanFullyExportPdfParameterMapsAndRawDicom: [
{ required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] }
],
},
btnLoading: false,
dictionaryList: {}

View File

@ -98,7 +98,7 @@
</el-table>
<!-- 新增/编辑人员信息 -->
<el-dialog v-if="editVisible" :visible.sync="editVisible" :close-on-click-modal="false" :title="title" width="600px"
<el-dialog v-if="editVisible" :visible.sync="editVisible" :close-on-click-modal="false" :title="title" width="800px"
custom-class="base-dialog-wrapper" :append-to-body="userTypeEnumInt !== 0">
<EquipmentForm :data="rowData" :trial-site-survey-equipment-type="trialSiteSurveyEquipmentType"
:EquipmentControlFieldList="EquipmentControlFieldList" @getList="getList" @close="closeDialog" />

View File

@ -0,0 +1,423 @@
<template>
<div class="systemConfig" v-loading="loading">
<div ref="leftContainer" class="left" style="padding: 20px;">
<el-form :inline="true" :model="form" :rules="rules" ref="systemConfigForm"
style="display: flex;align-items: center;justify-content: space-between;flex-wrap: wrap;">
<h3>{{ $t("system:config:BasicSystemConfig") }}</h3>
<el-form-item :label="$t('system:config:QcRiskControl')" style="width: 45%;">
<el-select v-model="form.BasicSystemConfig.QCRiskControl" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:OpenUserComplexPassword')" style="width: 45%;">
<el-select v-model="form.BasicSystemConfig.OpenUserComplexPassword" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:OpenSignDocumentBeforeWork')" style="width: 45%;">
<el-select v-model="form.BasicSystemConfig.OpenSignDocumentBeforeWork" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:OpenTrialRelationDelete')" style="width: 45%;">
<el-select v-model="form.BasicSystemConfig.OpenTrialRelationDelete" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:OpenLoginLimit')" style="width: 45%;">
<el-select v-model="form.BasicSystemConfig.OpenLoginLimit" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:LoginMaxFailCount')" style="width: 45%;"
prop="BasicSystemConfig.LoginMaxFailCount">
<el-input v-model="form.BasicSystemConfig.LoginMaxFailCount" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:LoginFailLockMinutes')" style="width: 45%;"
prop="BasicSystemConfig.LoginFailLockMinutes">
<el-input v-model="form.BasicSystemConfig.LoginFailLockMinutes" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:AutoLoginOutMinutes')" style="width: 45%;"
prop="BasicSystemConfig.AutoLoginOutMinutes">
<el-input v-model="form.BasicSystemConfig.AutoLoginOutMinutes" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:OpenLoginMFA')" style="width: 45%;">
<el-select v-model="form.BasicSystemConfig.OpenLoginMFA" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:ContinuousReadingTimeMin')" style="width: 45%;"
prop="BasicSystemConfig.ContinuousReadingTimeMin">
<el-input v-model="form.BasicSystemConfig.ContinuousReadingTimeMin" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:ReadingRestTimeMin')" style="width: 45%;"
prop="BasicSystemConfig.ReadingRestTimeMin">
<el-input v-model="form.BasicSystemConfig.ReadingRestTimeMin" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:IsNeedChangePassWord')" style="width: 45%;">
<el-select v-model="form.BasicSystemConfig.IsNeedChangePassWord" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:ChangePassWordDays')" style="width: 45%;"
prop="BasicSystemConfig.ChangePassWordDays">
<el-input v-model="form.BasicSystemConfig.ChangePassWordDays" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:TemplateType')" style="width: 45%;"
prop="BasicSystemConfig.TemplateType">
<el-select v-model="form.BasicSystemConfig.TemplateType" placeholder="">
<el-option v-for="item in $d.SysTemplateType" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:ThirdPdfUrl')" style="width: 45%;" prop="BasicSystemConfig.ThirdPdfUrl">
<el-input v-model="form.BasicSystemConfig.ThirdPdfUrl" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:UserMFAVerifyMinutes')" style="width: 45%;"
prop="BasicSystemConfig.UserMFAVerifyMinutes">
<el-input v-model="form.BasicSystemConfig.UserMFAVerifyMinutes" clearable type="number" />
</el-form-item>
<h3>{{ $t("system:config:SystemEmailSendConfig") }}</h3>
<el-form-item :label="$t('system:config:Host')" style="width: 45%;" prop="SystemEmailSendConfig.Host">
<el-input v-model="form.SystemEmailSendConfig.Host" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:Port')" style="width: 45%;" prop="SystemEmailSendConfig.Port">
<el-input v-model="form.SystemEmailSendConfig.Port" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:Imap')" style="width: 45%;" prop="SystemEmailSendConfig.Imap">
<el-input v-model="form.SystemEmailSendConfig.Imap" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:ImapPort')" style="width: 45%;" prop="SystemEmailSendConfig.ImapPort">
<el-input v-model="form.SystemEmailSendConfig.ImapPort" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:FromEmail')" style="width: 45%;" prop="SystemEmailSendConfig.FromEmail">
<el-input v-model="form.SystemEmailSendConfig.FromEmail" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:FromName')" style="width: 45%;" prop="SystemEmailSendConfig.FromName">
<el-input v-model="form.SystemEmailSendConfig.FromName" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:AuthorizationCode')" style="width: 45%;"
prop="SystemEmailSendConfig.AuthorizationCode">
<el-input v-model="form.SystemEmailSendConfig.AuthorizationCode" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:SiteUrl')" style="width: 45%;" prop="SystemEmailSendConfig.SiteUrl">
<el-input v-model="form.SystemEmailSendConfig.SiteUrl" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:SystemShortName')" style="width: 45%;"
prop="SystemEmailSendConfig.SystemShortName">
<el-input v-model="form.SystemEmailSendConfig.SystemShortName" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:OrganizationName')" style="width: 45%;"
prop="SystemEmailSendConfig.OrganizationName">
<el-input v-model="form.SystemEmailSendConfig.OrganizationName" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:OrganizationNameCN')" style="width: 45%;"
prop="SystemEmailSendConfig.OrganizationNameCN">
<el-input v-model="form.SystemEmailSendConfig.OrganizationNameCN" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:PlatformName')" style="width: 45%;"
prop="SystemEmailSendConfig.PlatformName">
<el-input v-model="form.SystemEmailSendConfig.PlatformName" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:PlatformNameCN')" style="width: 45%;"
prop="SystemEmailSendConfig.PlatformNameCN">
<el-input v-model="form.SystemEmailSendConfig.PlatformNameCN" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:CompanyName')" style="width: 45%;"
prop="SystemEmailSendConfig.CompanyName">
<el-input v-model="form.SystemEmailSendConfig.CompanyName" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:CompanyNameCN')" style="width: 45%;"
prop="SystemEmailSendConfig.CompanyNameCN">
<el-input v-model="form.SystemEmailSendConfig.CompanyNameCN" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:CompanyShortName')" style="width: 45%;"
prop="SystemEmailSendConfig.CompanyShortName">
<el-input v-model="form.SystemEmailSendConfig.CompanyShortName" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:CompanyShortNameCN')" style="width: 45%;"
prop="SystemEmailSendConfig.CompanyShortNameCN">
<el-input v-model="form.SystemEmailSendConfig.CompanyShortNameCN" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:IsEnv_US')" style="width: 45%;">
<el-select v-model="form.SystemEmailSendConfig.IsEnv_US" placeholder="">
<el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('system:config:EmailRegexStr')" style="width: 45%;"
prop="SystemEmailSendConfig.EmailRegexStr">
<el-input v-model="form.SystemEmailSendConfig.EmailRegexStr" clearable />
</el-form-item>
<el-form-item style="width: 100%;text-align: right;">
<el-button type="primary" size="small" @click="handleSave">
{{ $t('common:button:save') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import { getSystemBasicConfigInfo, getEmailConfigInfo, updateSystemBasicConfig, updateSystemEmailConfig } from '@/api/admin'
export default {
name: "systemConfig",
data() {
return {
rules: {
'BasicSystemConfig.LoginMaxFailCount': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.LoginFailLockMinutes': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.AutoLoginOutMinutes': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.ContinuousReadingTimeMin': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.ReadingRestTimeMin': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.ChangePassWordDays': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.TemplateType': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.UserMFAVerifyMinutes': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'BasicSystemConfig.ThirdPdfUrl': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.Host': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.Port': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'SystemEmailSendConfig.Imap': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.ImapPort': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'SystemEmailSendConfig.FromEmail': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.FromName': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.AuthorizationCode': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.SiteUrl': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.SystemShortName': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.OrganizationName': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.OrganizationNameCN': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.PlatformName': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.PlatformNameCN': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.CompanyName': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.CompanyNameCN': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.CompanyShortName': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.CompanyShortNameCN': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'SystemEmailSendConfig.EmailRegexStr': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
},
form: {
"BasicSystemConfig": {
//
"QCRiskControl": true,
//
"OpenUserComplexPassword": false,
//
"OpenSignDocumentBeforeWork": false,
//
"OpenTrialRelationDelete": false,
//()
"OpenLoginLimit": false,
//
"LoginMaxFailCount": 5,
//()
"LoginFailLockMinutes": 1,
//()
"AutoLoginOutMinutes": 10,
// (MFA)
"OpenLoginMFA": false,
// ()
"ContinuousReadingTimeMin": 120,
//()
"ReadingRestTimeMin": 10,
//
"IsNeedChangePassWord": true,
// ()
"ChangePassWordDays": 90,
//1Elevate(LiLi)2Extensive()
"TemplateType": 2,
// PDF
"ThirdPdfUrl": "http://106.14.89.110:30088/api/v1/convert/file/pdf",
//MFA
"UserMFAVerifyMinutes": 1440
},
// ('
"SystemEmailSendConfig": {
//sMTP
"Host": "smtp.qiye.aliyun.com",
//SMTP
"Port": 465,
"Imap": "imap.qiye.aliyun.com",
"ImapPort": 993,
//
"FromEmail": "test@extimaging.com",
//
"FromName": "Test IRC Imaging System",
//SMTP
"AuthorizationCode": "SHzyyl2021",
//访
"SiteUrl": "http://irc.test.extimaging.com/login",
//-使
"SystemShortName": "IRC",
// -
"OrganizationName": "ExtImaging",
//
"OrganizationNameCN": "ExtImaging",
"PlatformName": "EICS",
"PlatformNameCN": "展影云平台",
//
"CompanyName": "Extensive Imaging",
// ,
"CompanyNameCN": "上海展影医疗科技有限公司",
//
"CompanyShortName": "Extensive Imaging",
//
"CompanyShortNameCN": "展影医疗",
// 便1i1liirc "
"IsEnv_US": false,
//
"EmailRegexStr": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
//
// "CronEmailDefaultCulture": "zh-CN"
}
},
loading: false
}
},
mounted() {
this.getInfo()
},
methods: {
handleSave() {
this.loading = true
Promise.all([this.updateSystemBasicConfig(), this.updateSystemEmailConfig()]).then(res => {
this.loading = false
this.getInfo()
})
},
getInfo() {
this.loading = true
Promise.all([this.getSystemBasicConfigInfo(), this.getEmailConfigInfo()]).then(res => {
this.loading = false
})
},
async updateSystemBasicConfig() {
try {
let validate = await this.$refs.systemConfigForm.validate()
if (!validate) return false
let data = {}
Object.keys(this.form.BasicSystemConfig).forEach(key => {
data[key] = this.form.BasicSystemConfig[key]
})
let res = await updateSystemBasicConfig(data)
if (res.IsSuccess) {
}
} catch (err) {
console.log(err)
}
},
async updateSystemEmailConfig() {
try {
let validate = await this.$refs.systemConfigForm.validate()
if (!validate) return false
let data = {}
Object.keys(this.form.SystemEmailSendConfig).forEach(key => {
data[key] = this.form.SystemEmailSendConfig[key]
})
let res = await updateSystemEmailConfig(data)
if (res.IsSuccess) {
}
} catch (err) {
console.log(err)
}
},
async getSystemBasicConfigInfo() {
try {
let res = await getSystemBasicConfigInfo()
if (res.IsSuccess) {
Object.keys(this.form.BasicSystemConfig).forEach(key => {
this.form.BasicSystemConfig[key] = res.Result[key]
})
}
} catch (err) {
this.loading = false
console.log(err)
}
},
async getEmailConfigInfo() {
try {
let res = await getEmailConfigInfo()
if (res.IsSuccess) {
Object.keys(this.form.SystemEmailSendConfig).forEach(key => {
this.form.SystemEmailSendConfig[key] = res.Result[key]
})
}
} catch (err) {
this.loading = false
console.log(err)
}
}
}
}
</script>
<style lang="scss" scoped>
.systemConfig {
overflow-y: auto;
h3 {
width: 100%;
}
}
</style>

View File

@ -217,8 +217,15 @@ export default {
this.form.ReplaceContentCN = res.Result.ModifyFiledList[0].ReplaceContentCN.split('<p>').join('').split('</p>').filter(item => isNaN(item)).join("\n")
} else {
let arr = [this.$t('trials:equiptResearch:form:item1'), this.$t('trials:equiptResearch:form:item2'), this.$t('trials:equiptResearch:form:item3'), this.$t('trials:equiptResearch:form:item4')]
// this.form.ReplaceContent = arr.join("\n")
this.form.ReplaceContentCN = arr.join("\n")
let arr2 = [this.$t('trials:equiptResearch:form:item5'), this.$t('trials:equiptResearch:form:item6'), this.$t('trials:equiptResearch:form:item7'), this.$t('trials:equiptResearch:form:item8')]
if (this.$i18n.locale !== 'zh') {
this.form.ReplaceContentCN = arr2.join("\n")
this.form.ReplaceContent = arr.join("\n")
} else {
this.form.ReplaceContentCN = arr.join("\n")
this.form.ReplaceContent = arr2.join("\n")
}
}
}
} catch (err) {

View File

@ -118,6 +118,23 @@
</el-radio>
</el-radio-group>
</el-form-item>
<!-- QC质控下载 -->
<el-form-item :label="$t('trials:logincCfg:form:IsSupportQCDownloadImage')" prop="IsSupportQCDownloadImage"
v-if="showMore">
<el-radio-group v-model="form.IsSupportQCDownloadImage" :disabled="form.IsTrialBasicLogicConfirmed && !isEdit">
<el-radio v-for="item of $d.YesOrNo" :key="`IsSupportQCDownloadImage${item.value}`" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 失访可读 -->
<el-form-item :label="$t('trials:logincCfg:form:IsOpenLostVistRead')" prop="IsOpenLostVistRead " v-if="showMore">
<el-radio-group v-model="form.IsOpenLostVistRead" :disabled="form.IsTrialBasicLogicConfirmed && !isEdit">
<el-radio v-for="item of $d.YesOrNo" :key="`IsOpenLostVistRead ${item.value}`" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 自动任务是否区分类型 -->
<el-form-item :label="$t('trials:logincCfg:form:IsIQCAutoTaskDistinguishType')"
prop="IsIQCAutoTaskDistinguishType" v-if="form.IsIQCAutoNextTask && showMore">
@ -528,6 +545,8 @@ export default {
StudyUseModalityList: [],
StudyUseStudyNameList: [],
IsIQCAutoNextTask: false,
IsSupportQCDownloadImage: false,
IsOpenLostVistRead: false,
IsIQCAutoTaskDistinguishType: false
// ClinicalDataSetNames: [],
// ClinicalDataTrialSetIds: [],
@ -1263,6 +1282,16 @@ export default {
NewVal: this.$fd('YesOrNo', this.form.IsIQCAutoNextTask),
OldVal: this.$fd('YesOrNo', this.initialForm.IsIQCAutoNextTask),
},
{
Name: this.$t('trials:logincCfg:form:IsSupportQCDownloadImage'),
NewVal: this.$fd('YesOrNo', this.form.IsSupportQCDownloadImage),
OldVal: this.$fd('YesOrNo', this.initialForm.IsSupportQCDownloadImage),
},
{
Name: this.$t('trials:logincCfg:form:IsOpenLostVistRead'),
NewVal: this.$fd('YesOrNo', this.form.IsOpenLostVistRead),
OldVal: this.$fd('YesOrNo', this.initialForm.IsOpenLostVistRead),
},
{
Name: this.$t('trials:logincCfg:form:IsIQCAutoTaskDistinguishType'),
NewVal: this.$fd('YesOrNo', this.form.IsIQCAutoTaskDistinguishType),

View File

@ -40,14 +40,14 @@
{{ $store.state.trials.uploadTip }}
</div> -->
<el-tooltip v-if="
$store.state.trials.config.IsSupportQCDownloadImage &&
IsSupportQCDownloadImage &&
!hasPermi(['role:spm'])
" :content="$t('trials:download:tip:message')" placement="top-end" effect="light">
<i class="el-icon-warning-outline" style="font-size: 18px"></i>
</el-tooltip>
<!-- 下载所有影像 -->
<el-button v-if="
$store.state.trials.config.IsSupportQCDownloadImage &&
IsSupportQCDownloadImage &&
!hasPermi(['role:spm'])
" :loading="downloading" :disabled="selectTableDicom.length <= 0" size="small" type="primary"
style="margin-left: 10px" @click="getCRCUploadedStudyInfo('dicom')">
@ -55,7 +55,7 @@
</el-button>
<!-- 下载工具 -->
<el-button v-if="
$store.state.trials.config.IsSupportQCDownloadImage &&
IsSupportQCDownloadImage &&
!hasPermi(['role:spm'])
" :loading="downloading" size="small" type="primary" style="margin-left: 10px"
@click="getCRCUploadedStudyInfo('tools')">
@ -73,15 +73,13 @@
<el-table :data="studyList" :row-class-name="tableRowClassName"
@selection-change="handleSelectionChangeDicom"
:default-sort="{ prop: 'UploadedTime', order: 'ascending' }">
<el-table-column type="selection" width="55" v-if='$store.state.trials.config.IsSupportQCDownloadImage'>
<el-table-column type="selection" width="55" v-if='IsSupportQCDownloadImage'>
</el-table-column>
<!-- 检查编号 -->
<el-table-column prop="StudyCode" :label="$t('trials:audit:table:studyId')" sortable>
<template slot-scope="scope">
<el-tooltip
placement="top"
v-if="['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) && IsHaveStudyClinicalData && scope.row.IsHasEmptyPatientInfo"
>
<el-tooltip placement="top"
v-if="['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) && IsHaveStudyClinicalData && scope.row.IsHasEmptyPatientInfo">
<div slot="content">{{ $t('trials:audit:message:ptDataValid') }}</div>
<span class="el-icon-warning" style="color: red; cursor: pointer"></span>
</el-tooltip>
@ -158,12 +156,11 @@
:disabled="isAudit || scope.row.IsDeleted || SecondReviewState > 0"
@click="handleEditStudy(scope.row)" />
<!-- 预览PET-CT数据 -->
<el-button icon="el-icon-document" :title="$t('trials:audit:tab:clinicalData')"
v-if="
['PT、CT', 'CT、PT', 'PET-CT'].includes(
scope.row.Modalities
) && IsHaveStudyClinicalData
" circle :disabled="scope.row.IsDeleted" @click="handlePreviewClinicalData(scope.row)" />
<el-button icon="el-icon-document" :title="$t('trials:audit:tab:clinicalData')" v-if="
['PT、CT', 'CT、PT', 'PET-CT'].includes(
scope.row.Modalities
) && IsHaveStudyClinicalData
" circle :disabled="scope.row.IsDeleted" @click="handlePreviewClinicalData(scope.row)" />
<!-- 质控后编辑 -->
<el-button icon="el-icon-edit" :title="$t('trials:audit:action:Correction')" circle
v-if="isAuditToEdit" @click="handleEditStudy(scope.row)" />
@ -257,14 +254,14 @@
{{ $store.state.trials.uploadTip }}
</div> -->
<el-tooltip v-if="
$store.state.trials.config.IsSupportQCDownloadImage &&
IsSupportQCDownloadImage &&
!hasPermi(['role:spm'])
" :content="$t('trials:download:tip:message')" placement="top-end" effect="light">
<i class="el-icon-warning-outline" style="font-size: 18px"></i>
</el-tooltip>
<!-- 下载所有影像 -->
<el-button v-if="
$store.state.trials.config.IsSupportQCDownloadImage &&
IsSupportQCDownloadImage &&
!hasPermi(['role:spm'])
" :loading="downloading" :disabled="selectTableNonedicom.length <= 0" size="small" type="primary"
style="margin-left: 10px" @click="getCRCUploadedStudyInfo('noneDicom')">
@ -283,7 +280,7 @@
</div>
<el-table :data="noneDicomStudyList" @selection-change="handleSelectionChangeNonedicom"
:row-class-name="tableRowClassName" :default-sort="{ prop: 'CreateTime', order: 'ascending' }">
<el-table-column type="selection" width="55" v-if='$store.state.trials.config.IsSupportQCDownloadImage'>
<el-table-column type="selection" width="55" v-if='IsSupportQCDownloadImage'>
</el-table-column>
<!-- 检查编号 -->
<el-table-column prop="CodeView" :label="$t('trials:audit:table:nonDicomsStudyId')" sortable />
@ -910,8 +907,7 @@
{{ $t('trials:audit:button:auditPassed') }}
</el-button>
<!-- 跳过 -->
<el-button size="small" type="primary" round
@click="skipTask">
<el-button size="small" type="primary" round @click="skipTask">
{{ $t('trials:audit:button:skipTask') }}
</el-button>
<!-- 审核终止 -->
@ -920,8 +916,11 @@
<!-- </el-button>-->
</div>
<!--petct临床数据预览-->
<el-dialog v-if="petVisible" :close-on-click-modal="false" :show-close="true" :visible.sync="petVisible" append-to-body>
<uploadPetClinicalData :subject-visit-id="data.Id" :data="data" :studyData="rowData" :allow-add-or-edit="false" :isPatientFormAllowEdit="!isAudit || SecondReviewState > 0 || isAuditToEdit" :isAudit="isAuditToEdit" @close="petVisible = false"/>
<el-dialog v-if="petVisible" :close-on-click-modal="false" :show-close="true" :visible.sync="petVisible"
append-to-body>
<uploadPetClinicalData :subject-visit-id="data.Id" :data="data" :studyData="rowData" :allow-add-or-edit="false"
:isPatientFormAllowEdit="!isAudit || SecondReviewState > 0 || isAuditToEdit" :isAudit="isAuditToEdit"
@close="petVisible = false" />
</el-dialog>
</div>
</template>
@ -1117,7 +1116,8 @@ export default {
IsSecondPass: false,
userId: zzSessionStorage.getItem('userId'),
QCRiskControl: false
QCRiskControl: false,
IsSupportQCDownloadImage: false
}
},
async mounted() {
@ -1324,6 +1324,7 @@ export default {
this.loading = true
getVisitQCInfo(this.data.Id, this.data.QCProcessEnum, this.currentQCType)
.then((res) => {
this.IsSupportQCDownloadImage = res.Result.IsSupportQCDownloadImage
this.secondReviewList = res.Result.SecondReviewList
if (this.secondReviewList.length > 0) {
let data = this.secondReviewList.find(item => item.SignTime) || {}
@ -2176,11 +2177,11 @@ export default {
if (confirm !== 'confirm') return
this.$emit('close')
}
} catch(e) {
} catch (e) {
console.log(e)
this.$emit('getList')
}
},
getNextQCInfo() {
// ''