import { onMounted } from "vue"; import { watch } from "vue"; import { onScopeDispose } from "vue"; import { ref } from "vue"; import { apiCacheKey } from "~/lib/auth.js"; import { apiCacheVersion } from "~/lib/auth.js"; import { useApi } from "~/lib/auth.js"; import { writeApiCache } from "~/lib/auth.js"; import { readApiCache } from "~/lib/auth.js"; import { clearApiCache } from "~/lib/auth.js"; function u(u, d = {}) { let f = useApi(), p = d.identity ?? (typeof f.identity == `function` ? () => f.identity() : void 0), m = d.retainOnRefreshError !== !1, h = ref([]), g = ref(0), _ = ref(!1), v = ref(``), y = ref(!1), b = ref(1), x = ref(d.limit ?? 10), S = 0, C = ``, w = !0, T = !1, E = null; function D() { (S++, (h.value = []), (g.value = 0), (_.value = !1), (v.value = ``), (y.value = !1), (C = ``), (E = null), (w = !1)); } (p && watch( p, () => { (clearApiCache(), D()); }, { flush: `sync`, }, ), onScopeDispose(() => { ((T = !0), S++, (E = null)); })); function O(e) { if (d.rowKey) return d.rowKey(e); if ( e && typeof e == `object` && `id` in e && (typeof e.id == `string` || typeof e.id == `number`) ) return e.id; } function k() { if (T) return Promise.resolve(); let e, t, n = p?.(); try { ((e = { page: b.value, limit: x.value, ...(d.params?.() ?? {}), }), (t = apiCacheKey( u, e, typeof d.snapshotKey == `function` ? d.snapshotKey() : d.snapshotKey, ))); } catch (e) { return ( D(), (v.value = e instanceof Error ? e.message : `查询条件无效`), Promise.resolve() ); } if (E?.query === t && E.identity === n) return E.promise; let r = ++S, o = () => !T && r === S && (!p || p() === n); ((_.value = !0), (v.value = ``)); let l = y.value && t === C, k = p ? readApiCache(n, t) : void 0, A = apiCacheVersion(); (l || ((h.value = []), (g.value = 0), (y.value = !1)), w && k && ((h.value = k.list), (g.value = k.count), (y.value = !0), (C = t), (l = !0)), (w = !1)); let j = (async () => { try { let r = d.loader ? await d.loader(e) : await f.get(u, e); if (!o()) return; let i = new Map( h.value.flatMap((e) => { let t = O(e); return t === void 0 ? [] : [[t, e]]; }), ); ((h.value = (r.list ?? []).map((e) => { let t = O(e), n = t === void 0 ? void 0 : i.get(t); if (!n || typeof n != `object` || typeof e != `object` || !e) return e; let r = n; for (let t of Object.keys(r)) Object.prototype.hasOwnProperty.call(e, t) || delete r[t]; return (Object.assign(r, e), n); })), (g.value = r.count ?? 0), (y.value = !0), (C = t), p && writeApiCache( n, t, { list: h.value, count: g.value, }, A, )); } catch (e) { if (!o()) return; ((v.value = e instanceof Error ? e.message : `加载失败`), (!m || !l) && ((h.value = []), (g.value = 0), (y.value = !1))); } finally { (o() && (_.value = !1), r === S && (E = null)); } })(); return ( o() && _.value && (E = { query: t, identity: n, promise: j, }), j ); } function A(e) { ((b.value = e.page + 1), (x.value = e.rows), k()); } function j() { ((b.value = 1), k()); } return ( d.immediate !== !1 && onMounted(k), { list: h, total: g, loading: _, error: v, hasResult: y, page: b, limit: x, load: k, onPage: A, reload: j, } ); } export { u as t };