app.php
4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
use think\facade\Route;
$cors = \app\middleware\AllowCrossDomain::class;
$mini = \app\middleware\MiniAuth::class;
$adm = \app\middleware\AdminAuth::class;
// ---------- 小程序 API ----------
Route::group('api/v1', function () {
Route::post('auth/mp', 'api.MpAuth/bootstrap');
Route::post('auth/register', 'api.MpAuth/register');
Route::post('auth/login-phone', 'api.MpAuth/loginPhone');
Route::get('banners', 'api.Banner/list');
// 必须先注册更具体规则,否则在 route_complete_match=false 时 GET works/107 会误匹配到 list
Route::get('works/rank', 'api.Work/rank');
Route::get('works/:id', 'api.Work/detail')->pattern(['id' => '\d+']);
Route::get('works', 'api.Work/list');
Route::get('map/spots', 'api.Map/spots');
})->middleware($cors);
Route::group('api/v1', function () {
Route::post('upload', 'api.Upload/image');
Route::post('auth/bind-phone', 'api.MpAuth/bindPhone');
// 必须先注册更具体规则,否则 route_complete_match=false 时 POST works/5/like 会误匹配到 create,点赞会报「标题限 1~10 字」
Route::post('works/:id/like', 'api.Work/toggleLike')->pattern(['id' => '\d+']);
Route::post('works/:id/resubmit', 'api.Work/resubmit')->pattern(['id' => '\d+']);
Route::post('works', 'api.Work/create');
Route::get('me/profile', 'api.Profile/get');
Route::post('me/profile', 'api.Profile/save');
Route::get('me/works', 'api.Profile/myWorks');
Route::get('me/stats', 'api.Profile/stats');
Route::get('download-assets', 'api.DownloadAsset/get');
})->middleware([$cors, $mini]);
// ---------- 管理后台 API ----------
Route::group('admin/v1', function () {
Route::post('login', 'admin.Auth/login');
})->middleware($cors);
Route::group('admin/v1', function () {
Route::get('profile', 'admin.Auth/profile');
Route::get('menus/my', 'admin.Auth/menus');
Route::get('dashboard/stats', 'admin.Dashboard/stats');
Route::get('works/pending', 'admin.WorkAudit/pendingList');
Route::get('works/rejected', 'admin.WorkAudit/rejectedList');
Route::get('works/approved', 'admin.WorkAudit/approvedList');
Route::get('works/:id/detail', 'admin.WorkAudit/detail')->pattern(['id' => '\d+']);
Route::post('works/:id/approve', 'admin.WorkAudit/approve')->pattern(['id' => '\d+']);
Route::post('works/:id/reject', 'admin.WorkAudit/reject')->pattern(['id' => '\d+']);
Route::post('works/:id/delete', 'admin.WorkAudit/delete')->pattern(['id' => '\d+']);
Route::post('works/sort', 'admin.WorkAudit/sortApproved');
Route::get('users', 'admin.AdminUser/list');
Route::post('users/save', 'admin.AdminUser/save');
Route::post('users/:id/delete', 'admin.AdminUser/delete')->pattern(['id' => '\d+']);
Route::get('roles', 'admin.Role/list');
Route::post('roles/save', 'admin.Role/save');
Route::post('roles/:id/delete', 'admin.Role/delete')->pattern(['id' => '\d+']);
Route::get('roles/:id/menus', 'admin.Role/menuIds')->pattern(['id' => '\d+']);
Route::post('roles/:id/menus', 'admin.Role/saveMenus')->pattern(['id' => '\d+']);
Route::get('menus/tree', 'admin.Menu/tree');
Route::post('menus/save', 'admin.Menu/save');
Route::post('menus/:id/delete', 'admin.Menu/delete')->pattern(['id' => '\d+']);
Route::get('mp-users', 'admin.MpUser/list');
Route::post('mp-users/save', 'admin.MpUser/save');
Route::post('mp-users/:id/delete', 'admin.MpUser/delete')->pattern(['id' => '\d+']);
Route::post('upload', 'admin.Upload/image');
/** 管理端拉取作品原图 Blob(跨域静态资源无 CORS 时用此接口) */
Route::get('uploads/raw', 'admin.UploadServe/raw');
Route::get('banners', 'admin.BannerAdmin/list');
Route::post('banners/save', 'admin.BannerAdmin/save');
Route::post('banners/:id/delete', 'admin.BannerAdmin/delete')->pattern(['id' => '\d+']);
Route::get('map-spots', 'admin.MapSpotAdmin/list');
Route::post('map-spots/save', 'admin.MapSpotAdmin/save');
Route::post('map-spots/:id/delete', 'admin.MapSpotAdmin/delete')->pattern(['id' => '\d+']);
Route::get('download-assets', 'admin.DownloadAsset/get');
Route::post('download-assets/save', 'admin.DownloadAsset/save');
})->middleware([$cors, $adm]);