| | |
| | | <Dropdown |
| | | :dropMenuList="getDropMenuList" |
| | | :trigger="getTrigger" |
| | | placement="bottom" |
| | | placement="bottomLeft" |
| | | overlayClassName="multiple-tabs__dropdown" |
| | | @menu-event="handleMenuEvent" |
| | | > |
| | |
| | | </span> |
| | | </Dropdown> |
| | | </template> |
| | | <script lang="ts"> |
| | | <script lang="ts" setup> |
| | | import type { PropType } from 'vue'; |
| | | import type { RouteLocationNormalized } from 'vue-router'; |
| | | |
| | | import { defineComponent, computed, unref } from 'vue'; |
| | | import { Dropdown } from '/@/components/Dropdown/index'; |
| | | import { computed, unref } from 'vue'; |
| | | import { Dropdown } from '@/components/Dropdown'; |
| | | import Icon from '@/components/Icon/Icon.vue'; |
| | | |
| | | import { TabContentProps } from '../types'; |
| | | |
| | | import { useDesign } from '/@/hooks/web/useDesign'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | import { useDesign } from '@/hooks/web/useDesign'; |
| | | import { useI18n } from '@/hooks/web/useI18n'; |
| | | import { useTabDropdown } from '../useTabDropdown'; |
| | | |
| | | export default defineComponent({ |
| | | name: 'TabContent', |
| | | components: { Dropdown, Icon }, |
| | | props: { |
| | | tabItem: { |
| | | type: Object as PropType<RouteLocationNormalized>, |
| | | default: null, |
| | | }, |
| | | isExtra: Boolean, |
| | | defineOptions({ name: 'TabContent' }); |
| | | |
| | | const props = defineProps({ |
| | | tabItem: { |
| | | type: Object as PropType<RouteLocationNormalized>, |
| | | default: null, |
| | | }, |
| | | setup(props) { |
| | | const { prefixCls } = useDesign('multiple-tabs-content'); |
| | | const { t } = useI18n(); |
| | | |
| | | const getTitle = computed(() => { |
| | | const { tabItem: { meta } = {} } = props; |
| | | return meta && t(meta.title as string); |
| | | }); |
| | | |
| | | const getIsTabs = computed(() => !props.isExtra); |
| | | |
| | | const getTrigger = computed((): ('contextmenu' | 'click' | 'hover')[] => |
| | | unref(getIsTabs) ? ['contextmenu'] : ['click'], |
| | | ); |
| | | |
| | | const { getDropMenuList, handleMenuEvent, handleContextMenu } = useTabDropdown( |
| | | props as TabContentProps, |
| | | getIsTabs, |
| | | ); |
| | | |
| | | function handleContext(e) { |
| | | props.tabItem && handleContextMenu(props.tabItem)(e); |
| | | } |
| | | |
| | | return { |
| | | prefixCls, |
| | | getDropMenuList, |
| | | handleMenuEvent, |
| | | handleContext, |
| | | getTrigger, |
| | | getIsTabs, |
| | | getTitle, |
| | | }; |
| | | }, |
| | | isExtra: Boolean, |
| | | }); |
| | | |
| | | const { prefixCls } = useDesign('multiple-tabs-content'); |
| | | const { t } = useI18n(); |
| | | |
| | | const getTitle = computed(() => { |
| | | const { tabItem: { meta } = {} } = props; |
| | | return meta && t(meta.title as string); |
| | | }); |
| | | |
| | | const getIsTabs = computed(() => !props.isExtra); |
| | | |
| | | const getTrigger = computed((): ('contextmenu' | 'click' | 'hover')[] => |
| | | unref(getIsTabs) ? ['contextmenu'] : ['click'], |
| | | ); |
| | | |
| | | const { getDropMenuList, handleMenuEvent, handleContextMenu } = useTabDropdown( |
| | | props as TabContentProps, |
| | | getIsTabs, |
| | | ); |
| | | |
| | | function handleContext(e) { |
| | | props.tabItem && handleContextMenu(props.tabItem)(e); |
| | | } |
| | | </script> |