diff --git a/database/migrations/2024_01_15_100000_create_security_guards_table.php b/database/migrations/2024_01_15_100000_create_security_guards_table.php new file mode 100644 index 0000000..2caf402 --- /dev/null +++ b/database/migrations/2024_01_15_100000_create_security_guards_table.php @@ -0,0 +1,72 @@ +comment('安保人员管理'); + $table->increments('id'); + $table->integer('admin_id')->nullable()->comment('创建人ID'); + $table->integer('department_id')->nullable()->comment('部门ID'); + + // 基本信息 + $table->string('name')->comment('姓名'); + $table->string('employee_no')->unique()->comment('工号'); + $table->string('mobile')->comment('手机号'); + $table->string('idcard')->comment('身份证号'); + $table->enum('gender', ['male', 'female'])->comment('性别'); + $table->date('birth_date')->nullable()->comment('出生日期'); + $table->string('address')->nullable()->comment('住址'); + + // 工作信息 + $table->enum('position', ['guard', 'supervisor', 'captain', 'manager'])->default('guard')->comment('职位:安保员、班长、队长、经理'); + $table->enum('shift', ['day', 'night', '24h'])->default('day')->comment('班次:白班、夜班、24小时'); + $table->date('hire_date')->comment('入职日期'); + $table->date('contract_start')->nullable()->comment('合同开始日期'); + $table->date('contract_end')->nullable()->comment('合同结束日期'); + $table->enum('status', ['active', 'inactive', 'suspended', 'terminated'])->default('active')->comment('状态:在职、离职、停职、解雇'); + + // 资质信息 + $table->json('certifications')->nullable()->comment('资质证书:数组包含证书名称、编号、有效期'); + $table->json('training_records')->nullable()->comment('培训记录:数组包含培训内容、时间、成绩'); + $table->string('emergency_contact')->nullable()->comment('紧急联系人'); + $table->string('emergency_phone')->nullable()->comment('紧急联系电话'); + + // 工作区域 + $table->json('work_areas')->nullable()->comment('负责工作区域:数组包含区域ID'); + $table->json('equipment_assigned')->nullable()->comment('分配设备:数组包含设备ID'); + + // 其他信息 + $table->text('remark')->nullable()->comment('备注'); + $table->json('photos')->nullable()->comment('照片:数组包含照片文件ID'); + $table->timestamps(); + $table->softDeletes(); + + // 索引 + $table->index(['employee_no']); + $table->index(['status']); + $table->index(['position']); + $table->index(['shift']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('security_guards'); + } +} diff --git a/database/migrations/2024_01_15_100001_create_security_equipment_table.php b/database/migrations/2024_01_15_100001_create_security_equipment_table.php new file mode 100644 index 0000000..646f67d --- /dev/null +++ b/database/migrations/2024_01_15_100001_create_security_equipment_table.php @@ -0,0 +1,98 @@ +comment('安保设备管理'); + $table->increments('id'); + $table->integer('admin_id')->nullable()->comment('创建人ID'); + $table->integer('department_id')->nullable()->comment('部门ID'); + + // 基本信息 + $table->string('name')->comment('设备名称'); + $table->string('model')->comment('设备型号'); + $table->string('serial_no')->unique()->comment('序列号'); + $table->string('asset_no')->unique()->comment('资产编号'); + $table->enum('type', ['camera', 'alarm', 'access_control', 'communication', 'monitoring', 'other'])->comment('设备类型:摄像头、报警器、门禁、通讯设备、监控设备、其他'); + $table->enum('category', ['surveillance', 'access_control', 'alarm_system', 'communication', 'emergency', 'other'])->comment('设备分类:监控、门禁、报警系统、通讯、应急、其他'); + + // 位置信息 + $table->string('location')->comment('安装位置'); + $table->string('building')->nullable()->comment('建筑物'); + $table->string('floor')->nullable()->comment('楼层'); + $table->string('room')->nullable()->comment('房间号'); + $table->decimal('latitude', 10, 8)->nullable()->comment('纬度'); + $table->decimal('longitude', 11, 8)->nullable()->comment('经度'); + + // 设备状态 + $table->enum('status', ['active', 'inactive', 'maintenance', 'fault', 'retired'])->default('active')->comment('状态:正常、停用、维护中、故障、报废'); + $table->enum('online_status', ['online', 'offline', 'unknown'])->default('unknown')->comment('在线状态:在线、离线、未知'); + + // 采购信息 + $table->string('manufacturer')->nullable()->comment('制造商'); + $table->string('supplier')->nullable()->comment('供应商'); + $table->date('purchase_date')->nullable()->comment('采购日期'); + $table->decimal('purchase_price', 10, 2)->nullable()->comment('采购价格'); + $table->date('warranty_start')->nullable()->comment('保修开始日期'); + $table->date('warranty_end')->nullable()->comment('保修结束日期'); + + // 安装信息 + $table->date('install_date')->nullable()->comment('安装日期'); + $table->string('installer')->nullable()->comment('安装人员'); + $table->text('install_notes')->nullable()->comment('安装备注'); + + // 维护信息 + $table->date('last_maintenance')->nullable()->comment('最后维护日期'); + $table->date('next_maintenance')->nullable()->comment('下次维护日期'); + $table->integer('maintenance_interval')->nullable()->comment('维护间隔(天)'); + $table->text('maintenance_notes')->nullable()->comment('维护备注'); + + // 配置信息 + $table->json('config')->nullable()->comment('设备配置:JSON格式存储设备参数'); + $table->string('ip_address')->nullable()->comment('IP地址'); + $table->string('mac_address')->nullable()->comment('MAC地址'); + $table->string('firmware_version')->nullable()->comment('固件版本'); + + // 责任人 + $table->integer('responsible_guard_id')->nullable()->comment('负责安保人员ID'); + $table->integer('responsible_admin_id')->nullable()->comment('负责管理员ID'); + + // 其他信息 + $table->text('description')->nullable()->comment('设备描述'); + $table->text('remark')->nullable()->comment('备注'); + $table->json('photos')->nullable()->comment('设备照片:数组包含照片文件ID'); + $table->json('documents')->nullable()->comment('相关文档:数组包含文档文件ID'); + $table->timestamps(); + $table->softDeletes(); + + // 索引 + $table->index(['serial_no']); + $table->index(['asset_no']); + $table->index(['type']); + $table->index(['status']); + $table->index(['location']); + $table->index(['responsible_guard_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('security_equipment'); + } +} diff --git a/routes/api.php b/routes/api.php index 8b96828..a01ba89 100644 --- a/routes/api.php +++ b/routes/api.php @@ -20,77 +20,79 @@ Route::middleware('auth:sanctum')->get('/user', function (Request $request) { Route::any('test', [\App\Http\Controllers\Admin\OtherController::class, "test"]); - -// 访客预约管理路由 -Route::prefix('admin/visits')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\VisitController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\VisitController::class, 'show']); - Route::post('save', [\App\Http\Controllers\Admin\VisitController::class, 'save']); - Route::get('destroy', [\App\Http\Controllers\Admin\VisitController::class, 'destroy']); -}); +Route::group(['middleware' => ['sanctum.jwt:admin']], function () { + // 访客预约管理路由 + Route::prefix('admin/visits')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\VisitController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\VisitController::class, 'show']); + Route::post('save', [\App\Http\Controllers\Admin\VisitController::class, 'save']); + Route::get('destroy', [\App\Http\Controllers\Admin\VisitController::class, 'destroy']); + }); // 学习内容管理路由 -Route::prefix('admin/studies')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\StudyController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\StudyController::class, 'show']); - Route::post('save', [\App\Http\Controllers\Admin\StudyController::class, 'save']); - Route::get('destroy', [\App\Http\Controllers\Admin\StudyController::class, 'destroy']); -}); + Route::prefix('admin/studies')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\StudyController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\StudyController::class, 'show']); + Route::post('save', [\App\Http\Controllers\Admin\StudyController::class, 'save']); + Route::get('destroy', [\App\Http\Controllers\Admin\StudyController::class, 'destroy']); + }); // 学习题目管理路由 -Route::prefix('admin/study-asks')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\StudyAskController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\StudyAskController::class, 'show']); - Route::post('save', [\App\Http\Controllers\Admin\StudyAskController::class, 'save']); - Route::get('destroy', [\App\Http\Controllers\Admin\StudyAskController::class, 'destroy']); -}); + Route::prefix('admin/study-asks')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\StudyAskController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\StudyAskController::class, 'show']); + Route::post('save', [\App\Http\Controllers\Admin\StudyAskController::class, 'save']); + Route::get('destroy', [\App\Http\Controllers\Admin\StudyAskController::class, 'destroy']); + }); // 拜访时间管理路由 -Route::prefix('admin/visit-times')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\VisitTimeController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\VisitTimeController::class, 'show']); - Route::post('save', [\App\Http\Controllers\Admin\VisitTimeController::class, 'save']); - Route::get('destroy', [\App\Http\Controllers\Admin\VisitTimeController::class, 'destroy']); -}); + Route::prefix('admin/visit-times')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\VisitTimeController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\VisitTimeController::class, 'show']); + Route::post('save', [\App\Http\Controllers\Admin\VisitTimeController::class, 'save']); + Route::get('destroy', [\App\Http\Controllers\Admin\VisitTimeController::class, 'destroy']); + }); // 系统配置管理路由 -Route::prefix('admin/configs')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\ConfigController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\ConfigController::class, 'show']); - Route::post('save', [\App\Http\Controllers\Admin\ConfigController::class, 'save']); - Route::get('destroy', [\App\Http\Controllers\Admin\ConfigController::class, 'destroy']); -}); + Route::prefix('admin/configs')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\ConfigController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\ConfigController::class, 'show']); + Route::post('save', [\App\Http\Controllers\Admin\ConfigController::class, 'save']); + Route::get('destroy', [\App\Http\Controllers\Admin\ConfigController::class, 'destroy']); + }); // 黑名单管理路由 -Route::prefix('admin/blacklists')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\BlacklistController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\BlacklistController::class, 'show']); - Route::post('save', [\App\Http\Controllers\Admin\BlacklistController::class, 'save']); - Route::get('destroy', [\App\Http\Controllers\Admin\BlacklistController::class, 'destroy']); -}); + Route::prefix('admin/blacklists')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\BlacklistController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\BlacklistController::class, 'show']); + Route::post('save', [\App\Http\Controllers\Admin\BlacklistController::class, 'save']); + Route::get('destroy', [\App\Http\Controllers\Admin\BlacklistController::class, 'destroy']); + }); // 拜访区域管理路由 -Route::prefix('admin/visit-areas')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\VisitAreaController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\VisitAreaController::class, 'show']); - Route::post('save', [\App\Http\Controllers\Admin\VisitAreaController::class, 'save']); - Route::get('destroy', [\App\Http\Controllers\Admin\VisitAreaController::class, 'destroy']); -}); + Route::prefix('admin/visit-areas')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\VisitAreaController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\VisitAreaController::class, 'show']); + Route::post('save', [\App\Http\Controllers\Admin\VisitAreaController::class, 'save']); + Route::get('destroy', [\App\Http\Controllers\Admin\VisitAreaController::class, 'destroy']); + }); // 拜访日志管理路由 -Route::prefix('admin/visit-logs')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\VisitLogController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\VisitLogController::class, 'show']); -}); + Route::prefix('admin/visit-logs')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\VisitLogController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\VisitLogController::class, 'show']); + }); // 门岗记录管理路由 -Route::prefix('admin/gate-logs')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\GateLogController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\GateLogController::class, 'show']); -}); + Route::prefix('admin/gate-logs')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\GateLogController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\GateLogController::class, 'show']); + }); // 拜访审核管理路由 -Route::prefix('admin/visit-audits')->group(function () { - Route::get('index', [\App\Http\Controllers\Admin\VisitAuditController::class, 'index']); - Route::get('show', [\App\Http\Controllers\Admin\VisitAuditController::class, 'show']); + Route::prefix('admin/visit-audits')->group(function () { + Route::get('index', [\App\Http\Controllers\Admin\VisitAuditController::class, 'index']); + Route::get('show', [\App\Http\Controllers\Admin\VisitAuditController::class, 'show']); + }); + });