作品展示页:前端展示 + 后台增删改查

- 新增 projects 表与迁移(唯一 slug 索引)
- 后端:公开 GET /api/projects,后台 GET/POST/PUT/DELETE /api/admin/projects
- 前端:/projects 双虚线边框卡片页(参考 diygod.cc/projects),后台管理页
- 左栏/手机顶栏/后台侧栏均加「作品」入口
- 补充项目 CRUD 单元测试与后台鉴权拦截测试
This commit is contained in:
Sakurasan committed 2026-09-22 01:47:59 +08:00
1 parent 2b53eb976b
commit 3238175ef0
14 files changed
+1029 -1

No files matched your search

+2
View File
@@ -7,6 +7,7 @@ const routes = [
{ path: '/tags', name: 'tags', component: () => import('./views/TagsView.vue') },
{ path: '/tag/:slug', name: 'tag', component: () => import('./views/TagView.vue') },
{ path: '/about', name: 'about', component: () => import('./views/AboutView.vue') },
{ path: '/projects', name: 'projects', component: () => import('./views/ProjectsView.vue') },
{ path: '/admin/login', name: 'admin-login', component: () => import('./admin/LoginView.vue') },
{
@@ -18,6 +19,7 @@ const routes = [
{ path: 'new', name: 'admin-new', component: () => import('./admin/EditorView.vue') },
{ path: ':id', name: 'admin-edit', component: () => import('./admin/EditorView.vue') },
{ path: 'tags', name: 'admin-tags', component: () => import('./admin/TagsView.vue') },
{ path: 'projects', name: 'admin-projects', component: () => import('./admin/ProjectsView.vue') },
{ path: 'settings', name: 'admin-settings', component: () => import('./admin/SettingsView.vue') }
]
},