diff --git a/resources/views/vcard_api.html b/resources/views/vcard_api.html
index 1cdfbed..eef7d58 100644
--- a/resources/views/vcard_api.html
+++ b/resources/views/vcard_api.html
@@ -1791,14 +1791,33 @@ function vcardApiApp() {
const r = await fetch(this.buildEndpoint());
const d = await r.json();
if (!r.ok) { this.errorMsg = d.error || `Error ${r.status}`; this.loading = false; return; }
- if (d.data && Array.isArray(d.data)) {
- this.items = d.data;
- this.total = d.total || d.data.length;
- if (this.tab === 'usuarios') { this._collectRoles(d.data); this._collectPlanes(d.data); }
+
+ // Buscar el array de datos en distintos formatos posibles
+ let dataArr = null;
+ let dataTotal = 0;
+
+ // Formato estándar paginado: { data: [...], total: N }
+ if (Array.isArray(d.data)) {
+ dataArr = d.data;
+ dataTotal = d.total || dataArr.length;
+ // Formato plano: [{...}, {...}]
} else if (Array.isArray(d)) {
- this.items = d;
- this.total = d.length;
- if (this.tab === 'usuarios') { this._collectRoles(d); this._collectPlanes(d); }
+ dataArr = d;
+ dataTotal = d.length;
+ // Formato doble anidado: { data: { data: [...], total: N } }
+ } else if (d.data && d.data.data && Array.isArray(d.data.data)) {
+ dataArr = d.data.data;
+ dataTotal = d.data.total || d.total || dataArr.length;
+ // Formato con key items: { items: [...], total: N }
+ } else if (Array.isArray(d.items)) {
+ dataArr = d.items;
+ dataTotal = d.total || dataArr.length;
+ }
+
+ if (dataArr) {
+ this.items = dataArr;
+ this.total = dataTotal;
+ if (this.tab === 'usuarios') { this._collectRoles(dataArr); this._collectPlanes(dataArr); }
} else {
this.items = [];
this.total = 0;
@@ -1998,7 +2017,7 @@ function vcardApiApp() {
const r = await fetch('/app/vcard-api/planes');
const d = await r.json();
if (Array.isArray(d)) this.planes = d;
- else if (d.data) this.planes = d.data;
+ else if (d.data && Array.isArray(d.data)) this.planes = d.data;
} catch(e) {}
},
@@ -2032,8 +2051,11 @@ function vcardApiApp() {
const id = u.id || u._id;
const r = await fetch(`/app/vcard-api/usuarios/${id}/vcards`);
const d = await r.json();
- if (d.data && Array.isArray(d.data)) this.desactivarVcardsItems = d.data;
- else if (Array.isArray(d)) this.desactivarVcardsItems = d;
+ let arr = null;
+ if (Array.isArray(d.data)) arr = d.data;
+ else if (Array.isArray(d)) arr = d;
+ else if (d.data && d.data.data && Array.isArray(d.data.data)) arr = d.data.data;
+ this.desactivarVcardsItems = arr || [];
} catch(e) { this.desactivarVcardsError = 'No se pudieron cargar las VCards: ' + e.message; }
this.desactivarVcardsLoading = false;
},
@@ -2231,8 +2253,9 @@ function vcardApiApp() {
const r = await fetch(map[section]);
const d = await r.json();
if (!r.ok) {}
- else if (d.data && Array.isArray(d.data)) { this.verSectionItems = d.data; }
+ else if (Array.isArray(d.data)) { this.verSectionItems = d.data; }
else if (Array.isArray(d)) { this.verSectionItems = d; }
+ else if (d.data && d.data.data && Array.isArray(d.data.data)) { this.verSectionItems = d.data.data; }
} catch(e) {}
this.verSectionLoading = false;
},