feat: 第一阶段基础框架搭建

后端 (Laravel 10 + Sanctum):
- RBAC 四层权限系统 (users→roles→permissions→menus)
- 门店隔离中间件 (BelongsToStore Trait + StoreIsolation Middleware)
- 操作日志中间件 (自动记录写操作)
- 权限检查中间件 (CheckPermission)
- 16张数据库表迁移 (系统基础+RBAC+字典+配置)
- 11个 Eloquent Model
- Auth API (登录/登出/用户信息)
- 系统设置模块 CRUD (门店/部门/职务/用户/角色/菜单/权限/字典/日志)
- 45条 RESTful API 路由
- InitSeeder 初始数据 (超管/角色/76权限/31菜单)

前端 (Vue 3 + Element Plus + Vite):
- Axios 请求封装 + Token 注入
- Pinia 状态管理 (user + permission store)
- 动态路由 (服务端菜单→前端路由自动生成)
- 后台布局 (侧边栏+顶栏+主内容区)
- 登录页 + 仪表盘首页
- 系统设置 7 个 CRUD 页面

技术方案文档 (7卷):
- 技术总览/数据库设计/API规范/RBAC设计/模块详设/小程序设计/部署方案
This commit is contained in:
li
2026-03-13 19:52:09 +08:00
commit 11c177a432
144 changed files with 25209 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Admin\AuthController;
use App\Http\Controllers\Admin\System\StoreController;
use App\Http\Controllers\Admin\System\DepartmentController;
use App\Http\Controllers\Admin\System\PositionController;
use App\Http\Controllers\Admin\System\UserController;
use App\Http\Controllers\Admin\System\RoleController;
use App\Http\Controllers\Admin\System\MenuController;
use App\Http\Controllers\Admin\System\PermissionController;
use App\Http\Controllers\Admin\System\DictionaryController;
use App\Http\Controllers\Admin\System\OperationLogController;
/*
|--------------------------------------------------------------------------
| 后台管理 API 路由
|--------------------------------------------------------------------------
| 前缀: /api/v1/ ( bootstrap/app.php 中配置)
*/
// ===== 公开路由(无需认证) =====
Route::post('/auth/login', [AuthController::class, 'login']);
// ===== 需要认证的路由 =====
Route::middleware(['auth:sanctum', 'store', 'oplog'])->group(function () {
// --- 认证 ---
Route::post('/auth/logout', [AuthController::class, 'logout']);
Route::get('/auth/me', [AuthController::class, 'me']);
// --- 系统设置模块 ---
Route::prefix('system')->group(function () {
// 门店管理
Route::apiResource('stores', StoreController::class);
// 部门管理
Route::apiResource('departments', DepartmentController::class)->except(['show']);
// 职务管理
Route::apiResource('positions', PositionController::class)->except(['show']);
// 用户管理
Route::apiResource('users', UserController::class);
Route::put('users/{user}/status', [UserController::class, 'updateStatus']);
Route::put('users/{user}/password', [UserController::class, 'resetPassword']);
// 角色管理
Route::apiResource('roles', RoleController::class);
Route::put('roles/{role}/permissions', [RoleController::class, 'assignPermissions']);
// 菜单管理
Route::apiResource('menus', MenuController::class)->except(['show']);
// 权限管理
Route::apiResource('permissions', PermissionController::class)->except(['show']);
// 数据字典
Route::apiResource('dictionaries', DictionaryController::class)->except(['show', 'update']);
Route::get('dictionaries/{dictionary}/items', [DictionaryController::class, 'items']);
Route::post('dictionaries/{dictionary}/items', [DictionaryController::class, 'storeItem']);
Route::put('dictionary-items/{item}', [DictionaryController::class, 'updateItem']);
Route::delete('dictionary-items/{item}', [DictionaryController::class, 'destroyItem']);
// 操作日志
Route::get('operation-logs', [OperationLogController::class, 'index']);
});
});
+8
View File
@@ -0,0 +1,8 @@
<?php
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');
+7
View File
@@ -0,0 +1,7 @@
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});