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'); }); });