feat: 實作後台導航選單系統與狀態持久化
- 新增 14 個模組的路由與控制器佔位符 - 實作可展開式側邊欄選單 (Sidebar Menu) - 優化選單樣式與主題適配 - 實作選單展開狀態持久化 (LocalStorage) - 修復子選單縮排與顏色問題
This commit is contained in:
128
routes/web.php
128
routes/web.php
@@ -23,10 +23,138 @@ Route::get('/dashboard', function () {
|
||||
})->middleware(['auth', 'verified'])->name('dashboard');
|
||||
|
||||
Route::middleware(['auth', 'verified'])->prefix('admin')->name('admin.')->group(function () {
|
||||
// 1. 儀表板
|
||||
Route::get('/dashboard', [App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
|
||||
|
||||
// 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('/accounts', [App\Http\Controllers\Admin\DataConfigController::class, 'accounts'])->name('accounts');
|
||||
Route::get('/sub-accounts', [App\Http\Controllers\Admin\DataConfigController::class, 'subAccounts'])->name('sub-accounts');
|
||||
Route::get('/sub-account-roles', [App\Http\Controllers\Admin\DataConfigController::class, 'subAccountRoles'])->name('sub-account-roles');
|
||||
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('permission')->name('permission.')->group(function () {
|
||||
Route::get('/app-features', [App\Http\Controllers\Admin\PermissionController::class, 'appFeatures'])->name('app-features');
|
||||
Route::get('/data-config', [App\Http\Controllers\Admin\PermissionController::class, 'dataConfig'])->name('data-config');
|
||||
Route::get('/sales', [App\Http\Controllers\Admin\PermissionController::class, 'sales'])->name('sales');
|
||||
Route::get('/machines', [App\Http\Controllers\Admin\PermissionController::class, 'machines'])->name('machines');
|
||||
Route::get('/warehouses', [App\Http\Controllers\Admin\PermissionController::class, 'warehouses'])->name('warehouses');
|
||||
Route::get('/analysis', [App\Http\Controllers\Admin\PermissionController::class, 'analysis'])->name('analysis');
|
||||
Route::get('/audit', [App\Http\Controllers\Admin\PermissionController::class, 'audit'])->name('audit');
|
||||
Route::get('/remote', [App\Http\Controllers\Admin\PermissionController::class, 'remote'])->name('remote');
|
||||
Route::get('/line', [App\Http\Controllers\Admin\PermissionController::class, 'line'])->name('line');
|
||||
Route::get('/roles', [App\Http\Controllers\Admin\PermissionController::class, 'roles'])->name('roles');
|
||||
Route::get('/others', [App\Http\Controllers\Admin\PermissionController::class, 'others'])->name('others');
|
||||
Route::get('/ai-prediction', [App\Http\Controllers\Admin\PermissionController::class, 'aiPrediction'])->name('ai-prediction');
|
||||
});
|
||||
|
||||
// 主題設定
|
||||
Route::post('/theme', [App\Http\Controllers\Admin\ThemeController::class, 'update'])->name('theme.update');
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user