You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
16 KiB
193 lines
16 KiB
<?php
|
|
|
|
use App\Http\Controllers\Admin\ActivityController;
|
|
use App\Http\Controllers\Admin\ActivitySessionController;
|
|
use App\Http\Controllers\Admin\ActivitySignupController;
|
|
use App\Http\Controllers\Admin\AdminUserController;
|
|
use App\Http\Controllers\Admin\UploadController;
|
|
use App\Http\Controllers\Admin\BannerController;
|
|
use App\Http\Controllers\Admin\AuthController;
|
|
use App\Http\Controllers\Admin\CrawlJobController;
|
|
use App\Http\Controllers\Admin\DashboardController;
|
|
use App\Http\Controllers\Admin\DemandController;
|
|
use App\Http\Controllers\Admin\CourseCheckinDayController;
|
|
use App\Http\Controllers\Admin\CourseController;
|
|
use App\Http\Controllers\Admin\CourseSignupController;
|
|
use App\Http\Controllers\Admin\DictItemController;
|
|
use App\Http\Controllers\Admin\DictTypeController;
|
|
use App\Http\Controllers\Admin\MenuController;
|
|
use App\Http\Controllers\Admin\MiniappUserController;
|
|
use App\Http\Controllers\Admin\NewsController;
|
|
use App\Http\Controllers\Admin\OperationLogController;
|
|
use App\Http\Controllers\Admin\PaperController;
|
|
use App\Http\Controllers\Admin\RadarMapController;
|
|
use App\Http\Controllers\Admin\GridMemberController;
|
|
use App\Http\Controllers\Admin\ResearchDirectionController;
|
|
use App\Http\Controllers\Admin\RoleController;
|
|
use App\Http\Controllers\Admin\SigninQrController;
|
|
use App\Http\Controllers\Admin\TeacherController;
|
|
use App\Http\Controllers\Admin\TeacherFollowRecordController;
|
|
use App\Http\Controllers\Admin\UniversityController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
| 首期仅按「角色 ↔ 菜单」控制可见性与动态路由,不在路由层校验 permissions 表。
|
|
| 预留 permissions / role_permissions 表与 EnsureAdminPermission 中间件待后续迭代启用。
|
|
*/
|
|
|
|
Route::prefix('admin/v1')->group(function () {
|
|
Route::post('/auth/login', [AuthController::class, 'login'])->name('admin.auth.login');
|
|
|
|
Route::middleware(['auth:sanctum', 'admin.active', 'admin.operation_log'])->group(function () {
|
|
Route::post('/auth/logout', [AuthController::class, 'logout'])->name('admin.auth.logout');
|
|
Route::get('/auth/me', [AuthController::class, 'me'])->name('admin.auth.me');
|
|
Route::post('/auth/password', [AuthController::class, 'changePassword'])->name('admin.auth.password');
|
|
|
|
Route::get('/dict-by-code/{code}/items', [DictTypeController::class, 'itemsByCode'])->name('admin.dict-by-code.items');
|
|
|
|
Route::post('/uploads/course-asset', [UploadController::class, 'courseAsset'])->name('admin.uploads.course-asset');
|
|
Route::post('/uploads/news-cover', [UploadController::class, 'newsCover'])->name('admin.uploads.news-cover');
|
|
Route::post('/uploads/banner-cover', [UploadController::class, 'bannerCover'])->name('admin.uploads.banner-cover');
|
|
Route::post('/uploads/editor-image', [UploadController::class, 'editorImage'])->name('admin.uploads.editor-image');
|
|
|
|
Route::get('/signin-qrcode', [SigninQrController::class, 'show'])->name('admin.signin-qrcode.show');
|
|
|
|
Route::get('/admin-users', [AdminUserController::class, 'index'])->name('admin.admin-users.index');
|
|
Route::post('/admin-users', [AdminUserController::class, 'store'])->name('admin.admin-users.store');
|
|
Route::put('/admin-users/{adminUser}', [AdminUserController::class, 'update'])->name('admin.admin-users.update');
|
|
Route::post('/admin-users/{adminUser}/password', [AdminUserController::class, 'resetPassword'])->name('admin.admin-users.password');
|
|
Route::delete('/admin-users/{adminUser}', [AdminUserController::class, 'destroy'])->name('admin.admin-users.destroy');
|
|
|
|
Route::get('/roles', [RoleController::class, 'index'])->name('admin.roles.index');
|
|
Route::post('/roles', [RoleController::class, 'store'])->name('admin.roles.store');
|
|
Route::get('/roles/{role}', [RoleController::class, 'show'])->name('admin.roles.show');
|
|
Route::put('/roles/{role}', [RoleController::class, 'update'])->name('admin.roles.update');
|
|
Route::delete('/roles/{role}', [RoleController::class, 'destroy'])->name('admin.roles.destroy');
|
|
|
|
Route::get('/menus', [MenuController::class, 'index'])->name('admin.menus.index');
|
|
Route::post('/menus', [MenuController::class, 'store'])->name('admin.menus.store');
|
|
Route::put('/menus/{menu}', [MenuController::class, 'update'])->name('admin.menus.update');
|
|
Route::delete('/menus/{menu}', [MenuController::class, 'destroy'])->name('admin.menus.destroy');
|
|
|
|
Route::get('/dict-types', [DictTypeController::class, 'index'])->name('admin.dict-types.index');
|
|
Route::post('/dict-types', [DictTypeController::class, 'store'])->name('admin.dict-types.store');
|
|
Route::put('/dict-types/{dictType}', [DictTypeController::class, 'update'])->name('admin.dict-types.update');
|
|
Route::delete('/dict-types/{dictType}', [DictTypeController::class, 'destroy'])->name('admin.dict-types.destroy');
|
|
|
|
Route::get('/dict-types/{dictTypeId}/items', [DictItemController::class, 'index'])->name('admin.dict-items.index');
|
|
Route::post('/dict-types/{dictTypeId}/items', [DictItemController::class, 'store'])->name('admin.dict-items.store');
|
|
Route::put('/dict-types/{dictTypeId}/items/{dictItem}', [DictItemController::class, 'update'])->name('admin.dict-items.update');
|
|
Route::delete('/dict-types/{dictTypeId}/items/{dictItem}', [DictItemController::class, 'destroy'])->name('admin.dict-items.destroy');
|
|
|
|
Route::get('/operation-logs', [OperationLogController::class, 'index'])->name('admin.operation-logs.index');
|
|
|
|
Route::get('/research-directions/options', [ResearchDirectionController::class, 'options'])->name('admin.research-directions.options');
|
|
Route::get('/research-directions', [ResearchDirectionController::class, 'index'])->name('admin.research-directions.index');
|
|
Route::post('/research-directions', [ResearchDirectionController::class, 'store'])->name('admin.research-directions.store');
|
|
Route::put('/research-directions/{researchDirection}', [ResearchDirectionController::class, 'update'])->name('admin.research-directions.update');
|
|
Route::delete('/research-directions/{researchDirection}', [ResearchDirectionController::class, 'destroy'])->name('admin.research-directions.destroy');
|
|
|
|
Route::get('/grid-members', [GridMemberController::class, 'index'])->name('admin.grid-members.index');
|
|
Route::get('/grid-members/{gridMember}', [GridMemberController::class, 'show'])->name('admin.grid-members.show');
|
|
Route::post('/grid-members', [GridMemberController::class, 'store'])->name('admin.grid-members.store');
|
|
Route::put('/grid-members/{gridMember}', [GridMemberController::class, 'update'])->name('admin.grid-members.update');
|
|
Route::post('/grid-members/{gridMember}/password', [GridMemberController::class, 'resetPassword'])->name('admin.grid-members.password');
|
|
Route::delete('/grid-members/{gridMember}', [GridMemberController::class, 'destroy'])->name('admin.grid-members.destroy');
|
|
|
|
Route::get('/courses', [CourseController::class, 'index'])->name('admin.courses.index');
|
|
Route::post('/courses', [CourseController::class, 'store'])->name('admin.courses.store');
|
|
Route::get('/courses/{course}', [CourseController::class, 'show'])->name('admin.courses.show');
|
|
Route::put('/courses/{course}', [CourseController::class, 'update'])->name('admin.courses.update');
|
|
Route::delete('/courses/{course}', [CourseController::class, 'destroy'])->name('admin.courses.destroy');
|
|
Route::patch('/courses/{course}/shelf', [CourseController::class, 'updateShelf'])->name('admin.courses.shelf');
|
|
|
|
Route::get('/courses/{course}/checkin-days', [CourseCheckinDayController::class, 'index'])->name('admin.course-checkin-days.index');
|
|
|
|
Route::get('/courses/{course}/signups', [CourseSignupController::class, 'index'])->name('admin.course-signups.index');
|
|
Route::post('/courses/{course}/signups', [CourseSignupController::class, 'store'])->name('admin.course-signups.store');
|
|
Route::delete('/courses/{course}/signups/{signup}', [CourseSignupController::class, 'destroy'])->name('admin.course-signups.destroy');
|
|
Route::post('/courses/{course}/signups/{signup}/checkin', [CourseSignupController::class, 'checkin'])->name('admin.course-signups.checkin');
|
|
|
|
Route::get('/activities', [ActivityController::class, 'index'])->name('admin.activities.index');
|
|
Route::post('/activities', [ActivityController::class, 'store'])->name('admin.activities.store');
|
|
Route::get('/activities/{activity}', [ActivityController::class, 'show'])->name('admin.activities.show');
|
|
Route::put('/activities/{activity}', [ActivityController::class, 'update'])->name('admin.activities.update');
|
|
Route::delete('/activities/{activity}', [ActivityController::class, 'destroy'])->name('admin.activities.destroy');
|
|
Route::patch('/activities/{activity}/shelf', [ActivityController::class, 'updateShelf'])->name('admin.activities.shelf');
|
|
|
|
Route::get('/activities/{activity}/sessions', [ActivitySessionController::class, 'index'])->name('admin.activity-sessions.index');
|
|
Route::post('/activities/{activity}/sessions', [ActivitySessionController::class, 'store'])->name('admin.activity-sessions.store');
|
|
Route::put('/activities/{activity}/sessions/{session}', [ActivitySessionController::class, 'update'])->name('admin.activity-sessions.update');
|
|
Route::delete('/activities/{activity}/sessions/{session}', [ActivitySessionController::class, 'destroy'])->name('admin.activity-sessions.destroy');
|
|
|
|
Route::get('/activities/{activity}/signups', [ActivitySignupController::class, 'index'])->name('admin.activity-signups.index');
|
|
Route::post('/activities/{activity}/signups', [ActivitySignupController::class, 'store'])->name('admin.activity-signups.store');
|
|
Route::delete('/activities/{activity}/signups/{signup}', [ActivitySignupController::class, 'destroy'])->name('admin.activity-signups.destroy');
|
|
Route::post('/activities/{activity}/signups/{signup}/checkin', [ActivitySignupController::class, 'checkin'])->name('admin.activity-signups.checkin');
|
|
|
|
Route::get('/news', [NewsController::class, 'index'])->name('admin.news.index');
|
|
Route::post('/news/batch-publish', [NewsController::class, 'batchPublish'])->name('admin.news.batch-publish');
|
|
Route::post('/news', [NewsController::class, 'store'])->name('admin.news.store');
|
|
Route::get('/news/{news}', [NewsController::class, 'show'])->name('admin.news.show');
|
|
Route::put('/news/{news}', [NewsController::class, 'update'])->name('admin.news.update');
|
|
Route::delete('/news/{news}', [NewsController::class, 'destroy'])->name('admin.news.destroy');
|
|
Route::patch('/news/{news}/publish', [NewsController::class, 'publish'])->name('admin.news.publish');
|
|
|
|
Route::get('/banners', [BannerController::class, 'index'])->name('admin.banners.index');
|
|
Route::post('/banners', [BannerController::class, 'store'])->name('admin.banners.store');
|
|
Route::get('/banners/{banner}', [BannerController::class, 'show'])->name('admin.banners.show');
|
|
Route::put('/banners/{banner}', [BannerController::class, 'update'])->name('admin.banners.update');
|
|
Route::delete('/banners/{banner}', [BannerController::class, 'destroy'])->name('admin.banners.destroy');
|
|
|
|
Route::get('/universities', [UniversityController::class, 'index'])->name('admin.universities.index');
|
|
Route::post('/universities', [UniversityController::class, 'store'])->name('admin.universities.store');
|
|
Route::put('/universities/{university}', [UniversityController::class, 'update'])->name('admin.universities.update');
|
|
Route::delete('/universities/{university}', [UniversityController::class, 'destroy'])->name('admin.universities.destroy');
|
|
|
|
Route::get('/papers/filter-options', [PaperController::class, 'filterOptions'])->name('admin.papers.filter-options');
|
|
Route::get('/papers', [PaperController::class, 'index'])->name('admin.papers.index');
|
|
Route::get('/papers/{paper}', [PaperController::class, 'show'])->name('admin.papers.show');
|
|
Route::post('/papers/{paper}/teachers', [PaperController::class, 'attachTeachers'])->name('admin.papers.attach-teachers');
|
|
Route::delete('/papers/{paper}', [PaperController::class, 'destroy'])->name('admin.papers.destroy');
|
|
|
|
Route::post('/crawl-jobs/resolve-url', [CrawlJobController::class, 'resolveUrl'])->name('admin.crawl-jobs.resolve-url');
|
|
Route::post('/crawl-jobs', [CrawlJobController::class, 'store'])->name('admin.crawl-jobs.store');
|
|
Route::get('/crawl-jobs/{crawlJob}', [CrawlJobController::class, 'show'])->name('admin.crawl-jobs.show');
|
|
Route::get('/crawl-jobs/{crawlJob}/items', [CrawlJobController::class, 'items'])->name('admin.crawl-jobs.items');
|
|
Route::patch('/crawl-jobs/{crawlJob}/items/{item}', [CrawlJobController::class, 'updateItem'])->name('admin.crawl-jobs.items.update');
|
|
Route::post('/crawl-jobs/{crawlJob}/import', [CrawlJobController::class, 'import'])->name('admin.crawl-jobs.import');
|
|
|
|
Route::get('/dashboard/overview', [DashboardController::class, 'overview'])->name('admin.dashboard.overview');
|
|
Route::get('/radar-map', [RadarMapController::class, 'index'])->name('admin.radar-map.index');
|
|
|
|
Route::get('/teachers/filter-options', [TeacherController::class, 'filterOptions'])->name('admin.teachers.filter-options');
|
|
Route::get('/teachers/stats', [TeacherController::class, 'stats'])->name('admin.teachers.stats');
|
|
Route::patch('/teachers/batch-star', [TeacherController::class, 'batchUpdateStar'])->name('admin.teachers.batch-star');
|
|
Route::get('/teachers', [TeacherController::class, 'index'])->name('admin.teachers.index');
|
|
Route::post('/teachers', [TeacherController::class, 'store'])->name('admin.teachers.store');
|
|
Route::get('/teachers/{teacher}', [TeacherController::class, 'show'])->name('admin.teachers.show');
|
|
Route::put('/teachers/{teacher}', [TeacherController::class, 'update'])->name('admin.teachers.update');
|
|
Route::delete('/teachers/{teacher}', [TeacherController::class, 'destroy'])->name('admin.teachers.destroy');
|
|
|
|
Route::get('/teachers/{teacher}/follow-records', [TeacherFollowRecordController::class, 'index'])->name('admin.teacher-follow-records.index');
|
|
Route::post('/teachers/{teacher}/follow-records', [TeacherFollowRecordController::class, 'store'])->name('admin.teacher-follow-records.store');
|
|
|
|
Route::get('/teachers/{teacher}/papers', [TeacherController::class, 'papers'])->name('admin.teacher-papers.index');
|
|
Route::post('/teachers/{teacher}/papers/link', [TeacherController::class, 'linkPaper'])->name('admin.teacher-papers.link');
|
|
Route::post('/teachers/{teacher}/papers', [TeacherController::class, 'storePaper'])->name('admin.teacher-papers.store');
|
|
Route::delete('/teachers/{teacher}/papers/{paper}', [TeacherController::class, 'destroyPaper'])->name('admin.teacher-papers.destroy');
|
|
|
|
Route::get('/miniapp-users', [MiniappUserController::class, 'index'])->name('admin.miniapp-users.index');
|
|
Route::get('/miniapp-users/{miniappUser}', [MiniappUserController::class, 'show'])->name('admin.miniapp-users.show');
|
|
Route::post('/miniapp-users/{miniappUser}/convert-to-teacher', [MiniappUserController::class, 'convertToTeacher'])->name('admin.miniapp-users.convert-to-teacher');
|
|
|
|
Route::get('/demands', [DemandController::class, 'index'])->name('admin.demands.index');
|
|
Route::post('/demands', [DemandController::class, 'store'])->name('admin.demands.store');
|
|
Route::get('/demands/{demand}', [DemandController::class, 'show'])->name('admin.demands.show');
|
|
Route::put('/demands/{demand}', [DemandController::class, 'update'])->name('admin.demands.update');
|
|
Route::delete('/demands/{demand}', [DemandController::class, 'destroy'])->name('admin.demands.destroy');
|
|
Route::get('/demands/{demand}/handle-logs', [DemandController::class, 'handleLogs'])->name('admin.demand-handle-logs.index');
|
|
Route::post('/demands/{demand}/handle-logs', [DemandController::class, 'storeHandleLog'])->name('admin.demand-handle-logs.store');
|
|
});
|
|
});
|