manual v2

This commit is contained in:
kanyarat 2024-05-29 14:06:59 +07:00
parent e63ba4b3cd
commit 2cf968ae7e
74 changed files with 913 additions and 21656 deletions

View file

@ -1,710 +1,371 @@
<script setup lang="ts">
import { ref, onMounted, onUnmounted, watch } from "vue"
// import keycloak from "@/plugins/keycloak";
import { useRoute, useRouter } from "vue-router"
import { useDataStore } from "@/stores/data"
import { storeToRefs } from "pinia"
import { scroll, useQuasar } from "quasar"
import { onMounted, ref, watch } from "vue";
import { useDataStore } from "@/stores/data";
import { useManualStore } from "@/stores/manual";
import { storeToRefs } from "pinia";
import type { ScrollType } from "../interface/request/main/main"
import { menuList, tabListLogin, tabListDatamain, tabStructuremain, tabRegistration, tabRecruit, tabList } from "../interface/request/main/main"
import { menuList } from "../interface/request/main/main";
const { setVerticalScrollPosition } = scroll
const store = useDataStore()
const route = useRoute()
const router = useRouter()
const link = ref<string>("")
const dataStore = useDataStore();
const manualStore = useManualStore();
const { toc } = storeToRefs(manualStore);
const { loader } = storeToRefs(dataStore);
const $q = useQuasar()
const { tabData, loader } = storeToRefs(store)
const { changeTab } = store
const miniState = ref<boolean>(false)
const drawerR = ref<boolean>(false)
const rightActive = ref<boolean>(false)
const resize = ref<number>(0)
const active = ref<number>(0)
const drawerL = ref<boolean>(false)
const fullname = ref<string>("")
const role = ref<string[]>([])
const menuRight = ref<boolean>(false)
const listTab = ref<any>([])
const drawerMini = ref(false);
const drawerMain = ref(false);
const search = ref('');
/**
* toggleBtnRight มย ขยาย drawer ขวา
* มย ขยาย สารบญทางขวาของค
*/
const toggleBtnRight = () => {
drawerR.value = !drawerR.value
}
const toggleManualToc = () => {
toc.value = !toc.value;
};
/**
* toggleBtnLeft มย ขยาย drawer าย เมอหนาจอ อถงขนาด 1024 px
* ปกตเปนการยอโดยใช Ministate
*/
const toggleBtnLeft = () => {
if (window.innerWidth < 1024) {
drawerL.value = !drawerL.value
} else {
miniState.value = !miniState.value
}
}
if (window.innerWidth < 1024) {
drawerMain.value = !drawerMain.value;
} else {
drawerMini.value = !drawerMini.value;
}
};
/**
* updateScroll เป function active แทปดานขวา
*/
const updateScroll = (position: number) => {
// console.log(position);
// position undifind position top scroll
if (position === void 0) {
position = document.documentElement.scrollTop || document.body.scrollTop
}
let last
/**
* วนหา id ของ div
*/
for (const i in listTab.value) {
const section = listTab.value[i]
const item = document.getElementById(section.tag)
// console.log(section.childern);
if (section.childern) {
for (const x in section.childern) {
const sectionchildern = section.childern[x]
const itemchildern = document.getElementById(sectionchildern.tag)
console.log(sectionchildern)
if (itemchildern === null) {
continue
}
if (itemchildern.offsetTop >= position + 155) {
console.log(last)
if (last === void 0) {
last = sectionchildern.tag
}
break
} else {
last = sectionchildern.tag
}
}
}
/**
* วนหา id ของ div หนาน
* เมอหาไมเจอใหไปตอตวตอไป
* เมอเจอแล ให ตำแหนงบนสดของ div มากกวาหรอเทาก ตำแหน top scroll บวกก แทปดานบน 155
* last เป undifind ให last เทาก tag แล หยดล
* าไมใช undifind ให last เทาก tag แล ปหาต กรณ div นยาว
*/
if (item === null) {
continue
}
if (item.offsetTop >= position + 155) {
if (last === void 0) {
last = section.tag
}
break
} else {
last = section.tag
}
}
/**
* last ไมเทาก undifind
* ใช เซ active ใหเปนแทปส
* และใช scrollIntoView ายตำแหน activeโดยการเลอนไปหา
*/
if (last !== void 0) {
changeTab(last)
const tocEl = document.getElementById("tab--" + last)
if (tocEl) {
tocEl.scrollIntoView({ block: "nearest" })
}
}
}
/**
* ใหแสดง แทปดานขวา เมอเขาหน รายละเอยดทะเบยนประว และ rightActive เทาก true
*/
const activeBtn = () => {
return route.name == "login" && rightActive.value
}
/**
* เมอเรมตนโปรแกรมให event resize และ function myEventHandler
* set function myEventHandler เพราะ state งไมเซ , state เซทเม หนาจอเร ขยบหนาจอ
* เรมเขามา state rightActive เป state โชว มขวา
* งจ boolean งตอง set
*/
onMounted(async () => {
myEventHandler(null, false)
window.addEventListener("resize", (e: any) => {
myEventHandler(e, true)
})
await setListTab()
})
const setListTab = () => {
menuRight.value = true
if (route.name == "login") {
listTab.value = tabListLogin
} else if (route.name == "datamain") {
listTab.value = tabListDatamain
} else if (route.name == "structuremain") {
listTab.value = tabStructuremain
} else if (route.name == "registmain") {
listTab.value = tabRegistration
} else if (route.name == "recruitmain") {
listTab.value = tabRecruit
} else if (route.name == "commandsmain") {
listTab.value = tabRecruit
}
changeTab(listTab.value[0].tag)
if (route.name == "dashboard") {
listTab.value = []
menuRight.value = false
}
window.scrollTo(0, 0)
}
watch(route, () => {
setListTab()
})
/**
* เมอออกจากโปรแกรม ให ยกเลกการฟ event resize
*/
onUnmounted(() => {
window.removeEventListener("resize", (e: any) => {
myEventHandler(e, true)
})
})
/**
* @param e event ของ resize
* @param setSCroll เชความาจาก event หรอปาว
* set state resize = ความกวางหนาเว
* เมอความกวาง อยกว 1024( เทาก อยกว 1023) ให rightActive เป true แต rightActive true อยแลวไมอง set
* เมอความกวาง มากกวาหรอเทาก 1024 และเม rightActive เป true
* และ drawerR เป true ให rightActive เป true drawerR เป false ให rightActive เป false
* rightActive = true ; แสดงป drawer าน ขวา
* rightActive = false; ไมแสดงป drawer าน ขวา
*/
const myEventHandler = (e: any, setSCroll: boolean) => {
if (setSCroll) {
resize.value = e.target.innerWidth
} else {
resize.value = window.innerWidth
}
if (resize.value < 1024) {
if (!rightActive.value) {
rightActive.value = true
}
} else {
if (rightActive.value) {
if (drawerR.value) {
rightActive.value = true
} else {
rightActive.value = false
}
}
}
}
/**
* ตรวจสอบ path นๆ ายงอย path แมจะเป path child แทปกงจะ active อยเช
* ปกต path จะ active เม path นม ตรงตวมนเช /main
* แตจะไม active เม path child path /main/นๆ
* @param path string
*/
const activeMenu = (path: string) => {
if (path == "dashboard" && route.fullPath == "/") return true
// if (path != "registry" && path == "registryEmployee" && route.fullPath == "/registryEmployee") return true;
const bool = route.fullPath.includes(`/${path}`)
return bool
}
/**
* เปนฟงกนทนตลอด เพอให active ตรงตามเงอนไขใหเป true
* @param tag string เปนชอของ วนนๆ
*/
const activeTab = (tag: string) => {
return tabData.value === tag
}
/**
* คลกเพอให router หร scroll ไปยงตำแหนงนนๆ
* @param tag string เปนชอของ วนนๆ
*/
const tagClick = (tag: string) => {
const hash = `#${tag}`
const items = document.getElementById(tag)
const offset = Math.max(0, items == null ? 0 : items.offsetTop - 84)
// router.replace({ hash });
if (route.hash !== hash) {
const check = activeBtn()
if (check) {
// router.replace({ hash, position: { x: 0, y: 0 } });
// router.replace({ hash }).then(() => {
// setVerticalScrollPosition(window, offset, 300);
// });
drawerR.value = !drawerR.value
setVerticalScrollPosition(window, offset, 300)
} else {
setVerticalScrollPosition(window, offset, 300)
}
} else {
setVerticalScrollPosition(window, offset, 300)
}
}
const activeBtnPlacement = () => {
return route.name == "PlacementPersonalDetail" && rightActive.value
}
/**
* logout keycloak
* confirm อนออกจากระบบ
*/
const doLogout = () => {
$q.dialog({
title: "ยืนยันการออกจากระบบ",
message: `ต้องการออกจากระบบใช้หรือไม่?`,
cancel: "ยกเลิก",
ok: "ยืนยัน",
persistent: true,
}).onOk(() => {
// keycloak.logout();
})
}
/**
* งชอผใชงานจาก keycloak
*/
// if (keycloak.tokenParsed != null) {
// fullname.value = keycloak.tokenParsed.name;
// role.value = keycloak.tokenParsed.role;
// }
const onScroll = (scroll: ScrollType) => {
const { position } = scroll
updateScroll(position)
}
const data = await fetch("/toc.json").then((r) => r.json());
menuList.value[1].children = data;
});
</script>
<!-- โครงเว -->
<template>
<!-- แบบเก design แรก -->
<!-- <q-layout view="lHh Lpr lff"> -->
<!-- ปรบใหบหน รายละเอยดทะเบยนประว -->
<q-layout view="lHh LpR lff" @scroll="onScroll">
<!-- header -->
<q-header flat class="bg-grey-2 text-dark" height-hint="7">
<q-toolbar style="padding: 0 2%">
<q-btn size="13px" class="bg-grey-3" flat dense round @click="toggleBtnLeft" aria-label="Menu">
<q-icon :name="miniState == false ? 'mdi-backburger' : 'mdi-menu-open'" size="20px" color="grey-7" />
</q-btn>
<!-- แบบเก design แรก -->
<!-- <q-layout view="lHh Lpr lff"> -->
<!-- ปรบใหบหน รายละเอยดทะเบยนประว -->
<q-layout view="lHh LpR lff">
<!-- header -->
<q-header flat class="bg-grey-2 text-dark" height-hint="7">
<q-toolbar style="padding: 0 2%">
<q-btn
size="13px"
class="bg-grey-3"
flat
dense
round
@click="toggleBtnLeft"
aria-label="Menu"
>
<q-icon
:name="drawerMini == false ? 'mdi-backburger' : 'mdi-menu-open'"
size="20px"
color="grey-7"
/>
</q-btn>
<q-space />
<q-space />
<q-btn size="13px" class="bg-blue-1" v-if="activeBtn() || activeBtnPlacement()" flat dense round @click="toggleBtnRight" aria-label="Menu">
<q-icon name="mdi-menu" class="rotate-180" size="20px" color="blue" />
</q-btn>
</q-toolbar>
</q-header>
<!-- end header -->
<q-btn
size="13px"
class="bg-blue-1"
v-if="$route.path.startsWith('/manual') && $q.screen.width < 1024"
flat
dense
round
@click="toggleManualToc"
aria-label="Menu"
>
<q-icon name="mdi-menu" class="rotate-180" size="20px" color="blue" />
</q-btn>
</q-toolbar>
</q-header>
<!-- end header -->
<!-- drawer -->
<q-drawer side="left" class="text-white" style="background: #273238" v-model="drawerL" show-if-above :width="260" :breakpoint="1023" :mini="miniState">
<!-- วนของเมน mini -->
<template v-slot:mini>
<q-scroll-area class="fit mini-slot cursor-pointer">
<q-toolbar class="q-py-md">
<q-img src="@/assets/logo.png" spinner-color="white" style="height: 32px; max-width: 32px" />
</q-toolbar>
<q-separator color="grey-9" />
<!-- เมนอย ตอนย -->
<q-list padding>
<div v-for="(menuItem, index) in menuList" :key="index">
<!-- <div v-if="role.includes(menuItem.role)"> -->
<q-item
clickable
v-ripple
:active="link === menuItem.label"
@click="link = menuItem.label"
active-class="text-primary menuActiveMini text-weight-medium"
v-if="menuItem.key == 3 || menuItem.key == 5"
>
<div class="row items-center no-wrap">
<q-icon :name="menuItem.icon" size="20px" class="q-ml-md" />
<q-icon name="mdi-dots-vertical" size="13px" color="grey-6" />
</div>
<q-tooltip anchor="center right" self="center left" :offset="[10, 10]">
{{ menuItem.label }}
</q-tooltip>
<q-menu anchor="top right" self="top left" :offset="[5, 0]" style="background: #273238; z-index: 9000">
<q-list class="text-white q-py-sm">
<div v-for="(subMenu, i) in menuItem.children" :key="i" :to="{ name: `${subMenu.path}` }">
<!-- เมนอย 2 -->
<div v-if="menuItem.key == 5">
<q-item dense clickable v-if="subMenu.key !== 5.1">
<q-item-section>{{ subMenu.label }} </q-item-section>
<q-item-section side>
<q-icon name="keyboard_arrow_right" />
</q-item-section>
<!-- drawer -->
<q-drawer
side="left"
class="text-white"
style="background: #273238"
v-model="drawerMain"
show-if-above
:width="260"
:breakpoint="1023"
:mini="drawerMini"
>
<!-- วนของเมน mini -->
<template v-slot:mini>
<q-scroll-area class="fit mini-slot cursor-pointer">
<q-toolbar class="q-py-md">
<q-img
src="@/assets/logo.png"
spinner-color="white"
style="height: 32px; max-width: 32px"
/>
</q-toolbar>
<q-separator color="grey-9" />
<!-- เมนอย ตอนย -->
<q-list padding>
<div v-for="(menuItem, index) in menuList" :key="index">
<q-item
clickable
v-ripple
:to="menuItem.path"
:active="
$route.path === menuItem.path ||
($route.path !== '/' && menuItem.path?.includes($route.path))
"
active-class="text-primary menuActiveMini"
>
<q-item-section avatar>
<q-avatar size="md" font-size="20px">
<q-icon :name="menuItem.icon" />
</q-avatar>
</q-item-section>
<q-tooltip
anchor="center right"
self="center left"
:offset="[10, 10]"
>
{{ menuItem.label }}
</q-tooltip>
</q-item>
</div>
</q-list>
</q-scroll-area>
</template>
<!-- จบสวนของเมน mini -->
<q-menu anchor="top end" self="top start" :offset="[5, 0]" style="background: #273238; z-index: 9000">
<q-list class="text-white q-py-sm">
<q-item
v-for="subMenu2 in subMenu.children"
:key="subMenu2.label"
:to="{ name: `${subMenu2.path}` }"
dense
class="q-pl-md text-body2"
active-class="text-primary active-item text-weight-medium"
clickable
>
<q-item-section>
<q-item-label>{{ subMenu2.label }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-item>
<!-- วนของเมน -->
<q-scroll-area class="fit">
<q-toolbar class="q-py-md">
<q-toolbar-title shrink class="row items-center no-wrap">
<q-img
src="@/assets/logo.png"
spinner-color="white"
style="height: 40px; max-width: 40px"
/>
<div class="row q-ml-md">
<div
style="color: #ffffff; letter-spacing: 1px"
class="text-body2 text-weight-bolder"
>
ระบบ<span class="text-primary">ทรพยากรบคคล</span>
</div>
<div class="text-caption text-white">&nbsp;กรงเทพมหานคร</div>
</div>
</q-toolbar-title>
</q-toolbar>
<q-separator inset color="grey-9" />
<div class="row">
<div class="col-12 q-pa-md">
<q-input
outlined
bg-color="white"
label="ค้นหา"
v-model="search"
dense
>
<template v-slot:prepend>
<q-icon name="search" />
</template>
</q-input>
</div>
</div>
<q-list padding>
<div v-for="(menuItem, index) in menuList" :key="index">
<!-- เมนอย -->
<q-expansion-item
v-if="menuItem.children && menuItem.children.length > 0"
class="menuSub"
expand-icon="mdi-chevron-down"
expanded-icon="mdi-chevron-up"
>
<template v-slot:header>
<q-item-section avatar>
<q-avatar :icon="menuItem.icon" size="md" font-size="20px" />
</q-item-section>
<q-item-section>{{ menuItem.label }}</q-item-section>
</template>
<q-item
v-else
dense
class="q-pl-md q-pr-xl text-body2"
active-class="text-primary active-item text-weight-medium"
clickable
:to="{ name: `${subMenu.path}` }"
>
<q-item-section>
<q-item-label>{{ subMenu.label }}</q-item-label>
</q-item-section>
</q-item>
</div>
<!-- เมนอย 1 -->
<div v-else>
<q-item dense class="q-pl-md q-pr-xl text-body2" active-class="text-primary active-item text-weight-medium" clickable :to="{ name: `${subMenu.path}` }">
<q-item-section>
<q-item-label>{{ subMenu.label }}</q-item-label>
</q-item-section>
</q-item>
</div>
</div>
</q-list>
</q-menu>
</q-item>
<q-item
clickable
v-ripple
:to="{ name: `${menuItem.path}` }"
:active="link === menuItem.label"
@click="link = menuItem.label"
active-class="text-primary menuActiveMini"
v-else
>
<q-item-section avatar>
<q-avatar size="md" font-size="20px">
<q-icon :name="menuItem.icon" />
</q-avatar>
</q-item-section>
<q-tooltip anchor="center right" self="center left" :offset="[10, 10]">
{{ menuItem.label }}
</q-tooltip>
</q-item>
<!-- </div> -->
</div>
</q-list>
</q-scroll-area>
</template>
<!-- จบสวนของเมน mini -->
<!-- เมนอย 1 -->
<q-item
dense
class="menuSubHover"
active-class="text-primary active-item text-weight-bold menuSubAct"
clickable
v-for="child in menuItem.children"
:key="child.path"
:to="child.path"
>
<q-item-section>
<q-item-label class="font-400">
{{ child.label }}
</q-item-label>
</q-item-section>
</q-item>
</q-expansion-item>
<q-item
v-else
class="text-weight-medium menu"
:active="$route.path === menuItem.path"
active-class="text-primary active-item text-weight-bold menuActive"
:to="menuItem.path"
clickable
v-ripple
dense
exact
>
<q-item-section avatar>
<q-avatar size="md" font-size="20px">
<q-icon
:name="
$route.path === menuItem.path
? menuItem.activeIcon
: menuItem.icon
"
/>
</q-avatar>
</q-item-section>
<!-- วนของเมน -->
<q-scroll-area class="fit">
<q-toolbar class="q-py-md">
<q-toolbar-title shrink class="row items-center no-wrap">
<q-img src="@/assets/logo.png" spinner-color="white" style="height: 40px; max-width: 40px" />
<div class="row q-ml-md">
<div style="color: #ffffff; letter-spacing: 1px" class="text-body2 text-weight-bolder">ระบบ<span class="text-primary">ทรพยากรบคคล</span></div>
<div class="text-caption text-white">&nbsp;กรงเทพมหานคร</div>
</div>
</q-toolbar-title>
</q-toolbar>
<q-separator inset color="grey-9" />
<div class="row">
<div class="col-12 q-pa-md">
<q-input outlined bg-color="white" label="ค้นหา" v-model="text" dense>
<template v-slot:prepend>
<q-icon name="search" />
</template>
</q-input>
</div>
</div>
<q-list padding>
<div v-for="(menuItem, index) in menuList" :key="index">
<!-- เมนอย -->
<!-- <div v-if="role.includes(menuItem.role)"> -->
<q-expansion-item group="somegroup" class="menuSub" expand-icon="mdi-chevron-down" expanded-icon="mdi-chevron-up" v-if="menuItem.key == 2">
<template v-slot:header>
<q-item-section avatar>
<q-avatar :icon="menuItem.icon" size="md" font-size="20px" />
</q-item-section>
<q-item-section>{{ menuItem.label }}</q-item-section>
</template>
<q-item-section>
<q-item-label>{{ menuItem.label }}</q-item-label>
</q-item-section>
</q-item>
</div>
</q-list>
</q-scroll-area>
</q-drawer>
<!-- เมนอย 2 (สรรหา) -->
<div v-if="menuItem.key == 5">
<div v-for="(subMenu, i) in menuItem.children" :key="i">
<q-expansion-item switch-toggle-side dense-toggle :label="subMenu.label" v-if="subMenu.key !== 5.1" class="expan2" dense>
<q-item
dense
class="menuSubHover"
active-class="text-primary active-item text-weight-bold menuSubAct"
clickable
v-for="subMenu2 in subMenu.children"
:key="subMenu2.key"
:to="{ name: `${subMenu2.path}` }"
>
<q-item-section>
<q-item-label class="font-400 subLabel">{{ subMenu2.label }} </q-item-label>
</q-item-section>
</q-item>
</q-expansion-item>
<q-item v-else dense class="menuSubHover" active-class="text-primary active-item text-weight-bold menuSubAct" clickable :to="{ name: `${subMenu.path}` }">
<q-item-section>
<q-item-label>{{ subMenu.label }}</q-item-label>
</q-item-section>
</q-item>
</div>
</div>
<!-- เมนอย 1 -->
<q-item
v-else
dense
class="menuSubHover"
active-class="text-primary active-item text-weight-bold menuSubAct"
clickable
v-for="(subMenu, j) in menuItem.children"
:key="j"
:to="subMenu.path"
>
<q-item-section>
<q-item-label class="font-400">{{ subMenu.label }}</q-item-label>
</q-item-section>
</q-item>
</q-expansion-item>
<!-- drawer page login -->
<!-- เมนปกต -->
<q-item
class="text-weight-medium menu"
:active="activeMenu(menuItem.path)"
active-class="text-primary active-item text-weight-bold menuActive"
:to="{ name: `${menuItem.path}` }"
clickable
v-ripple
dense
exact
v-else
>
<q-item-section avatar>
<q-avatar size="md" font-size="20px">
<q-icon :name="menuItem.key === active ? menuItem.activeIcon : menuItem.icon" />
</q-avatar>
</q-item-section>
<q-item-section>
<q-item-label>{{ menuItem.label }}</q-item-label>
</q-item-section>
</q-item>
<!-- </div> -->
</div>
</q-list>
</q-scroll-area>
</q-drawer>
<!-- drawer page login -->
<q-drawer v-if="menuRight" side="right" class="bg-grey-2" show-if-above v-model="drawerR" :width="250" :breakpoint="1023">
<q-scroll-area class="fit">
<q-list padding>
<div v-for="(tabItem, index) in listTab" :key="index">
<q-item
:id="'tab--' + tabItem.tag"
class="tabNative"
active-class="text-blue-7 active-item text-weight-medium tabActive"
:active="activeTab(tabItem.tag)"
clickable
v-ripple
dense
exact
@click="tagClick(tabItem.tag)"
>
<q-item-section>
<q-item-label
><q-icon size="11px" name="mdi-circle-medium" />
<span class="q-pl-xs">{{ tabItem.label }}</span>
</q-item-label>
</q-item-section>
</q-item>
<div v-if="route.name == 'recruitmain'">
<q-item
v-if="route.name == 'recruitmain'"
v-for="(childItem, childIndex) in tabItem.childern"
:key="'child-' + childIndex"
:id="'tab--' + childItem.tag"
class="tabNative child-tab"
active-class="text-blue-7 active-item text-weight-medium tabActive"
:active="activeTab(childItem.tag)"
clickable
v-ripple
dense
exact
@click="tagClick(childItem.tag)"
>
<q-item-section>
<q-item-label>
<!-- <q-icon size="11px" name="mdi-circle-small" /> -->
<span class="q-pl-xl">{{ childItem.label }}</span>
</q-item-label>
</q-item-section>
</q-item>
</div>
</div>
</q-list>
</q-scroll-area>
</q-drawer>
<q-page-container class="bg-grey-2">
<q-page style="padding: 0 2%">
<router-view :key="$route.fullPath" />
</q-page>
</q-page-container>
<full-loader :visibility="loader" />
</q-layout>
<q-page-container class="bg-grey-2">
<q-page style="padding: 0 2%">
<router-view :key="$route.fullPath" />
</q-page>
</q-page-container>
<full-loader :visibility="loader" />
</q-layout>
</template>
<style>
.menuSub .q-item__section--avatar,
.menu .q-item__section--avatar {
min-width: 0px;
min-width: 0px;
}
.menu {
padding-bottom: 5px;
padding-top: 5px;
border-radius: 0 100px 100px 0;
margin-right: 2%;
padding-bottom: 5px;
padding-top: 5px;
border-radius: 0 100px 100px 0;
margin-right: 2%;
}
.menuActive {
background: #212a2f;
border-radius: 0 100px 100px 0;
margin-right: 2%;
background: #212a2f;
border-radius: 0 100px 100px 0;
margin-right: 2%;
}
.menuActiveMini {
background: #212a2f;
background: #212a2f;
}
.menuSub .q-item {
border-radius: 0 100px 100px 0;
margin-right: 2%;
font-weight: 500;
border-radius: 0 100px 100px 0;
margin-right: 2%;
font-weight: 500;
}
.expan2 .q-item {
padding-left: 10%;
padding-left: 10%;
}
.subLabel {
white-space: nowrap;
width: 160px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 160px;
overflow: hidden;
text-overflow: ellipsis;
}
.font-400 {
font-weight: 400;
font-weight: 400;
}
.expan2 .menuSubHover {
padding-left: 30%;
border-radius: 20px;
padding-left: 30%;
border-radius: 20px;
}
.menuSubHover {
padding-left: 25%;
border-radius: 20px;
padding-left: 25%;
border-radius: 20px;
}
.menuSub .q-expansion-item__content {
background: #212a2f;
padding: 5px 0px;
margin-bottom: 5px;
background: #212a2f;
padding: 5px 0px;
margin-bottom: 5px;
}
.tabNative {
color: grey;
padding-left: 8%;
border-radius: 100px 0px 0px 100px;
color: grey;
padding-left: 8%;
border-radius: 100px 0px 0px 100px;
}
.tabActive {
padding-left: 8%;
background: #e4f2ff;
border-radius: 100px 0px 0px 100px;
padding-left: 8%;
background: #e4f2ff;
border-radius: 100px 0px 0px 100px;
}
.q-card {
box-shadow: 3px 3px 20px -10px rgba(151, 150, 150, 0.261) !important;
box-shadow: 3px 3px 20px -10px rgba(151, 150, 150, 0.261) !important;
}
.q-card--bordered {
border: 1px solid #ededed;
box-shadow: none !important;
border: 1px solid #ededed;
box-shadow: none !important;
}
.q-menu {
box-shadow: 3px 3px 10px 1px rgba(95, 95, 95, 0.15) !important;
box-shadow: 3px 3px 10px 1px rgba(95, 95, 95, 0.15) !important;
}
.toptitle {
font-size: 1.2rem;
font-weight: bold;
margin-bottom: 1%;
font-size: 1.2rem;
font-weight: bold;
margin-bottom: 1%;
}
.q-field--outlined .q-field__control {
border-radius: 50px;
border-radius: 50px;
}
.q-field--outlined .q-field__control:before {
border-color: #c8d3db;
border-color: #c8d3db;
}
.btnManu {
min-height: 48px;
border-radius: 0px 100px 100px 0px;
min-height: 48px;
border-radius: 0px 100px 100px 0px;
}
.q-field--outlined .q-icon {
color: #7474747f;
color: #7474747f;
}
.q-card__actions .q-btn--rectangle {
padding: 0 14px !important;
padding: 0 14px !important;
}
/* custom scrollbar */
::-webkit-scrollbar {
width: 12px;
height: 12px;
width: 12px;
height: 12px;
}
::-webkit-scrollbar-track {
background-color: transparent;
background-color: transparent;
}
::-webkit-scrollbar-thumb {
background-color: #d6dee1;
border-radius: 20px;
border: 3px solid transparent;
background-clip: content-box;
background-color: #d6dee1;
border-radius: 20px;
border: 3px solid transparent;
background-clip: content-box;
}
::-webkit-scrollbar-thumb:hover {
background-color: #a8bbbf;
background-color: #a8bbbf;
}
</style>