feat: add external admin dashboard link to navigation and remove Gantt chart widget from intern applications page
This commit is contained in:
+1
-157
@@ -1,157 +1 @@
|
||||
<x-filament-widgets::widget>
|
||||
<!-- DevExtreme Gantt CSS Dependencies -->
|
||||
<link rel="stylesheet" href="https://cdn3.devexpress.com/jslib/23.2.5/css/dx.light.css">
|
||||
<link rel="stylesheet" href="https://cdn3.devexpress.com/jslib/23.2.5/css/dx-gantt.css">
|
||||
|
||||
<style>
|
||||
.fi-wi-intern-gantt-chart .demo-container {
|
||||
height: 560px;
|
||||
background-color: #fff;
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
border: 1px solid rgba(0, 0, 0, 0.05);
|
||||
margin-top: 12px;
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.03);
|
||||
}
|
||||
.dark .fi-wi-intern-gantt-chart .demo-container {
|
||||
background-color: #111827;
|
||||
border-color: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
.fi-wi-intern-gantt-chart #gantt {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<x-filament::section class="fi-wi-intern-gantt-chart">
|
||||
<x-slot name="heading">
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="text-lg font-bold tracking-tight text-gray-950 dark:text-white">
|
||||
Stajyer Gantt Şeması ve Takvimi
|
||||
</span>
|
||||
<span class="text-xs px-2.5 py-1 bg-emerald-50 text-emerald-600 dark:bg-emerald-950 dark:text-emerald-400 rounded-full font-semibold">
|
||||
DevExtreme Görünümü
|
||||
</span>
|
||||
</div>
|
||||
</x-slot>
|
||||
|
||||
@if(count($interns) === 0)
|
||||
<div class="flex flex-col items-center justify-center p-8 text-center bg-gray-50 dark:bg-gray-900/40 rounded-xl border border-dashed border-gray-200 dark:border-gray-800">
|
||||
<div class="p-3 bg-gray-100 dark:bg-gray-800 rounded-full mb-3 text-gray-400">
|
||||
<svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5m-9-6h.008v.008H12v-.008ZM12 15h.008v.008H12V15Zm0 2.25h.008v.008H12v-.008ZM9.75 15h.008v.008H9.75V15Zm0 2.25h.008v.008H9.75v-.008ZM7.5 15h.008v.008H7.5V15Zm0 2.25h.008v.008H7.5v-.008Zm6.75-4.5h.008v.008h-.008v-.008Zm0 2.25h.008v.008h-.008V15Zm0 2.25h.008v.008h-.008v-.008Zm2.25-4.5h.008v.008H16.5v-.008Zm0 2.25h.008v.008H16.5V15Z" />
|
||||
</svg>
|
||||
</div>
|
||||
<p class="text-sm font-medium text-gray-500 dark:text-gray-400">
|
||||
Tarihleri belirlenmiş onaylı stajyer bulunamadı.
|
||||
</p>
|
||||
</div>
|
||||
@else
|
||||
<div
|
||||
x-data="{
|
||||
internsData: @js($interns),
|
||||
loadScript(src) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (window.jQuery && src.includes('jquery')) { resolve(); return; }
|
||||
if (window.DevExpress && src.includes('dx.all')) { resolve(); return; }
|
||||
if (window.DevExpress && window.DevExpress.ui && window.DevExpress.ui.dxGantt && src.includes('dx-gantt')) { resolve(); return; }
|
||||
|
||||
const existing = document.querySelector(`script[src='${src}']`);
|
||||
if (existing) {
|
||||
if (existing.readyState === 'loaded' || existing.readyState === 'complete') {
|
||||
resolve();
|
||||
} else {
|
||||
existing.addEventListener('load', resolve);
|
||||
existing.addEventListener('error', reject);
|
||||
}
|
||||
return;
|
||||
}
|
||||
const script = document.createElement('script');
|
||||
script.src = src;
|
||||
script.async = true;
|
||||
script.onload = resolve;
|
||||
script.onerror = () => reject(new Error('Failed to load script: ' + src));
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
},
|
||||
showError(msg) {
|
||||
const errDiv = document.createElement('div');
|
||||
errDiv.style.color = '#ef4444';
|
||||
errDiv.style.padding = '20px';
|
||||
errDiv.style.fontFamily = 'monospace';
|
||||
errDiv.style.fontSize = '13px';
|
||||
errDiv.innerHTML = '<strong>Gantt Load Error:</strong><br>' + msg;
|
||||
this.$refs.ganttContainer.innerHTML = '';
|
||||
this.$refs.ganttContainer.appendChild(errDiv);
|
||||
},
|
||||
async init() {
|
||||
try {
|
||||
await this.loadScript('https://code.jquery.com/jquery-3.7.1.min.js').catch(() => { throw new Error('jQuery failed to load'); });
|
||||
await this.loadScript('https://cdn3.devexpress.com/jslib/23.2.5/js/dx.all.js').catch(() => { throw new Error('dx.all.js failed to load'); });
|
||||
await this.loadScript('https://cdn3.devexpress.com/jslib/23.2.5/js/dx-gantt.min.js').catch(() => { throw new Error('dx-gantt.min.js failed to load'); });
|
||||
|
||||
if (window.jQuery && window.jQuery.fn.dxGantt) {
|
||||
const formattedData = this.internsData.map(intern => ({
|
||||
id: intern.id,
|
||||
parentId: 0,
|
||||
title: intern.name,
|
||||
start: new Date(intern.raw_start),
|
||||
end: new Date(intern.raw_end),
|
||||
progress: 100
|
||||
}));
|
||||
|
||||
jQuery(this.$refs.ganttContainer).dxGantt({
|
||||
tasks: {
|
||||
dataSource: formattedData,
|
||||
},
|
||||
editing: {
|
||||
enabled: false,
|
||||
},
|
||||
validation: {
|
||||
autoUpdateParentTasks: true,
|
||||
},
|
||||
toolbar: {
|
||||
items: [
|
||||
'collapseAll',
|
||||
'expandAll',
|
||||
'separator',
|
||||
'zoomIn',
|
||||
'zoomOut',
|
||||
],
|
||||
},
|
||||
columns: [{
|
||||
dataField: 'title',
|
||||
caption: 'Stajyer Adı',
|
||||
width: 250,
|
||||
}, {
|
||||
dataField: 'start',
|
||||
caption: 'Başlangıç Tarihi',
|
||||
dataType: 'date',
|
||||
format: 'dd.MM.yyyy',
|
||||
width: 120,
|
||||
}, {
|
||||
dataField: 'end',
|
||||
caption: 'Bitiş Tarihi',
|
||||
dataType: 'date',
|
||||
format: 'dd.MM.yyyy',
|
||||
width: 120,
|
||||
}],
|
||||
scaleType: 'days',
|
||||
taskListWidth: 490,
|
||||
});
|
||||
} else {
|
||||
throw new Error('DevExpress Gantt component jQuery plugin is not defined after loading scripts.');
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
this.showError(e.message);
|
||||
}
|
||||
}
|
||||
}"
|
||||
class="dx-viewport demo-container"
|
||||
>
|
||||
<div id="gantt" x-ref="ganttContainer" style="height: 100%; width: 100%;"></div>
|
||||
</div>
|
||||
@endif
|
||||
</x-filament::section>
|
||||
</x-filament-widgets::widget>
|
||||
{{-- Bu bileşen görünümü devre dışı bırakılmıştır. --}}
|
||||
|
||||
Reference in New Issue
Block a user