Se implementó la funcionalidad para abrir archivos seleccionados desde el editor de esquemas, añadiendo un botón "Abrir" que permite al usuario abrir archivos con la aplicación predeterminada del sistema. Se desarrolló una nueva ruta API `/api/open-file` para manejar la apertura de archivos, con soporte multiplataforma para Windows, macOS y Linux. Además, se realizaron mejoras en la interfaz de usuario para habilitar el botón "Abrir" solo cuando se selecciona un archivo. Se actualizó la documentación en `MemoriaDeEvolucion.md` para reflejar estos cambios.
This commit is contained in:
parent
4d1de71990
commit
3b3cfd7062
|
@ -58,3 +58,13 @@ El sistema está diseñado para trabajar con directorios específicos donde los
|
||||||
- Documentación inicial del sistema ParamManagerScripts
|
- Documentación inicial del sistema ParamManagerScripts
|
||||||
- Descripción de la arquitectura y funcionalidades principales
|
- Descripción de la arquitectura y funcionalidades principales
|
||||||
- Establecimiento de la estructura de memoria de evolución
|
- Establecimiento de la estructura de memoria de evolución
|
||||||
|
|
||||||
|
### [2024-12-19] - Implementación de Campos de Tipo Archivo
|
||||||
|
- **Nueva funcionalidad**: Agregado soporte para campos de tipo "Archivo" en el editor de esquemas
|
||||||
|
- **Selección de archivos**: Implementado diálogo de selección de archivos con `tkinter.filedialog.askopenfilename`
|
||||||
|
- **Botón "Abrir"**: Agregado botón adicional para abrir archivos seleccionados con la aplicación predeterminada del sistema
|
||||||
|
- **Compatibilidad multiplataforma**: Soporte para Windows (`os.startfile`), macOS (`open`) y Linux (`xdg-open`)
|
||||||
|
- **Validaciones**: Verificación de existencia y tipo de archivo antes de intentar abrirlo
|
||||||
|
- **Integración UI**: Botón "Abrir" se habilita automáticamente cuando se selecciona un archivo
|
||||||
|
- **Endpoints API**: Nuevas rutas `/api/browse-files` y `/api/open-file` para manejo de archivos
|
||||||
|
- **Casos de uso**: Ideal para archivos Excel, Markdown, documentos y cualquier tipo de archivo que requiera apertura rápida
|
||||||
|
|
38
data/log.txt
38
data/log.txt
|
@ -1,19 +1,19 @@
|
||||||
[16:52:51] Iniciando ejecución de x3_excel_to_md.py en C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens...
|
[17:10:45] Iniciando ejecución de x3_excel_to_md.py en C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens...
|
||||||
[16:52:52] === Conversión de archivos Excel a Markdown ===
|
[17:10:46] === Conversión de archivos Excel a Markdown ===
|
||||||
[16:52:52] 1. Convirtiendo Excel de tags de TIA Portal...
|
[17:10:46] 1. Convirtiendo Excel de tags de TIA Portal...
|
||||||
[16:52:52] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
[17:10:46] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
||||||
[16:52:52] Configuración de paths cargada desde: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\io_paths_config.json
|
[17:10:46] Configuración de paths cargada desde: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\io_paths_config.json
|
||||||
[16:52:52] Buscando archivos Excel en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags
|
[17:10:46] Buscando archivos Excel en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags
|
||||||
[16:52:52] Archivo Excel encontrado automáticamente: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx
|
[17:10:46] Archivo Excel encontrado automáticamente: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx
|
||||||
[16:52:52] Procesando archivo Excel: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx...
|
[17:10:46] Procesando archivo Excel: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx...
|
||||||
[16:52:52] Paths configurados para procesar: ['Inputs', 'Outputs', 'OutputsFesto', 'IO Not in Hardware\\InputsMaster', 'IO Not in Hardware\\OutputsMaster']
|
[17:10:46] Paths configurados para procesar: ['Inputs', 'Outputs', 'OutputsFesto', 'IO Not in Hardware\\InputsMaster', 'IO Not in Hardware\\OutputsMaster']
|
||||||
[16:52:53] ¡Éxito! Archivo Markdown generado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\Resultados\Master IO Tags.md
|
[17:10:47] ¡Éxito! Archivo Markdown generado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\Resultados\Master IO Tags.md
|
||||||
[16:52:53] ==================================================
|
[17:10:47] ==================================================
|
||||||
[16:52:53] 2. Convirtiendo Excel de IO desde esquema eléctrico...
|
[17:10:47] 2. Convirtiendo Excel de IO desde esquema eléctrico...
|
||||||
[16:52:53] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
[17:10:47] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
||||||
[16:52:53] Procesando archivo Excel de IO: C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/IO.xlsx...
|
[17:10:47] Procesando archivo Excel de IO: C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/IO.xlsx...
|
||||||
[16:52:53] Columnas encontradas en el Excel: ['Unnamed: 0', 'Unnamed: 1', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4', 'Unnamed: 5']
|
[17:10:47] Columnas encontradas en el Excel: ['Master TAG', 'IO', 'Sensor', 'Descripcion', 'Descripcion.1']
|
||||||
[16:52:53] ¡Éxito! Archivo Markdown de IO generado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\Resultados\Hardware_ED.md
|
[17:10:47] ¡Éxito! Archivo Markdown de IO generado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\Resultados\Hardware_ED.md
|
||||||
[16:52:53] === Proceso completado ===
|
[17:10:47] === Proceso completado ===
|
||||||
[16:52:53] Ejecución de x3_excel_to_md.py finalizada (success). Duración: 0:00:01.794236.
|
[17:10:47] Ejecución de x3_excel_to_md.py finalizada (success). Duración: 0:00:01.379917.
|
||||||
[16:52:53] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\IO_adaptation\.log\log_x3_excel_to_md.txt
|
[17:10:47] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\IO_adaptation\.log\log_x3_excel_to_md.txt
|
||||||
|
|
|
@ -406,6 +406,13 @@ function generateInputField(def, key, value, level) {
|
||||||
data-key="${key}">
|
data-key="${key}">
|
||||||
Buscar...
|
Buscar...
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button"
|
||||||
|
onclick="openFieldFile(this)"
|
||||||
|
class="bg-green-500 text-white px-3 py-1 rounded hover:bg-green-600"
|
||||||
|
data-key="${key}"
|
||||||
|
${!value ? 'disabled' : ''}>
|
||||||
|
Abrir
|
||||||
|
</button>
|
||||||
</div>`;
|
</div>`;
|
||||||
}
|
}
|
||||||
if (def.enum) {
|
if (def.enum) {
|
||||||
|
@ -467,6 +474,12 @@ async function browseFieldFile(button) {
|
||||||
bubbles: true
|
bubbles: true
|
||||||
});
|
});
|
||||||
input.dispatchEvent(event);
|
input.dispatchEvent(event);
|
||||||
|
|
||||||
|
// Habilitar el botón "Abrir" después de seleccionar un archivo
|
||||||
|
const openButton = button.parentElement.querySelector('button[onclick="openFieldFile(this)"]');
|
||||||
|
if (openButton) {
|
||||||
|
openButton.disabled = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error browsing file:', error);
|
console.error('Error browsing file:', error);
|
||||||
|
@ -474,6 +487,35 @@ async function browseFieldFile(button) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Agregar función para abrir el archivo seleccionado
|
||||||
|
async function openFieldFile(button) {
|
||||||
|
const input = button.parentElement.querySelector('input');
|
||||||
|
const filePath = input.value;
|
||||||
|
|
||||||
|
if (!filePath || filePath.trim() === '') {
|
||||||
|
alert('No hay archivo seleccionado para abrir');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/open-file', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ path: filePath })
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
if (result.status === 'success') {
|
||||||
|
console.log('Archivo abierto correctamente');
|
||||||
|
} else {
|
||||||
|
alert(`Error al abrir el archivo: ${result.message}`);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error opening file:', error);
|
||||||
|
alert('Error al abrir el archivo');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function modifySchema(level) {
|
async function modifySchema(level) {
|
||||||
try {
|
try {
|
||||||
console.log('Loading schema for level:', level); // Debug line
|
console.log('Loading schema for level:', level); // Debug line
|
||||||
|
|
Loading…
Reference in New Issue