From 9c76e2769a08a4daf31c1f71cbc472a121099742 Mon Sep 17 00:00:00 2001 From: oneao Date: Mon, 22 Sep 2025 21:52:43 +0800 Subject: [PATCH] a --- .../src/descriptions/descriptions-group.tsx | 64 ++++++++++++++++++- .../src/descriptions/descriptions.tsx | 28 ++++---- .../ao-design/src/descriptions/index.scss | 2 +- 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions-group.tsx b/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions-group.tsx index 3e0cb57f..af9b86ef 100644 --- a/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions-group.tsx +++ b/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions-group.tsx @@ -1,9 +1,35 @@ -import { defineComponent } from 'vue' +import type { PropType, VNode } from 'vue' +import { computed, defineComponent } from 'vue' import { getPrefixCls } from '../_utils/getPrefixCls' +interface DescriptionsData { + label: string | VNode | (() => VNode) + content: string | VNode | (() => VNode) + span: number +} + export default defineComponent({ name: 'DescriptionsGroup', props: { + data: { + type: Array as PropType, + default: () => [], + }, + title: { + type: [String, Object, Function] as PropType VNode)>, + }, + size: { + type: String as PropType<'small' | 'medium' | 'large'>, + default: 'medium', + }, + layout: { + type: String as PropType<'row' | 'row-vertical' | 'column' | 'column-vertical'>, + default: 'row', + }, + columns: { + type: Number, + default: 3, + }, class: { type: [String, Array, Object], default: '', @@ -16,9 +42,43 @@ export default defineComponent({ emits: [], setup(props, { slots, emit }) { const prefixCls = getPrefixCls('descriptions-group') + const renderHeader = () => { + const title = slots.title + ? slots.title() + : typeof props.title === 'function' + ? props.title() + : props.title + + return
{title}
+ } + + const childrenVNodes = computed(() => { + const nodes = slots.default?.() ?? [] + return nodes.filter(node => + node.type && (typeof node.type === 'string' || typeof node.type === 'object' || typeof node.type === 'function'), + ) + }) + + const groupedData = computed(() => { + c + }) + + const renderBody = () => { + return ( + + + +
+ ) + } + return () => (
- {slots.default?.()} + {renderHeader} + {renderBody}
) }, diff --git a/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions.tsx b/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions.tsx index 9be17fe7..5cf3221b 100644 --- a/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions.tsx +++ b/code/base-project/base-vue/packages/ao-design/src/descriptions/descriptions.tsx @@ -1,25 +1,21 @@ +import type { PropType, VNode } from 'vue' import { defineComponent } from 'vue' -import { getPrefixCls } from '../_utils/getPrefixCls' export default defineComponent({ name: 'Descriptions', props: { - class: { - type: [String, Array, Object], - default: '', + label: { + type: [String, Object, Function] as PropType VNode)>, }, - style: { - type: Object, - default: () => ({}), + content: { + type: [String, Object, Function] as PropType VNode)>, + }, + default: { + type: [String, Object, Function] as PropType VNode)>, + }, + span: { + type: Number, + default: 1, }, - }, - emits: [], - setup(props, { slots, emit }) { - const prefixCls = getPrefixCls('descriptions') - return () => ( -
- {slots.default?.()} -
- ) }, }) diff --git a/code/base-project/base-vue/packages/ao-design/src/descriptions/index.scss b/code/base-project/base-vue/packages/ao-design/src/descriptions/index.scss index 9ea737ca..0a9006e6 100644 --- a/code/base-project/base-vue/packages/ao-design/src/descriptions/index.scss +++ b/code/base-project/base-vue/packages/ao-design/src/descriptions/index.scss @@ -4,4 +4,4 @@ $descriptions-prefix: '#{$prefix}-descriptions'; .#{$descriptions-prefix} { -} \ No newline at end of file +}