vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
84 lines (83 loc) • 2.58 kB
JavaScript
import { reactive as f, toRefs as x, computed as H, provide as S, onMounted as p, nextTick as u, watchEffect as y, onBeforeUnmount as C } from "vue";
import { Utils as m } from "@vuux/utils";
const k = (c, r, h, b) => {
const i = f({
//表格设置
columns: c.columns,
//表格数据
tableData: [],
//数据是否转换完毕
isFormat: !0,
//选中的数据
selectData: [],
//是否固定头部
isFixedHead: !1,
//模态框状态
model: !1,
//配置了多少项
columnCount: c.columns.length
}), { tableData: g, isFixedHead: v } = x(i), D = H(() => [c.border ? "is-border" : "", c.stripe ? "is-stripe" : ""].filter(Boolean)), s = (t, l = null) => t ? t.map((e) => {
const a = f({
data: e,
id: e.id,
level: l ? l.level + 1 : 1,
children: [],
parent: l,
open: !1,
select: !1,
indeterminate: !1
});
return e.children && e.children.length && (a.children = s(e.children, a)), a;
}) : [], w = (t) => {
for (; t?.parent; ) {
const l = t.parent;
l.select = l.children.every((e) => e.select), l.indeterminate = !l.select && l.children.some((e) => e.select || e.indeterminate), t = l;
}
}, d = (t) => {
if (t.children?.length)
for (let l = 0; l < t.children.length; l++) {
const e = t.children[l];
e.select = t.select, e.indeterminate = t.indeterminate, d(e);
}
}, o = (t) => {
const l = [], e = (a) => {
if (a.select && l.push(a.data), a.children)
for (let n = 0; n < a.children.length; n++)
e(a.children[n]);
};
for (let a = 0; a < t.length; a++)
e(t[a]);
b("select", l);
};
S("tableContext", {
selectAll: (t) => {
const l = (e, a) => {
if (e.select = a, e.indeterminate = !1, e.children?.length)
for (let n = 0; n < e.children.length; n++)
l(e.children[n], a);
};
for (let e = 0; e < i.tableData.length; e++)
l(i.tableData[e], t);
o(i.tableData);
},
select: async (t, l) => {
t.select = l, t.indeterminate = !1, await u(), w(t), d(t), o(i.tableData);
}
}), p(async () => {
await u(), i.tableData = s(c.data), i.isFormat = !1, await m.wait(500), h.value && r.value && (i.isFixedHead = h.value.clientHeight > r.value.clientHeight);
});
const F = y(() => {
m.isEmpty(c.data) ? i.tableData = [] : i.tableData = s(c.data);
});
return C(() => {
F();
}), {
state: i,
tableData: g,
isFixedHead: v,
classNames: D
};
};
export {
k as useTable
};