diff --git a/easyflow-ui-admin/app/src/components/page/CardList.vue b/easyflow-ui-admin/app/src/components/page/CardList.vue index e353933c..b7050cc5 100644 --- a/easyflow-ui-admin/app/src/components/page/CardList.vue +++ b/easyflow-ui-admin/app/src/components/page/CardList.vue @@ -17,13 +17,17 @@ import { ElIcon, ElTag, ElText, + ElTooltip, } from 'element-plus'; import { $t } from '#/locales'; export type ActionPlacement = 'inline' | 'menu'; export type ActionTone = 'danger' | 'default'; +export type CardDensity = 'compact' | 'default'; +export type MetaLayout = 'compact' | 'stacked'; export type TagLayout = 'inline' | 'stacked'; +export type TagPlacement = 'details' | 'title'; export interface ActionButton { icon?: any; @@ -40,6 +44,8 @@ export interface ActionButton { export interface CardPrimaryAction { icon?: any; + iconOnly?: boolean; + showIndicator?: boolean; text: string; permission?: string; onClick: (row: any) => void; @@ -58,12 +64,16 @@ export interface CardListProps { cornerTagField?: string; cornerTagMap?: Record; cornerTagTypeMap?: Record; + density?: CardDensity; defaultIcon: any; data: any[]; + metaLayout?: MetaLayout; primaryAction?: CardPrimaryAction; tagField?: string; tagLayout?: TagLayout; tagMap?: Record; + tagPlacement?: TagPlacement; + titleLineClamp?: number; } const props = withDefaults(defineProps(), { @@ -74,10 +84,14 @@ const props = withDefaults(defineProps(), { cornerTagField: '', cornerTagMap: () => ({}), cornerTagTypeMap: () => ({}), + density: 'default', + metaLayout: 'stacked', primaryAction: undefined, tagField: '', tagLayout: 'inline', tagMap: () => ({}), + tagPlacement: 'title', + titleLineClamp: 1, }); const { hasAccessByCodes } = useAccess(); @@ -107,6 +121,10 @@ const resolvedPrimaryAction = computed(() => { return props.primaryAction; }); +const showPrimaryActionIndicator = computed( + () => resolvedPrimaryAction.value?.showIndicator !== false, +); + function resolveActionPlacement( action: ActionButton, index: number, @@ -185,6 +203,12 @@ function resolveMetaItems(item: any) { } return metaItems; } + +function resolveMetaAriaLabel(item: any) { + return resolveMetaItems(item) + .map((meta) => `${meta.label}:${meta.value}`) + .join(','); +}