]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
feat(ERP-280): клиентская валидация суммарного размера файлов (лимит 2.5 ГБ) origin/feature_filippov_ERP-280_reduce_cleanup_period
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Wed, 1 Apr 2026 06:39:53 +0000 (09:39 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Wed, 1 Apr 2026 06:39:53 +0000 (09:39 +0300)
Предотвращает отправку формы списания, если суммарный размер вложений
превышает 2.5 ГБ. Показывает пользователю фактический и допустимый размер.

erp24/web/js/validate/validateForm.js

index b491028da4be014e71fcd19f2120bd3c0d82a6d6..d873c3c1b8bb87f896509d711bd217aeb3423afb 100755 (executable)
@@ -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);
                 }