Disegno Tecnico: BMP convertiti in PNG nel browser, errore upload nel riquadro. Refs #107
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -504,6 +504,7 @@
|
||||
|
||||
{% block extra_js %}
|
||||
<script src="{{ url_for('static', filename='js/image-crop.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/image_to_png.js') }}"></script>{# #107 #}
|
||||
<script>
|
||||
// #56: stringhe e percorsi per il ritaglio prima dell'upload
|
||||
ImageCrop.configure({
|
||||
@@ -686,6 +687,13 @@ function recipeEditor() {
|
||||
async uploadFile(file) {
|
||||
if (!file) return;
|
||||
|
||||
// #107: BMP e simili (leggibili dal browser, non dal backend) diventano PNG prima dei controlli
|
||||
file = await tmfImageToPng(file);
|
||||
if (!file) {
|
||||
this.errorMessage = {{ _("Formato immagine non leggibile. Usa PNG, JPG o PDF.")|tojson }};
|
||||
return;
|
||||
}
|
||||
|
||||
// Validate file type
|
||||
const allowed = ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'application/pdf'];
|
||||
if (!allowed.includes(file.type)) {
|
||||
|
||||
@@ -879,6 +879,8 @@
|
||||
@change="uploadTaskFile(task.id, $event.target.files[0], task); $event.target.value = ''">
|
||||
</label>
|
||||
</template>
|
||||
<!-- #107: errore di caricamento anche dentro il riquadro, non solo nel banner in cima -->
|
||||
<p x-show="uploadErrorTask === task.id && errorMessage" x-text="errorMessage" class="text-xs text-red-600 dark:text-red-400 mt-2"></p>
|
||||
</div>
|
||||
|
||||
<!-- Task Directive / Description (read-only display) -->
|
||||
@@ -1484,6 +1486,7 @@
|
||||
<script>if(typeof pdfjsLib!=='undefined')pdfjsLib.GlobalWorkerOptions.workerSrc='{{ url_for('static', filename='vendor/pdf.worker-3.11.174.min.js') }}';</script>
|
||||
<script src="{{ url_for('static', filename='js/annotation-viewer.js') }}?v=6"></script>
|
||||
<script src="{{ url_for('static', filename='js/image-crop.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/image_to_png.js') }}"></script>{# #107 #}
|
||||
<script>
|
||||
// #56: stringhe e percorsi per il ritaglio prima dell'upload
|
||||
ImageCrop.configure({
|
||||
@@ -1530,6 +1533,7 @@ function taskEditor() {
|
||||
showAddTask: false,
|
||||
saving: false,
|
||||
errorMessage: '',
|
||||
uploadErrorTask: null, // #107: id del task il cui upload e' fallito (errore mostrato nel riquadro Disegno Tecnico)
|
||||
successMessage: '',
|
||||
|
||||
// ---- Task CRUD state ----
|
||||
@@ -2415,14 +2419,24 @@ function taskEditor() {
|
||||
async uploadTaskFile(taskId, file, task) {
|
||||
if (!file) return;
|
||||
|
||||
// #107: BMP e simili (leggibili dal browser, non dal backend) diventano PNG prima dei controlli
|
||||
file = await tmfImageToPng(file);
|
||||
if (!file) {
|
||||
this.errorMessage = {{ _("Formato immagine non leggibile. Usa PNG, JPG o PDF.")|tojson }};
|
||||
this.uploadErrorTask = taskId;
|
||||
return;
|
||||
}
|
||||
|
||||
const allowedTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/webp', 'application/pdf'];
|
||||
if (!allowedTypes.includes(file.type)) {
|
||||
this.errorMessage = {{ _("Formato file non supportato. Usa PNG, JPG o PDF.")|tojson }};
|
||||
this.uploadErrorTask = taskId; // #107
|
||||
return;
|
||||
}
|
||||
|
||||
if (file.size > 20 * 1024 * 1024) {
|
||||
this.errorMessage = {{ _("File troppo grande. Dimensione massima: 20MB.")|tojson }};
|
||||
this.uploadErrorTask = taskId; // #107
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2432,6 +2446,7 @@ function taskEditor() {
|
||||
|
||||
this.saving = true;
|
||||
this.errorMessage = '';
|
||||
this.uploadErrorTask = null; // #107: nuovo tentativo, azzera l'errore del riquadro
|
||||
|
||||
try {
|
||||
// 1. Upload file
|
||||
@@ -2448,6 +2463,7 @@ function taskEditor() {
|
||||
const uploadData = await uploadResp.json();
|
||||
if (uploadData.error) {
|
||||
this.errorMessage = uploadData.detail || {{ _("Errore durante il caricamento del file")|tojson }};
|
||||
this.uploadErrorTask = taskId; // #107
|
||||
this.saving = false;
|
||||
return;
|
||||
}
|
||||
@@ -2472,6 +2488,7 @@ function taskEditor() {
|
||||
const updateData = await updateResp.json();
|
||||
if (updateData.error) {
|
||||
this.errorMessage = updateData.detail || {{ _("Errore nel salvataggio del task")|tojson }};
|
||||
this.uploadErrorTask = taskId; // #107
|
||||
this.saving = false;
|
||||
return;
|
||||
}
|
||||
@@ -2487,6 +2504,7 @@ function taskEditor() {
|
||||
} catch (err) {
|
||||
console.error('uploadTaskFile error:', err);
|
||||
this.errorMessage = {{ _("Errore di connessione al server")|tojson }};
|
||||
this.uploadErrorTask = taskId; // #107
|
||||
}
|
||||
|
||||
this.saving = false;
|
||||
|
||||
Reference in New Issue
Block a user