feat: 第五阶段办公协同/统计报表/知识库模块

- 新增3个migration(9张表): office(6表)/report(1表)/kb(2表)
- 新增9个Model + 9个Controller
- 新增43条API路由(总计305条)
- 新增3个前端API模块 + 10个管理页面
- 迁移运行通过, vite build验证通过
This commit is contained in:
li
2026-03-13 21:43:10 +08:00
parent fb5e0daf1a
commit 058ee507fa
34 changed files with 2595 additions and 0 deletions
+60
View File
@@ -55,6 +55,15 @@ use App\Http\Controllers\Admin\Hr\ScheduleController;
use App\Http\Controllers\Admin\Hr\AttendanceRecordController;
use App\Http\Controllers\Admin\Hr\LeaveRequestController;
use App\Http\Controllers\Admin\Hr\SalaryRecordController;
use App\Http\Controllers\Admin\Office\ApprovalTemplateController;
use App\Http\Controllers\Admin\Office\ApprovalController;
use App\Http\Controllers\Admin\Office\AnnouncementController;
use App\Http\Controllers\Admin\Office\HandoverController;
use App\Http\Controllers\Admin\Office\NotificationController;
use App\Http\Controllers\Admin\Report\ReportController;
use App\Http\Controllers\Admin\Report\ReportExportController;
use App\Http\Controllers\Admin\Kb\KbCategoryController;
use App\Http\Controllers\Admin\Kb\KbArticleController;
/*
|--------------------------------------------------------------------------
@@ -308,4 +317,55 @@ Route::middleware(['auth:sanctum', 'store', 'oplog'])->group(function () {
Route::put('salaries/{salaryRecord}/confirm', [SalaryRecordController::class, 'confirm']);
Route::put('salaries/{salaryRecord}/pay', [SalaryRecordController::class, 'pay']);
});
// --- 办公协同模块 ---
Route::prefix('office')->group(function () {
// 审批模板
Route::apiResource('approval-templates', ApprovalTemplateController::class);
// 审批管理
Route::apiResource('approvals', ApprovalController::class)->except(['update']);
Route::put('approvals/{approval}/approve', [ApprovalController::class, 'approve']);
Route::put('approvals/{approval}/reject', [ApprovalController::class, 'reject']);
Route::put('approvals/{approval}/withdraw', [ApprovalController::class, 'withdraw']);
// 公告管理
Route::apiResource('announcements', AnnouncementController::class);
Route::put('announcements/{announcement}/publish', [AnnouncementController::class, 'publish']);
// 交接班
Route::get('handovers', [HandoverController::class, 'index']);
Route::post('handovers', [HandoverController::class, 'store']);
Route::get('handovers/{handover}', [HandoverController::class, 'show']);
Route::put('handovers/{handover}/confirm', [HandoverController::class, 'confirm']);
// 消息通知
Route::get('notifications', [NotificationController::class, 'index']);
Route::put('notifications/{notification}/read', [NotificationController::class, 'markRead']);
Route::put('notifications/read-all', [NotificationController::class, 'markAllRead']);
});
// --- 统计报表模块 ---
Route::prefix('report')->group(function () {
// 聚合报表
Route::get('overview', [ReportController::class, 'overview']);
Route::get('revenue', [ReportController::class, 'revenue']);
Route::get('occupancy', [ReportController::class, 'occupancy']);
Route::get('crm-conversion', [ReportController::class, 'crmConversion']);
// 导出记录
Route::get('exports', [ReportExportController::class, 'index']);
Route::post('exports', [ReportExportController::class, 'store']);
});
// --- 知识库模块 ---
Route::prefix('kb')->group(function () {
// 知识分类
Route::apiResource('categories', KbCategoryController::class);
// 知识文章
Route::apiResource('articles', KbArticleController::class);
Route::put('articles/{kbArticle}/publish', [KbArticleController::class, 'publish']);
Route::put('articles/{kbArticle}/offline', [KbArticleController::class, 'offline']);
});
});