85 lines
3.6 KiB
HTML
85 lines
3.6 KiB
HTML
<div class="guest-container" *ngIf="nc()">
|
|
<div class="logo flex gap-1 center">
|
|
<img src="logo.png" alt="Logo" style="width: 48px; height: 48px;">
|
|
<div style="font-size: 2rem;">
|
|
<span>Suma</span><span style="color: var(--brand-primary);font-weight: 800;">Q</span>
|
|
</div>
|
|
</div>
|
|
|
|
<h1 class="pt-2">Resolución de No Conformidad</h1>
|
|
|
|
<div class="nc-details-card">
|
|
<div class="field">
|
|
<label>Descripción del Hallazgo</label>
|
|
<p class="value">{{ nc().description }}</p>
|
|
</div>
|
|
<div class="field">
|
|
<label>Nivel</label>
|
|
<span class="value">{{ nc().level }}</span>
|
|
</div>
|
|
<div class="field">
|
|
<label>Tipo de no Conformidad</label>
|
|
<span class="value">{{ nc().nc_type }}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="action-section">
|
|
<h2>Reporte de Acciones</h2>
|
|
|
|
<div class="form-group">
|
|
<label>Descripción de las acciones tomadas</label>
|
|
<textarea [(ngModel)]="actionsText" rows="5"
|
|
placeholder="Describa cómo se resolvió el hallazgo..."></textarea>
|
|
</div>
|
|
|
|
<div class="evidence-section">
|
|
<label>Sustento Visual (Fotos/Documentos)</label>
|
|
<div class="upload-controls">
|
|
<button type="button" class="upload-btn" (click)="fileInput.click()">
|
|
<lucide-icon [img]="FileText" size="18"></lucide-icon>
|
|
Adjuntar Archivos
|
|
</button>
|
|
<input type="file" #fileInput hidden (change)="onFileSelected($event)" multiple
|
|
accept="image/*,.pdf,.doc,.docx">
|
|
</div>
|
|
|
|
<div class="selected-previews" *ngIf="selectedFiles().length > 0">
|
|
<div class="preview-item" *ngFor="let item of selectedFiles(); let i = index">
|
|
<img [src]="item.previewUrl" *ngIf="item.file.type.startsWith('image/')">
|
|
<div class="file-icon-placeholder" *ngIf="!item.file.type.startsWith('image/')">
|
|
<lucide-icon [img]="FileText" size="32"></lucide-icon>
|
|
<span>{{ item.file.name }}</span>
|
|
</div>
|
|
<textarea [(ngModel)]="item.description" placeholder="Nota sobre este archivo..."></textarea>
|
|
<button type="button" class="remove-btn" (click)="removeFile(i)">
|
|
<lucide-icon [img]="Trash2" size="14"></lucide-icon>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="current-evidences" *ngIf="nc().evidences?.length">
|
|
<label>Evidencias registradas</label>
|
|
<div class="evidence-grid">
|
|
<div class="evidence-item" *ngFor="let ev of nc().evidences">
|
|
<img [src]="apiUrl +'/'+ ev.file_path" *ngIf="ev.media_type?.startsWith('image/')">
|
|
<div class="file-link" *ngIf="!ev.media_type?.startsWith('image/')">
|
|
<lucide-icon [img]="FileText" size="20"></lucide-icon>
|
|
<a [href]="apiUrl + '/' + ev.file_path" target="_blank">Ver Documento</a>
|
|
</div>
|
|
<p class="ev-desc">{{ ev.description }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="actions">
|
|
<button class="gold-button" (click)="submit()" [disabled]="loading()">
|
|
{{ loading() ? 'Enviando...' : 'Enviar Reporte Final' }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="guest-container" *ngIf="!nc() && !loading()">
|
|
<h1>Enlace no válido o expirado</h1>
|
|
</div> |