You've already forked agentic-coding-workflow
feat(web): register pm routes and nav entry
This commit is contained in:
@@ -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'
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
Reference in New Issue
Block a user