name('lang.switch'); Route::get('/', function () { return redirect()->route('login'); }); Route::get('/dashboard', function () { return redirect()->route('admin.dashboard'); })->middleware(['auth', 'verified'])->name('dashboard'); Route::middleware(['auth', 'verified', 'tenant.access'])->prefix('admin')->name('admin.')->group(function () { // 1. 儀表板 Route::get('/dashboard', [App\Http\Controllers\Admin\DashboardController::class , 'index'])->name('dashboard'); // 2. 會員管理 Route::resource('members', App\Http\Controllers\MemberController::class)->only(['index']); Route::resource('membership-tiers', App\Http\Controllers\Admin\MembershipTierController::class)->except(['show', 'create', 'edit']); Route::resource('deposit-bonus-rules', App\Http\Controllers\Admin\DepositBonusRuleController::class)->except(['show', 'create', 'edit']); Route::resource('point-rules', App\Http\Controllers\Admin\PointRuleController::class)->except(['show', 'create', 'edit']); Route::resource('gift-definitions', App\Http\Controllers\Admin\GiftDefinitionController::class)->except(['show', 'create', 'edit']); // 3. 機台管理 Route::prefix('machines')->name('machines.')->group(function () { Route::get('/logs', [App\Http\Controllers\Admin\MachineController::class , 'logs'])->name('logs'); Route::get('/permissions', [App\Http\Controllers\Admin\MachineController::class , 'permissions'])->name('permissions'); Route::get('/utilization', [App\Http\Controllers\Admin\MachineController::class , 'utilization'])->name('utilization'); Route::get('/expiry', [App\Http\Controllers\Admin\MachineController::class , 'expiry'])->name('expiry'); Route::get('/maintenance', [App\Http\Controllers\Admin\MachineController::class , 'maintenance'])->name('maintenance'); } ); Route::resource('machines', App\Http\Controllers\Admin\MachineController::class); // 4. APP管理 Route::prefix('app')->name('app.')->group(function () { Route::get('/ui-elements', [App\Http\Controllers\Admin\AppConfigController::class , 'uiElements'])->name('ui-elements'); Route::get('/helper', [App\Http\Controllers\Admin\AppConfigController::class , 'helper'])->name('helper'); Route::get('/questionnaire', [App\Http\Controllers\Admin\AppConfigController::class , 'questionnaire'])->name('questionnaire'); Route::get('/games', [App\Http\Controllers\Admin\AppConfigController::class , 'games'])->name('games'); Route::get('/timer', [App\Http\Controllers\Admin\AppConfigController::class , 'timer'])->name('timer'); } ); Route::get('/app-configs', [App\Http\Controllers\Admin\AppConfigController::class , 'index'])->name('app-configs.index'); Route::put('/app-configs', [App\Http\Controllers\Admin\AppConfigController::class , 'update'])->name('app-configs.update'); // 5. 倉庫管理 Route::prefix('warehouses')->name('warehouses.')->group(function () { Route::get('/', [App\Http\Controllers\Admin\WarehouseController::class , 'index'])->name('index'); Route::get('/personal', [App\Http\Controllers\Admin\WarehouseController::class , 'personal'])->name('personal'); Route::get('/stock-management', [App\Http\Controllers\Admin\WarehouseController::class , 'stockManagement'])->name('stock-management'); Route::get('/transfers', [App\Http\Controllers\Admin\WarehouseController::class , 'transfers'])->name('transfers'); Route::get('/purchases', [App\Http\Controllers\Admin\WarehouseController::class , 'purchases'])->name('purchases'); Route::get('/replenishments', [App\Http\Controllers\Admin\WarehouseController::class , 'replenishments'])->name('replenishments'); Route::get('/replenishment-records', [App\Http\Controllers\Admin\WarehouseController::class , 'replenishmentRecords'])->name('replenishment-records'); Route::get('/replenishment-records-all', [App\Http\Controllers\Admin\WarehouseController::class , 'replenishmentRecordsAll'])->name('replenishment-records-all'); Route::get('/machine-stock', [App\Http\Controllers\Admin\WarehouseController::class , 'machineStock'])->name('machine-stock'); Route::get('/staff-stock', [App\Http\Controllers\Admin\WarehouseController::class , 'staffStock'])->name('staff-stock'); Route::get('/returns', [App\Http\Controllers\Admin\WarehouseController::class , 'returns'])->name('returns'); } ); // 6. 銷售管理 Route::prefix('sales')->name('sales.')->group(function () { Route::get('/', [App\Http\Controllers\Admin\SalesController::class , 'index'])->name('index'); Route::get('/pickup-codes', [App\Http\Controllers\Admin\SalesController::class , 'pickupCodes'])->name('pickup-codes'); Route::get('/orders', [App\Http\Controllers\Admin\SalesController::class , 'orders'])->name('orders'); Route::get('/promotions', [App\Http\Controllers\Admin\SalesController::class , 'promotions'])->name('promotions'); Route::get('/pass-codes', [App\Http\Controllers\Admin\SalesController::class , 'passCodes'])->name('pass-codes'); Route::get('/store-gifts', [App\Http\Controllers\Admin\SalesController::class , 'storeGifts'])->name('store-gifts'); } ); // 7. 分析管理 Route::prefix('analysis')->name('analysis.')->group(function () { Route::get('/change-stock', [App\Http\Controllers\Admin\AnalysisController::class , 'changeStock'])->name('change-stock'); Route::get('/machine-reports', [App\Http\Controllers\Admin\AnalysisController::class , 'machineReports'])->name('machine-reports'); Route::get('/product-reports', [App\Http\Controllers\Admin\AnalysisController::class , 'productReports'])->name('product-reports'); Route::get('/survey-analysis', [App\Http\Controllers\Admin\AnalysisController::class , 'surveyAnalysis'])->name('survey-analysis'); } ); // 8. 稽核管理 Route::prefix('audit')->name('audit.')->group(function () { Route::get('/purchases', [App\Http\Controllers\Admin\AuditController::class , 'purchases'])->name('purchases'); Route::get('/transfers', [App\Http\Controllers\Admin\AuditController::class , 'transfers'])->name('transfers'); Route::get('/replenishments', [App\Http\Controllers\Admin\AuditController::class , 'replenishments'])->name('replenishments'); } ); // 9. 資料設定 Route::prefix('data-config')->name('data-config.')->group(function () { Route::get('/products', [App\Http\Controllers\Admin\DataConfigController::class , 'products'])->name('products'); Route::get('/advertisements', [App\Http\Controllers\Admin\DataConfigController::class , 'advertisements'])->name('advertisements'); Route::get('/admin-products', [App\Http\Controllers\Admin\DataConfigController::class , 'adminProducts'])->name('admin-products'); Route::get('/sub-accounts', [App\Http\Controllers\Admin\PermissionController::class , 'accounts'])->name('sub-accounts'); Route::post('/sub-accounts', [App\Http\Controllers\Admin\PermissionController::class , 'storeAccount'])->name('sub-accounts.store'); Route::put('/sub-accounts/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'updateAccount'])->name('sub-accounts.update'); Route::delete('/sub-accounts/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'destroyAccount'])->name('sub-accounts.destroy'); Route::get('/sub-account-roles', [App\Http\Controllers\Admin\PermissionController::class , 'roles'])->name('sub-account-roles'); Route::post('/sub-account-roles', [App\Http\Controllers\Admin\PermissionController::class , 'storeRole'])->name('sub-account-roles.store'); Route::put('/sub-account-roles/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'updateRole'])->name('sub-account-roles.update'); Route::delete('/sub-account-roles/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'destroyRole'])->name('sub-account-roles.destroy'); Route::get('/points', [App\Http\Controllers\Admin\DataConfigController::class , 'points'])->name('points'); Route::get('/badges', [App\Http\Controllers\Admin\DataConfigController::class , 'badges'])->name('badges'); } ); // 10. 遠端管理 Route::prefix('remote')->name('remote.')->group(function () { Route::get('/stock', [App\Http\Controllers\Admin\RemoteController::class , 'stock'])->name('stock'); Route::get('/restart', [App\Http\Controllers\Admin\RemoteController::class , 'restart'])->name('restart'); Route::get('/restart-card-reader', [App\Http\Controllers\Admin\RemoteController::class , 'restartCardReader'])->name('restart-card-reader'); Route::get('/checkout', [App\Http\Controllers\Admin\RemoteController::class , 'checkout'])->name('checkout'); Route::get('/lock', [App\Http\Controllers\Admin\RemoteController::class , 'lock'])->name('lock'); Route::get('/change', [App\Http\Controllers\Admin\RemoteController::class , 'change'])->name('change'); Route::get('/dispense', [App\Http\Controllers\Admin\RemoteController::class , 'dispense'])->name('dispense'); } ); // 11. Line管理 Route::prefix('line')->name('line.')->group(function () { Route::get('/members', [App\Http\Controllers\Admin\LineController::class , 'members'])->name('members'); Route::get('/machines', [App\Http\Controllers\Admin\LineController::class , 'machines'])->name('machines'); Route::get('/products', [App\Http\Controllers\Admin\LineController::class , 'products'])->name('products'); Route::get('/official-account', [App\Http\Controllers\Admin\LineController::class , 'officialAccount'])->name('official-account'); Route::get('/orders', [App\Http\Controllers\Admin\LineController::class , 'orders'])->name('orders'); Route::get('/coupons', [App\Http\Controllers\Admin\LineController::class , 'coupons'])->name('coupons'); } ); // 12. 預約系統 Route::prefix('reservation')->name('reservation.')->group(function () { Route::get('/members', [App\Http\Controllers\Admin\ReservationController::class , 'members'])->name('members'); Route::get('/stores', [App\Http\Controllers\Admin\ReservationController::class , 'stores'])->name('stores'); Route::get('/time-slots', [App\Http\Controllers\Admin\ReservationController::class , 'timeSlots'])->name('time-slots'); Route::get('/venues', [App\Http\Controllers\Admin\ReservationController::class , 'venues'])->name('venues'); Route::get('/coupons', [App\Http\Controllers\Admin\ReservationController::class , 'coupons'])->name('coupons'); Route::get('/reservations', [App\Http\Controllers\Admin\ReservationController::class , 'reservations'])->name('reservations'); Route::get('/orders', [App\Http\Controllers\Admin\ReservationController::class , 'orders'])->name('orders'); } ); // 13. 特殊權限管理 Route::prefix('special-permission')->name('special-permission.')->group(function () { Route::get('/clear-stock', [App\Http\Controllers\Admin\SpecialPermissionController::class , 'clearStock'])->name('clear-stock'); Route::get('/apk-versions', [App\Http\Controllers\Admin\SpecialPermissionController::class , 'apkVersions'])->name('apk-versions'); Route::get('/discord-notifications', [App\Http\Controllers\Admin\SpecialPermissionController::class , 'discordNotifications'])->name('discord-notifications'); } ); // 14. 基本設定 Route::prefix('basic-settings')->name('basic-settings.')->group(function () { // 機台設定 Route::prefix('machines')->name('machines.')->group(function () { Route::get('/', [App\Http\Controllers\Admin\BasicSettings\MachineSettingController::class, 'index'])->name('index'); Route::get('/{machine}/edit', [App\Http\Controllers\Admin\BasicSettings\MachineSettingController::class, 'edit'])->name('edit'); Route::put('/{machine}', [App\Http\Controllers\Admin\BasicSettings\MachineSettingController::class, 'update'])->name('update'); Route::post('/', [App\Http\Controllers\Admin\BasicSettings\MachineSettingController::class, 'store'])->name('store'); }); // 客戶金流設定 Route::resource('payment-configs', App\Http\Controllers\Admin\BasicSettings\PaymentConfigController::class)->except(['show']); // 機台型號設定 Route::resource('machine-models', App\Http\Controllers\Admin\BasicSettings\MachineModelController::class)->except(['show']); }); // 15. 權限設定 Route::prefix('permission')->name('permission.')->group(function () { Route::resource('companies', App\Http\Controllers\Admin\CompanyController::class)->except(['show', 'create', 'edit']); Route::get('/accounts', [App\Http\Controllers\Admin\PermissionController::class , 'accounts'])->name('accounts'); Route::post('/accounts', [App\Http\Controllers\Admin\PermissionController::class , 'storeAccount'])->name('accounts.store'); Route::put('/accounts/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'updateAccount'])->name('accounts.update'); Route::delete('/accounts/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'destroyAccount'])->name('accounts.destroy'); Route::get('/roles', [App\Http\Controllers\Admin\PermissionController::class , 'roles'])->name('roles'); Route::post('/roles', [App\Http\Controllers\Admin\PermissionController::class , 'storeRole'])->name('roles.store'); Route::put('/roles/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'updateRole'])->name('roles.update'); Route::delete('/roles/{id}', [App\Http\Controllers\Admin\PermissionController::class , 'destroyRole'])->name('roles.destroy'); } ); // 主題設定 Route::post('/theme', [App\Http\Controllers\Admin\ThemeController::class , 'update'])->name('theme.update'); }); Route::middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class , 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class , 'update'])->name('profile.update'); Route::post("/profile/avatar", [ProfileController::class , "updateAvatar"])->name("profile.avatar"); }); require __DIR__ . '/auth.php'; // 測試路由 (需非正式環境或有特別權限控管) Route::prefix('test')->name('test.')->group(function () { Route::get('/social-login', [App\Http\Controllers\SocialLoginTestController::class , 'index'])->name('social-login'); Route::get('/line/callback', [App\Http\Controllers\SocialLoginTestController::class , 'lineCallback'])->name('line.callback'); });