Files
MBTI_wang/api/route/api.php
Ghost d7137f9349 微信小程序:自定义底栏接入 AI 入口(含图标与样式)、AI 聊天相关页面与历史/报告等能力;审核模式与配置联动;资料/企业/首页/授权等页面与 app 入口配合调整。
后端 API:AI 对话/报告/余额告警 等服务与路由;小程序 tabBar 配置与分润相关能力;出站推送 Webhook 与管理端调试;飞书留资、小程序数据分析 等支撑;多份 数据库迁移(AI 聊天、灵魂文章、tabBar、分润等)。
管理端 / 超管:看板、用户/订单/分销/财务、设置与 小程序 tabBar 管理、分润规则、灵魂文章、AI 配置与监控 等大量页面与能力扩展;主题与布局更新。
抖音小程序:与微信侧在 结果页/购买/个人中心 等方向做了同步或优化。
另含 部署/脚本、开发文档 等配套更新。
邀请码与解锁:后端 分销/邀请码 接口与 add_invite_codes 等 SQL;小程序侧 邀请码弹窗组件、个人中心/推广/多类结果页 的填写入口与 解锁门控(inviteCodeGate、unlockGate);并补充 《小程序解锁引导与邀请码方案》 文档。
超管后台:路由与 企业中心(EnterpriseHub) 等交互与结构优化。
小程序体验:在 首页结果、推广、各测评结果页 上继续打磨;与 邀请码门控、审核门控 小步联动。
2026-04-23 11:28:16 +08:00

502 lines
27 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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::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');
})->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('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('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/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');
// 数据概览(超管专用,子路径放前面避免被 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/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']);