diff --git a/packages/devui-vue/devui/accordion/src/accordion-item.tsx b/packages/devui-vue/devui/accordion/src/accordion-item.tsx index 77389aa8537918cf67f72656a0f211d425e647a7..92e00773701f34cd5ccaa63aad35ff0c993b7946 100644 --- a/packages/devui-vue/devui/accordion/src/accordion-item.tsx +++ b/packages/devui-vue/devui/accordion/src/accordion-item.tsx @@ -1,13 +1,92 @@ -import { defineComponent } from 'vue' +import { defineComponent, toRefs, computed, inject } from 'vue' +import { accordionProps } from './accordion-types' +import { AccordionItemClickEvent, AccordionMenuItem } from './accordion.type' +import { getRootSlots } from '../src/utils' export default defineComponent({ name: 'DAccordionItem', props: { - + item: Object as () => AccordionMenuItem, + deepth: { + type: Number, + default: 0 + }, + parent: { + type: Object as () => AccordionMenuItem, + default: null + }, + ...accordionProps }, - setup() { + setup(props) { + const { + item, + deepth, + parent, + titleKey, + activeKey, + disabledKey, + } = toRefs(props) + + const rootSlots = getRootSlots() + const accordionCtx = inject('accordionContext') as any + + let parentValue = parent.value + let deepValue = deepth.value + + const disabled = computed(() => { + return item.value && item.value[disabledKey.value] + }) + const title = computed(() => { + return item.value && item.value[titleKey.value] + }) + const active = computed(() => { + return item.value && item.value[activeKey.value] + }) + + const childActived = computed(() => { + return active.value + }) + + const itemClick = (itemEvent: AccordionItemClickEvent) => { + if (item.value && !disabled.value) { + accordionCtx.itemClickFn(itemEvent) + } + } + return () => { - return
  • d-accordion-item
  • + return ( + <> +
    + itemClick({ + item: item.value, + parent: parentValue, + event: e + }) + } + > +
    + {!rootSlots.itemTemplate && <>{title.value}} + {rootSlots.itemTemplate && + rootSlots.itemTemplate?.({ + parent: parentValue, + deepth: deepValue, + item: item.value + })} +
    + + ) } } -}) \ No newline at end of file +}) diff --git a/packages/devui-vue/devui/accordion/src/accordion-list.tsx b/packages/devui-vue/devui/accordion/src/accordion-list.tsx index 3fba7abb5264b37250d2cb0f92588fe9256af854..f5e665a64c4da2b145fafdc158c568e37f7a99ee 100644 --- a/packages/devui-vue/devui/accordion/src/accordion-list.tsx +++ b/packages/devui-vue/devui/accordion/src/accordion-list.tsx @@ -1,14 +1,21 @@ -import { defineComponent, toRefs } from 'vue' +import { + computed, + defineComponent, + inject, + toRefs +} from 'vue' import type { AccordionMenuItem } from './accordion.type' import DAccordionMenu from './accordion-menu' +import DAccordionItem from './accordion-item' import { accordionProps } from './accordion-types' - +import { getRootSlots } from '../src/utils' export default defineComponent({ name: 'DAccordionList', inheritAttrs: false, components: { - DAccordionMenu + DAccordionMenu, + DAccordionItem }, props: { data: { @@ -24,61 +31,141 @@ export default defineComponent({ default: null }, innerListTemplate: Boolean, - ...accordionProps, + ...accordionProps }, - setup(props, {attrs, slots}) { + + setup(props, { attrs }) { const { childrenKey, - innerListTemplate, - deepth + deepth, + parent, + data, + linkType, + showNoContent, + loadingKey, + titleKey } = toRefs(props) + + let parentValue = parent.value + let deepValue = deepth.value + + const rootSlots = getRootSlots() + + const accordionCtx = inject('accordionContext') as any + + const loading = computed(() => { + return parentValue && parentValue[loadingKey.value] + }) + const noContent = computed(() => { + let dataValue = data.value + return dataValue === undefined || dataValue === null || dataValue.length === 0 + }) + return () => { return ( <> - { - !innerListTemplate.value && -