feat(web): botón «Campos» que muestra el nombre del campo de SAP junto a cada etiqueta y en las cabeceras de tablas (ayuda del cursor siempre)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-20 08:59:58 -05:00
1 parent 6887f9e474
commit 6ad824c6c1
19 files changed
+168 -37

No files matched your search

@@ -18,7 +18,7 @@ const text = (v: unknown): string => (v === null || v === undefined ? '' : Strin
@switch (field().type) {
@case ('checkbox') {
<sbo-checkbox-field
[label]="field().label"
[label]="field().label" [dbName]="dbName()"
[readonly]="readOnly() || !!ro()"
[value]="value() === 'tYES'"
(valueChange)="changed.emit($event ? 'tYES' : 'tNO')"
@@ -26,7 +26,7 @@ const text = (v: unknown): string => (v === null || v === undefined ? '' : Strin
}
@case ('lookup') {
<sbo-lookup-field
[label]="field().label"
[label]="field().label" [dbName]="dbName()"
[required]="required()"
[readonly]="readOnly()"
[value]="str()"
@@ -37,7 +37,7 @@ const text = (v: unknown): string => (v === null || v === undefined ? '' : Strin
}
@case ('warehouse') {
<sbo-lookup-field
[label]="field().label"
[label]="field().label" [dbName]="dbName()"
[required]="required()"
[readonly]="readOnly()"
[value]="str()"
@@ -48,7 +48,7 @@ const text = (v: unknown): string => (v === null || v === undefined ? '' : Strin
}
@case ('select') {
<sbo-select-field
[label]="field().label"
[label]="field().label" [dbName]="dbName()"
[required]="required()"
[readonly]="readOnly()"
[options]="options()"
@@ -59,7 +59,7 @@ const text = (v: unknown): string => (v === null || v === undefined ? '' : Strin
}
@case ('number') {
<sbo-number-field
[label]="field().label"
[label]="field().label" [dbName]="dbName()"
[decimals]="decimals()"
[readonly]="readOnly() || !!ro()"
[value]="num()"
@@ -67,14 +67,14 @@ const text = (v: unknown): string => (v === null || v === undefined ? '' : Strin
/>
}
@case ('date') {
<sbo-date-field [label]="field().label" [required]="required()" [readonly]="readOnly()" [value]="str()" (valueChange)="changed.emit($event)" />
<sbo-date-field [label]="field().label" [dbName]="dbName()" [required]="required()" [readonly]="readOnly()" [value]="str()" (valueChange)="changed.emit($event)" />
}
@case ('textarea') {
<sbo-textarea-field [label]="field().label" [readonly]="readOnly()" [value]="str()" (valueChange)="changed.emit($event)" />
<sbo-textarea-field [label]="field().label" [dbName]="dbName()" [readonly]="readOnly()" [value]="str()" (valueChange)="changed.emit($event)" />
}
@default {
<sbo-text-field
[label]="field().label"
[label]="field().label" [dbName]="dbName()"
[required]="required()"
[readonly]="readOnly() || !!ro()"
[value]="str()"
@@ -102,6 +102,10 @@ export class MasterField {
return f.type === 'lookup' && f.lookup.valueType === 'number' && /^\d+$/.test(code.trim()) ? Number(code) : code;
}
/** El texto del campo; una fecha de SAP llega como `2031-10-31T00:00:00Z` y el selector de fecha pide `yyyy-MM-dd`. */
protected readonly dbName = computed(() => {
const f = this.field();
return 'key' in f ? f.key : undefined;
});
protected readonly str = computed(() => (this.field().type === 'date' ? text(this.value()).slice(0, 10) : text(this.value())));
protected readonly num = computed(() => (this.value() === '' || this.value() === null || this.value() === undefined ? null : Number(this.value())));
protected readonly required = computed(() => {