'number', 'doctor_id' => 'require', 'date' => 'require|date', 'period' => 'in:morning,afternoon,night,segment', // 须用数组写法:字符串规则里的 | 会与「多规则分隔符」冲突,导致 preg_match 报错 'start_time' => ['require', 'regex' => '/^([01]\d|2[0-3]):[0-5]\d$/'], 'end_time' => ['require', 'regex' => '/^([01]\d|2[0-3]):[0-5]\d$/'], 'slot_minutes' => 'number|between:5,120', 'status' => 'require|in:1,2,3,4', 'quota' => 'number', 'max_patients' => 'number', 'remark' => 'max:500', ]; protected $message = [ 'id.require' => '请选择排班', 'id.number' => '排班ID格式错误', 'doctor_id.require' => '请选择医生', 'date.require' => '请选择日期', 'date.date' => '日期格式不正确', 'period.in' => '时段类型参数错误', 'start_time.require' => '请填写接诊开始时间', 'start_time.regex' => '开始时间格式须为 HH:mm', 'end_time.require' => '请填写接诊结束时间', 'end_time.regex' => '结束时间格式须为 HH:mm', 'slot_minutes.number' => '号源间隔须为数字', 'slot_minutes.between' => '号源间隔须在 5~120 分钟', 'status.require' => '请选择状态', 'status.in' => '状态参数错误', 'quota.number' => '号源数必须是数字', 'max_patients.number' => '最大接诊数必须是数字', 'remark.max' => '备注过长', ]; /** * @notes 保存场景 */ public function sceneSave() { return $this->only([ 'id', 'doctor_id', 'date', 'period', 'start_time', 'end_time', 'shift_type', 'slot_minutes', 'status', 'quota', 'max_patients', 'remark', ]); } /** * @notes 删除场景 */ public function sceneDelete() { return $this->only(['id'])->append('id', 'require'); } /** * @notes 详情场景 */ public function sceneDetail() { return $this->only(['id'])->append('id', 'require'); } /** * @notes 批量保存场景 */ public function sceneBatchSave() { return $this->only(['rosters']) ->append('rosters', 'require|array'); } /** * @notes 复制场景 */ public function sceneCopy() { return $this->only(['source_start_date', 'source_end_date', 'target_start_date']) ->append('source_start_date', 'require|date') ->append('source_end_date', 'require|date') ->append('target_start_date', 'require|date'); } }