From f5be52a562e9eb5d603347d75d397d5b9586e770 Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Wed, 1 Apr 2026 09:39:53 +0300 Subject: [PATCH] =?utf8?q?feat(ERP-280):=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD?= =?utf8?q?=D1=82=D1=81=D0=BA=D0=B0=D1=8F=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4?= =?utf8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=D1=83=D0=BC=D0=BC=D0=B0=D1=80?= =?utf8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80?= =?utf8?q?=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20(=D0=BB=D0=B8?= =?utf8?q?=D0=BC=D0=B8=D1=82=202.5=20=D0=93=D0=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Предотвращает отправку формы списания, если суммарный размер вложений превышает 2.5 ГБ. Показывает пользователю фактический и допустимый размер. --- erp24/web/js/validate/validateForm.js | 36 ++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) 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); } -- 2.39.5