feat(系统设置): 文件大小限制

This commit is contained in:
baiqi 2024-09-04 16:24:53 +08:00 committed by Craftsman
parent c113036641
commit d676e5d3eb
36 changed files with 157 additions and 51 deletions

View File

@ -52,6 +52,7 @@
onBeforeMount(async () => {
try {
appStore.initSystemVersion(); //
appStore.initFileSizeLimit(); //
// license
if (appStore.getPackageType === 'enterprise') {
licenseStore.getValidateLicense();

View File

@ -2,6 +2,7 @@ import MSR from '@/api/http/index';
import {
AddAuthUrl,
DeleteAuthUrl,
EditUploadConfigUrl,
GetAuthDetailByTypeUrl,
GetAuthDetailUrl,
GetAuthListUrl,
@ -54,7 +55,7 @@ export function saveBaseUrl(baseUrl: string) {
// 获取基础信息
export function getBaseInfo() {
return MSR.get<BaseConfig>({ url: GetBaseInfoUrl });
return MSR.get<BaseConfig>({ url: GetBaseInfoUrl }, { ignoreCancelToken: true });
}
// 保存邮箱信息
@ -131,3 +132,8 @@ export function saveCleanupConfig(data: SaveInfoParams) {
export function getCleanupConfig() {
return MSR.get<CleanupConfig>({ url: GetCleanConfigUrl });
}
// 保存内存清理配置
export function saveUploadConfig(data: SaveInfoParams) {
return MSR.post({ url: EditUploadConfigUrl, data });
}

View File

@ -36,6 +36,8 @@ export const TestLdapLoginUrl = '/system/authsource/ldap/test-login';
export const SaveCleanConfigUrl = '/system/parameter/edit/clean-config';
// 获取内存清理配置
export const GetCleanConfigUrl = '/system/parameter/get/clean-config';
// 设置上传配置
export const EditUploadConfigUrl = '/system/parameter/edit/upload-config';
// 获取系统主页左上角图片
export const GetTitleImgUrl = `${import.meta.env.VITE_API_BASE_URL}/base-display/get/logo-platform`;

View File

@ -374,7 +374,7 @@
.arco-input-number-step-button {
@apply !bg-white;
border: 1px solid var(--color-text-input-border);
border: 1px solid var(--color-text-n8) !important;
border-radius: var(--border-radius-small) !important;
.btn-outline-sec-hover();
.btn-outline-sec-active();

View File

@ -47,7 +47,7 @@
</a-dropdown>
</div>
<div v-if="!props.onlyButton" class="!hover:bg-[rgb(var(--primary-1))] !text-[var(--color-text-4)]">
{{ t('system.orgTemplate.addAttachmentTip') }}
{{ t('system.orgTemplate.addAttachmentTip', { size: appStore.getFileMaxSize }) }}
</div>
</div>
</a-form-item>
@ -238,6 +238,7 @@
import { getAssociatedFileListUrl } from '@/api/modules/case-management/featureCase';
import { getModules, getModulesCount } from '@/api/modules/project-management/fileManagement';
import { useI18n } from '@/hooks/useI18n';
import useAppStore from '@/store/modules/app';
import { hasAnyPermission } from '@/utils/permission';
import { AssociatedList } from '@/models/caseManagement/featureCase';
@ -280,6 +281,7 @@
}>();
const { t } = useI18n();
const appStore = useAppStore();
const fileList = defineModel<MsFileItem[]>('fileList', {
// TODO:MsFileItem

View File

@ -203,8 +203,8 @@
{
data: {
id: 'fakeNode',
text: 'fakeNode',
resource: ['fakeNode'],
text: '...',
resource: [''],
},
},
]

View File

@ -194,8 +194,8 @@
{
data: {
id: 'fakeNode',
text: 'fakeNode',
resource: ['fakeNode'],
text: '...',
resource: [''],
isNew: false,
changed: false,
},

View File

@ -315,8 +315,8 @@
{
data: {
id: 'fakeNode',
text: 'fakeNode',
resource: ['fakeNode'],
text: '...',
resource: [''],
},
},
]

View File

@ -41,7 +41,7 @@
{{
t(props.subText || 'ms.upload.importModalFileTip', {
type: UploadAcceptEnum[props.accept],
size: props.maxSize || defaultMaxSize,
size: props.maxSize || appStore.getFileMaxSize,
})
}}
</slot>
@ -69,6 +69,7 @@
import { FileIconMap, getFileEnum, getFileIcon } from '@/components/pure/ms-upload/iconMap';
import { useI18n } from '@/hooks/useI18n';
import useAppStore from '@/store/modules/app';
import { formatFileSize } from '@/utils';
import { UploadAcceptEnum, UploadStatus } from '@/enums/uploadEnum';
@ -111,7 +112,7 @@
const emit = defineEmits(['update:fileList', 'change']);
const defaultMaxSize = 50;
const appStore = useAppStore();
const innerFileList = defineModel<MsFileItem[]>('fileList', {
default: () => [],
@ -137,7 +138,7 @@
}
}
}
const maxSize = props.maxSize || defaultMaxSize;
const maxSize = props.maxSize || appStore.getFileMaxSize;
const _maxSize = props.sizeUnit === 'MB' ? maxSize * 1024 * 1024 : maxSize * 1024;
if (props.isLimit && file.size > _maxSize) {
Message.warning(t('ms.upload.overSize'));

View File

@ -6,6 +6,7 @@ import { Recordable } from '#/global';
export interface BaseConfig {
url: string;
prometheusHost: string;
fileMaxSize: string;
}
// 邮箱信息配置

View File

@ -7,7 +7,7 @@ import type { BreadcrumbItem } from '@/components/business/ms-breadcrumb/types';
import { getEnvironment, getEnvList } from '@/api/modules/api-test/common';
import { getProjectInfo } from '@/api/modules/project-management/basicInfo';
import { getProjectList } from '@/api/modules/project-management/project';
import { getPageConfig } from '@/api/modules/setting/config';
import { getBaseInfo, getPageConfig } from '@/api/modules/setting/config';
import { getPackageType, getSystemVersion } from '@/api/modules/system';
import { getMenuList } from '@/api/modules/user';
import defaultSettings from '@/config/settings.json';
@ -71,6 +71,7 @@ const useAppStore = defineStore('app', {
ordList: [],
envList: [],
currentEnvConfig: undefined,
fileMaxSize: 50,
}),
getters: {
@ -120,6 +121,9 @@ const useAppStore = defineStore('app', {
getPackageType(state: AppState): string {
return state.packageType;
},
getFileMaxSize(state: AppState): number {
return state.fileMaxSize;
},
},
actions: {
/**
@ -401,6 +405,18 @@ const useAppStore = defineStore('app', {
console.log(error);
}
},
async initFileSizeLimit() {
try {
const res = await getBaseInfo();
this.fileMaxSize = Number(res.fileMaxSize) || 50;
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
}
},
setFileMaxSize(size: number) {
this.fileMaxSize = size;
},
},
persist: {
paths: ['currentOrgId', 'currentProjectId', 'pageConfig', 'menuCollapse'],

View File

@ -45,6 +45,7 @@ export interface AppState {
ordList: { id: string; name: string }[];
envList: EnvironmentItem[];
currentEnvConfig?: EnvConfig; // 当前环境配置信息
fileMaxSize: number;
}
export interface UploadFileTaskState {

View File

@ -124,7 +124,7 @@
<span class="text-[rgb(var(--warning-6))]" @click.stop="openLink">
{{ t('apiTestManagement.importSwaggerFileTip2') }}
</span>
{{ t('apiTestManagement.importSwaggerFileTip3') }}
{{ t('apiTestManagement.importSwaggerFileTip3', { size: appStore.getFileMaxSize }) }}
</div>
<div v-else-if="importForm.platform === RequestImportFormat.Postman" class="flex">
{{ t('apiTestManagement.importPostmanFileTip') }}

View File

@ -87,7 +87,7 @@ export default {
'apiTestManagement.syncUpdateDirectory': 'Sync Update API Directory',
'apiTestManagement.importSwaggerFileTip1': 'Supports Swagger 3.0 version JSON files,',
'apiTestManagement.importSwaggerFileTip2': '2.0 files can be converted to 3.0 on the official website',
'apiTestManagement.importSwaggerFileTip3': 'with a size limit of 50MB',
'apiTestManagement.importSwaggerFileTip3': 'with a size limit of {size}MB',
'apiTestManagement.importPostmanFileTip':
'Postman only supports file import, and only supports json files in v2.1 format',
'apiTestManagement.urlImportPlaceholder': 'Please enter OpenAPI/URL',

View File

@ -83,7 +83,7 @@ export default {
'apiTestManagement.syncUpdateDirectory': '同步更新接口所在目录',
'apiTestManagement.importSwaggerFileTip1': '支持 Swagger 3.0 版本的 json 文件,',
'apiTestManagement.importSwaggerFileTip2': '2.0 文件可以在官网一键转换 3.0',
'apiTestManagement.importSwaggerFileTip3': ',大小不超过 50M',
'apiTestManagement.importSwaggerFileTip3': ',大小不超过 {size}M',
'apiTestManagement.importPostmanFileTip': 'Postman仅支持文件导入且只支持v2.1格式的json文件',
'apiTestManagement.urlImportPlaceholder': '请输入OpenAPI/URL',
'apiTestManagement.swaggerURLRequired': 'SwaggerURL 不能为空',

View File

@ -184,7 +184,6 @@
multiple
draggable
size-unit="MB"
:max-size="50"
:is-all-screen="true"
class="mb-[16px]"
/>

View File

@ -165,7 +165,6 @@
multiple
draggable
size-unit="MB"
:max-size="50"
:is-all-screen="true"
class="mb-[16px]"
@change="handleChange"

View File

@ -42,7 +42,7 @@ export default {
defaultSystemTemplate: 'System template is defaulted',
content: 'Bug content',
file: 'Attachment files',
fileExtra: 'Max of file is 50MB',
fileExtra: 'Max of file is {size}MB',
pleaseInputBugName: 'Please input bug name',
nameIsRequired: 'Bug name cannot be empty',
pleaseInputBugContent: 'Please input bug content',

View File

@ -41,7 +41,7 @@ export default {
defaultSystemTemplate: '默认为系统模板',
content: '缺陷内容',
file: '附件',
fileExtra: '支持任意类型文件,单个文件大小不超过 50MB',
fileExtra: '支持任意类型文件,单个文件大小不超过 {size}MB',
pleaseInputBugName: '请输入缺陷名称',
nameIsRequired: '缺陷名称不能为空',
pleaseInputBugContent: '请输入缺陷内容',

View File

@ -212,7 +212,6 @@
multiple
draggable
size-unit="MB"
:max-size="50"
:is-all-screen="true"
class="mb-[16px]"
@change="handleChange"

View File

@ -26,13 +26,12 @@
v-model:file-list="fileList"
class="mb-6 w-full"
:accept="validateType === 'Excel' ? 'excel' : 'xmind'"
:max-size="100"
size-unit="MB"
main-text="caseManagement.featureCase.dragOrClick"
:sub-text="
validateType === 'Excel'
? t('caseManagement.featureCase.onlyEXcelTip')
: t('caseManagement.featureCase.onlyXmindTip')
? t('caseManagement.featureCase.onlyEXcelTip', { size: appStore.getFileMaxSize })
: t('caseManagement.featureCase.onlyXmindTip', { size: appStore.getFileMaxSize })
"
:show-file-list="false"
:auto-upload="false"

View File

@ -207,7 +207,6 @@
multiple
draggable
size-unit="MB"
:max-size="50"
:is-all-screen="true"
class="mb-[16px]"
@change="handleChange"

View File

@ -226,8 +226,8 @@ export default {
'caseManagement.featureCase.formXMindExport': 'Import use cases from Xmind files',
'caseManagement.featureCase.dragOrClick': 'Drag or click this area to select a file',
'caseManagement.featureCase.onlyEXcelTip':
'Only xls and xlsx are supported, and the size of each device cannot exceed 100 MB',
'caseManagement.featureCase.onlyXmindTip': 'Only supports xmind, with a single size not exceeding 50M',
'Only xls and xlsx are supported, and the size of each device cannot exceed {size} MB',
'caseManagement.featureCase.onlyXmindTip': 'Only supports xmind, with a single size not exceeding {size}M',
'caseManagement.featureCase.checkTemplate': 'Check template',
'caseManagement.featureCase.checkImportFile': 'Check file',
'caseManagement.featureCase.selectedRecoverCase':

View File

@ -224,8 +224,8 @@ export default {
'caseManagement.featureCase.formExcelExport': '从 Excel 文件导入用例',
'caseManagement.featureCase.formXMindExport': '从 Xmind 文件导入用例',
'caseManagement.featureCase.dragOrClick': '拖拽或点击此区域选择文件',
'caseManagement.featureCase.onlyEXcelTip': '仅支持 xls/xlsx单个大小不超过 100M',
'caseManagement.featureCase.onlyXmindTip': '仅支持 xmind单个大小不超过 50M',
'caseManagement.featureCase.onlyEXcelTip': '仅支持 xls/xlsx单个大小不超过 {size}M',
'caseManagement.featureCase.onlyXmindTip': '仅支持 xmind单个大小不超过 {size}M',
'caseManagement.featureCase.checkTemplate': '校验模板',
'caseManagement.featureCase.checkImportFile': '校验文件',
'caseManagement.featureCase.selectedRecoverCase': '勾选ID相同时覆盖原用例',

View File

@ -21,10 +21,9 @@
v-model:file-list="fileList"
class="w-full"
accept="json"
:max-size="50"
size-unit="MB"
main-text="system.user.importModalDragText"
:sub-text="t('project.environmental.supportFormat')"
:sub-text="t('project.environmental.supportFormat', { size: appStore.getFileMaxSize })"
:show-file-list="false"
:auto-upload="false"
:multiple="false"
@ -73,6 +72,7 @@
import { importEnv, importGlobalParam } from '@/api/modules/project-management/envManagement';
import { useI18n } from '@/hooks/useI18n';
import useAppStore from '@/store/modules/app';
import { EnvAuthTypeEnum } from '@/enums/envEnum';
@ -87,6 +87,7 @@
}>();
const { t } = useI18n();
const appStore = useAppStore();
const visible = defineModel<boolean>('visible', { required: true, default: false });
const fileList = ref<FileItem[]>([]);

View File

@ -12,7 +12,7 @@ export default {
'project.environmental.ENVIRONMENT': '环境',
'project.environmental.ENVIRONMENT_PARAM': '全局参数',
'project.environmental.globalVariable': '参数',
'project.environmental.supportFormat': '仅支持MeterSphere导出的Json文件单个大小不超过 50M',
'project.environmental.supportFormat': '仅支持MeterSphere导出的Json文件单个大小不超过 {size}M',
'project.environmental.importTile': '注意!导入后会覆盖原全局参数',
'project.environmental.mustContain': '必含',
'project.environmental.searchParamsHolder': '通过名称/标签搜索',

View File

@ -105,7 +105,7 @@ export default {
'system.orgTemplate.expectationTip': 'Please enter expectations',
'system.orgTemplate.actualResultTip': 'Please enter actuality',
'system.orgTemplate.addAttachment': 'Add attachment',
'system.orgTemplate.addAttachmentTip': 'Support any type of file, the file size does not exceed 50MB',
'system.orgTemplate.addAttachmentTip': 'Support any type of file, the file size does not exceed {size}MB',
'system.orgTemplate.enabledSuccessfully': 'Enabled successfully',
'system.orgTemplate.thirdPartyPlatforms': 'Used to map field values for third-party platforms such as JIRA',
'system.orgTemplate.optionsIdNoRepeat': 'The option ID must be unique',

View File

@ -104,7 +104,7 @@ export default {
'system.orgTemplate.expectationTip': '请输入预期',
'system.orgTemplate.actualResultTip': '请输入实际',
'system.orgTemplate.addAttachment': '添加附件',
'system.orgTemplate.addAttachmentTip': '支持任意类型文件,文件大小不超过 50MB',
'system.orgTemplate.addAttachmentTip': '支持任意类型文件,文件大小不超过 {size}MB',
'system.orgTemplate.enabledSuccessfully': '启用成功',
'system.orgTemplate.thirdPartyPlatforms': '用于映射 JIRA 等第三方平台字段值',
'system.orgTemplate.optionsIdNoRepeat': '选项 ID 不可以重复',

View File

@ -2,7 +2,10 @@
<div>
<MsCard class="mb-[16px]" :loading="baseLoading" simple auto-height>
<div class="mb-[16px] flex justify-between">
<div class="text-[var(--color-text-000)]">{{ t('system.config.baseInfo') }}</div>
<div class="card-title">
<div class="card-title-line"></div>
<div class="card-title-text">{{ t('system.config.baseInfo') }}</div>
</div>
<a-button
v-permission="['SYSTEM_PARAMETER_SETTING_BASE:READ+UPDATE']"
type="outline"
@ -16,7 +19,10 @@
</MsCard>
<MsCard class="mb-[16px]" :loading="emailLoading" simple auto-height>
<div class="mb-[16px] flex justify-between">
<div class="text-[var(--color-text-000)]">{{ t('system.config.emailConfig') }}</div>
<div class="card-title">
<div class="card-title-line"></div>
<div class="card-title-text">{{ t('system.config.emailConfig') }}</div>
</div>
<a-button
v-permission="['SYSTEM_PARAMETER_SETTING_BASE:READ+UPDATE']"
type="outline"
@ -66,6 +72,25 @@
{{ t('system.config.email.test') }}
</a-button>
</MsCard>
<MsCard class="mb-[16px]" :loading="fileSizeLimitLoading" simple auto-height>
<div class="mb-[16px] flex justify-between">
<div class="card-title">
<div class="card-title-line"></div>
<div class="card-title-text">
{{ t('system.config.fileLimit') }}
<div class="text-[var(--color-text-4)]">(M)</div>
</div>
</div>
</div>
<a-input-number
v-model:model-value="fileSizeLimit"
class="w-[130px]"
:disabled="fileSizeLimitLoading || !hasAnyPermission(['SYSTEM_PARAMETER_SETTING_BASE:READ+UPDATE'])"
:min="0"
mode="button"
@blur="() => saveFileSizeLimitConfig()"
/>
</MsCard>
<a-modal
v-model:visible="baseInfoModalVisible"
:title="t('system.config.baseInfo.updateTitle')"
@ -211,10 +236,19 @@
import MsIcon from '@/components/pure/ms-icon-font/index.vue';
import MsFormItemSub from '@/components/business/ms-form-item-sub/index.vue';
import { getBaseInfo, getEmailInfo, saveBaseInfo, saveEmailInfo, testEmail } from '@/api/modules/setting/config';
import {
getBaseInfo,
getEmailInfo,
saveBaseInfo,
saveEmailInfo,
saveUploadConfig,
testEmail,
} from '@/api/modules/setting/config';
import { useI18n } from '@/hooks/useI18n';
import useAppStore from '@/store/modules/app';
import useLicenseStore from '@/store/modules/setting/license';
import { desensitize } from '@/utils';
import { hasAnyPermission } from '@/utils/permission';
import { validateEmail } from '@/utils/validate';
import type { EmailConfig, TestEmailParams } from '@/models/setting/config';
@ -222,6 +256,7 @@
import type { FormInstance, ValidatedError } from '@arco-design/web-vue';
const { t } = useI18n();
const appStore = useAppStore();
const baseLoading = ref(false);
const baseModalLoading = ref(false);
@ -234,6 +269,7 @@
const baseInfoDesc = ref<Description[]>([]);
//
const defaultUrl = 'https://metersphere.com';
const fileSizeLimit = ref(50);
function fillDefaultUrl() {
baseInfoForm.value.url = defaultUrl;
@ -242,7 +278,6 @@
/**
* 初始化基础信息
*/
const licenseStore = useLicenseStore();
async function initBaseInfo() {
try {
@ -265,6 +300,7 @@
},
];
}
fileSizeLimit.value = Number(res.fileMaxSize);
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
@ -502,6 +538,28 @@
}
}
const fileSizeLimitLoading = ref(false);
async function saveFileSizeLimitConfig() {
try {
fileSizeLimitLoading.value = true;
await saveUploadConfig([
{
paramKey: 'upload.file.size',
paramValue: fileSizeLimit.value.toString(),
type: 'text',
},
]);
Message.success(t('common.updateSuccess'));
appStore.setFileMaxSize(fileSizeLimit.value);
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
} finally {
fileSizeLimitLoading.value = false;
}
}
onBeforeMount(() => {
initBaseInfo();
initEmailInfo();
@ -515,4 +573,21 @@
@apply pb-0;
}
}
.card-title {
@apply flex items-center;
gap: 8px;
.card-title-line {
width: 3px;
height: 14px;
border-radius: var(--border-radius-small);
background: rgb(var(--primary-4));
}
.card-title-text {
@apply flex items-center;
gap: 2px;
color: var(--color-text-000);
}
}
</style>

View File

@ -222,4 +222,5 @@ export default {
'system.config.qrCodeConfig.appKey.required': 'App Key is empty',
'system.config.qrCodeConfig.appSecret.required': 'App Secret is empty',
'system.config.qrCodeConfig.callBack.required': 'CallBack is empty',
'system.config.fileLimit': 'File size limit',
};

View File

@ -214,4 +214,5 @@ export default {
'system.config.qrCodeConfig.appKey.required': '应用key不能为空',
'system.config.qrCodeConfig.appSecret.required': '应用密钥不能为空',
'system.config.qrCodeConfig.callBack.required': '回调域名不能为空',
'system.config.fileLimit': '文件大小限制',
};

View File

@ -69,10 +69,9 @@
<MsUpload
v-model:file-list="fileList"
accept="jar"
:max-size="50"
size-unit="MB"
main-text="system.user.importModalDragText"
:sub-text="t('system.plugin.supportFormat')"
:sub-text="t('system.plugin.supportFormat', { size: appStore.getFileMaxSize })"
:show-file-list="false"
:auto-upload="false"
:disabled="confirmLoading"
@ -126,21 +125,25 @@
import { addPlugin } from '@/api/modules/setting/pluginManger';
import { useI18n } from '@/hooks/useI18n';
import useVisit from '@/hooks/useVisit';
import useAppStore from '@/store/modules/app';
import type { FileItem, FormInstance, SelectOptionData, ValidatedError } from '@arco-design/web-vue';
const { t } = useI18n();
const visitedKey = 'doNotShowAgain';
const { getIsVisited } = useVisit(visitedKey);
const props = defineProps<{
visible: boolean;
organizeList: SelectOptionData;
}>();
const emits = defineEmits<{
(event: 'update:visible', visible: boolean): void;
(e: 'success'): void;
(e: 'brash'): void;
}>();
const props = defineProps<{
visible: boolean;
organizeList: SelectOptionData;
}>();
const { t } = useI18n();
const appStore = useAppStore();
const visitedKey = 'doNotShowAgain';
const { getIsVisited } = useVisit(visitedKey);
const pluginVisible = ref(false);
const fileName = ref<string>('');
const fileList = ref<FileItem[]>([]);

View File

@ -28,7 +28,7 @@ export default {
'system.plugin.tableColumnsJar': 'Jar packages',
'system.plugin.tableNoData': 'No data, please',
'system.plugin.pluginDescription': 'Please describe the plug-in',
'system.plugin.supportFormat': 'Only JAR format files are supported and the file size does not exceed 50M',
'system.plugin.supportFormat': 'Only JAR format files are supported and the file size does not exceed {size}M',
'system.plugin.interfaceTestDescribe': 'Plug-ins for protocol classes recommend choosing an interface test',
'system.plugin.projectMangerDescribe': 'The project management platform class recommends choosing project management',
'system.resourcePool.disablePoolConfirm': 'Confirm',

View File

@ -28,7 +28,7 @@ export default {
'system.plugin.tableColumnsJar': 'jar包',
'system.plugin.tableNoData': '暂无数据,请',
'system.plugin.pluginDescription': '请对该插件进行描述',
'system.plugin.supportFormat': '只支持JAR格式文件文件大小不超过50M',
'system.plugin.supportFormat': '只支持JAR格式文件文件大小不超过{size}M',
'system.plugin.interfaceTestDescribe': '协议类的插件建议选择接口测试',
'system.plugin.projectMangerDescribe': '项目管理平台类建议选择项目管理',
'system.plugin.deletePluginTip': '确认删除 {name} 这个插件吗?',

View File

@ -75,7 +75,7 @@ export default {
'system.user.importDownload': 'Download the template',
'system.user.importModalTip': 'User groups only support adding user groups that exist in the system',
'system.user.importModalDragText': 'Drag or click this area to select a file',
'system.user.importModalFileTip': 'Only supports xls/xlsx format files, and the file size should not exceed 50M',
'system.user.importModalFileTip': 'Only supports xls/xlsx format files, and the file size should not exceed {size}M',
'system.user.importModalCancel': 'Cancel',
'system.user.importModalConfirm': 'Import',
'system.user.importModalUploading': 'File is uploading...',

View File

@ -74,7 +74,7 @@ export default {
'system.user.importModalTip': '用户组仅支持添加系统存在的用户组',
'system.user.importDownload': '下载模板',
'system.user.importModalDragText': '拖拽或点击此区域选择文件',
'system.user.importModalFileTip': '只支持 xls/xlsx格式文件文件大小不超过 50M',
'system.user.importModalFileTip': '只支持 xls/xlsx格式文件文件大小不超过 {size}M',
'system.user.importModalCancel': '取消',
'system.user.importModalConfirm': '导入',
'system.user.importModalUploading': '文件上传中...',