'required|string|max:200', 'audit_type' => 'required|in:1,2,3', 'audit_admin' => 'required|array|min:1', 'audit_admin.*.admin_id' => 'required|integer', 'audit_admin.*.admin_name' => 'nullable|string|max:100', 'remark' => 'nullable|string|max:500', ]; } /** * Get custom messages for validator errors. */ public function messages(): array { return [ 'name.required' => __('validation.required', ['attribute' => __('visit_area.name')]), 'name.max' => __('validation.max.string', ['attribute' => __('visit_area.name'), 'max' => 200]), 'audit_type.required' => __('validation.required', ['attribute' => __('visit_area.audit_type')]), 'audit_type.in' => __('validation.in', ['attribute' => __('visit_area.audit_type')]), 'audit_admin.required' => __('validation.required', ['attribute' => __('visit_area.audit_admin')]), 'audit_admin.array' => __('validation.array', ['attribute' => __('visit_area.audit_admin')]), 'audit_admin.min' => __('validation.min.array', ['attribute' => __('visit_area.audit_admin'), 'min' => 1]), 'audit_admin.*.admin_id.required' => __('validation.required', ['attribute' => __('visit_area.admin_id')]), 'audit_admin.*.admin_id.integer' => __('validation.integer', ['attribute' => __('visit_area.admin_id')]), 'audit_admin.*.admin_name.max' => __('validation.max.string', ['attribute' => __('visit_area.admin_name'), 'max' => 100]), 'remark.max' => __('validation.max.string', ['attribute' => __('visit_area.remark'), 'max' => 500]), ]; } /** * Configure the validator instance. */ public function withValidator($validator): void { $validator->after(function ($validator) { // 检查审核人员配置 if ($this->has('audit_admin')) { $auditAdmins = $this->input('audit_admin'); $adminIds = array_column($auditAdmins, 'admin_id'); // 检查是否有重复的管理员ID if (count($adminIds) !== count(array_unique($adminIds))) { $validator->errors()->add('audit_admin', __('visit_area.duplicate_admin_ids')); } // 检查审核类型和审核人员数量的匹配 $auditType = $this->input('audit_type'); $adminCount = count($auditAdmins); if ($auditType == VisitArea::AUDIT_TYPE_SINGLE && $adminCount > 1) { $validator->errors()->add('audit_admin', __('visit_area.single_audit_too_many_admins')); } if ($auditType == VisitArea::AUDIT_TYPE_MULTIPLE && $adminCount < 2) { $validator->errors()->add('audit_admin', __('visit_area.multiple_audit_need_more_admins')); } } // 检查区域名称是否重复 if ($this->has('name')) { $name = $this->input('name'); $id = $this->input('id'); $query = VisitArea::where('name', $name); if ($id) { $query->where('id', '!=', $id); } if ($query->exists()) { $validator->errors()->add('name', __('visit_area.name_already_exists')); } } }); } }