fix: 修改TagsView样式问题

This commit is contained in:
戴业伟 2024-02-05 11:07:48 +08:00
parent 6fff76e3f8
commit 58337f771e

View File

@ -2,8 +2,8 @@
<div <div
class="box-border tabs-view" class="box-border tabs-view"
:class="{ :class="{
'tabs-view-fix': state.multiTabsSetting.fixed, 'tabs-view-fix': multiTabsSetting.fixed,
'tabs-view-fixed-header': state.isMultiHeaderFixed, 'tabs-view-fixed-header': isMultiHeaderFixed,
'tabs-view-default-background': getDarkTheme === false, 'tabs-view-default-background': getDarkTheme === false,
'tabs-view-dark-background': getDarkTheme === true, 'tabs-view-dark-background': getDarkTheme === true,
}" }"
@ -13,11 +13,11 @@
<div <div
ref="navWrap" ref="navWrap"
class="tabs-card" class="tabs-card"
:class="{ 'tabs-card-scrollable': state.scrollable }" :class="{ 'tabs-card-scrollable': scrollable }"
> >
<span <span
class="tabs-card-prev" class="tabs-card-prev"
:class="{ 'tabs-card-prev-hide': !state.scrollable }" :class="{ 'tabs-card-prev-hide': !scrollable }"
@click="scrollPrev" @click="scrollPrev"
> >
<n-icon size="16" color="#515a6e"> <n-icon size="16" color="#515a6e">
@ -26,7 +26,7 @@
</span> </span>
<span <span
class="tabs-card-next" class="tabs-card-next"
:class="{ 'tabs-card-next-hide': !state.scrollable }" :class="{ 'tabs-card-next-hide': !scrollable }"
@click="scrollNext" @click="scrollNext"
> >
<n-icon size="16" color="#515a6e"> <n-icon size="16" color="#515a6e">
@ -44,7 +44,7 @@
<div <div
:id="`tag${element.fullPath.split('/').join('\/')}`" :id="`tag${element.fullPath.split('/').join('\/')}`"
class="tabs-card-scroll-item" class="tabs-card-scroll-item"
:class="{ 'active-item': state.activeKey === element.fullPath }" :class="{ 'active-item': activeKey === element.fullPath }"
@click.stop="goPage(element)" @click.stop="goPage(element)"
@contextmenu="handleContextMenu($event, element)" @contextmenu="handleContextMenu($event, element)"
> >
@ -76,9 +76,9 @@
</n-dropdown> </n-dropdown>
</div> </div>
<n-dropdown <n-dropdown
:show="state.showDropdown" :show="showDropdown"
:x="state.dropdownX" :x="dropdownX"
:y="state.dropdownY" :y="dropdownY"
@clickoutside="onClickOutside" @clickoutside="onClickOutside"
placement="bottom-start" placement="bottom-start"
@select="closeHandleSelect" @select="closeHandleSelect"
@ -88,13 +88,26 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts">
import {
defineComponent,
reactive,
computed,
ref,
toRefs,
provide,
watch,
onMounted,
nextTick,
} from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { storage } from '@/utils'; import { storage } from '@/utils';
import { StorageEnum } from '@/enums/storageEnum';
import { useTabsViewStore } from '@/store/modules/tabsView'; import { useTabsViewStore } from '@/store/modules/tabsView';
import { useAsyncRouteStore } from '@/store/modules/asyncRoute'; import { useAsyncRouteStore } from '@/store/modules/asyncRoute';
import { RouteItem } from '@/store/modules/tabsView'; import { RouteItem } from '@/store/modules/tabsView';
import { useProjectSetting } from '@/hooks/setting/useProjectSetting'; import { useProjectSetting } from '@/hooks/setting/useProjectSetting';
import { useMessage } from 'naive-ui';
import Draggable from 'vuedraggable'; import Draggable from 'vuedraggable';
import { PageEnum } from '@/enums/pageEnum'; import { PageEnum } from '@/enums/pageEnum';
import { import {
@ -107,22 +120,33 @@ import {
RightOutlined, RightOutlined,
} from '@vicons/antd'; } from '@vicons/antd';
import { renderIcon } from '@/utils'; import { renderIcon } from '@/utils';
// import elementResizeDetectorMaker from "element-resize-detector"; // import elementResizeDetectorMaker from 'element-resize-detector';
import { useDesignSetting } from '@/hooks/setting/useDesignSetting'; import { useDesignSetting } from '@/hooks/setting/useDesignSetting';
import { useProjectSettingStore } from '@/store/modules/projectSetting'; import { useProjectSettingStore } from '@/store/modules/projectSetting';
import { useThemeVars } from 'naive-ui'; import { useThemeVars } from 'naive-ui';
import { useGo } from '@/hooks/web/usePage'; import { useGo } from '@/hooks/web/usePage';
import { StorageEnum } from '@/enums/storageEnum';
const props = defineProps({ export default defineComponent({
name: 'TabsView',
components: {
DownOutlined,
CloseOutlined,
LeftOutlined,
RightOutlined,
Draggable,
},
props: {
collapsed: { collapsed: {
type: Boolean, type: Boolean,
}, },
}); },
setup(props) {
const { getDarkTheme, getAppTheme } = useDesignSetting(); const { getDarkTheme, getAppTheme } = useDesignSetting();
const { navMode, headerSetting, menuSetting, multiTabsSetting, isMobile } = const { navMode, headerSetting, menuSetting, multiTabsSetting, isMobile } =
useProjectSetting(); useProjectSetting();
const settingStore = useProjectSettingStore(); const settingStore = useProjectSettingStore();
const message = useMessage();
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const tabsViewStore = useTabsViewStore(); const tabsViewStore = useTabsViewStore();
@ -134,11 +158,11 @@ const go = useGo();
const themeVars = useThemeVars(); const themeVars = useThemeVars();
const getCardColor = computed(() => { const getcardcolor = computed(() => {
return themeVars.value.cardColor; return themeVars.value.cardColor;
}); });
const getBaseColor = computed(() => { const getbasecolor = computed(() => {
return themeVars.value.textColor1; return themeVars.value.textColor1;
}); });
@ -304,13 +328,14 @@ window.addEventListener('beforeunload', () => {
// //
const removeTab = (route) => { const removeTab = (route) => {
if (tabsList.value.length === 1) { if (tabsList.value.length === 1) {
return window['$message'].warning('这已经是最后一页,不能再关闭了!'); return message.warning('这已经是最后一页,不能再关闭了!');
} }
delKeepAliveCompName(); delKeepAliveCompName();
tabsViewStore.closeCurrentTab(route); tabsViewStore.closeCurrentTab(route);
// //
if (state.activeKey === route.fullPath) { if (state.activeKey === route.fullPath) {
const currentRoute = tabsList.value[Math.max(0, tabsList.value.length - 1)]; const currentRoute =
tabsList.value[Math.max(0, tabsList.value.length - 1)];
state.activeKey = currentRoute.fullPath; state.activeKey = currentRoute.fullPath;
router.push(currentRoute); router.push(currentRoute);
} }
@ -478,7 +503,9 @@ function goPage(e) {
//tab //tab
function closeTabItem(e) { function closeTabItem(e) {
const { fullPath } = e; const { fullPath } = e;
const routeInfo = tabsList.value.find((item) => item.fullPath == fullPath); const routeInfo = tabsList.value.find(
(item) => item.fullPath == fullPath
);
removeTab(routeInfo); removeTab(routeInfo);
} }
@ -491,6 +518,34 @@ onMounted(() => {
// observer = elementResizeDetectorMaker(); // observer = elementResizeDetectorMaker();
// observer.listenTo(navWrap.value, handleResize); // observer.listenTo(navWrap.value, handleResize);
// } // }
return {
...toRefs(state),
navWrap,
navScroll,
route,
tabsList,
goPage,
closeTabItem,
closeLeft,
closeRight,
closeOther,
closeAll,
reloadPage,
getChangeStyle,
TabsMenuOptions,
closeHandleSelect,
scrollNext,
scrollPrev,
handleContextMenu,
onClickOutside,
getDarkTheme,
getAppTheme,
getcardcolor,
getbasecolor,
};
},
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>