feat(web): register pm routes and nav entry

This commit is contained in:
2026-05-01 10:53:02 +08:00
parent 0bb23c8d08
commit ba39fac142
2 changed files with 69 additions and 4 deletions
+33 -4
View File
@@ -1,9 +1,38 @@
<template> <template>
<header class="border-b border-gray-200 dark:border-gray-700 px-4 py-2 flex items-center gap-4"> <header class="border-b border-gray-200 dark:border-gray-700 px-4 py-2 flex items-center gap-4">
<h1 class="text-lg font-semibold flex-1">Agent Coding Workflow</h1> <h1 class="text-lg font-semibold">
Agent Coding Workflow
</h1>
<nav
v-if="auth.isAuthenticated"
class="flex items-center gap-3 flex-1"
>
<RouterLink
:to="{ name: 'home' }"
class="text-sm hover:underline"
>
首页
</RouterLink>
<RouterLink
:to="{ name: 'project-list' }"
class="text-sm hover:underline"
>
项目
</RouterLink>
</nav>
<span
v-else
class="flex-1"
/>
<NotificationBell v-if="auth.isAuthenticated" /> <NotificationBell v-if="auth.isAuthenticated" />
<NDropdown v-if="auth.user" :options="menu" @select="onSelect"> <NDropdown
<NButton text>{{ auth.user.display_name }}</NButton> v-if="auth.user"
:options="menu"
@select="onSelect"
>
<NButton text>
{{ auth.user.display_name }}
</NButton>
</NDropdown> </NDropdown>
</header> </header>
</template> </template>
@@ -11,7 +40,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue' import { computed } from 'vue'
import { NButton, NDropdown } from 'naive-ui' import { NButton, NDropdown } from 'naive-ui'
import { useRouter } from 'vue-router' import { RouterLink, useRouter } from 'vue-router'
import { useAuthStore } from '@/stores/auth' import { useAuthStore } from '@/stores/auth'
import { authApi } from '@/api/auth' import { authApi } from '@/api/auth'
import NotificationBell from './NotificationBell.vue' import NotificationBell from './NotificationBell.vue'
+36
View File
@@ -14,6 +14,42 @@ const routes: RouteRecordRaw[] = [
component: () => import('@/views/HomeView.vue'), component: () => import('@/views/HomeView.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
}, },
{
path: '/projects',
name: 'project-list',
component: () => import('@/views/projects/ProjectListView.vue'),
meta: { requiresAuth: true },
},
{
path: '/p/:slug',
name: 'project-home',
component: () => import('@/views/projects/ProjectHomeView.vue'),
meta: { requiresAuth: true },
},
{
path: '/p/:slug/requirements',
name: 'requirement-list',
component: () => import('@/views/projects/RequirementListView.vue'),
meta: { requiresAuth: true },
},
{
path: '/p/:slug/requirements/:number',
name: 'requirement-detail',
component: () => import('@/views/projects/RequirementDetailView.vue'),
meta: { requiresAuth: true },
},
{
path: '/p/:slug/issues',
name: 'issue-list',
component: () => import('@/views/projects/IssueListView.vue'),
meta: { requiresAuth: true },
},
{
path: '/p/:slug/issues/:number',
name: 'issue-detail',
component: () => import('@/views/projects/IssueDetailView.vue'),
meta: { requiresAuth: true },
},
] ]
const router = createRouter({ const router = createRouter({