feat: 第二阶段核心业务模块(CRM/房务/护理/月子餐)

后端:
- 4个迁移文件新增23张业务表
- 23个Eloquent Model(含关联/类型转换/门店隔离)
- 20个Controller(含CRUD+业务操作: 合同审核/入住退房/护理异常处理等)
- 110+条API路由(crm/room/care/meal四大前缀)

前端:
- 4个API模块(crm.js/room.js/care.js/meal.js)
- 13个业务页面(线索/客户/合同/渠道/投诉/房型/房间/预定/护理档案/护理计划/护理记录/菜品/排餐)
This commit is contained in:
li
2026-03-13 20:18:29 +08:00
parent 11c177a432
commit 16bcd9bcf0
65 changed files with 4660 additions and 0 deletions
+110
View File
@@ -11,6 +11,26 @@ 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;
use App\Http\Controllers\Admin\Crm\ChannelController;
use App\Http\Controllers\Admin\Crm\LeadController;
use App\Http\Controllers\Admin\Crm\CustomerController;
use App\Http\Controllers\Admin\Crm\ContractController;
use App\Http\Controllers\Admin\Crm\QuestionnaireController;
use App\Http\Controllers\Admin\Crm\ComplaintController;
use App\Http\Controllers\Admin\Room\RoomTypeController;
use App\Http\Controllers\Admin\Room\RoomController;
use App\Http\Controllers\Admin\Room\ReservationController;
use App\Http\Controllers\Admin\Room\CustomerOutingController;
use App\Http\Controllers\Admin\Room\CallRecordController;
use App\Http\Controllers\Admin\Care\CareProfileController;
use App\Http\Controllers\Admin\Care\CarePlanController;
use App\Http\Controllers\Admin\Care\CareRecordController;
use App\Http\Controllers\Admin\Care\CareExceptionController;
use App\Http\Controllers\Admin\Care\HealthMetricController;
use App\Http\Controllers\Admin\Meal\DishController;
use App\Http\Controllers\Admin\Meal\MealPlanTemplateController;
use App\Http\Controllers\Admin\Meal\DailyMealPlanController;
use App\Http\Controllers\Admin\Meal\MealReviewController;
/*
|--------------------------------------------------------------------------
@@ -66,4 +86,94 @@ Route::middleware(['auth:sanctum', 'store', 'oplog'])->group(function () {
// 操作日志
Route::get('operation-logs', [OperationLogController::class, 'index']);
});
// --- CRM 客户关系模块 ---
Route::prefix('crm')->group(function () {
// 渠道管理
Route::apiResource('channels', ChannelController::class);
// 线索管理
Route::apiResource('leads', LeadController::class);
Route::post('leads/{lead}/follow', [LeadController::class, 'follow']);
Route::put('leads/{lead}/assign', [LeadController::class, 'assign']);
// 客户管理
Route::apiResource('customers', CustomerController::class);
// 合同管理
Route::apiResource('contracts', ContractController::class);
Route::put('contracts/{contract}/audit', [ContractController::class, 'audit']);
// 问卷管理
Route::apiResource('questionnaires', QuestionnaireController::class);
Route::post('questionnaire-answers', [QuestionnaireController::class, 'submitAnswer']);
Route::get('questionnaire-answers', [QuestionnaireController::class, 'answers']);
// 投诉管理
Route::apiResource('complaints', ComplaintController::class);
Route::put('complaints/{complaint}/handle', [ComplaintController::class, 'handle']);
});
// --- 房务管理模块 ---
Route::prefix('room')->group(function () {
// 房型管理
Route::apiResource('room-types', RoomTypeController::class);
// 房间管理
Route::apiResource('rooms', RoomController::class);
Route::put('rooms/{room}/status', [RoomController::class, 'updateStatus']);
// 预定管理
Route::apiResource('reservations', ReservationController::class);
Route::put('reservations/{reservation}/check-in', [ReservationController::class, 'checkIn']);
Route::put('reservations/{reservation}/check-out', [ReservationController::class, 'checkOut']);
Route::put('reservations/{reservation}/cancel', [ReservationController::class, 'cancel']);
// 外出记录
Route::apiResource('customer-outings', CustomerOutingController::class)->only(['index', 'store', 'show']);
Route::put('customer-outings/{customerOuting}/back', [CustomerOutingController::class, 'recordBack']);
// 呼叫记录
Route::get('call-records', [CallRecordController::class, 'index']);
Route::post('call-records', [CallRecordController::class, 'store']);
Route::put('call-records/{callRecord}/handle', [CallRecordController::class, 'handle']);
});
// --- 护理管理模块 ---
Route::prefix('care')->group(function () {
// 护理档案
Route::apiResource('profiles', CareProfileController::class);
// 护理计划
Route::apiResource('plans', CarePlanController::class);
// 护理记录
Route::apiResource('records', CareRecordController::class);
// 护理异常
Route::apiResource('exceptions', CareExceptionController::class)->except(['destroy']);
Route::put('exceptions/{careException}/handle', [CareExceptionController::class, 'handle']);
// 健康指标
Route::get('health-metrics', [HealthMetricController::class, 'index']);
Route::post('health-metrics', [HealthMetricController::class, 'store']);
});
// --- 月子餐模块 ---
Route::prefix('meal')->group(function () {
// 菜品库
Route::apiResource('dishes', DishController::class);
// 排餐模板
Route::apiResource('templates', MealPlanTemplateController::class);
// 每日排餐
Route::apiResource('daily-plans', DailyMealPlanController::class);
Route::put('daily-plans/{dailyMealPlan}/deliver', [DailyMealPlanController::class, 'deliver']);
Route::put('daily-plans/{dailyMealPlan}/status', [DailyMealPlanController::class, 'updateStatus']);
// 膳食评价
Route::get('reviews', [MealReviewController::class, 'index']);
Route::post('reviews', [MealReviewController::class, 'store']);
});
});