feat(web): value-help reutilizable (lista de valores) con selección única o múltiple
- sbo-value-help: búsqueda por columna con contains(), columnas declarativas (texto, número, importe, fecha, format a medida), paginación del servidor con total, baseFilter/orderby, Esc/Enter, errores con reintento. - Selección única (un clic confirma) o múltiple (casillas, seleccionar página, Confirmar (n)). Mejoras sobre el sistema anterior: lo marcado se conserva entre páginas, el filtro base va entre paréntesis (un "or" ya no rompe la precedencia) y las comillas del texto buscado se escapan. - Cambiar la columna elegida no consulta hasta pulsar Buscar. - Peticiones con httpResource: las obsoletas se cancelan solas. - Helpers reutilizables: core/sl/odata (escape, contains, combinar filtros) y core/format (importes y fechas sin desfase de zona horaria). - Verificado en Chrome contra SAP real (253 clientes, 1209 artículos): búsqueda por Nombre, paginación, selección múltiple entre páginas y tema oscuro. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4c8c499a72
commit
3d5a81e806
10 files changed
+962
No files matched your search
@@ -39,3 +39,37 @@ Tokens: `--app --shell --shell-ink --shell-quiet --win --panel --line --line-sof
|
||||
- `core/menu`: `MenuService` carga `GET /api/user/menu` una vez por sesión; el menú visible sale de `MENU` (`@basic-erp/sap-types`) filtrado por permisos.
|
||||
- `app.routes.ts` genera una ruta por pantalla del menú; las que aún no existen muestran "no disponible" (`ComingSoonPage`). Para construir una pantalla, se reemplaza su `loadComponent`.
|
||||
- Un 401 en cualquier llamada cierra la sesión local y lleva al login recordando la ruta (`?returnUrl=`, solo rutas internas).
|
||||
|
||||
## Componentes compartidos (`src/app/shared`)
|
||||
|
||||
### `sbo-value-help` — lista de valores ("elegir de la lista")
|
||||
|
||||
Búsqueda por columna sobre un recurso del proxy `/api/sl`, selección única o múltiple y paginación del servidor.
|
||||
|
||||
```html
|
||||
<sbo-value-help
|
||||
[open]="open()"
|
||||
title="Socios de negocio"
|
||||
resource="BusinessPartners"
|
||||
[columns]="columns"
|
||||
baseFilter="CardType eq 'cCustomer'"
|
||||
orderby="CardCode"
|
||||
selection="single"
|
||||
(selected)="onPick($event)"
|
||||
(closed)="open.set(false)" />
|
||||
```
|
||||
|
||||
```ts
|
||||
columns: VhColumn[] = [
|
||||
{ key: 'CardCode', title: 'Código', width: '130px', mono: true },
|
||||
{ key: 'CardName', title: 'Nombre' },
|
||||
{ key: 'CurrentAccountBalance', title: 'Saldo', type: 'currency' },
|
||||
];
|
||||
```
|
||||
|
||||
- Agregar una columna = una entrada en `columns`; el `$select` se deriva de ahí.
|
||||
- Columna activa de búsqueda: clic en el encabezado (solo columnas de texto, o `searchable: true`). Se aplica al pulsar **Buscar**/Enter con `contains()`, combinada con `baseFilter` entre paréntesis y con las comillas escapadas.
|
||||
- `selection="single"`: un clic en la fila confirma y cierra. `selection="multiple"`: casillas, "seleccionar página" y **Confirmar (n)**; lo marcado se conserva al cambiar de página (`[initialSelection]` precarga filas).
|
||||
- `type`: `text` (defecto), `number`, `currency` (2 decimales), `date` (dd/MM/yyyy); `format: (row) => string` para algo a medida.
|
||||
- Teclado: Enter en la búsqueda, Enter sobre una fila, Esc para cerrar.
|
||||
- Cada apertura reinicia búsqueda, página y selección. Las peticiones obsoletas se cancelan solas (`httpResource`).
|
||||
Reference in new issue
Block a user