529 lines
29 KiB
PHP
529 lines
29 KiB
PHP
<?php
|
||
// API路由定义
|
||
use think\facade\Route;
|
||
|
||
// ==================== 前端用户API路由 ====================
|
||
// 为避免匹配混淆,手机号接口单独声明完整路径(优先级更高)
|
||
Route::post('api/auth/wechat/phone', 'api.Auth/wechatPhone')->middleware(['cors', 'auth']);
|
||
|
||
// 前端公开API路由(不需要认证)
|
||
Route::group('api', function () {
|
||
// 用户认证相关
|
||
Route::post('auth/login', 'api.Auth/login');
|
||
Route::post('auth/register', 'api.Auth/register');
|
||
Route::post('auth/refresh', 'api.Auth/refresh');
|
||
// 微信小程序登录
|
||
Route::post('auth/wechat', 'api.Auth/wechatLogin');
|
||
// 服务内部异步推送入口:主业务 fire-and-forget 调用
|
||
Route::post('internal/outbound-push/dispatch', 'api.InternalPushHook/dispatch');
|
||
})->middleware('cors');
|
||
|
||
// 小程序/前端运行配置与面相分析(可选 token)
|
||
Route::group('api', function () {
|
||
Route::get('config/runtime', 'api.AppConfig/runtime');
|
||
Route::get('config/deep-pricing', 'api.AppConfig/deepPricing');
|
||
// 与 ai/quick-questions 同源;部分线上网关仅放行 /api/config/*,供小程序公开拉取快捷问句
|
||
Route::get('config/ai-quick-questions', 'api.AiChat/quickQuestions');
|
||
Route::get('config/quick-questions', 'api.AiChat/quickQuestions');
|
||
// 与 mp/tabbar 同源;部分线上对 /api/mp/* 返回 nginx 404,与 config/runtime 一并放行
|
||
Route::get('config/mp-tabbar', 'api.MpConfig/tabbar');
|
||
Route::post('analyze', 'api.Analyze/index');
|
||
// 小程序埋点批量上报(无需登录;带 token 时关联 user_id)
|
||
Route::post('analytics/events', 'api.Analytics/batch');
|
||
// 好友打开分享卡片:凭 st 校验查看他人测试结果(无需登录)
|
||
Route::get('test/share-detail', 'api.Test/shareDetail');
|
||
// 神仙 AI · 推荐文章(无需登录也可拉取,首屏展示)
|
||
Route::get('ai/articles/recommended', 'api.AiChat/recommendedArticles');
|
||
Route::get('ai/articles/profile-teaser', 'api.AiChat/profileArticleTeaser');
|
||
Route::post('ai/articles/:id/click', 'api.AiChat/articleClick');
|
||
// 快捷问句:公开接口;若请求头带有效微信 token 则按用户 MBTI 个性化
|
||
Route::get('ai/quick-questions', 'api.AiChat/quickQuestions');
|
||
// 小程序 TabBar 动态配置(无需登录,启动拉取)
|
||
Route::get('mp/tabbar', 'api.MpConfig/tabbar');
|
||
})->middleware('cors');
|
||
|
||
// 前端需要认证的API路由
|
||
Route::group('api', function () {
|
||
// 用户信息
|
||
Route::get('auth/me', 'api.Auth/me');
|
||
Route::post('auth/logout', 'api.Auth/logout');
|
||
// 小程序扫码企业邀请后绑定企业
|
||
Route::post('enterprise/bind', 'api.Auth/wechatBindEnterprise');
|
||
// 企业版简历上传记录(具体路径放前面,避免被 POST resume-uploads 吞掉)
|
||
Route::get('enterprise/resume-uploads', 'api.EnterpriseResume/list');
|
||
Route::post('enterprise/resume-uploads/set-default', 'api.EnterpriseResume/setDefault');
|
||
Route::post('enterprise/resume-uploads/delete', 'api.EnterpriseResume/delete');
|
||
Route::post('enterprise/resume-uploads', 'api.EnterpriseResume/add');
|
||
// 企业合作模式(需微信登录且绑定企业)
|
||
Route::get('enterprise/cooperation-modes', 'api.Cooperation/modes');
|
||
Route::get('user/cooperation-status', 'api.Cooperation/status');
|
||
Route::post('user/cooperation-preference', 'api.Cooperation/submitPreference');
|
||
// 小程序用户更新资料
|
||
Route::put('auth/wechat/profile', 'api.Auth/updateWechatProfile');
|
||
// 小程序用户上传图片(头像等)
|
||
Route::post('upload/image', 'api.Upload/image');
|
||
// 小程序用户上传文件(候选人简历等)
|
||
Route::post('upload/file', 'api.Upload/file');
|
||
// 当前用户测试历史记录(小程序「测试历史」页)
|
||
Route::get('test/history', 'api.Test/history');
|
||
// 当前用户各类型最新一条记录(小程序「我的」页)
|
||
Route::get('test/recent', 'api.Test/recent');
|
||
// 单条测试详情
|
||
Route::get('test/detail', 'api.Test/detail');
|
||
// 启用题库(企业有则用企业,否则超管)
|
||
Route::get('test/questions', 'api.Test/questions');
|
||
// 提交测试结果(MBTI/DISC/PDP 等)
|
||
Route::post('test/submit', 'api.Test/submit');
|
||
// 简历综合分析(基于人脸/MBTI/PDP/DISC 最近一次结果)
|
||
Route::post('resume/analyze', 'api.Analyze/resumeAnalysis');
|
||
// 支付与订单
|
||
Route::post('payment/create', 'api.Payment/create');
|
||
Route::post('payment/notify', 'api.Payment/notify');
|
||
Route::get('payment/query', 'api.Payment/query');
|
||
// 当前用户订单列表(小程序「我的订单」)
|
||
Route::get('orders', 'api.Order/index');
|
||
// 分销
|
||
Route::post('distribution/bind', 'api.Distribution/bind');
|
||
Route::get('distribution/my-invite-code', 'api.Distribution/myInviteCode');
|
||
Route::get('distribution/stats', 'api.Distribution/stats');
|
||
Route::get('distribution/bindings', 'api.Distribution/bindings');
|
||
Route::get('distribution/commissions', 'api.Distribution/commissions');
|
||
Route::post('distribution/withdraw', 'api.Distribution/withdraw');
|
||
Route::get('distribution/withdrawals', 'api.Distribution/withdrawals');
|
||
Route::post('distribution/withdrawals/query-transfer', 'api.Distribution/queryTransfer');
|
||
Route::get('distribution/qrcode', 'api.Distribution/qrcode');
|
||
Route::get('distribution/poster', 'api.Distribution/poster');
|
||
// 小程序主动触发出站推送(与主业务接口解耦)
|
||
Route::post('push-hook/trigger', 'api.PushHook/trigger');
|
||
// 微信商家转账结果回调(无需登录,但需配置到微信商户平台)
|
||
Route::post('wechat/transfer/notify', 'api.WechatTransferNotify/notify')->middleware('cors');
|
||
// 存客宝获客线索上报
|
||
Route::post('crm/report', 'api.CrmReport/report');
|
||
|
||
// ==================== 神仙 AI(需要微信登录)====================
|
||
Route::post('ai/chat', 'api.AiChat/chat');
|
||
Route::get('ai/chat/job', 'api.AiChat/chatJobStatus');
|
||
Route::get('ai/conversations', 'api.AiChat/conversations');
|
||
Route::get('ai/conversations/:id/messages', 'api.AiChat/messages');
|
||
Route::post('ai/transcribe', 'api.AiChat/transcribe');
|
||
|
||
// AI 深度画像报告
|
||
Route::post('ai/report/create', 'api.AiReport/create');
|
||
Route::get('ai/report/my-latest', 'api.AiReport/myLatest');
|
||
// 无歧义别名(避免网关/旧路由把 my-latest 吞掉或误匹配)
|
||
Route::get('ai/my-report/latest', 'api.AiReport/myLatest');
|
||
// :id 仅匹配数字,避免 my-latest 被误路由到 show 导致 404
|
||
Route::get('ai/report/:id', 'api.AiReport/show')->pattern(['id' => '\d+']);
|
||
Route::post('ai/report/:id/mark-paid-dev', 'api.AiReport/markPaidDev');
|
||
Route::post('ai/report/:id/regenerate', 'api.AiReport/regenerate');
|
||
// 高考志愿(小程序登录后)
|
||
Route::get('gaokao/task-status', 'api.Gaokao/taskStatus');
|
||
Route::get('gaokao/form', 'api.Gaokao/myForm');
|
||
Route::post('gaokao/form', 'api.Gaokao/saveForm');
|
||
Route::post('gaokao/analyze', 'api.Gaokao/analyze');
|
||
Route::get('gaokao/report/my-latest', 'api.Gaokao/latestReport');
|
||
Route::get('gaokao/pricing', 'api.Gaokao/pricing');
|
||
})->middleware(['cors', 'auth']);
|
||
|
||
// ==================== 兼容 /api/v1 前缀(与上方 api 组同权、同中间件)====================
|
||
// 部分 CDN / 网关 / 旧客户端只放行 /api/v1/*,会导致 POST /api/ai/chat 404;此处镜像神仙 AI 相关路由
|
||
Route::group('api/v1', function () {
|
||
Route::post('ai/chat', 'api.AiChat/chat');
|
||
Route::get('ai/chat/job', 'api.AiChat/chatJobStatus');
|
||
Route::get('ai/conversations', 'api.AiChat/conversations');
|
||
Route::get('ai/conversations/:id/messages', 'api.AiChat/messages');
|
||
Route::post('ai/transcribe', 'api.AiChat/transcribe');
|
||
Route::post('ai/report/create', 'api.AiReport/create');
|
||
Route::get('ai/report/my-latest', 'api.AiReport/myLatest');
|
||
Route::get('ai/my-report/latest', 'api.AiReport/myLatest');
|
||
Route::get('ai/report/:id', 'api.AiReport/show')->pattern(['id' => '\d+']);
|
||
Route::post('ai/report/:id/mark-paid-dev', 'api.AiReport/markPaidDev');
|
||
Route::post('ai/report/:id/regenerate', 'api.AiReport/regenerate');
|
||
})->middleware(['cors', 'auth']);
|
||
|
||
// ==================== 小程序API路由(匹配前端 /api 路径)====================
|
||
// 小程序公开API路由(不需要认证)- 与前端共用上面 api 组,此处可不再重复
|
||
// 小程序需要认证的API路由 - 与前端共用上面 api 组
|
||
|
||
// ==================== 普通管理员API路由(匹配前端 /api/v1/admin 路径)====================
|
||
// 普通管理员认证路由(不需要认证)
|
||
Route::group('api/v1/admin', function () {
|
||
// 普通管理员登录
|
||
Route::post('auth/login', 'admin.Auth/adminLogin');
|
||
// 刷新Token
|
||
Route::post('auth/refresh', 'admin.Auth/refresh');
|
||
})->middleware('cors');
|
||
|
||
// 普通管理员路由(需要认证)
|
||
Route::group('api/v1/admin', function () {
|
||
// 管理员认证
|
||
Route::get('auth/me', 'admin.Auth/me');
|
||
Route::post('auth/logout', 'admin.Auth/logout');
|
||
|
||
// 仪表盘统计
|
||
Route::get('dashboard', 'admin.Dashboard/index');
|
||
|
||
// 邀请二维码
|
||
Route::get('invite/qrcode', 'admin.Invite/qrcode');
|
||
|
||
// 通用上传
|
||
Route::post('upload/image', 'admin.Upload/image');
|
||
|
||
// 测试用户(小程序用户,只读列表与详情)
|
||
Route::get('test-records/:id', 'admin.AppUser/testRecord');
|
||
Route::get('app-users/:id', 'admin.AppUser/detail');
|
||
Route::get('app-users', 'admin.AppUser/index');
|
||
Route::get('gaokao-users/:id', 'admin.GaokaoUser/detail');
|
||
Route::get('gaokao-users', 'admin.GaokaoUser/index');
|
||
// 订单列表(含用户与关联测试数据)
|
||
Route::get('orders', 'admin.Order/index');
|
||
// 用户管理(普通管理员和企业管理员,后台账号)
|
||
Route::get('users', 'admin.User/index');
|
||
Route::get('users/:id', 'admin.User/detail');
|
||
Route::post('users', 'admin.User/create');
|
||
Route::put('users/:id', 'admin.User/update');
|
||
Route::delete('users/:id', 'admin.User/delete');
|
||
Route::put('users/:id/status', 'admin.User/toggleStatus');
|
||
|
||
// 题库管理(企业管理员和普通管理员)
|
||
Route::get('questions/:id', 'admin.Question/detail');
|
||
Route::get('questions', 'admin.Question/index');
|
||
Route::post('questions', 'admin.Question/create');
|
||
Route::put('questions/:id', 'admin.Question/update');
|
||
Route::delete('questions/:id', 'admin.Question/delete');
|
||
Route::put('questions/:id/status', 'admin.Question/toggleStatus');
|
||
Route::post('questions/batch-import', 'admin.Question/batchImport');
|
||
|
||
// 定价管理(普通管理员)
|
||
Route::get('pricing', 'admin.Pricing/index');
|
||
Route::put('pricing', 'admin.Pricing/update');
|
||
|
||
// 系统设置(普通管理员,子路径放前面避免被 settings 吞掉)
|
||
Route::get('settings/push-hook', 'admin.Settings/getPushHookConfig');
|
||
Route::put('settings/push-hook', 'admin.Settings/updatePushHookConfig');
|
||
Route::post('settings/push-hook/test', 'admin.Settings/testPushHookConfig');
|
||
Route::post('settings/push-hook/test-result', 'admin.Settings/testPushHookTestResult');
|
||
Route::get('settings/miniprogram', 'admin.Settings/getMiniprogramConfig');
|
||
Route::put('settings/miniprogram', 'admin.Settings/updateMiniprogramConfig');
|
||
Route::get('settings/poster', 'admin.Settings/getPosterConfig');
|
||
Route::put('settings/poster', 'admin.Settings/updatePosterConfig');
|
||
Route::get('settings/fonts', 'admin.Settings/getFonts');
|
||
Route::get('settings/cunkebao-keys', 'admin.Settings/getCunkebaoKeys');
|
||
Route::put('settings/cunkebao-keys', 'admin.Settings/updateCunkebaoKeys');
|
||
Route::put('settings/credentials', 'admin.Settings/updateCredentials');
|
||
Route::get('settings', 'admin.Settings/index');
|
||
|
||
// 企业功能开关(企业管理员,受超管 permissionsCeiling 约束)
|
||
Route::get('enterprise/permissions', 'admin.EnterprisePermissions/index');
|
||
Route::put('enterprise/permissions', 'admin.EnterprisePermissions/update');
|
||
Route::get('enterprise/cooperation-modes', 'admin.EnterpriseCooperation/get');
|
||
Route::put('enterprise/cooperation-modes', 'admin.EnterpriseCooperation/update');
|
||
Route::get('enterprise/cooperation-choices/export', 'admin.EnterpriseCooperation/exportChoices');
|
||
Route::get('enterprise/cooperation-choices', 'admin.EnterpriseCooperation/listChoices');
|
||
|
||
// 分销管理(企业管理员)
|
||
Route::get('distribution/overview', 'admin.Distribution/overview');
|
||
Route::get('distribution/distributors', 'admin.Distribution/distributors');
|
||
Route::get('distribution/bindings', 'admin.Distribution/bindings');
|
||
Route::get('distribution/commissions', 'admin.Distribution/commissions');
|
||
Route::get('distribution/withdrawals', 'admin.Distribution/withdrawals');
|
||
Route::post('distribution/withdrawals/:id/approve', 'admin.Distribution/approveWithdrawal');
|
||
Route::post('distribution/withdrawals/:id/reject', 'admin.Distribution/rejectWithdrawal');
|
||
Route::get('distribution/settings', 'admin.Distribution/settings');
|
||
Route::put('distribution/settings', 'admin.Distribution/updateSettings');
|
||
|
||
// 企业财务(企业管理员)
|
||
Route::get('finance/overview', 'admin.Finance/overview');
|
||
Route::get('finance/records', 'admin.Finance/records');
|
||
Route::post('finance/recharge-qrcode', 'admin.Finance/rechargeQrcode');
|
||
Route::post('finance/recharge', 'admin.Finance/rechargeQrcode');
|
||
})->middleware(['cors', 'auth']);
|
||
|
||
// ==================== 超级管理员API路由(匹配前端 /api/v1/superadmin 路径)====================
|
||
// 超级管理员认证路由(不需要认证)
|
||
Route::group('api/v1/superadmin', function () {
|
||
// 超级管理员登录
|
||
Route::post('auth/login', 'superadmin.Auth/login');
|
||
// 刷新Token
|
||
Route::post('auth/refresh', 'superadmin.Auth/refresh');
|
||
})->middleware('cors');
|
||
|
||
// 超级管理员路由(需要认证)
|
||
Route::group('api/v1/superadmin', function () {
|
||
// 超级管理员认证
|
||
Route::get('auth/me', 'superadmin.Auth/me');
|
||
Route::post('auth/logout', 'superadmin.Auth/logout');
|
||
|
||
// 全平台订单列表(与 admin.Order 共用逻辑,超管不限企业)
|
||
Route::get('orders', 'admin.Order/index');
|
||
|
||
// 将无 enterpriseId 的订单/测试等归并到指定企业(仅超管;默认预览)
|
||
Route::post('data-migration/attach-orphan-orders', 'superadmin.DataMigration/attachOrphanOrders');
|
||
// 将全平台无归属测试记录/小程序用户并入「存客宝」或指定企业(仅超管)
|
||
Route::post('data-migration/attach-orphans-to-cunkbao', 'superadmin.DataMigration/attachOrphansToCunkbao');
|
||
|
||
// 企业管理(超管专用)
|
||
// 注意:带参数的路由要放在不带参数的路由之前,避免路由匹配冲突
|
||
Route::get('enterprises/:id/cooperation-modes', 'superadmin.EnterpriseCooperation/get')->pattern(['id' => '\d+']);
|
||
Route::put('enterprises/:id/cooperation-modes', 'superadmin.EnterpriseCooperation/update')->pattern(['id' => '\d+']);
|
||
Route::get('enterprises/:id/cooperation-choices/export', 'superadmin.EnterpriseCooperation/exportUserChoices')->pattern(['id' => '\d+']);
|
||
Route::get('enterprises/:id/cooperation-choices', 'superadmin.EnterpriseCooperation/listUserChoices')->pattern(['id' => '\d+']);
|
||
Route::get('enterprises/:id/detail', 'superadmin.Enterprise/detail'); // 详细详情接口
|
||
Route::get('enterprises/:id', 'superadmin.Enterprise/detail');
|
||
Route::get('enterprises', 'superadmin.Enterprise/index');
|
||
Route::post('enterprises', 'superadmin.Enterprise/create');
|
||
Route::put('enterprises/:id', 'superadmin.Enterprise/update');
|
||
Route::delete('enterprises/:id', 'superadmin.Enterprise/delete');
|
||
Route::put('enterprises/:id/status', 'superadmin.Enterprise/toggleStatus');
|
||
|
||
// 题库管理(超管专用,管理超管题库)
|
||
Route::get('questions/:id', 'superadmin.Question/detail');
|
||
Route::get('questions', 'superadmin.Question/index');
|
||
Route::post('questions', 'superadmin.Question/create');
|
||
Route::put('questions/:id', 'superadmin.Question/update');
|
||
Route::delete('questions/:id', 'superadmin.Question/delete');
|
||
Route::put('questions/:id/status', 'superadmin.Question/toggleStatus');
|
||
Route::post('questions/batch-import', 'superadmin.Question/batchImport');
|
||
|
||
// 全局定价管理(超管专用)
|
||
Route::get('pricing', 'superadmin.Pricing/index');
|
||
Route::put('pricing', 'superadmin.Pricing/update');
|
||
Route::post('pricing/batch-update', 'superadmin.Pricing/batchUpdate');
|
||
|
||
// AI服务商配置管理(超管专用)
|
||
Route::get('ai-config', 'superadmin.AiConfig/index');
|
||
Route::put('ai-config', 'superadmin.AiConfig/update');
|
||
Route::post('ai-config/batch-update', 'superadmin.AiConfig/batchUpdate');
|
||
Route::post('ai-config/query-balance', 'superadmin.AiConfig/queryBalance');
|
||
Route::post('ai-config/query-all-balances', 'superadmin.AiConfig/queryAllBalances');
|
||
|
||
// 数据库管理(超管专用)
|
||
Route::get('database/info', 'superadmin.Database/info');
|
||
Route::get('database/tables', 'superadmin.Database/tables');
|
||
Route::get('database/view-table', 'superadmin.Database/viewTable');
|
||
Route::post('database/export-table', 'superadmin.Database/exportTable');
|
||
Route::post('database/clear-table', 'superadmin.Database/clearTable');
|
||
Route::post('database/backup', 'superadmin.Database/backup');
|
||
Route::get('database/backups', 'superadmin.Database/backups');
|
||
Route::delete('database/backups/:id', 'superadmin.Database/delete');
|
||
Route::post('database/backups/delete', 'superadmin.Database/delete');
|
||
Route::get('database/download', 'superadmin.Database/download');
|
||
Route::post('database/restore', 'superadmin.Database/restore');
|
||
|
||
// 通用上传(超管)
|
||
Route::post('upload/image', 'admin.Upload/image');
|
||
|
||
// 系统设置(超管专用,子路径放前面避免被 settings 吞掉)
|
||
Route::get('settings/push-hook', 'superadmin.Settings/getPushHookConfig');
|
||
Route::put('settings/push-hook', 'superadmin.Settings/updatePushHookConfig');
|
||
Route::post('settings/push-hook/test', 'superadmin.Settings/testPushHookConfig');
|
||
Route::post('settings/push-hook/test-result', 'superadmin.Settings/testPushHookTestResult');
|
||
Route::get('settings/fonts', 'superadmin.Settings/getFonts');
|
||
Route::get('settings/poster', 'superadmin.Settings/getPosterConfig');
|
||
Route::put('settings/poster', 'superadmin.Settings/updatePosterConfig');
|
||
Route::put('settings/review-mode', 'superadmin.Settings/updateReviewMode');
|
||
Route::post('settings/wechat-audit-sync', 'superadmin.Settings/syncWechatAuditStatus');
|
||
Route::get('settings', 'superadmin.Settings/index');
|
||
Route::put('settings/system', 'superadmin.Settings/updateSystem');
|
||
Route::put('settings/report-requires-payment', 'superadmin.Settings/updateReportRequiresPayment');
|
||
Route::put('settings/notification', 'superadmin.Settings/updateNotification');
|
||
Route::put('settings/prompts', 'superadmin.Settings/updatePrompts');
|
||
Route::put('settings/credentials', 'superadmin.Settings/updateCredentials');
|
||
|
||
// 测试用户(超管专用)
|
||
Route::get('app-users/overview', 'superadmin.AppUser/overview');
|
||
Route::get('test-records/:id', 'superadmin.AppUser/testRecord');
|
||
Route::get('app-users/:id', 'superadmin.AppUser/detail');
|
||
Route::get('app-users', 'superadmin.AppUser/index');
|
||
Route::get('gaokao-users/:id', 'superadmin.GaokaoUser/detail');
|
||
Route::get('gaokao-users', 'superadmin.GaokaoUser/index');
|
||
|
||
// 数据概览(超管专用,子路径放前面避免被 overview 吞掉)
|
||
Route::get('overview/recent-dynamics', 'superadmin.Overview/recentDynamics');
|
||
Route::get('overview/enterprise-ranking', 'superadmin.Overview/enterpriseRanking');
|
||
Route::get('overview/test-trends', 'superadmin.Overview/testTrends');
|
||
Route::get('overview', 'superadmin.Overview/index');
|
||
// 超管邀请小程序码(与企业后台同一控制层逻辑,企业版需 enterpriseId 或系统默认企业)
|
||
Route::get('invite/qrcode', 'admin.Invite/qrcode');
|
||
|
||
// 财务管理(超管专用)
|
||
Route::get('finance/overview', 'superadmin.Finance/overview');
|
||
Route::get('finance/revenue-details', 'superadmin.Finance/revenueDetails');
|
||
Route::get('finance/cost-details', 'superadmin.Finance/costDetails');
|
||
Route::get('finance/recharge-records', 'superadmin.Finance/rechargeRecords');
|
||
Route::get('finance/payment-records', 'superadmin.Finance/paymentRecords');
|
||
Route::post('finance/export', 'superadmin.Finance/export');
|
||
// 分销管理(超管专用 - 个人版全平台视图)
|
||
Route::get('distribution/overview', 'superadmin.Distribution/overview');
|
||
Route::get('distribution/bindings', 'superadmin.Distribution/bindings');
|
||
Route::get('distribution/commissions', 'superadmin.Distribution/commissions');
|
||
Route::get('distribution/withdrawals', 'superadmin.Distribution/withdrawals');
|
||
Route::post('distribution/withdrawals/:id/approve', 'superadmin.Distribution/approveWithdrawal');
|
||
Route::post('distribution/withdrawals/:id/reject', 'superadmin.Distribution/rejectWithdrawal');
|
||
Route::get('distribution/settings', 'superadmin.Distribution/settings');
|
||
Route::put('distribution/settings', 'superadmin.Distribution/updateSettings');
|
||
|
||
// 小程序埋点统计(仅超管)
|
||
Route::get('analytics/summary', 'superadmin.Analytics/summary');
|
||
Route::get('analytics/events', 'superadmin.Analytics/events');
|
||
Route::get('analytics/user-journey', 'superadmin.Analytics/userJourney');
|
||
Route::get('analytics/share-stats', 'superadmin.Analytics/shareStats');
|
||
Route::get('analytics/share-funnel', 'superadmin.Analytics/shareFunnel');
|
||
|
||
// Soul 文章采集与推荐(一场 soul 创业实验引流)
|
||
Route::get('soul-articles/ai-chat-display', 'superadmin.SoulArticle/aiChatDisplayGet');
|
||
Route::post('soul-articles/ai-chat-display', 'superadmin.SoulArticle/aiChatDisplaySave');
|
||
Route::post('soul-articles/sync', 'superadmin.SoulArticle/sync');
|
||
Route::post('soul-articles/:id/recommend', 'superadmin.SoulArticle/recommend');
|
||
Route::post('soul-articles/:id/order', 'superadmin.SoulArticle/setOrder');
|
||
Route::post('soul-articles/reorder-normalize', 'superadmin.SoulArticle/normalizeOrder');
|
||
Route::post('soul-articles/:id/delete', 'superadmin.SoulArticle/remove');
|
||
Route::get('soul-articles', 'superadmin.SoulArticle/index');
|
||
|
||
// 神仙 AI 健康与欠费监控
|
||
Route::get('ai/health', 'superadmin.SoulArticle/health');
|
||
Route::post('ai/balance-check', 'superadmin.AiMonitor/balanceCheck');
|
||
|
||
// 小程序 TabBar 后台可配
|
||
Route::get('tabbar', 'superadmin.MpTabBar/index');
|
||
Route::post('tabbar/save', 'superadmin.MpTabBar/save');
|
||
Route::post('tabbar/reorder', 'superadmin.MpTabBar/reorder');
|
||
Route::post('tabbar/:id/delete', 'superadmin.MpTabBar/remove');
|
||
|
||
// 分账规则
|
||
Route::get('profit-rules', 'superadmin.ProfitRule/index');
|
||
Route::post('profit-rules/save', 'superadmin.ProfitRule/save');
|
||
Route::post('profit-rules/:id/toggle', 'superadmin.ProfitRule/toggle');
|
||
})->middleware(['cors', 'auth', 'superadmin']);
|
||
|
||
// ==================== 兼容旧版路由(保留,逐步废弃)====================
|
||
// 管理后台认证路由(不需要认证)- 兼容旧版
|
||
Route::group('api/v1', function () {
|
||
// 管理员登录(兼容旧版)
|
||
Route::post('auth/admin/login', 'admin.Auth/adminLogin');
|
||
// 超级管理员登录(兼容旧版)
|
||
Route::post('auth/superadmin/login', 'superadmin.Auth/login');
|
||
// 刷新Token(兼容旧版)
|
||
Route::post('auth/refresh', 'admin.Auth/refresh');
|
||
})->middleware('cors');
|
||
|
||
// 管理后台路由(需要认证)- 兼容旧版
|
||
Route::group('api/v1', function () {
|
||
// 管理员认证(兼容旧版)
|
||
Route::get('auth/me', 'admin.Auth/me');
|
||
Route::post('auth/logout', 'admin.Auth/logout');
|
||
|
||
// 仪表盘统计(兼容旧版)
|
||
Route::get('dashboard', 'admin.Dashboard/index');
|
||
|
||
// 通用上传(兼容旧版)
|
||
Route::post('upload/image', 'admin.Upload/image');
|
||
|
||
// 用户管理(兼容旧版)
|
||
Route::get('users', 'admin.User/index');
|
||
Route::get('users/:id', 'admin.User/detail');
|
||
Route::post('users', 'admin.User/create');
|
||
Route::put('users/:id', 'admin.User/update');
|
||
Route::delete('users/:id', 'admin.User/delete');
|
||
Route::put('users/:id/status', 'admin.User/toggleStatus');
|
||
|
||
// 企业管理(超管,兼容旧版)
|
||
// 注意:带参数的路由要放在不带参数的路由之前,避免路由匹配冲突
|
||
Route::get('enterprises/:id/cooperation-modes', 'superadmin.EnterpriseCooperation/get')->pattern(['id' => '\d+']);
|
||
Route::put('enterprises/:id/cooperation-modes', 'superadmin.EnterpriseCooperation/update')->pattern(['id' => '\d+']);
|
||
Route::get('enterprises/:id/cooperation-choices/export', 'superadmin.EnterpriseCooperation/exportUserChoices')->pattern(['id' => '\d+']);
|
||
Route::get('enterprises/:id/cooperation-choices', 'superadmin.EnterpriseCooperation/listUserChoices')->pattern(['id' => '\d+']);
|
||
Route::get('enterprises/:id/detail', 'superadmin.Enterprise/detail'); // 详细详情接口
|
||
Route::get('enterprises/:id', 'superadmin.Enterprise/detail');
|
||
Route::get('enterprises', 'superadmin.Enterprise/index');
|
||
Route::post('enterprises', 'superadmin.Enterprise/create');
|
||
Route::put('enterprises/:id', 'superadmin.Enterprise/update');
|
||
Route::delete('enterprises/:id', 'superadmin.Enterprise/delete');
|
||
Route::put('enterprises/:id/status', 'superadmin.Enterprise/toggleStatus');
|
||
|
||
// 题库管理(兼容旧版)
|
||
Route::get('questions/:id', 'admin.Question/detail');
|
||
Route::get('questions', 'admin.Question/index');
|
||
Route::post('questions', 'admin.Question/create');
|
||
Route::put('questions/:id', 'admin.Question/update');
|
||
Route::delete('questions/:id', 'admin.Question/delete');
|
||
Route::put('questions/:id/status', 'admin.Question/toggleStatus');
|
||
Route::post('questions/batch-import', 'admin.Question/batchImport');
|
||
|
||
// 企业财务(兼容旧版)
|
||
Route::get('finance/overview', 'admin.Finance/overview');
|
||
Route::get('finance/records', 'admin.Finance/records');
|
||
Route::post('finance/recharge-qrcode', 'admin.Finance/rechargeQrcode');
|
||
Route::post('finance/recharge', 'admin.Finance/rechargeQrcode');
|
||
})->middleware(['cors', 'auth']);
|
||
|
||
// ==================== 兼容旧版路由(保留)====================
|
||
// 后台管理认证路由(不需要认证)- 兼容旧版
|
||
Route::group('api/admin', function () {
|
||
// 管理员登录
|
||
Route::post('auth/login', 'admin.Auth/login');
|
||
Route::post('auth/refresh', 'admin.Auth/refresh');
|
||
})->middleware('cors');
|
||
|
||
// 后台管理路由(需要认证)- 兼容旧版
|
||
Route::group('api/admin', function () {
|
||
// 管理员认证
|
||
Route::get('auth/me', 'admin.Auth/me');
|
||
Route::post('auth/logout', 'admin.Auth/logout');
|
||
|
||
// 仪表盘统计
|
||
Route::get('dashboard', 'admin.Dashboard/index');
|
||
|
||
// 通用上传
|
||
Route::post('upload/image', 'admin.Upload/image');
|
||
|
||
// 用户管理
|
||
Route::get('users', 'admin.User/index');
|
||
Route::get('users/:id', 'admin.User/detail');
|
||
Route::post('users', 'admin.User/create');
|
||
Route::put('users/:id', 'admin.User/update');
|
||
Route::delete('users/:id', 'admin.User/delete');
|
||
Route::put('users/:id/status', 'admin.User/toggleStatus');
|
||
|
||
// 企业财务
|
||
Route::get('finance/overview', 'admin.Finance/overview');
|
||
Route::get('finance/records', 'admin.Finance/records');
|
||
Route::post('finance/recharge-qrcode', 'admin.Finance/rechargeQrcode');
|
||
Route::post('finance/recharge', 'admin.Finance/rechargeQrcode');
|
||
})->middleware(['cors', 'auth']);
|
||
|
||
// ==================== 兼容旧版路由(保留)====================
|
||
// 后台管理认证路由(不需要认证)- 兼容旧版
|
||
Route::group('api/admin', function () {
|
||
// 管理员登录
|
||
Route::post('auth/login', 'admin.Auth/login');
|
||
Route::post('auth/refresh', 'admin.Auth/refresh');
|
||
})->middleware('cors');
|
||
|
||
// 后台管理路由(需要认证)- 兼容旧版
|
||
Route::group('api/admin', function () {
|
||
// 管理员认证
|
||
Route::get('auth/me', 'admin.Auth/me');
|
||
Route::post('auth/logout', 'admin.Auth/logout');
|
||
|
||
// 仪表盘统计
|
||
Route::get('dashboard', 'admin.Dashboard/index');
|
||
|
||
// 通用上传
|
||
Route::post('upload/image', 'admin.Upload/image');
|
||
|
||
// 用户管理
|
||
Route::get('users', 'admin.User/index');
|
||
Route::get('users/:id', 'admin.User/detail');
|
||
Route::post('users', 'admin.User/create');
|
||
Route::put('users/:id', 'admin.User/update');
|
||
Route::delete('users/:id', 'admin.User/delete');
|
||
Route::put('users/:id/status', 'admin.User/toggleStatus');
|
||
|
||
// 企业财务
|
||
Route::get('finance/overview', 'admin.Finance/overview');
|
||
Route::get('finance/records', 'admin.Finance/records');
|
||
Route::post('finance/recharge-qrcode', 'admin.Finance/rechargeQrcode');
|
||
Route::post('finance/recharge', 'admin.Finance/rechargeQrcode');
|
||
})->middleware(['cors', 'auth']);
|