'require|checkDiagnosis', 'patient_name' => 'require|length:1,50', 'id_card' => 'length:15,18', 'phone' => 'require|mobile', 'gender' => 'require|in:0,1', 'age' => 'require|number|between:0,150', 'diagnosis_date' => 'require', 'diagnosis_type' => 'require', 'status' => 'in:0,1', 'tongue_images' => 'array', 'report_files' => 'array', ]; protected $message = [ 'id.require' => '参数缺失', 'patient_name.require' => '请输入患者姓名', 'patient_name.length' => '患者姓名长度须在1-50位字符', 'id_card.length' => '身份证号长度不正确', 'phone.require' => '请输入手机号', 'phone.mobile' => '手机号格式不正确', 'gender.require' => '请选择性别', 'gender.in' => '性别参数错误', 'age.require' => '请输入年龄', 'age.number' => '年龄必须为数字', 'age.between' => '年龄范围0-150', 'diagnosis_date.require' => '请选择诊断日期', 'diagnosis_type.require' => '请选择诊断类型', 'status.in' => '状态参数错误', ]; public function sceneAdd() { return $this->remove('id', true); } public function sceneEdit() { return $this->only(['id', 'patient_name', 'id_card', 'phone', 'gender', 'age', 'diagnosis_date', 'diagnosis_type', 'syndrome_type', 'marital_status', 'height', 'weight', 'region', 'systolic_pressure', 'diastolic_pressure', 'fasting_blood_sugar', 'diabetes_discovery_year', 'local_hospital_diagnosis', 'local_hospital_name', 'past_history', 'symptoms', 'tongue_coating', 'pulse', 'treatment_principle', 'prescription', 'doctor_advice', 'remark', 'status', 'tongue_images', 'report_files']); } public function sceneId() { return $this->only(['id']); } public function sceneGenerateQrcode() { return $this->only(['diagnosis_id', 'doctor_id', 'patient_id', 'share_user_id', 'mini_program_path']) ->append('patient_id', 'require') ->append('share_user_id', 'require') ->append('diagnosis_id', 'checkQrcodeIds') ->append('doctor_id', 'checkQrcodeIds'); } public function sceneGenerateOrderQrcode() { return $this->only([]); } public function sceneFillIdCard() { return $this->only(['id', 'id_card']) ->append('id', 'require') ->append('id_card', 'require|length:15,18'); } protected function checkDiagnosis($value) { $diagnosis = Diagnosis::findOrEmpty($value); if ($diagnosis->isEmpty()) { return '诊单不存在'; } return true; } /** 视频场景需 doctor_id,确认诊单需 diagnosis_id */ protected function checkQrcodeIds($value, $rule, $data = []) { $page = $data['mini_program_path'] ?? ''; $hasDoctor = !empty($data['diagnosis_id']); $hasDiagnosis = !empty($data['diagnosis_id']); if ($page === 'pages/login/login') { return $hasDoctor ? true : '视频二维码需传挂号医生ID'; } return $hasDiagnosis ? true : '诊单ID不能为空'; } }