Smoothness
This commit is contained in:
@@ -544,7 +544,7 @@ require_once __DIR__ . '/includes/header.php';
|
|||||||
Systeembeheer & Integraties
|
Systeembeheer & Integraties
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-sm text-slate-600 dark:text-slate-400 max-w-2xl leading-relaxed">
|
<p class="text-sm text-slate-600 dark:text-slate-400 max-w-2xl leading-relaxed">
|
||||||
Beheer hier de centrale organisatiekoppelingen zoals Microsoft 365 Azure App Registratie en Jira, inspecteer de teamstatus en configureer toekomstige modules.
|
Centrale organisatiekoppelingen (Microsoft 365 & Jira), beveiligingsinstellingen en teamstatus.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -101,9 +101,7 @@ $isAdmin = ($userRole === 'ADMIN');
|
|||||||
Beheerder
|
Beheerder
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<p id="boardDescriptionText" class="text-xs text-slate-500 dark:text-slate-400 mt-0.5">
|
<p id="boardDescriptionText" class="hidden text-xs text-slate-500 dark:text-slate-400 mt-0.5"></p>
|
||||||
Teamtaken, opdrachten & Outlook agendablokkering
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -134,10 +132,10 @@ $isAdmin = ($userRole === 'ADMIN');
|
|||||||
<!-- Filter: Prioriteit -->
|
<!-- Filter: Prioriteit -->
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<select id="filterPriority" onchange="renderCards()" class="bg-slate-50 dark:bg-[#0c0f17] border border-slate-200 dark:border-slate-800 rounded-xl px-3 py-2 text-xs text-slate-700 dark:text-slate-300 font-medium focus:ring-2 focus:ring-indigo-500/30 cursor-pointer shadow-2xs">
|
<select id="filterPriority" onchange="renderCards()" class="bg-slate-50 dark:bg-[#0c0f17] border border-slate-200 dark:border-slate-800 rounded-xl px-3 py-2 text-xs text-slate-700 dark:text-slate-300 font-medium focus:ring-2 focus:ring-indigo-500/30 cursor-pointer shadow-2xs">
|
||||||
<option value="ALL">Alle prioriteiten</option>
|
<option value="ALL">Prioriteiten (Alle)</option>
|
||||||
<option value="P1">P1 — Urgent</option>
|
<option value="P1">P1 Urgent</option>
|
||||||
<option value="P2">P2 — Hoog</option>
|
<option value="P2">P2 Hoog</option>
|
||||||
<option value="P3">P3 — Normaal</option>
|
<option value="P3">P3 Normaal</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -637,7 +635,14 @@ async function loadBoardData(boardId, showLoader = true) {
|
|||||||
currentBoardData = data;
|
currentBoardData = data;
|
||||||
|
|
||||||
// Titels en beheerknop
|
// Titels en beheerknop
|
||||||
document.getElementById('boardDescriptionText').innerText = data.board.description || 'Geen toelichting';
|
const descEl = document.getElementById('boardDescriptionText');
|
||||||
|
if (data.board.description && data.board.description.trim() !== '') {
|
||||||
|
descEl.innerText = data.board.description;
|
||||||
|
descEl.classList.remove('hidden');
|
||||||
|
} else {
|
||||||
|
descEl.innerText = '';
|
||||||
|
descEl.classList.add('hidden');
|
||||||
|
}
|
||||||
const btnManage = document.getElementById('btnManageBoard');
|
const btnManage = document.getElementById('btnManageBoard');
|
||||||
const roleBadge = document.getElementById('boardRoleBadge');
|
const roleBadge = document.getElementById('boardRoleBadge');
|
||||||
|
|
||||||
|
|||||||
@@ -170,12 +170,12 @@ $categories = [
|
|||||||
<?php if ($aiSettings['ai_enabled'] && $aiSettings['has_key']): ?>
|
<?php if ($aiSettings['ai_enabled'] && $aiSettings['has_key']): ?>
|
||||||
<button onclick="aiGenerateIdeas(this)" class="flex items-center space-x-1.5 px-3 py-2 rounded-xl bg-violet-50 hover:bg-violet-100 dark:bg-violet-950/50 dark:hover:bg-violet-900/50 text-violet-700 dark:text-violet-300 border border-violet-200 dark:border-violet-800/60 text-xs font-bold transition cursor-pointer shadow-xs" title="Genereer 4 innovatieve ideeën via AI Co-Pilot">
|
<button onclick="aiGenerateIdeas(this)" class="flex items-center space-x-1.5 px-3 py-2 rounded-xl bg-violet-50 hover:bg-violet-100 dark:bg-violet-950/50 dark:hover:bg-violet-900/50 text-violet-700 dark:text-violet-300 border border-violet-200 dark:border-violet-800/60 text-xs font-bold transition cursor-pointer shadow-xs" title="Genereer 4 innovatieve ideeën via AI Co-Pilot">
|
||||||
<i data-lucide="sparkles" class="w-4 h-4 text-violet-500"></i>
|
<i data-lucide="sparkles" class="w-4 h-4 text-violet-500"></i>
|
||||||
<span>💡 AI Ideeën</span>
|
<span>AI Ideeën</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button onclick="aiCategorizeCards(this)" class="flex items-center space-x-1.5 px-3 py-2 rounded-xl bg-indigo-50 hover:bg-indigo-100 dark:bg-indigo-950/50 dark:hover:bg-indigo-900/50 text-indigo-700 dark:text-indigo-300 border border-indigo-200 dark:border-indigo-800/60 text-xs font-bold transition cursor-pointer shadow-xs" title="Sorteer alle kaartjes automatisch in Ideeën, Knelpunten, Oplossingen of Quick Wins">
|
<button onclick="aiCategorizeCards(this)" class="flex items-center space-x-1.5 px-3 py-2 rounded-xl bg-indigo-50 hover:bg-indigo-100 dark:bg-indigo-950/50 dark:hover:bg-indigo-900/50 text-indigo-700 dark:text-indigo-300 border border-indigo-200 dark:border-indigo-800/60 text-xs font-bold transition cursor-pointer shadow-xs" title="Sorteer alle kaartjes automatisch in Ideeën, Knelpunten, Oplossingen of Quick Wins">
|
||||||
<i data-lucide="wand-2" class="w-4 h-4 text-indigo-500"></i>
|
<i data-lucide="wand-2" class="w-4 h-4 text-indigo-500"></i>
|
||||||
<span>✨ Auto-Categoriseer</span>
|
<span>Categoriseren</span>
|
||||||
</button>
|
</button>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
|||||||
@@ -117,9 +117,6 @@ $boardsJson = json_encode($boards, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT
|
|||||||
</span>
|
</span>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-xs text-slate-500 dark:text-slate-400 mt-1">
|
|
||||||
Beheer tickets toegewezen aan jou en je projectteams. Plan ze direct in je dagplanning of zet ze op een Kanban bord.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+45
-6
@@ -527,16 +527,29 @@ for ($h = $startHour; $h <= $endHour; $h++) {
|
|||||||
<h1 class="text-2xl sm:text-3xl font-black tracking-tight text-slate-900 dark:text-white">
|
<h1 class="text-2xl sm:text-3xl font-black tracking-tight text-slate-900 dark:text-white">
|
||||||
Fociz
|
Fociz
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-xs sm:text-sm text-slate-500 dark:text-slate-400 mt-0.5">
|
|
||||||
Jouw centrale werkstation • Taken, Agenda, Mail & Jira
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Instellingen Knop (Widgets & Indeling) -->
|
<!-- Instellingen Dropdown (Widgets, Indeling & Dagen Blokkeren) -->
|
||||||
<div class="flex items-center space-x-2">
|
<div class="relative">
|
||||||
<button onclick="openWidgetManagerModal()" class="p-2 rounded-xl text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800/80 transition cursor-pointer border border-transparent hover:border-slate-200 dark:hover:border-slate-700" title="Widgets & Indeling beheren">
|
<button id="plannerSettingsDropdownBtn" onclick="togglePlannerSettingsMenu(event)" class="p-2 rounded-xl text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800/80 transition cursor-pointer border border-transparent hover:border-slate-200 dark:hover:border-slate-700" title="Dashboard Opties & Instellingen">
|
||||||
<i data-lucide="settings" class="w-5 h-5"></i>
|
<i data-lucide="settings" class="w-5 h-5"></i>
|
||||||
</button>
|
</button>
|
||||||
|
<div id="plannerSettingsDropdownMenu" class="hidden absolute right-0 mt-2 w-56 rounded-2xl bg-white dark:bg-[#111624] border border-slate-200 dark:border-slate-800 shadow-xl py-1.5 z-50 text-xs text-slate-700 dark:text-slate-300">
|
||||||
|
<button onclick="closePlannerSettingsMenu(); openWidgetManagerModal();" class="w-full text-left px-3.5 py-2 hover:bg-slate-50 dark:hover:bg-slate-800/70 flex items-center space-x-2.5 transition cursor-pointer">
|
||||||
|
<i data-lucide="layout-grid" class="w-4 h-4 text-indigo-500"></i>
|
||||||
|
<span class="font-medium">Widgets & Indeling</span>
|
||||||
|
</button>
|
||||||
|
<button onclick="closePlannerSettingsMenu(); openCalendarBlockModal();" class="w-full text-left px-3.5 py-2 hover:bg-slate-50 dark:hover:bg-slate-800/70 flex items-center space-x-2.5 transition cursor-pointer">
|
||||||
|
<i data-lucide="palmtree" class="w-4 h-4 text-amber-500"></i>
|
||||||
|
<span class="font-medium">Vakantie / Dagen Blokkeren</span>
|
||||||
|
</button>
|
||||||
|
<?php if ($isOutlookConnected): ?>
|
||||||
|
<button onclick="closePlannerSettingsMenu(); triggerManualSync();" class="w-full text-left px-3.5 py-2 hover:bg-slate-50 dark:hover:bg-slate-800/70 flex items-center space-x-2.5 transition cursor-pointer border-t border-slate-100 dark:border-slate-800/80">
|
||||||
|
<i data-lucide="refresh-cw" class="w-4 h-4 text-sky-500"></i>
|
||||||
|
<span class="font-medium">Outlook Synchroniseren</span>
|
||||||
|
</button>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -2816,6 +2829,32 @@ if ($isAjaxRequest) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
// --- Dashboard Banner Instellingen Dropdown Menu ---
|
||||||
|
function togglePlannerSettingsMenu(e) {
|
||||||
|
if (e) e.stopPropagation();
|
||||||
|
const menu = document.getElementById('plannerSettingsDropdownMenu');
|
||||||
|
if (menu) {
|
||||||
|
menu.classList.toggle('hidden');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function closePlannerSettingsMenu() {
|
||||||
|
const menu = document.getElementById('plannerSettingsDropdownMenu');
|
||||||
|
if (menu) {
|
||||||
|
menu.classList.add('hidden');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('click', function(e) {
|
||||||
|
const menu = document.getElementById('plannerSettingsDropdownMenu');
|
||||||
|
const btn = document.getElementById('plannerSettingsDropdownBtn');
|
||||||
|
if (menu && !menu.classList.contains('hidden')) {
|
||||||
|
if (!menu.contains(e.target) && !btn.contains(e.target)) {
|
||||||
|
closePlannerSettingsMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// --- Fociz Widget Beheer & Configuratielogica (v2.0) ---
|
// --- Fociz Widget Beheer & Configuratielogica (v2.0) ---
|
||||||
let focizWidgets = <?= json_encode(array_values($userWidgetLayout), JSON_UNESCAPED_UNICODE) ?>;
|
let focizWidgets = <?= json_encode(array_values($userWidgetLayout), JSON_UNESCAPED_UNICODE) ?>;
|
||||||
const defaultWidgetLayout = <?= json_encode(array_values($availableWidgets), JSON_UNESCAPED_UNICODE) ?>;
|
const defaultWidgetLayout = <?= json_encode(array_values($availableWidgets), JSON_UNESCAPED_UNICODE) ?>;
|
||||||
|
|||||||
+9
-4
@@ -71,9 +71,7 @@ html.dark #timelineGridWrapper::-webkit-scrollbar-thumb {
|
|||||||
Beheerder
|
Beheerder
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<p id="boardDescriptionText" class="text-xs text-slate-500 dark:text-slate-400 mt-0.5">
|
<p id="boardDescriptionText" class="hidden text-xs text-slate-500 dark:text-slate-400 mt-0.5"></p>
|
||||||
Gantt-planning, mijlpalen & datumbereiken
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -534,7 +532,14 @@ async function loadBoardData(boardId) {
|
|||||||
if (data.success && data.has_board) {
|
if (data.success && data.has_board) {
|
||||||
currentBoardData = data;
|
currentBoardData = data;
|
||||||
|
|
||||||
document.getElementById('boardDescriptionText').innerText = data.board.description || 'Geen toelichting';
|
const descEl = document.getElementById('boardDescriptionText');
|
||||||
|
if (data.board.description && data.board.description.trim() !== '') {
|
||||||
|
descEl.innerText = data.board.description;
|
||||||
|
descEl.classList.remove('hidden');
|
||||||
|
} else {
|
||||||
|
descEl.innerText = '';
|
||||||
|
descEl.classList.add('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
// Beheerdersbadge
|
// Beheerdersbadge
|
||||||
const badge = document.getElementById('boardRoleBadge');
|
const badge = document.getElementById('boardRoleBadge');
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ require_once __DIR__ . '/includes/header.php';
|
|||||||
Team & Uitnodigingen
|
Team & Uitnodigingen
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-slate-500 dark:text-slate-400 text-xs sm:text-sm mt-1 max-w-2xl">
|
<p class="text-slate-500 dark:text-slate-400 text-xs sm:text-sm mt-1 max-w-2xl">
|
||||||
Fociz is strikt afgesloten: nieuwe collega's kunnen enkel toegang krijgen na het ontvangen van een uitnodigingslink en verplichte 2FA-activatie.
|
Beheer collega's, rollen en uitnodigingslinks voor toegang tot de Fociz omgeving.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user