@aplus-frontend/ui
Version:
503 lines (502 loc) • 15.3 kB
JavaScript
import { defineComponent as $e, useSlots as je, ref as c, computed as n, unref as o, toRef as He, createVNode as p, Fragment as ae, watch as B, createElementBlock as k, openBlock as f, normalizeStyle as E, normalizeClass as m, createCommentVNode as le, createElementVNode as K, mergeProps as z, createSlots as ne, withCtx as w, renderList as se, createBlock as ue, resolveDynamicComponent as _e, renderSlot as v, normalizeProps as Ue, guardReactiveProps as qe } from "vue";
import { Divider as Me, Table as Ge } from "@aplus-frontend/antdv";
import { useToken as Je } from "@aplus-frontend/antdv/es/theme/internal";
import { ApForm as Qe } from "../ap-form/index.mjs";
import { noRenderAsFormItemValueList as de } from "./constants.mjs";
import "../config-provider/index.mjs";
import { useTablePaging as Xe } from "./hooks/use-table-paging-ng.mjs";
import { isUndefined as g, omit as ie, isBoolean as Ye } from "lodash-unified";
import { getColumnOrder as ce, updateFormProps as Ze, getFieldProps as er, getSearchFormItemRenderNode as rr, recursionApColumns as pe, getTableTitle as or, getTableRenderType as tr, getTableRenderProps as ar, getTableCellRenderNode as lr, apColumnToColumn as nr, falseToUndefined as sr, objectToString as ur } from "./utils.mjs";
import dr from "./hooks/use-table-content-height.mjs";
import ir from "./hooks/use-table-row-selection.mjs";
import { getScrollbarSize as cr } from "../utils/index.mjs";
import "./components/setting/modal/index.vue.mjs";
import "./components/paragraph-ellipsis/index.vue.mjs";
import { useProvideApTable as pr } from "./context.mjs";
import "../scroll-bar/index.mjs";
import { useStickyScroll as fr } from "./hooks/use-sticky-scroll.mjs";
import { getValidVNodeList as mr } from "../utils/slot.mjs";
import { useDevWarning as gr } from "../utils/warning.mjs";
import br from "./style/index.mjs";
import { useNamespace as yr } from "../config-provider/hooks/use-namespace.mjs";
import { useGlobalConfig as Sr } from "../config-provider/hooks/use-global-config.mjs";
import { isDef as fe } from "../utils/is.mjs";
import hr from "./components/paragraph-ellipsis/index.vue2.mjs";
import wr from "./components/setting/modal/index.vue2.mjs";
import vr from "../scroll-bar/index.vue.mjs";
const Jr = /* @__PURE__ */ $e({
name: "ApTable",
__name: "ap-table",
props: {
dropdownPrefixCls: {},
loading: {
type: [Boolean, Object],
default: void 0
},
bordered: {
type: Boolean,
default: !1
},
locale: {},
onChange: {},
onResizeColumn: {},
getPopupContainer: {},
scroll: {},
sortDirections: {
default: () => ["ascend", "descend"]
},
showSorterTooltip: {
type: [Boolean, Object],
default: !1
},
prefixCls: {},
rowKey: {
type: [String, Function],
default: "key"
},
tableLayout: {},
rowClassName: {},
title: {},
footer: {},
id: {},
showHeader: {
type: Boolean,
default: !0
},
components: {},
customRow: {},
customHeaderRow: {},
direction: {},
expandFixed: {
type: [String, Boolean],
default: !1
},
expandColumnWidth: {},
expandedRowKeys: {},
defaultExpandedRowKeys: {},
expandedRowRender: {},
expandRowByClick: {
type: Boolean,
default: !1
},
expandIcon: {},
onExpand: {},
onExpandedRowsChange: {},
defaultExpandAllRows: {
type: Boolean,
default: !1
},
indentSize: {
default: 15
},
expandIconColumnIndex: {},
showExpandColumn: {
type: Boolean,
default: !0
},
expandedRowClassName: {},
childrenColumnName: {
default: "children"
},
rowExpandable: {},
sticky: {
type: [Boolean, Object]
},
transformCellText: {},
columns: {},
rowSelection: {
type: [Boolean, Object]
},
card: {
type: Boolean,
default: !1
},
params: {},
searchFormRender: {},
request: {},
onLoad: {},
defaultData: {},
dataSource: {},
onLoadingChange: {},
searchForm: {
type: [Boolean, Object],
default: void 0
},
beforeSearchSubmit: {},
pagination: {
type: [Boolean, Object],
default: void 0
},
searchFormWrapperStyle: {},
tableWrapperStyle: {},
manual: {
type: Boolean,
default: void 0
},
size: {
default: "small"
},
adaptive: {
type: Boolean,
default: !1
},
columnResizable: {
type: Boolean,
default: !1
},
settings: {
type: [Boolean, Object],
default: void 0
}
},
setup(me, {
expose: ge
}) {
const r = me;
let L = 0;
const b = je(), [, be] = Je();
gr("ApTable")(!1, "breaking", "ApTable has been EOL, Please use AgGrid(https://aplus.aplnk.com/aplus-ui/components/ag-grid/) instead.");
const {
e: I,
b: d,
be: O,
m: ye,
cssVar: Se
} = yr("ap-table"), he = br("ap-table"), W = Sr("valueTypeMap"), {
height: we,
contentRef: ve
} = dr(), D = c(), $ = c(), {
isStickyMode: j,
scrollBarRef: R
} = fr(D), C = c(r.size), s = c([]), H = c([]), _ = cr(), P = c(!0), U = n(() => (L++, r.columns?.filter((e) => !e.hideInSearch && e.dataIndex && (e.valueType || e.customRenderFormItem) && !de.includes(e.valueType))?.sort((e, a) => {
let t = ce(e.order);
return ce(a.order) - t;
})?.map((e) => {
const a = Ze(e, er(e.fieldProps, {})), t = {
...e,
fieldProps: {
label: e.title,
name: e.dataIndex,
// tips: 在表格中的查询表单项默认是带边框的
bordered: !0,
...a || {},
_signal: L
},
renderNode: void 0
};
return t.renderNode = rr(t, o(W)), t;
}) || [])), Re = n(() => pe(o(s), (e) => {
if (e.sorter === !0)
return e.key || e?.dataIndex;
}).filter(Boolean)), Ce = n(() => pe(o(s), (e) => {
if (e.filters && !e.onFilter)
return e.key || e?.dataIndex;
}).filter(Boolean)), Te = n(() => g(r.dataSource) ? y.records : r.dataSource), Fe = n(() => fe(r.manual) ? r.manual : mr(b.searchFormExtra?.() || []).some((a) => a.type?.name === "ApView")), {
rowSelection: T,
selectedRows: F,
...x
} = ir({
fixed: !0,
...r.rowSelection === !0 ? {} : r.rowSelection,
rowKey: r.rowKey,
dataSource: Te
}), {
formRef: i,
submit: N,
reset: V,
tableProps: q,
refresh: M,
data: y,
setDataSource: xe,
getColumnSFConfig: G,
sortedInfo: Be,
filteredInfo: ke,
setPaging: ze,
getPaging: Ie,
submitWith: J
} = Xe({
async request(e) {
if (!T.value.preserveSelectedRowKeys && g(r.dataSource) && !P.value && x.clearAll(), P.value && (P.value = !1), !g(r.dataSource))
return {
data: r.dataSource || [],
total: r.dataSource.length || 0
};
const a = await r.request?.(e);
return r.onLoad?.(a?.data || []), {
data: a?.data || [],
total: a?.total || 0
};
},
filterFields: Ce,
sortFields: Re,
params: He(r, "params"),
defaultData: r.defaultData,
manual: o(Fe),
formatParams: r.beforeSearchSubmit,
pagination: r.pagination
});
pr({
columns: n(() => s.value),
columnsBackup: n(() => H.value),
size: n(() => C.value),
updateColumns(e) {
s.value = e;
},
updateSize(e) {
C.value = e;
},
dataSource: n(() => o(y).records),
getSearchFormValues: Y,
setSearchFormValues: X,
submit: N,
submitWith: J,
reset: V,
refresh: M,
getSearchFormSorterItems: Z,
setSearchFormSorterItems: ee,
resetSearchFormSorterItems: re
});
const Pe = () => {
let e = r.columns?.filter((t) => !t.hideInTable) || [];
function a(t, u) {
return t.map((l) => ({
resizable: fe(l.resizable) ? l.resizable : r.columnResizable,
...ie(nr(l), ["ellipsis"]),
// tips: 此函数内部依赖查询&筛选的相应式值
...G(l),
fixed: u ? u.fixed : l.fixed,
title: or(l, O("table-header", "title"), b.headerCell, o(be).colorTextTertiary),
customRender({
value: S,
...h
}) {
const oe = tr(l), Oe = ar({
...l,
valueType: oe
}, {
value: S,
...h
}), We = lr(oe, Oe, h.record, o(W)), te = l.renderText?.({
value: S,
...h
}) || S, De = l.renderText ? p(ae, null, [l.renderText?.({
value: S,
...h
})]) : We;
let A = Ke(l, te, De);
return l.customRender && (A = l.customRender({
value: S,
...h,
column: l,
originalNode: A,
originalText: te
})), A;
},
children: a(l.children || [], u || l)
}));
}
return a(e);
}, Ne = () => {
function e(a) {
for (const t of a)
t.children?.length ? e(t.children) : G(t, !0);
}
e(s.value);
};
B(() => [r.columns, r.columnResizable], () => {
const e = Pe();
s.value = e, H.value = e;
}, {
deep: !0,
immediate: !0
}), B(() => [Be.value, ke.value], () => {
Ne();
}, {
deep: !0
});
const Ve = n(() => {
if (r.adaptive && (y.total > 0 || r.dataSource?.length))
return {
y: o(we),
x: r.scroll?.x || "100%"
};
if (r.scroll)
return r.scroll;
}), Ae = n(() => {
if (r.tableLayout)
return r.tableLayout;
if (r.columns?.some((e) => e.ellipsis))
return "fixed";
}), Q = n(() => {
const e = o(q), a = o(T);
return {
...r,
...e,
rowSelection: r.rowSelection === !0 || r.rowSelection?.mode === "internal" ? {
...a,
// tips 如果是前端分页,则默认会走缓存
preserveSelectedRowKeys: g(r.dataSource) ? a.preserveSelectedRowKeys : !0
} : sr(r.rowSelection),
loading: g(r.loading) ? e.loading : r.loading,
pagination: r.pagination === !1 ? !1 : e.pagination,
scroll: o(Ve)
};
}), Ee = n(() => [d(), r.card ? null : d("wrapper"), r.adaptive ? d("adaptive") : null, j.value && R.value?.visible ? ye(`sticky-${_ === 0 ? "absolute" : "relative"}`) : null, he.value].filter(Boolean));
function Ke(e, a, t) {
if (de.includes(e.valueType))
return t;
const u = ur(a);
return e.copyable || e.ellipsis ? p(hr, {
copyable: e.copyable,
rawValue: u,
ellipsis: e.ellipsis ? Ye(e.ellipsis) ? {
tooltip: t,
rows: 1
} : {
...e.ellipsis,
tooltip: t
} : !1,
content: t
}, null) : t;
}
B(() => o(y).loading, (e) => {
r.onLoadingChange?.(e);
}), B(() => r.dataSource, (e) => {
xe(e);
}, {
immediate: !0
});
function X(e) {
i.value?.apForm?.setFieldsValue?.(e);
}
function Y(e = !1) {
const a = e ? "getFieldsValueTransformed" : "getFieldsValue";
return i.value?.apForm?.[a]?.(!0);
}
function Z() {
return i.value?.getSorterItems() || [];
}
function ee(e) {
i.value?.setSorterItems(e);
}
function re() {
i.value?.resetSorterItems();
}
function Le() {
return o(s);
}
return ge({
submit: () => N(),
reset: () => V(),
refresh: () => M(),
submitWith: () => J(),
setSearchFormValues: X,
getSearchFormValues: Y,
setPaging: ze,
getPaging: Ie,
getShownColumns: Le,
dataSource: n(() => o(y).records),
rowSelection: {
selectedRows: n(() => o(F)),
...x
},
scrollBar: {
x: {
getCurrentScroll: () => R?.value?.currentScroll ?? 0,
scroll: (e) => R?.value?.scroll?.(e)
},
y: void 0
},
getSearchFormSorterItems: Z,
setSearchFormSorterItems: ee,
resetSearchFormSorterItems: re
}), (e, a) => (f(), k("div", {
ref_key: "tableWrapperRef",
ref: D,
class: m(Ee.value),
style: E(o(Se)({
"scroll-bar-width": `${o(_)}px`
}))
}, [o(g)(e.dataSource) && e.searchForm !== !1 && U.value.length > 0 ? (f(), k("div", {
key: 0,
class: m(e.card ? o(I)("search-wrapper") : null),
style: E(e.searchFormWrapperStyle)
}, [p(o(Qe).SearchForm, z(e.searchForm || {}, {
ref_key: "formRef",
ref: i,
"custom-reset": "",
"submit-loading": o(q).loading,
onSubmit: o(N),
onReset: o(V)
}), ne({
default: w(() => [(f(!0), k(ae, null, se(U.value, (t) => (f(), ue(_e(t.renderNode), {
key: t.dataIndex
}))), 128))]),
_: 2
}, [b.searchFormExtra ? {
name: "extra",
fn: w(() => [v(e.$slots, "searchFormExtra")]),
key: "0"
} : void 0]), 1040, ["submit-loading", "onSubmit", "onReset"])], 6)) : le("", !0), K("div", {
ref_key: "contentRef",
ref: ve,
class: m([o(I)("table-wrapper"), e.card ? o(I)("table-wrapper-card") : null]),
style: E(e.tableWrapperStyle)
}, [K("div", {
class: m(o(d)("header-wrapper"))
}, [e.settings ? (f(), k("div", {
key: 0,
class: m(o(d)("header"))
}, [K("div", {
class: m(o(O)("header", "title"))
}, [v(e.$slots, "title", z({
selectedRows: o(F),
selectedRowKeys: o(T).selectedRowKeys,
shownColumns: s.value
}, x))], 2), b.title ? (f(), ue(o(Me), {
key: 0,
type: "vertical"
})) : le("", !0), p(wr, {
config: e.settings === !0 ? {} : e.settings
}, null, 8, ["config"])], 2)) : v(e.$slots, "title", z({
key: 1,
selectedRows: o(F),
selectedRowKeys: o(T).selectedRowKeys,
shownColumns: s.value
}, x))], 2), p(o(Ge), z({
ref_key: "antdTableRef",
ref: $,
class: o(d)("table")
}, Q.value, {
size: C.value,
"table-layout": Ae.value,
columns: s.value,
onResizeColumn: a[0] || (a[0] = (t, u) => u.width = t)
}), ne({
summary: w(() => [v(e.$slots, "summary", {
columns: s.value,
records: Q.value.dataSource,
selectedRows: o(F)
})]),
_: 2
}, [o(j) ? {
name: "bottomPaginationTop",
fn: w(() => [p(o(vr), {
ref_key: "scrollBarRef",
ref: R,
"scroll-container": $.value?.table?.scrollBodyRef,
direction: "horizontal",
"bar-color": "var(--scrollbar-thumb-color-base)",
"track-color": "var(--table-header-bg, #f2f6f9)",
"extra-size": C.value === "middle" ? 13 : 10
}, null, 8, ["scroll-container", "extra-size"])]),
key: "0"
} : void 0, se(o(ie)(b, ["title", "searchFormExtra", "headerCell", "summary"]), (t, u) => ({
name: u,
fn: w((l) => [v(e.$slots, u, Ue(qe(l || {})))])
}))]), 1040, ["class", "size", "table-layout", "columns"])], 6)], 6));
}
});
export {
Jr as default
};