Agenda google, avisos globais, feriados + avisos globais, templates de email, configuracoes empresa, preview empresa.
This commit is contained in:
@@ -10,7 +10,13 @@ import AppRail from './AppRail.vue'
|
||||
import AppRailPanel from './AppRailPanel.vue'
|
||||
import AppRailSidebar from './AppRailSidebar.vue'
|
||||
import AjudaDrawer from '@/components/AjudaDrawer.vue'
|
||||
import SupportDebugBanner from '@/support/components/SupportDebugBanner.vue'
|
||||
import SupportDebugBanner from '@/support/components/SupportDebugBanner.vue'
|
||||
import GlobalNoticeBanner from '@/features/notices/GlobalNoticeBanner.vue'
|
||||
|
||||
import { useNoticeStore } from '@/stores/noticeStore'
|
||||
import { useTenantStore } from '@/stores/tenantStore'
|
||||
import { useEntitlementsStore } from '@/stores/entitlementsStore'
|
||||
import { useTenantFeaturesStore } from '@/stores/tenantFeaturesStore'
|
||||
|
||||
import { fetchDocsForPath, useAjuda } from '@/composables/useAjuda'
|
||||
|
||||
@@ -21,19 +27,23 @@ const ajudaPushStyle = computed(() => ({
|
||||
paddingRight: drawerOpen.value ? '420px' : '0'
|
||||
}))
|
||||
|
||||
import { useTenantStore } from '@/stores/tenantStore'
|
||||
import { useEntitlementsStore } from '@/stores/entitlementsStore'
|
||||
import { useTenantFeaturesStore } from '@/stores/tenantFeaturesStore'
|
||||
|
||||
const route = useRoute()
|
||||
const route = useRoute()
|
||||
const noticeStore = useNoticeStore()
|
||||
const { layoutConfig, layoutState, hideMobileMenu, isDesktop, effectiveVariant } = useLayout()
|
||||
|
||||
const layoutArea = computed(() => route.meta?.area || null)
|
||||
provide('layoutArea', layoutArea)
|
||||
|
||||
const tenantStore = useTenantStore()
|
||||
const tenantStore = useTenantStore()
|
||||
const entitlementsStore = useEntitlementsStore()
|
||||
const tf = useTenantFeaturesStore()
|
||||
const tf = useTenantFeaturesStore()
|
||||
|
||||
// ── Atualiza contexto dos notices ao mudar de rota ────────────
|
||||
watch(
|
||||
() => route.path,
|
||||
(path) => noticeStore.updateContext(path, tenantStore.role),
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
const containerClass = computed(() => {
|
||||
return {
|
||||
@@ -86,6 +96,7 @@ watch(() => route.path, (path) => fetchDocsForPath(path), { immediate: true })
|
||||
|
||||
onMounted(() => {
|
||||
window.addEventListener('app:session-refreshed', onSessionRefreshed)
|
||||
noticeStore.init(tenantStore.role, route.path)
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
@@ -146,6 +157,7 @@ onBeforeUnmount(() => {
|
||||
|
||||
<!-- ══ Global — fora de todos os branches, persiste em qualquer layout/rota ══ -->
|
||||
<SupportDebugBanner />
|
||||
<GlobalNoticeBanner />
|
||||
</template>
|
||||
|
||||
<style>
|
||||
@@ -154,14 +166,24 @@ onBeforeUnmount(() => {
|
||||
para sobrescrever o tema PrimeVue/Sakai
|
||||
────────────────────────────────────────────── */
|
||||
|
||||
/* ── Global Notice Banner: variável de altura ─────────────
|
||||
Definida aqui como fallback; o componente altera via JS */
|
||||
:root {
|
||||
--notice-banner-height: 0px;
|
||||
}
|
||||
|
||||
/* ── Topbar: desce pelo banner ─────────────────────────── */
|
||||
.rail-topbar {
|
||||
top: var(--notice-banner-height) !important;
|
||||
}
|
||||
|
||||
/* ── Sidebar — sempre abaixo da topbar fixed (56px) ────────
|
||||
z-index: 999 para flutuar sobre o conteúdo em overlay.
|
||||
Topbar (z-index 1000) fica sempre acessível acima da sidebar. */
|
||||
Desce pelo banner também. */
|
||||
.layout-sidebar {
|
||||
position: fixed !important;
|
||||
top: 56px !important;
|
||||
top: calc(56px + var(--notice-banner-height)) !important;
|
||||
left: 0 !important;
|
||||
height: calc(100vh - 56px) !important;
|
||||
height: calc(100vh - 56px - var(--notice-banner-height)) !important;
|
||||
border-radius: 0 !important;
|
||||
padding: 0 !important;
|
||||
box-shadow: 2px 0 6px rgba(0,0,0,.06) !important;
|
||||
@@ -181,7 +203,7 @@ onBeforeUnmount(() => {
|
||||
.layout-main-container {
|
||||
margin-left: 20rem !important;
|
||||
padding-left: 0 !important;
|
||||
padding-top: 56px !important;
|
||||
padding-top: calc(56px + var(--notice-banner-height)) !important;
|
||||
}
|
||||
.layout-overlay .layout-main-container,
|
||||
.layout-static-inactive .layout-main-container {
|
||||
@@ -203,11 +225,14 @@ onBeforeUnmount(() => {
|
||||
</style>
|
||||
|
||||
<style scoped>
|
||||
/* ─── Layout Rail (inalterado) ────────────────── */
|
||||
/* ─── Layout Rail ─────────────────────────────── */
|
||||
.l2-root {
|
||||
position: fixed;
|
||||
top: var(--notice-banner-height, 0px); /* desce pelo banner */
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
background: var(--surface-ground);
|
||||
}
|
||||
@@ -217,9 +242,9 @@ onBeforeUnmount(() => {
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
padding-top: 56px; /* compensa a topbar fixed */
|
||||
padding-top: 56px; /* compensa topbar — banner já absorvido pelo l2-root */
|
||||
}
|
||||
|
||||
.l2-content {
|
||||
|
||||
Reference in New Issue
Block a user