From: Aleksey Filippov Date: Wed, 1 Apr 2026 06:39:53 +0000 (+0300) Subject: feat(ERP-280): клиентская валидация суммарного размера файлов (лимит 2.5 ГБ) X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=f5be52a562e9eb5d603347d75d397d5b9586e770;p=erp24_rep%2Fyii-erp24%2F.git feat(ERP-280): клиентская валидация суммарного размера файлов (лимит 2.5 ГБ) Предотвращает отправку формы списания, если суммарный размер вложений превышает 2.5 ГБ. Показывает пользователю фактический и допустимый размер. --- diff --git a/erp24/web/js/validate/validateForm.js b/erp24/web/js/validate/validateForm.js index b491028d..d873c3c1 100755 --- a/erp24/web/js/validate/validateForm.js +++ b/erp24/web/js/validate/validateForm.js @@ -104,6 +104,32 @@ function validateFileCache(yiiform) { return errors; } +// --- Проверка суммарного размера всех файлов (лимит 2 ГБ) --- +var MAX_TOTAL_FILE_SIZE = 2.5 * 1024 * 1024 * 1024; // 2.5 ГБ + +function validateTotalFileSize(yiiform) { + var totalSize = 0; + yiiform.find('input[type="file"]').each(function () { + var cached = fileCache.get(this); + if (cached && cached.length > 0) { + for (var i = 0; i < cached.length; i++) { + totalSize += cached[i].size; + } + } else if (this.files && this.files.length > 0) { + for (var i = 0; i < this.files.length; i++) { + totalSize += this.files[i].size; + } + } + }); + + if (totalSize > MAX_TOTAL_FILE_SIZE) { + var totalMb = (totalSize / 1024 / 1024).toFixed(0); + var limitMb = (MAX_TOTAL_FILE_SIZE / 1024 / 1024).toFixed(0); + return ['Суммарный размер файлов (' + totalMb + ' МБ) превышает допустимый лимит ' + limitMb + ' МБ. Уменьшите количество или размер файлов.']; + } + return []; +} + // --- Отправка формы через XHR + FormData (файлы из кэша, не с диска) --- function submitFormWithXHR(yiiform) { // [10] Если идёт кэширование — ждём и повторяем @@ -402,14 +428,16 @@ $(document).on('click', '.form-validate .submitter', function (e) { alert(allErrors.join('\n')); } else { - // Проверяем кэш файлов и отправляем через XHR + // Проверяем кэш файлов и суммарный размер, затем отправляем через XHR var cacheErrors = validateFileCache(yiiform); - if (cacheErrors.length > 0) { + var sizeErrors = validateTotalFileSize(yiiform); + var preSubmitErrors = cacheErrors.concat(sizeErrors); + if (preSubmitErrors.length > 0) { if (!errors['__common']) errors = {'__common': []}; errors['__common'] = errors['__common'] || []; - errors['__common'] = errors['__common'].concat(cacheErrors); + errors['__common'] = errors['__common'].concat(preSubmitErrors); renderErrors(errors); - alert(cacheErrors.join('\n')); + alert(preSubmitErrors.join('\n')); } else { submitFormWithXHR(yiiform); }