try to fix manifest issues and create responsive app
Browse files- app/main.py +73 -42
- assets/web/manifest.json +6 -4
app/main.py
CHANGED
|
@@ -251,11 +251,31 @@ def main(page: ft.Page):
|
|
| 251 |
page.views.append(
|
| 252 |
ft.View("/", [
|
| 253 |
ft.AppBar(title=ft.Text("MAKERSPACE"), bgcolor="#1a1c1e"),
|
| 254 |
-
ft.
|
| 255 |
-
ft.
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 259 |
])
|
| 260 |
)
|
| 261 |
|
|
@@ -264,8 +284,8 @@ def main(page: ft.Page):
|
|
| 264 |
opciones_hora = [ft.dropdown.Option(f"{h:02d}:00") for h in range(8, 16)]
|
| 265 |
|
| 266 |
nombre = ft.TextField(label="Nombre del solicitante", expand=True, prefix_icon=ft.Icons.PERSON)
|
| 267 |
-
h_ext = ft.Dropdown(label="Hora Salida", options=opciones_hora, value="08:00", expand=
|
| 268 |
-
h_dev = ft.Dropdown(label="Devolución", options=opciones_hora, value="15:00", expand=
|
| 269 |
|
| 270 |
st_txt = ft.Text("", weight="bold")
|
| 271 |
lista_historial = ft.ListView(expand=True, spacing=10)
|
|
@@ -274,7 +294,7 @@ def main(page: ft.Page):
|
|
| 274 |
container_items = ft.Column(spacing=10)
|
| 275 |
|
| 276 |
def crear_fila_item():
|
| 277 |
-
return ft.
|
| 278 |
ft.Dropdown(
|
| 279 |
label="Categoría",
|
| 280 |
options=[
|
|
@@ -282,16 +302,18 @@ def main(page: ft.Page):
|
|
| 282 |
ft.dropdown.Option("Dispositivos Eléctricos")
|
| 283 |
],
|
| 284 |
value="Herramientas",
|
| 285 |
-
|
| 286 |
),
|
| 287 |
-
ft.TextField(label="Descripción",
|
| 288 |
-
ft.
|
| 289 |
-
|
| 290 |
-
|
|
|
|
|
|
|
| 291 |
|
| 292 |
def eliminar_fila(e):
|
| 293 |
if len(container_items.controls) > 1:
|
| 294 |
-
container_items.controls.remove(e.control.parent)
|
| 295 |
page.update()
|
| 296 |
|
| 297 |
def agregar_fila(e):
|
|
@@ -335,7 +357,7 @@ def main(page: ft.Page):
|
|
| 335 |
for fila in container_items.controls:
|
| 336 |
cat = fila.controls[0].value
|
| 337 |
txt = fila.controls[1].value
|
| 338 |
-
ct = fila.controls[2].value
|
| 339 |
if txt:
|
| 340 |
items_solicitados.append(f"• [{cat}] {txt} (x{ct})")
|
| 341 |
|
|
@@ -378,33 +400,42 @@ def main(page: ft.Page):
|
|
| 378 |
page.views.append(
|
| 379 |
ft.View("/prestamos", [
|
| 380 |
ft.AppBar(title=ft.Text("Préstamos"), bgcolor="#1a1c1e"),
|
| 381 |
-
ft.
|
| 382 |
-
ft.
|
| 383 |
-
ft.
|
| 384 |
-
|
| 385 |
-
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
|
| 407 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 408 |
])
|
| 409 |
)
|
| 410 |
|
|
|
|
| 251 |
page.views.append(
|
| 252 |
ft.View("/", [
|
| 253 |
ft.AppBar(title=ft.Text("MAKERSPACE"), bgcolor="#1a1c1e"),
|
| 254 |
+
ft.Container(
|
| 255 |
+
content=ft.Column([
|
| 256 |
+
ft.Text("PANEL DE CONTROL", size=24, weight="bold", text_align=ft.TextAlign.CENTER),
|
| 257 |
+
ft.ResponsiveRow([
|
| 258 |
+
ft.ElevatedButton(
|
| 259 |
+
"GITLAB REPOS",
|
| 260 |
+
icon=ft.Icons.FOLDER,
|
| 261 |
+
on_click=lambda _: page.go("/repos"),
|
| 262 |
+
height=80,
|
| 263 |
+
col={"sm": 12, "md": 6}
|
| 264 |
+
),
|
| 265 |
+
ft.ElevatedButton(
|
| 266 |
+
"SISTEMA PRÉSTAMOS",
|
| 267 |
+
icon=ft.Icons.BUILD,
|
| 268 |
+
on_click=lambda _: page.go("/prestamos"),
|
| 269 |
+
height=80,
|
| 270 |
+
bgcolor=ft.Colors.BLUE_800,
|
| 271 |
+
col={"sm": 12, "md": 6}
|
| 272 |
+
),
|
| 273 |
+
], spacing=20, alignment=ft.MainAxisAlignment.CENTER),
|
| 274 |
+
], spacing=30, horizontal_alignment=ft.CrossAxisAlignment.CENTER),
|
| 275 |
+
padding=20,
|
| 276 |
+
alignment=ft.alignment.top_center,
|
| 277 |
+
expand=True
|
| 278 |
+
)
|
| 279 |
])
|
| 280 |
)
|
| 281 |
|
|
|
|
| 284 |
opciones_hora = [ft.dropdown.Option(f"{h:02d}:00") for h in range(8, 16)]
|
| 285 |
|
| 286 |
nombre = ft.TextField(label="Nombre del solicitante", expand=True, prefix_icon=ft.Icons.PERSON)
|
| 287 |
+
h_ext = ft.Dropdown(label="Hora Salida", options=opciones_hora, value="08:00", expand=True)
|
| 288 |
+
h_dev = ft.Dropdown(label="Devolución", options=opciones_hora, value="15:00", expand=True)
|
| 289 |
|
| 290 |
st_txt = ft.Text("", weight="bold")
|
| 291 |
lista_historial = ft.ListView(expand=True, spacing=10)
|
|
|
|
| 294 |
container_items = ft.Column(spacing=10)
|
| 295 |
|
| 296 |
def crear_fila_item():
|
| 297 |
+
return ft.ResponsiveRow([
|
| 298 |
ft.Dropdown(
|
| 299 |
label="Categoría",
|
| 300 |
options=[
|
|
|
|
| 302 |
ft.dropdown.Option("Dispositivos Eléctricos")
|
| 303 |
],
|
| 304 |
value="Herramientas",
|
| 305 |
+
col={"sm": 12, "md": 3}
|
| 306 |
),
|
| 307 |
+
ft.TextField(label="Descripción", col={"sm": 12, "md": 6}),
|
| 308 |
+
ft.Row([
|
| 309 |
+
ft.TextField(label="Cant.", value="1", width=70, text_align=ft.TextAlign.CENTER),
|
| 310 |
+
ft.IconButton(ft.Icons.DELETE_OUTLINE, icon_color="red", on_click=lambda e: eliminar_fila(e))
|
| 311 |
+
], col={"sm": 12, "md": 3}, alignment=ft.MainAxisAlignment.END)
|
| 312 |
+
], alignment=ft.MainAxisAlignment.START, vertical_alignment=ft.CrossAxisAlignment.CENTER)
|
| 313 |
|
| 314 |
def eliminar_fila(e):
|
| 315 |
if len(container_items.controls) > 1:
|
| 316 |
+
container_items.controls.remove(e.control.parent.parent)
|
| 317 |
page.update()
|
| 318 |
|
| 319 |
def agregar_fila(e):
|
|
|
|
| 357 |
for fila in container_items.controls:
|
| 358 |
cat = fila.controls[0].value
|
| 359 |
txt = fila.controls[1].value
|
| 360 |
+
ct = fila.controls[2].controls[0].value
|
| 361 |
if txt:
|
| 362 |
items_solicitados.append(f"• [{cat}] {txt} (x{ct})")
|
| 363 |
|
|
|
|
| 400 |
page.views.append(
|
| 401 |
ft.View("/prestamos", [
|
| 402 |
ft.AppBar(title=ft.Text("Préstamos"), bgcolor="#1a1c1e"),
|
| 403 |
+
ft.Container(
|
| 404 |
+
content=ft.Column([
|
| 405 |
+
ft.Row([
|
| 406 |
+
ft.Text("SOLICITAR PRÉSTAMO", size=18, weight="bold"),
|
| 407 |
+
ft.ElevatedButton("🔔 ALERTAS", icon=ft.Icons.NOTIFICATIONS_ACTIVE,
|
| 408 |
+
on_click=pedir_permiso_notif, bgcolor=ft.Colors.BLUE_GREY_900)
|
| 409 |
+
], alignment=ft.MainAxisAlignment.SPACE_BETWEEN),
|
| 410 |
+
|
| 411 |
+
nombre,
|
| 412 |
+
ft.ResponsiveRow([
|
| 413 |
+
ft.Container(h_ext, col={"sm": 6, "md": 6}),
|
| 414 |
+
ft.Container(h_dev, col={"sm": 6, "md": 6}),
|
| 415 |
+
], spacing=10),
|
| 416 |
+
|
| 417 |
+
ft.Divider(),
|
| 418 |
+
ft.Row([
|
| 419 |
+
ft.Text("LISTA DE HERRAMIENTAS", size=14, weight="bold"),
|
| 420 |
+
ft.IconButton(ft.Icons.ADD_CIRCLE, icon_color="green", on_click=agregar_fila)
|
| 421 |
+
], alignment=ft.MainAxisAlignment.SPACE_BETWEEN),
|
| 422 |
+
|
| 423 |
+
container_items,
|
| 424 |
+
|
| 425 |
+
ft.ElevatedButton("ENVIAR SOLICITUD TOTAL", icon=ft.Icons.SEND, on_click=registrar,
|
| 426 |
+
bgcolor=ft.Colors.GREEN_800, color="white", height=50, width=float("inf")),
|
| 427 |
+
|
| 428 |
+
st_txt,
|
| 429 |
+
ft.Divider(),
|
| 430 |
+
ft.Text("HISTORIAL RECIENTE", size=18, weight="bold"),
|
| 431 |
+
lista_historial,
|
| 432 |
+
ft.TextButton("Volver", on_click=lambda _: page.go("/"))
|
| 433 |
+
], spacing=15),
|
| 434 |
+
padding=20,
|
| 435 |
+
max_width=800,
|
| 436 |
+
alignment=ft.alignment.top_center,
|
| 437 |
+
expand=True
|
| 438 |
+
)
|
| 439 |
])
|
| 440 |
)
|
| 441 |
|
assets/web/manifest.json
CHANGED
|
@@ -3,14 +3,16 @@
|
|
| 3 |
"short_name": "makerspace",
|
| 4 |
"icons": [
|
| 5 |
{
|
| 6 |
-
"src": "icon192x192.png",
|
| 7 |
"sizes": "192x192",
|
| 8 |
-
"type": "image/png"
|
|
|
|
| 9 |
},
|
| 10 |
{
|
| 11 |
-
"src": "icon-512x512.png",
|
| 12 |
"sizes": "512x512",
|
| 13 |
-
"type": "image/png"
|
|
|
|
| 14 |
}
|
| 15 |
],
|
| 16 |
"theme_color": "#1a1c1e",
|
|
|
|
| 3 |
"short_name": "makerspace",
|
| 4 |
"icons": [
|
| 5 |
{
|
| 6 |
+
"src": "../icon192x192.png",
|
| 7 |
"sizes": "192x192",
|
| 8 |
+
"type": "image/png",
|
| 9 |
+
"purpose": "any maskable"
|
| 10 |
},
|
| 11 |
{
|
| 12 |
+
"src": "../icon-512x512.png",
|
| 13 |
"sizes": "512x512",
|
| 14 |
+
"type": "image/png",
|
| 15 |
+
"purpose": "any maskable"
|
| 16 |
}
|
| 17 |
],
|
| 18 |
"theme_color": "#1a1c1e",
|