63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
/**
|
|
* main.js
|
|
* ========
|
|
* Application entry point.
|
|
* Registers all components, initializes Quasar, and mounts the app.
|
|
*/
|
|
|
|
const { createApp, onMounted } = Vue;
|
|
const { useQuasar } = Quasar;
|
|
|
|
/* ---- Import components ---- */
|
|
import AppHeader from './components/app-header/app-header.js';
|
|
import WorkspaceDrawer from './components/workspace-drawer/workspace-drawer.js';
|
|
import FilterDrawer from './components/filter-drawer/filter-drawer.js';
|
|
import AssignmentDrawer from './components/assignment-drawer/assignment-drawer.js';
|
|
import PlannerGrid from './components/planner-grid/planner-grid.js';
|
|
|
|
/* ---- Import services (for lifecycle) ---- */
|
|
import { loadDataFromDatabase } from './services/data-service.js';
|
|
import { startOnlineUsersSimulation } from './services/socket-service.js';
|
|
|
|
/* ---- Root App ---- */
|
|
const app = createApp({
|
|
components: {
|
|
AppHeader,
|
|
WorkspaceDrawer,
|
|
FilterDrawer,
|
|
AssignmentDrawer,
|
|
PlannerGrid
|
|
},
|
|
setup() {
|
|
const $q = useQuasar();
|
|
|
|
onMounted(() => {
|
|
loadDataFromDatabase($q);
|
|
startOnlineUsersSimulation($q);
|
|
});
|
|
},
|
|
template: `
|
|
<q-layout view="hHh Lpr fFf">
|
|
<app-header></app-header>
|
|
<workspace-drawer></workspace-drawer>
|
|
<filter-drawer></filter-drawer>
|
|
<assignment-drawer></assignment-drawer>
|
|
<q-page-container>
|
|
<planner-grid></planner-grid>
|
|
</q-page-container>
|
|
</q-layout>
|
|
`
|
|
});
|
|
|
|
app.use(Quasar, { config: { brand: {
|
|
primary: '#4f46e5', /* Indigo-600 */
|
|
secondary: '#0ea5e9', /* Sky-500 */
|
|
accent: '#8b5cf6', /* Violet-500 */
|
|
positive: '#10b981', /* Emerald-500 */
|
|
negative: '#ef4444', /* Red-500 */
|
|
warning: '#f59e0b', /* Amber-500 */
|
|
info: '#3b82f6', /* Blue-500 */
|
|
dark: '#1e293b'
|
|
} } });
|
|
app.mount('#q-app');
|