<script lang="ts" setup>
|
import mobileIcon_dashboard_filled from '@/assets/svg/mobile/icon_dashboard_filled.svg'
|
import mobileIcon_dashboard_outlined from '@/assets/svg/mobile/icon_dashboard_outlined.svg'
|
import mobileIcon_home_filled from '@/assets/svg/mobile/icon_home_filled.svg'
|
import mobileIcon_home_outlined from '@/assets/svg/mobile/icon_home_outlined.svg'
|
import mobileIcon_member_filled from '@/assets/svg/mobile/icon_member_filled.svg'
|
import mobileIcon_member_outlined from '@/assets/svg/mobile/icon_member_outlined.svg'
|
import { ref, onBeforeMount } from 'vue'
|
import Home from './home/index.vue'
|
import Directory from './directory/index.vue'
|
import { useCache } from '@/hooks/web/useCache'
|
import Personal from './personal/index.vue'
|
import VanTabbar from 'vant/es/tabbar'
|
import VanTabbarItem from 'vant/es/tabbar-item'
|
import VanOverlay from 'vant/es/overlay'
|
import VanLoading from 'vant/es/loading'
|
import 'vant/es/tabbar-item/style'
|
import 'vant/es/tabbar/style'
|
import 'vant/es/overlay/style'
|
import 'vant/es/loading/style'
|
import { useI18n } from '@/hooks/web/useI18n'
|
|
const activeTabbar = ref('home')
|
const showLoading = ref(false)
|
const hiddenTabbar = ref(false)
|
const { wsCache } = useCache('sessionStorage')
|
const { t } = useI18n()
|
|
onBeforeMount(() => {
|
activeTabbar.value = wsCache.get('activeTabbar') || 'home'
|
})
|
</script>
|
|
<template>
|
<div class="mobile-index">
|
<Home v-if="activeTabbar === 'home'" @setLoading="val => (showLoading = val)"></Home>
|
<Directory
|
v-else-if="activeTabbar === 'direct'"
|
@setLoading="val => (showLoading = val)"
|
@hiddenTabbar="val => (hiddenTabbar = val)"
|
></Directory>
|
<Personal v-else-if="activeTabbar === 'user'"> </Personal>
|
<van-tabbar safe-area-inset-bottom v-if="!hiddenTabbar" v-model="activeTabbar">
|
<van-tabbar-item name="home">
|
<template #icon="{ active }">
|
<el-icon>
|
<Icon
|
><component
|
:is="active ? mobileIcon_home_filled : mobileIcon_home_outlined"
|
></component
|
></Icon>
|
</el-icon>
|
</template>
|
工作台
|
</van-tabbar-item>
|
<van-tabbar-item name="direct"
|
><template #icon="{ active }">
|
<el-icon>
|
<Icon
|
><component
|
:is="active ? mobileIcon_dashboard_filled : mobileIcon_dashboard_outlined"
|
></component
|
></Icon>
|
</el-icon>
|
</template>
|
{{ t('work_branch.dashboard') }}</van-tabbar-item
|
>
|
<van-tabbar-item name="user"
|
><template #icon="{ active }">
|
<el-icon>
|
<Icon
|
><component
|
:is="active ? mobileIcon_member_filled : mobileIcon_member_outlined"
|
></component
|
></Icon>
|
</el-icon> </template
|
>我的</van-tabbar-item
|
>
|
</van-tabbar>
|
<van-overlay v-model:show="showLoading">
|
<div style="display: flex; align-items: center; justify-content: center; height: 100%">
|
<van-loading type="spinner" />
|
</div>
|
</van-overlay>
|
</div>
|
</template>
|
|
<style lang="less">
|
.mobile-index {
|
width: 100vw;
|
height: 100vh;
|
overflow: hidden;
|
--van-nav-bar-height: 44px;
|
--van-nav-bar-arrow-size: 20px;
|
--van-nav-bar-icon-color: #1f2329;
|
--van-nav-bar-title-text-color: #1f2329;
|
--van-font-bold: 500;
|
--van-nav-bar-title-font-size: 17px;
|
--van-tabs-line-height: 40px;
|
--van-tabs-bottom-bar-width: 56px;
|
--van-tabs-bottom-bar-color: var(--ed-color-primary);
|
--van-tab-active-text-color: var(--ed-color-primary);
|
--van-border-width: 0;
|
--van-tab-text-color: #646a73;
|
--van-tabbar-item-text-color: #8f959e;
|
.van-hairline--top-bottom:after {
|
bottom: auto;
|
top: auto;
|
}
|
.van-tabbar-item--active {
|
.van-tabbar-item__icon {
|
.ed-icon {
|
color: var(--ed-color-primary, #3370ff);
|
}
|
}
|
}
|
|
.van-tabbar-item {
|
.ed-icon {
|
font-size: 22px !important;
|
}
|
.van-tabbar-item__text {
|
color: #646a73;
|
font-size: 10px;
|
font-weight: 400;
|
line-height: 10px;
|
}
|
|
&.van-tabbar-item--active {
|
.van-tabbar-item__text {
|
color: var(--ed-color-primary);
|
font-size: 10px;
|
font-weight: 400;
|
line-height: 10px;
|
}
|
}
|
}
|
}
|
</style>
|