Skip to content

Commit bf0506c

Browse files
committed
!317 feat(table): columns.customSlot属性新增function类型
* chore: renderFunction replace to render component * feat(table): columns.customSlot属性新增function类型 #I9J6B0
1 parent 8b13aa0 commit bf0506c

File tree

6 files changed

+46
-42
lines changed

6 files changed

+46
-42
lines changed

docs/document-component/src/document/zh-CN/components/table.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ export default {
10221022
| -------------------- | ------------------------------ | ------------------------------ | ------- | --------------------------- | -------- |
10231023
| title | 列标题 | -- | -- | -- | -- |
10241024
| key | 数据字段 | -- | -- | -- | -- |
1025-
| customSlot | 自定义插槽 | -- | -- | -- | -- |
1025+
| customSlot | 自定义插槽 | `string` `function` 参数{row, data, column, rowIndex, columnIndex} | -- | -- | `2.17.2`新增`function` |
10261026
| width | 宽度 | -- | -- | -- | -- |
10271027
| minWidth | 最小宽度 | -- | `100px` | -- | -- |
10281028
| sort | 排序 | -- | -- | -- | -- |
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { defineComponent, VNodeTypes, Slots } from "vue";
2+
3+
import type { PropType } from "vue";
4+
5+
type RenderFunc = (props: Record<string, unknown>) => VNodeTypes;
6+
7+
export default defineComponent({
8+
name: "LayRender",
9+
props: {
10+
render: {
11+
type: [String, Function] as PropType<string | RenderFunc>,
12+
},
13+
slots: {
14+
type: Object as PropType<Slots>,
15+
},
16+
},
17+
setup(props, ctx) {
18+
return () => {
19+
if (typeof props.render === "string") {
20+
return props.slots?.[props.render]?.(ctx.attrs);
21+
}
22+
return (props.render as RenderFunc)(ctx.attrs);
23+
};
24+
},
25+
});

packages/component/src/component/_components/renderFunction.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

packages/component/src/component/dropdown/index.vue

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {
3838
} from "./interface";
3939
import TeleportWrapper from "../_components/teleportWrapper.vue";
4040
import { useFirstElement, getScrollElements, transformPlacement } from "./util";
41-
import RenderFunction from "../_components/renderFunction";
41+
import LayRender from "../_components/render";
4242
4343
export type DropdownTrigger = "click" | "hover" | "focus" | "contextMenu";
4444
@@ -643,10 +643,7 @@ defineExpose({ show, hide, toggle });
643643
</script>
644644

645645
<template>
646-
<RenderFunction
647-
:renderFunc="onlyChildRenderFunc"
648-
v-bind="$attrs"
649-
></RenderFunction>
646+
<LayRender :render="onlyChildRenderFunc" v-bind="$attrs"></LayRender>
650647
<TeleportWrapper :to="popupContainer" :disabled="disabledTeleport">
651648
<div
652649
v-if="openState"

packages/component/src/component/tab/index.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import "./index.less";
33
import { LayIcon } from "@layui/icons-vue";
44
import tabItem from "../tabItem/index.vue";
5-
import RenderFunction from "../_components/renderFunction";
5+
import LayRender from "../_components/render";
66
import {
77
Component,
88
computed,
@@ -405,12 +405,12 @@ provide("active", active);
405405
@click.stop="change(child.id)"
406406
>
407407
<span>
408-
<RenderFunction
408+
<LayRender
409409
v-if="child['icon']"
410-
:renderFunc="renderTabIcon"
410+
:render="renderTabIcon"
411411
:tabData="child"
412412
/>
413-
<RenderFunction :renderFunc="renderTabTitle" :tabData="child" />
413+
<LayRender :render="renderTabTitle" :tabData="child" />
414414
</span>
415415
<i
416416
v-if="allowClose && child.closable != false"

packages/component/src/component/table/TableData.vue

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
import LayCheckbox from "../checkbox/index.vue";
1313
import LayTooltip from "../tooltip/index.vue";
1414
import LayRadio from "../radio/index.vue";
15+
import LayRender from "../_components/render";
1516
import { TableEmit } from "./typing";
1617
1718
export interface TableRowProps {
@@ -46,6 +47,7 @@ defineOptions({
4647
});
4748
4849
const slot = useSlots();
50+
4951
const emit = defineEmits(TableEmit);
5052
5153
const props = withDefaults(defineProps<TableRowProps>(), {
@@ -537,35 +539,38 @@ const checkboxProps = computed(() => {
537539
column.ellipsisTooltipTheme === 'dark' ? true : false
538540
"
539541
>
540-
<slot
542+
<lay-render
541543
:row="data"
542544
:data="data"
543545
:column="column"
544546
:rowIndex="index"
545547
:columnIndex="columnIndex"
546-
:name="column.customSlot"
547-
></slot>
548+
:render="column.customSlot"
549+
:slots="slot"
550+
></lay-render>
548551
<template #content>
549-
<slot
552+
<lay-render
550553
:row="data"
551554
:data="data"
552555
:column="column"
553556
:rowIndex="index"
554557
:columnIndex="columnIndex"
555-
:name="column.customSlot"
556-
></slot>
558+
:render="column.customSlot"
559+
:slots="slot"
560+
></lay-render>
557561
</template>
558562
</lay-tooltip>
559563

560-
<slot
564+
<lay-render
561565
v-else
562566
:row="data"
563567
:data="data"
564568
:column="column"
565569
:rowIndex="index"
566570
:columnIndex="columnIndex"
567-
:name="column.customSlot"
568-
></slot>
571+
:render="column.customSlot"
572+
:slots="slot"
573+
></lay-render>
569574
</div>
570575
</td>
571576
</template>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy