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

This commit is contained in:
2026-08-26 09:16:42 +08:00
13 changed files with 732 additions and 508 deletions
+15
View File
@@ -422,4 +422,19 @@ export function updateSystemEmailConfig(data) {
data
})
}
// 获取前端配置
export function getWebConfigInfo() {
return request({
url: `/DeployConfig/getWebConfigInfo`,
method: 'get'
})
}
// 更新前端配置
export function updateWebConfigInfo(data) {
return request({
url: `/DeployConfig/updateWebConfigInfo`,
method: 'put',
data
})
}
+2 -2
View File
@@ -52,8 +52,8 @@ export default {
data() {
return {
currentUser: zzSessionStorage.getItem('userName'),
COMPANY: process.env.VUE_APP_COMPANY_NAME,
onlyOffice_url: process.env.VUE_APP_ONLYOFFICE_URL,
COMPANY: window.webConfig.VUE_APP_COMPANY_NAME,
onlyOffice_url: window.webConfig.VUE_APP_ONLYOFFICE_URL,
window,
}
},
+1 -1
View File
@@ -20,7 +20,7 @@ export default {
title: null,
documentType: null,
currentUser: zzSessionStorage.getItem('userName'),
onlyOffice_url: process.env.VUE_APP_ONLYOFFICE_URL
onlyOffice_url: window.webConfig.VUE_APP_ONLYOFFICE_URL
};
},
methods: {
+493 -483
View File
File diff suppressed because it is too large Load Diff
+9 -2
View File
@@ -120,8 +120,15 @@ service.interceptors.response.use(
} else if (res.IsSuccess === false) {
if (res.Code === -4) {
return Promise.resolve(res)
}
if (res.Code !== 5) {
} else if (res.Code === -5) {
let message = store.state.lang.language === 'en' ? 'Program error. Please contact the administrator.' : '程序异常,请联系管理员';
MessageBox.confirm(message, {
type: 'warning',
showCancelButton: false,
callback: action => {
}
})
} else if (res.Code !== 5) {
MessageBox.confirm(res.ErrorMessage, {
type: 'warning',
showCancelButton: false,
+145 -14
View File
@@ -3,6 +3,59 @@
<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:WebConfig") }}</h3>
<el-form-item :label="$t('system:config:VUE_APP_ONLYOFFICE_URL')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_ONLYOFFICE_URL">
<el-input v-model="form.WebConfigInfo.VUE_APP_ONLYOFFICE_URL" clearable />
</el-form-item>
<el-form-item :label="$t('system:config:VUE_APP_LOGIN_FOR_PERMISSION')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_LOGIN_FOR_PERMISSION">
<el-select v-model="form.WebConfigInfo.VUE_APP_LOGIN_FOR_PERMISSION" 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:VUE_APP_LOCK_FOR_PERMISSION_MFA')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_LOCK_FOR_PERMISSION_MFA">
<el-select v-model="form.WebConfigInfo.VUE_APP_LOCK_FOR_PERMISSION_MFA" 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:VUE_APP_LOCK_FOR_PERMISSION')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_LOCK_FOR_PERMISSION">
<el-select v-model="form.WebConfigInfo.VUE_APP_LOCK_FOR_PERMISSION" 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:VUE_APP_LOCK_FOR_TIME')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_LOCK_FOR_TIME">
<el-input-number v-model="form.WebConfigInfo.VUE_APP_LOCK_FOR_TIME" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:VUE_APP_LOGOUT_FOR_PERMISSION')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_LOGOUT_FOR_PERMISSION">
<el-select v-model="form.WebConfigInfo.VUE_APP_LOGOUT_FOR_PERMISSION" 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:VUE_APP_LOGOUT_FOR_TIME')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_LOGOUT_FOR_TIME">
<el-input-number v-model="form.WebConfigInfo.VUE_APP_LOGOUT_FOR_TIME" clearable type="number" />
</el-form-item>
<el-form-item :label="$t('system:config:VUE_APP_PASSWORD_FOR_PERMISSION')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_PASSWORD_FOR_PERMISSION">
<el-select v-model="form.WebConfigInfo.VUE_APP_PASSWORD_FOR_PERMISSION" 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:VUE_APP_WORD_FOR_PERMISSION')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_WORD_FOR_PERMISSION">
<el-select v-model="form.WebConfigInfo.VUE_APP_WORD_FOR_PERMISSION" 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:VUE_APP_COMPANY_NAME')" style="width: 45%;"
prop="WebConfigInfo.VUE_APP_COMPANY_NAME">
<el-input v-model="form.WebConfigInfo.VUE_APP_COMPANY_NAME" clearable />
</el-form-item>
<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="">
@@ -31,15 +84,15 @@
</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-input-number 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-input-number 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-input-number 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="">
@@ -48,11 +101,11 @@
</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-input-number 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-input-number 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="">
@@ -61,7 +114,7 @@
</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-input-number 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">
@@ -74,20 +127,20 @@
</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-input-number 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-input-number 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-input v-model="form.SystemEmailSendConfig.Imap" clearable />http://localhost:8080/trials/trials-list
</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-input-number 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 />
@@ -157,7 +210,7 @@
</div>
</template>
<script>
import { getSystemBasicConfigInfo, getEmailConfigInfo, updateSystemBasicConfig, updateSystemEmailConfig } from '@/api/admin'
import { getSystemBasicConfigInfo, getEmailConfigInfo, updateSystemBasicConfig, updateSystemEmailConfig, getWebConfigInfo, updateWebConfigInfo } from '@/api/admin'
export default {
name: "systemConfig",
data() {
@@ -255,8 +308,53 @@ export default {
'SystemEmailSendConfig.EmailRegexStr': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'WebConfigInfo.VUE_APP_ONLYOFFICE_URL': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'WebConfigInfo.VUE_APP_LOGIN_FOR_PERMISSION': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'WebConfigInfo.VUE_APP_LOCK_FOR_PERMISSION_MFA': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'WebConfigInfo.VUE_APP_LOCK_FOR_PERMISSION': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'WebConfigInfo.VUE_APP_LOCK_FOR_TIME': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'WebConfigInfo.VUE_APP_LOGOUT_FOR_PERMISSION': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
'WebConfigInfo.VUE_APP_LOGOUT_FOR_TIME': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ type: 'number', message: this.$t('systemConfig:ruleMessage:mustNumber'), trigger: 'blur' },
],
'WebConfigInfo.VUE_APP_PASSWORD_FOR_PERMISSION': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
// 'WebConfigInfo.VUE_APP_WORD_FOR_PERMISSION': [
// { required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
// ],
'WebConfigInfo.VUE_APP_COMPANY_NAME': [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
],
},
form: {
WebConfigInfo: {
VUE_APP_ONLYOFFICE_URL: '', // onlyoffice地址
VUE_APP_LOGIN_FOR_PERMISSION: false, // 是否开启登陆限制
VUE_APP_LOCK_FOR_PERMISSION_MFA: false,// 是否开启长时间无操作锁定弹框MFA验证
VUE_APP_LOCK_FOR_PERMISSION: false, // 是否开启长时间无操作锁定弹框
VUE_APP_LOCK_FOR_TIME: 900, // 无操作锁定弹框判断时间
VUE_APP_LOGOUT_FOR_PERMISSION: false,// 是否开启长时间无操作登出
VUE_APP_LOGOUT_FOR_TIME: 1800, // 无操作登出判断时间
VUE_APP_PASSWORD_FOR_PERMISSION: false, // 是否开启密码正则验证
// VUE_APP_WORD_FOR_PERMISSION: false, // 是否开启文档签署验证,
VUE_APP_COMPANY_NAME: '', // 公司名称
},
"BasicSystemConfig": {
// 启用质控风险控制功能
"QCRiskControl": true,
@@ -340,14 +438,15 @@ export default {
methods: {
handleSave() {
this.loading = true
Promise.all([this.updateSystemBasicConfig(), this.updateSystemEmailConfig()]).then(res => {
Promise.all([this.updateSystemBasicConfig(), this.updateSystemEmailConfig(), this.updateWebConfigInfo()]).then(res => {
this.loading = false
this.getInfo()
this.$message.success(this.$t('common:message:savedSuccessfully'))
// this.getInfo()
})
},
getInfo() {
this.loading = true
Promise.all([this.getSystemBasicConfigInfo(), this.getEmailConfigInfo()]).then(res => {
Promise.all([this.getSystemBasicConfigInfo(), this.getEmailConfigInfo(), this.getWebConfigInfo()]).then(res => {
this.loading = false
})
},
@@ -383,6 +482,38 @@ export default {
console.log(err)
}
},
async updateWebConfigInfo() {
try {
let validate = await this.$refs.systemConfigForm.validate()
if (!validate) return false
let data = {}
Object.keys(this.form.WebConfigInfo).forEach(key => {
data[key] = this.form.WebConfigInfo[key]
})
let res = await updateWebConfigInfo({
configStr: JSON.stringify(data)
})
if (res.IsSuccess) {
}
} catch (err) {
console.log(err)
}
},
async getWebConfigInfo() {
try {
let res = await getWebConfigInfo()
if (res.IsSuccess) {
let data = res.Result ? JSON.parse(res.Result) : {}
Object.keys(this.form.WebConfigInfo).forEach(key => {
this.form.WebConfigInfo[key] = data[key] ? data[key] : this.form.WebConfigInfo[key]
})
}
} catch (err) {
this.loading = false
console.log(err)
}
},
async getSystemBasicConfigInfo() {
try {
let res = await getSystemBasicConfigInfo()
@@ -217,7 +217,7 @@ export default {
moment,
loading: false,
currentUser: zzSessionStorage.getItem('userName'),
COMPANY:process.env.VUE_APP_COMPANY_NAME
COMPANY:window.webConfig.VUE_APP_COMPANY_NAME
}
},
mounted() {
@@ -46,7 +46,7 @@ export default {
fileList: [],
loading: false,
currentUser: zzSessionStorage.getItem('userName'),
COMPANY: process.env.VUE_APP_COMPANY_NAME
COMPANY: window.webConfig.VUE_APP_COMPANY_NAME
}
},
mounted() {
@@ -46,7 +46,7 @@ export default {
fileList: [],
loading: false,
currentUser: zzSessionStorage.getItem('userName'),
COMPANY: process.env.VUE_APP_COMPANY_NAME
COMPANY: window.webConfig.VUE_APP_COMPANY_NAME
}
},
mounted() {
@@ -33,7 +33,7 @@ export default {
data() {
return {
currentUser: zzSessionStorage.getItem('userName'),
COMPANY:process.env.VUE_APP_COMPANY_NAME
COMPANY:window.webConfig.VUE_APP_COMPANY_NAME
}
},
methods: {
@@ -0,0 +1,56 @@
<template>
<div class="customEmail">
<div class="emailConfig">
<h3>{{ $t("trials:emailManageCfg:customEmail:title:emailConfig") }}</h3>
<el-form :inline="true" :model="emailConfig" :rules="emailConfigRule" class="demo-form-inline">
<el-form-item :label="$t('trials:emailManageCfg:customEmail:label:consigneeEmail')" prop="EMail">
<el-input v-model="emailConfig.EMail" placeholder=""></el-input>
</el-form-item>
<el-form-item :label="$t('trials:emailManageCfg:customEmail:label:consigneeName')" prop="EMail">
<el-input v-model="emailConfig.EMail" placeholder=""></el-input>
</el-form-item>
<el-form-item :label="$t('trials:emailManageCfg:customEmail:label:addresserEmail')" prop="EMail">
<el-input v-model="emailConfig.EMail" placeholder=""></el-input>
</el-form-item>
<el-form-item :label="$t('trials:emailManageCfg:customEmail:label:addresserName')" prop="EMail">
<el-input v-model="emailConfig.EMail" placeholder=""></el-input>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
export default {
name: "customEmail",
data() {
return {
emailConfig: {
EMail: ''
},
emailConfigRule: {
EMail: [
{
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
{
// type: 'email',
pattern: new RegExp(this.$reg().EmailRegexStr),
message: this.$t('trials:site:ruleMessage:correctEmail'),
trigger: ['blur'],
}
]
}
}
}
}
</script>
<style lang="scss" scoped>
.customEmail {
width: 100%;
height: 100%;
overflow-y: auto;
}
</style>
@@ -7,17 +7,22 @@
<el-tab-pane :label="$t('trials:emailManageCfg:tab:title:emailLog')" name="emailLog">
<emailLog :isSystem="false" v-if="activeName === 'emailLog'" />
</el-tab-pane>
<el-tab-pane :label="$t('trials:emailManageCfg:tab:title:customEmail')" name="customEmail">
<customEmail v-if="activeName === 'customEmail'" />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import emailConfig from './config.vue'
import emailLog from "@/views/system/email"
import customEmail from "./customEmail.vue"
export default {
name: 'EmailManage',
components: {
emailConfig,
emailLog
emailLog,
customEmail
},
data() {
return {
@@ -46,7 +46,7 @@ export default {
fileList: [],
loading: false,
currentUser: zzSessionStorage.getItem('userName'),
COMPANY: process.env.VUE_APP_COMPANY_NAME
COMPANY: window.webConfig.VUE_APP_COMPANY_NAME
}
},
mounted() {