e4091eee80
- Backend: NEW AdminController with user CRUD (GET/POST/DELETE /api/v1/admin/users)
- Backend: NEW GET /api/dashboard/tasks/{id} single task endpoint
- Backend: NEW POST /api/dashboard/tasks/{id}/activity comment endpoint
- Backend: IUserRepository + UserRepository extended with GetAllAsync, DeleteAsync
- Backend: Admin DTOs (AdminUserInfo, AdminCreateUserRequest, AdminUpdateRoleRequest)
- Frontend: NEW TaskDetailView.vue — URL-based (/tasks/:id) Galaxy-themed task detail
with subtask create/edit/delete, activity with comments, property sidebar
- Frontend: LoginView.vue — полностью Galaxy theme redesign with GalaxyBackground,
glass-morphism card, password toggle, consistent brand
- Frontend: SettingsView.vue — Galaxy theme redesign with glass cards,
admin user management section (create/list users, visible only to owner role)
- Frontend: TaskBoardView.vue — added "Full View" link to URL-based detail page
- Frontend: Router — added /tasks/:id route for TaskDetailView
- Frontend: App.vue — added TaskDetail to standaloneViews whitelist
- Frontend: tasks store — stable
Auth: Admin creates accounts, users log in with existing /api/v1/auth/login.
Login/Settings deliver visible Galaxy-consistent design with nexus-tokens.css tokens.
54 lines
2.4 KiB
TypeScript
54 lines
2.4 KiB
TypeScript
import { createRouter, createWebHistory } from 'vue-router'
|
|
import LoginView from './views/LoginView.vue'
|
|
import ProjectDetailView from './views/ProjectDetailView.vue'
|
|
import SettingsView from './views/SettingsView.vue'
|
|
import MemoryView from './views/MemoryView.vue'
|
|
import DocsView from './views/DocsView.vue'
|
|
import AgentDetailView from './views/AgentDetailView.vue'
|
|
import AgentsIndexView from './views/AgentsIndexView.vue'
|
|
import SecurityView from './views/SecurityView.vue'
|
|
import IncidentsView from './views/IncidentsView.vue'
|
|
import CalendarView from './views/CalendarView.vue'
|
|
import NexusLayout from './layouts/NexusLayout.vue'
|
|
import FlowBoard from './views/Dashboard/FlowBoard.vue'
|
|
import TaskBoardView from './views/TaskBoardView.vue'
|
|
import TaskDetailView from './views/TaskDetailView.vue'
|
|
import NotificationsView from './views/NotificationsView.vue'
|
|
|
|
const routes = [
|
|
{ path: '/login', name: 'Login', component: LoginView, meta: { public: true } },
|
|
{ path: '/', redirect: '/dashboard' },
|
|
|
|
// V2 Dashboard (neues NexusLayout + FlowBoard)
|
|
{
|
|
path: '/dashboard',
|
|
component: NexusLayout,
|
|
children: [
|
|
{ path: '', name: 'Dashboard', component: FlowBoard },
|
|
],
|
|
},
|
|
|
|
{ path: '/memory', name: 'Memory', component: MemoryView },
|
|
{ path: '/docs', name: 'Docs', component: DocsView },
|
|
{ path: '/agents/:id', name: 'AgentDetail', component: AgentDetailView },
|
|
{ path: '/security', name: 'Security', component: SecurityView },
|
|
{ path: '/incidents', name: 'Incidents', component: IncidentsView },
|
|
{ path: '/calendar', name: 'Calendar', component: CalendarView },
|
|
{ path: '/projects', name: 'Projects', component: { template: '' } },
|
|
{ path: '/projects/:id', name: 'ProjectDetail', component: ProjectDetailView },
|
|
{ path: '/tasks', name: 'Task Board', component: TaskBoardView },
|
|
{ path: '/tasks/:id', name: 'TaskDetail', component: TaskDetailView },
|
|
{ path: '/agents', name: 'Agents', component: AgentsIndexView },
|
|
{ path: '/models', name: 'Models', component: { template: '' } },
|
|
{ path: '/activity', name: 'Activity', component: { template: '' } },
|
|
{ path: '/chat', name: 'Mobile Chat', component: { template: '' } },
|
|
{ path: '/notifications', name: 'Notifications', component: NotificationsView },
|
|
{ path: '/settings', name: 'Settings', component: SettingsView },
|
|
{ path: '/:pathMatch(.*)*', redirect: '/dashboard' },
|
|
]
|
|
|
|
export default createRouter({
|
|
history: createWebHistory(),
|
|
routes,
|
|
})
|