Skip to content

Commit 3e4edb6

Browse files
committed
新增功能 - 关卡能力扩展
1. 管理员管理和精选关卡 2. 用户可以选择已有关卡进行挑战
1 parent 7b9be78 commit 3e4edb6

File tree

21 files changed

+1603
-5
lines changed

21 files changed

+1603
-5
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import request from '../utils/request'
2+
3+
// 分页查询关卡列表
4+
export const listLevels = (data) => {
5+
return request.post('/admin/level/list', data)
6+
}
7+
8+
// 添加关卡
9+
export const addLevel = (data) => {
10+
return request.post('/admin/level/add', data)
11+
}
12+
13+
// 更新关卡
14+
export const updateLevel = (data) => {
15+
return request.post('/admin/level/update', data)
16+
}
17+
18+
// 删除关卡
19+
export const deleteLevel = (id) => {
20+
return request.post(`/admin/level/delete/${id}`)
21+
}
22+
23+
// 设置关卡为精选
24+
export const setLevelFeatured = (id) => {
25+
return request.post(`/admin/level/setFeatured/${id}`)
26+
}
27+
28+
// 取消关卡精选
29+
export const cancelLevelFeatured = (id) => {
30+
return request.post(`/admin/level/cancelFeatured/${id}`)
31+
}
32+
33+
// 批量设置关卡优先级
34+
export const setLevelPriority = (ids, priority) => {
35+
return request.post('/admin/level/setPriority', null, {
36+
params: { ids, priority }
37+
})
38+
}

coder-test-frontend/src/api/level.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,10 @@ export const generateLevel = (data) => {
99
export const getLevelDetail = (id) => {
1010
return request.get(`/level/${id}`)
1111
}
12+
13+
// 分页获取精选关卡列表
14+
export const getFeaturedLevels = (current = 1, pageSize = 10) => {
15+
return request.get('/level/featured', {
16+
params: { current, pageSize }
17+
})
18+
}

coder-test-frontend/src/components/GlobalNavbar.vue

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@
4848
<el-icon><Clock /></el-icon>
4949
闯关历史
5050
</el-dropdown-item>
51+
<el-dropdown-item
52+
v-if="isAdmin"
53+
@click="$router.push('/admin')"
54+
divided
55+
>
56+
<el-icon><Setting /></el-icon>
57+
管理后台
58+
</el-dropdown-item>
5159
<el-dropdown-item divided @click="handleLogout">
5260
<el-icon><SwitchButton /></el-icon>
5361
退出登录
@@ -72,7 +80,8 @@ import {
7280
Clock,
7381
SwitchButton,
7482
Coin,
75-
User
83+
User,
84+
Setting
7685
} from '@element-plus/icons-vue'
7786
7887
// Props
@@ -88,6 +97,7 @@ const userStore = useUserStore()
8897
8998
const isLoggedIn = computed(() => userStore.isLoggedIn)
9099
const user = computed(() => userStore.user)
100+
const isAdmin = computed(() => user.value?.userRole === 'admin')
91101
92102
const handleLogoClick = () => {
93103
router.push('/')

coder-test-frontend/src/router/index.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ const routes = [
3838
name: 'Result',
3939
component: () => import('../views/Result.vue'),
4040
meta: { requiresAuth: true }
41+
},
42+
{
43+
path: '/admin',
44+
name: 'Admin',
45+
component: () => import('../views/Admin.vue'),
46+
meta: { requiresAuth: true, requiresAdmin: true }
4147
}
4248
]
4349

@@ -67,6 +73,15 @@ router.beforeEach(async (to, from, next) => {
6773
return
6874
}
6975
}
76+
77+
// 检查管理员权限
78+
if (to.meta.requiresAdmin) {
79+
if (!userStore.user || userStore.user.userRole !== 'admin') {
80+
console.log('路由守卫 - 无管理员权限')
81+
next('/')
82+
return
83+
}
84+
}
7085
}
7186

7287
console.log('路由守卫 - 允许访问')

0 commit comments

Comments
 (0)