123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- <template>
- <div class="ui-group" :class="{ control }">
- <template v-if="!$slots.header">
- <h3 v-if="props.title" class="group-title" :class="!$slots.default && contentStyle">
- {{ props.title }}
- <span v-if="$slots.icon || control" class="group-icon" :class="animationRef && { show: animationRef.show }" @click="control && animationRef.changeShow()">
- <slot v-if="$slots.icon" name="icon" />
- <icon v-else type="pull-down" size="12px" />
- </span>
- </h3>
- </template>
- <div v-else class="group-title" :class="!$slots.default && contentStyle">
- <slot name="header" />
- <span v-if="$slots.icon || control" class="group-icon" :class="animationRef && { show: animationRef.show }" @click="control && animationRef.changeShow()">
- <slot v-if="$slots.icon" name="icon" />
- <icon v-else type="pull-down" size="12px" />
- </span>
- </div>
- <template v-if="$slots.default">
- <UISizeAnimation v-if="control" ref="animationRef" class="group-content" :class="contentStyle">
- <slot />
- </UISizeAnimation>
- <div v-else class="group-content" :class="contentStyle">
- <slot />
- </div>
- </template>
- </div>
- </template>
- <script setup>
- import { computed, provide, ref, watch, watchEffect } from 'vue'
- import icon from '../icon'
- import UISizeAnimation from '../size-animation'
- import { Relation } from './constant'
- const animationRef = ref(null)
- const props = defineProps({
- title: String,
- border: Boolean,
- borderTop: Boolean,
- borderBottom: Boolean,
- control: Boolean,
- show: Boolean,
- })
- const contentStyle = computed(() => ({
- 'border-bottom': props.borderBottom || props.border,
- 'border-top': props.borderTop || props.border,
- }))
- const contentInstances = ref([])
- provide(Relation, contentInstances)
- watchEffect(() => {
- if (animationRef.value) {
- animationRef.value.changeShow(props.show)
- }
- })
- watch(contentInstances, () => {
- animationRef.value && animationRef.value.refer()
- })
- </script>
- <script>
- export default { name: 'UiGroup' }
- </script>
|