CollapseHeader.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <script lang="tsx">
  2. import { defineComponent, computed, unref, type ExtractPropTypes } from 'vue';
  3. import { useDesign } from '/@/hooks/web/useDesign';
  4. import { BasicArrow, BasicTitle } from '/@/components/Basic';
  5. const collapseHeaderProps = {
  6. prefixCls: String,
  7. title: String,
  8. show: Boolean,
  9. canExpan: Boolean,
  10. helpMessage: {
  11. type: [Array, String] as PropType<string[] | string>,
  12. default: '',
  13. },
  14. };
  15. export type CollapseHeaderProps = ExtractPropTypes<typeof collapseHeaderProps>;
  16. export default defineComponent({
  17. name: 'CollapseHeader',
  18. inheritAttrs: false,
  19. props: collapseHeaderProps,
  20. emits: ['expand'],
  21. setup(props, { slots, attrs, emit }) {
  22. const { prefixCls } = useDesign('collapse-container');
  23. const _prefixCls = computed(() => props.prefixCls || unref(prefixCls));
  24. return () => (
  25. <div class={[`${unref(_prefixCls)}__header px-2 py-5`, attrs.class]}>
  26. <BasicTitle helpMessage={props.helpMessage} normal>
  27. {slots.title?.() || props.title}
  28. </BasicTitle>
  29. <div class={`${unref(_prefixCls)}__action`}>
  30. {props.canExpan && <BasicArrow up expand={props.show} onClick={() => emit('expand')} />}
  31. </div>
  32. </div>
  33. );
  34. },
  35. });
  36. </script>