@aplus-frontend/ui
Version:
174 lines (173 loc) • 4.83 kB
JavaScript
import { ref as v, nextTick as I, unref as a, onMounted as ee, computed as b, createVNode as S } from "vue";
import { parseFieldValue as te, dataIndexToStr as ae, isEqualCustom as re } from "../utils.mjs";
import { isArray as R, isEqualWith as oe } from "lodash-unified";
import "../../config-provider/index.mjs";
import { useTableSortedAndFiltered as ne } from "./use-sorted-filtered.mjs";
import { useLocale as se } from "../../config-provider/hooks/use-locale.mjs";
import { useNamespace as le } from "../../config-provider/hooks/use-namespace.mjs";
const me = ({
manual: j = !1,
defaultCurrent: q = 1,
defaultPageSize: x = 10,
request: B,
defaultParams: K = {},
defaultData: M = [],
formatParams: P,
paramsValueTypeMap: z,
resetFieldsIgnores: C,
filterFields: N,
sortFields: _,
showLessItems: T = !1,
showTotal: $ = !0,
pagination: f = !0
}) => {
let F = 0, s = {};
const k = (e) => P ? P(e) : e, c = v(), u = v(f ? q : void 0), d = v(f ? x : void 0), {
getColumnSFConfig: J,
setSF: L,
clearAll: Q
} = ne(), {
t: g
} = se(), {
b: m
} = le("ap-table"), o = v({
total: 0,
records: M,
loading: !1
}), V = async (e) => {
const t = k(e), r = Date.now();
F = r, o.value.loading = !0;
try {
const n = await B({
...K,
...t
});
F === r && (o.value.total = n.total || n.data?.length || 0, o.value.records = [...n.data || []]);
} catch {
F === r && (o.value.records = [], o.value.total = 0);
} finally {
o.value.loading = !1;
}
}, y = (e) => {
const t = {};
return Object.entries(e).forEach(([r, n]) => {
if (t[r] = n, z && n) {
const i = z[r];
i && (t[r] = te(i, n));
}
}), t;
}, W = async (e) => {
const t = c.value?.apForm?.getFieldsValueTransformed(!0) || {}, r = {};
Object.entries(t).forEach(([n, i]) => {
C && C.indexOf(n) > -1 && (r[n] = i);
}), await c.value?.apForm?.resetFields(), c.value?.apForm?.setFieldsValue?.(r), I(() => {
e?.();
});
}, h = (e) => {
s = e;
const t = y(e);
V(t);
}, G = (e) => {
h({
...s,
...e
});
}, w = () => {
const e = c.value?.apForm?.getFieldsValueTransformed(!0) || {};
f && (u.value = 1), h({
...e,
filter: s.filter,
sort: s.sort,
current: f ? 1 : void 0,
pageSize: f ? s.pageSize || x : void 0
});
}, H = () => {
Q(), s.sort = {}, s.filter = {}, W(w);
}, A = () => {
h(s);
}, U = (e) => {
if (!f)
A();
else {
const t = a(u), r = a(d), n = a(o).total - e, i = Math.ceil(n / r), p = t > i ? i : t;
G({
current: p > 0 ? p : 1
});
}
}, D = (e, t, r) => {
const n = c.value?.apForm?.getFieldsValueTransformed(!0) || {};
u.value = e.current, d.value = e.pageSize, L(t, r);
const i = R(r) ? [...r] : [r], p = {};
for (const l of i)
a(_)?.includes(l.columnKey || l.field) && l.order && (p[ae(l.columnKey || l.field)] = l.order);
const E = {};
for (const l of Object.keys(t))
a(N)?.includes(l) && t[l] && (E[l] = t[l]);
const O = {
...n,
filter: E,
sort: p,
current: e.current,
pageSize: e.pageSize
};
oe(s, O, re) || h(O);
};
ee(() => {
const e = c.value?.apForm?.getFieldsValueTransformed(!0) || {};
if (s = {
current: a(u),
pageSize: a(d),
filter: {},
sort: {},
...e
}, !j) {
const t = y(s);
V(t);
}
});
const X = b(() => a(o).total === 0 ? "-" : `${a(u.value)}/${Math.ceil(a(o).total / a(d))}`);
function Y(e) {
R(e) && (o.value.records = e, o.value.total = e.length);
}
const Z = b(() => ({
loading: a(o).loading,
pagination: {
current: a(u),
pageSize: a(d),
total: a(o).total,
showSizeChanger: !T,
showQuickJumper: !T,
showLessItems: T,
size: "default",
showTotal: $ ? (e) => S("span", {
class: m("pagination-total-wrapper")
}, [g("ap.apTable.pagination.totalLeftPrefix"), " ", S("span", {
class: m("pagination-count-text")
}, [e]), " ", g("ap.apTable.pagination.totalLeftSuffix"), S("span", {
class: m("pagination--total-right")
}, [g("ap.apTable.pagination.totalRightPrefix"), " ", S("span", {
class: m("pagination-count-text")
}, [a(X)]), " ", g("ap.apTable.pagination.totalRightSuffix")])]) : void 0
},
onChange: D,
dataSource: a(o).records
}));
return {
formRef: c,
submit: w,
reset: H,
refresh: A,
refreshByDelete: U,
data: o,
current: u,
pageSize: d,
handleTableChange: D,
tableProps: Z,
dataSource: b(() => a(o).records),
setDataSource: Y,
getColumnSFConfig: J
};
};
export {
me as useTablePaging
};