2020-09-28 20:19:10 +08:00
|
|
|
import type { PropType } from 'vue';
|
2020-11-10 23:50:47 +08:00
|
|
|
|
2020-11-25 22:28:58 +08:00
|
|
|
import { defineComponent, unref, computed, FunctionalComponent } from 'vue';
|
|
|
|
|
|
2020-11-10 23:50:47 +08:00
|
|
|
import { TabItem, tabStore } from '/@/store/modules/tab';
|
2020-11-25 22:28:58 +08:00
|
|
|
import { getScaleAction, TabContentProps } from './data';
|
2020-09-28 20:19:10 +08:00
|
|
|
|
|
|
|
|
import { Dropdown } from '/@/components/Dropdown/index';
|
2020-11-01 11:13:34 +08:00
|
|
|
import { RightOutlined } from '@ant-design/icons-vue';
|
2020-09-28 20:19:10 +08:00
|
|
|
|
2020-11-25 22:28:58 +08:00
|
|
|
import { TabContentEnum } from './data';
|
2020-09-28 20:19:10 +08:00
|
|
|
import { useTabDropdown } from './useTabDropdown';
|
2020-11-25 22:28:58 +08:00
|
|
|
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
|
|
|
|
|
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
|
|
|
|
|
import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
|
2020-11-25 23:20:30 +08:00
|
|
|
import { useI18n } from '/@/hooks/web/useI18n';
|
2020-11-25 22:28:58 +08:00
|
|
|
|
2020-11-26 21:10:21 +08:00
|
|
|
const { t: titleT } = useI18n();
|
|
|
|
|
|
2020-11-25 22:28:58 +08:00
|
|
|
const ExtraContent: FunctionalComponent = () => {
|
|
|
|
|
return (
|
|
|
|
|
<span class={`multiple-tabs-content__extra `}>
|
|
|
|
|
<RightOutlined />
|
|
|
|
|
</span>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const TabContent: FunctionalComponent<{ tabItem: TabItem }> = (props) => {
|
|
|
|
|
const { tabItem: { meta } = {} } = props;
|
|
|
|
|
|
|
|
|
|
function handleContextMenu(e: Event) {
|
|
|
|
|
if (!props.tabItem) return;
|
|
|
|
|
const tableItem = props.tabItem;
|
|
|
|
|
e?.preventDefault();
|
|
|
|
|
const index = unref(tabStore.getTabsState).findIndex((tab) => tab.path === tableItem.path);
|
|
|
|
|
|
|
|
|
|
tabStore.commitCurrentContextMenuIndexState(index);
|
|
|
|
|
tabStore.commitCurrentContextMenuState(props.tabItem);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div class={`multiple-tabs-content__content `} onContextmenu={handleContextMenu}>
|
2020-11-26 21:10:21 +08:00
|
|
|
<span class="ml-1">{meta && titleT(meta.title)}</span>
|
2020-11-25 22:28:58 +08:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
2020-09-28 20:19:10 +08:00
|
|
|
|
|
|
|
|
export default defineComponent({
|
|
|
|
|
name: 'TabContent',
|
|
|
|
|
props: {
|
|
|
|
|
tabItem: {
|
|
|
|
|
type: Object as PropType<TabItem>,
|
|
|
|
|
default: null,
|
|
|
|
|
},
|
2020-11-25 22:28:58 +08:00
|
|
|
|
2020-09-28 20:19:10 +08:00
|
|
|
type: {
|
2020-11-25 22:28:58 +08:00
|
|
|
type: Number as PropType<TabContentEnum>,
|
2020-09-28 20:19:10 +08:00
|
|
|
default: TabContentEnum.TAB_TYPE,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
setup(props) {
|
2020-11-25 23:20:30 +08:00
|
|
|
const { t } = useI18n('layout.multipleTab');
|
2020-11-25 22:28:58 +08:00
|
|
|
const { getShowMenu } = useMenuSetting();
|
|
|
|
|
const { getShowHeader } = useHeaderSetting();
|
|
|
|
|
const { getShowQuick } = useMultipleTabSetting();
|
2020-09-28 20:19:10 +08:00
|
|
|
|
2020-11-25 22:28:58 +08:00
|
|
|
const getIsScale = computed(() => {
|
|
|
|
|
return !unref(getShowMenu) && !unref(getShowHeader);
|
2020-09-28 20:19:10 +08:00
|
|
|
});
|
|
|
|
|
|
2020-11-25 22:28:58 +08:00
|
|
|
const getIsTab = computed(() => {
|
|
|
|
|
return !unref(getShowQuick) ? true : props.type === TabContentEnum.TAB_TYPE;
|
|
|
|
|
});
|
2020-09-28 20:19:10 +08:00
|
|
|
|
|
|
|
|
const { getDropMenuList, handleMenuEvent } = useTabDropdown(props as TabContentProps);
|
|
|
|
|
|
|
|
|
|
return () => {
|
2020-11-25 23:20:30 +08:00
|
|
|
const scaleAction = getScaleAction(
|
|
|
|
|
unref(getIsScale) ? t('putAway') : t('unfold'),
|
|
|
|
|
unref(getIsScale)
|
|
|
|
|
);
|
2020-09-28 20:19:10 +08:00
|
|
|
const dropMenuList = unref(getDropMenuList) || [];
|
|
|
|
|
|
2020-11-25 22:28:58 +08:00
|
|
|
const isTab = unref(getIsTab);
|
2020-09-28 20:19:10 +08:00
|
|
|
return (
|
|
|
|
|
<Dropdown
|
|
|
|
|
dropMenuList={!isTab ? [scaleAction, ...dropMenuList] : dropMenuList}
|
2020-11-25 22:28:58 +08:00
|
|
|
trigger={isTab ? ['contextmenu'] : ['click']}
|
2020-09-28 20:19:10 +08:00
|
|
|
onMenuEvent={handleMenuEvent}
|
|
|
|
|
>
|
2020-11-25 22:28:58 +08:00
|
|
|
{() => (isTab ? <TabContent tabItem={props.tabItem} /> : <ExtraContent />)}
|
2020-09-28 20:19:10 +08:00
|
|
|
</Dropdown>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
});
|