@aplus-frontend/ui
Version:
507 lines (506 loc) • 15.4 kB
JavaScript
import { defineComponent as je, useSlots as He, ref as c, computed as n, unref as o, toRef as _e, 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 L, mergeProps as z, createSlots as ne, withCtx as w, renderList as se, createBlock as ue, resolveDynamicComponent as Ue, renderSlot as v, normalizeProps as qe, guardReactiveProps as Me } from "vue";
import { Divider as Ge, Table as Je } from "@aplus-frontend/antdv";
import { useToken as Qe } from "@aplus-frontend/antdv/es/theme/internal";
import { isUndefined as g, omit as de, isBoolean as Xe } from "lodash-unified";
import "../scroll-bar/index.mjs";
import { getValidVNodeList as Ye } from "../utils/slot.mjs";
import { useDevWarning as Ze } from "../utils/warning.mjs";
import { ApForm as er } from "../ap-form/index.mjs";
import "../config-provider/index.mjs";
import { getScrollbarSize as rr } from "../utils/index.mjs";
import "./components/paragraph-ellipsis/index.vue.mjs";
import "./components/setting/modal/index.vue.mjs";
import { noRenderAsFormItemValueList as ie } from "./constants.mjs";
import { useProvideApTable as or } from "./context.mjs";
import { useStickyScroll as tr } from "./hooks/use-sticky-scroll.mjs";
import ar from "./hooks/use-table-content-height.mjs";
import { useTablePaging as lr } from "./hooks/use-table-paging-ng.mjs";
import nr from "./hooks/use-table-row-selection.mjs";
import sr from "./style/index.mjs";
import { getColumnOrder as ce, updateFormProps as ur, getFieldProps as dr, getSearchFormItemRenderNode as ir, recursionApColumns as pe, getTableTitle as cr, getTableRenderType as pr, getTableRenderProps as fr, getTableCellRenderNode as mr, apColumnToColumn as gr, falseToUndefined as br, objectToString as yr } from "./utils.mjs";
import { useNamespace as Sr } from "../config-provider/hooks/use-namespace.mjs";
import { useGlobalConfig as hr } from "../config-provider/hooks/use-global-config.mjs";
import { isDef as fe } from "../utils/is.mjs";
import wr from "./components/paragraph-ellipsis/index.vue2.mjs";
import vr from "./components/setting/modal/index.vue2.mjs";
import Rr from "../scroll-bar/index.vue.mjs";
const Qr = /* @__PURE__ */ je({
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: {},
rowHoverable: {
type: Boolean
},
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: {
default: void 0
}
},
setup(me, {
expose: ge
}) {
const r = me;
let K = 0;
const b = He(), [, be] = Qe();
Ze("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
} = Sr("ap-table"), he = sr("ap-table"), W = hr("valueTypeMap"), {
height: we,
contentRef: ve
} = ar(), D = c(), $ = c(), {
isStickyMode: j,
scrollBarRef: R
} = tr(D), C = c(r.size), s = c([]), H = c([]), _ = rr(), P = c(!0), U = n(() => (K++, r.columns?.filter((e) => !e.hideInSearch && e.dataIndex && (e.valueType || e.customRenderFormItem) && !ie.includes(e.valueType))?.sort((e, a) => {
let t = ce(e.order);
return ce(a.order) - t;
})?.map((e) => {
const a = ur(e, dr(e.fieldProps, {})), t = {
...e,
fieldProps: {
label: e.title,
name: e.dataIndex,
// tips: 在表格中的查询表单项默认是带边框的
bordered: !0,
...a || {},
_signal: K
},
renderNode: void 0
};
return t.renderNode = ir(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), xe = n(() => fe(r.manual) ? r.manual : Ye(b.searchFormExtra?.() || []).some((a) => a.type?.name === "ApView")), {
rowSelection: T,
selectedRows: x,
...F
} = nr({
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: Fe,
getColumnSFConfig: G,
sortedInfo: Be,
filteredInfo: ke,
setPaging: ze,
getPaging: Ie,
submitWith: J,
getLastParams: Pe
} = lr({
async request(e) {
if (!T.value.preserveSelectedRowKeys && g(r.dataSource) && !P.value && F.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: _e(r, "params"),
defaultData: r.defaultData,
manual: o(xe),
formatParams: r.beforeSearchSubmit,
pagination: r.pagination
});
or({
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,
getLastParams: Pe
});
const Ne = () => {
let e = r.columns?.filter((t) => !t.hideInTable) || [];
function a(t, u) {
return t.map((l) => ({
resizable: fe(l.resizable) ? l.resizable : r.columnResizable,
...de(gr(l), ["ellipsis"]),
// tips: 此函数内部依赖查询&筛选的相应式值
...G(l),
fixed: u ? u.fixed : l.fixed,
title: cr(l, O("table-header", "title"), b.headerCell, o(be).colorTextTertiary),
customRender({
value: S,
...h
}) {
const oe = pr(l), We = fr({
...l,
valueType: oe
}, {
value: S,
...h
}), De = mr(oe, We, h.record, o(W)), te = l.renderText?.({
value: S,
...h
}) || S, $e = l.renderText ? p(ae, null, [l.renderText?.({
value: S,
...h
})]) : De;
let A = Ke(l, te, $e);
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);
}, Ve = () => {
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 = Ne();
s.value = e, H.value = e;
}, {
deep: !0,
immediate: !0
}), B(() => [Be.value, ke.value], () => {
Ve();
}, {
deep: !0
});
const Ae = 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;
}), Ee = 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
} : br(r.rowSelection),
loading: g(r.loading) ? e.loading : r.loading,
pagination: r.pagination === !1 ? !1 : e.pagination,
scroll: o(Ae)
};
}), Le = 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 (ie.includes(e.valueType))
return t;
const u = yr(a);
return e.copyable || e.ellipsis ? p(wr, {
copyable: e.copyable,
rawValue: u,
ellipsis: e.ellipsis ? Xe(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) => {
Fe(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 Oe() {
return o(s);
}
return ge({
submit: () => N(),
reset: () => V(),
refresh: () => M(),
submitWith: () => J(),
setSearchFormValues: X,
getSearchFormValues: Y,
setPaging: ze,
getPaging: Ie,
getShownColumns: Oe,
dataSource: n(() => o(y).records),
rowSelection: {
selectedRows: n(() => o(x)),
...F
},
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(Le.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(er).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(Ue(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), L("div", {
ref_key: "contentRef",
ref: ve,
class: m([o(I)("table-wrapper"), e.card ? o(I)("table-wrapper-card") : null]),
style: E(e.tableWrapperStyle)
}, [L("div", {
class: m(o(d)("header-wrapper"))
}, [e.settings ? (f(), k("div", {
key: 0,
class: m(o(d)("header"))
}, [L("div", {
class: m(o(O)("header", "title"))
}, [v(e.$slots, "title", z({
selectedRows: o(x),
selectedRowKeys: o(T).selectedRowKeys,
shownColumns: s.value
}, F))], 2), b.title ? (f(), ue(o(Ge), {
key: 0,
type: "vertical"
})) : le("", !0), p(vr, {
config: e.settings
}, null, 8, ["config"])], 2)) : v(e.$slots, "title", z({
key: 1,
selectedRows: o(x),
selectedRowKeys: o(T).selectedRowKeys,
shownColumns: s.value
}, F))], 2), p(o(Je), z({
ref_key: "antdTableRef",
ref: $,
class: o(d)("table")
}, Q.value, {
size: C.value,
"table-layout": Ee.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(x)
})]),
_: 2
}, [o(j) ? {
name: "bottomPaginationTop",
fn: w(() => [p(o(Rr), {
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(de)(b, ["title", "searchFormExtra", "headerCell", "summary"]), (t, u) => ({
name: u,
fn: w((l) => [v(e.$slots, u, qe(Me(l || {})))])
}))]), 1040, ["class", "size", "table-layout", "columns"])], 6)], 6));
}
});
export {
Qr as default
};