| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- <?php
- namespace App\Models;
- use Illuminate\Database\Eloquent\Model;
- class Config extends BaseModel
- {
- protected $table = 'config';
- protected $fillable = ['field', 'val', 'remark', 'group_id', 'type', 'data'];
- const GROUP_BASIC = 0;//基础配置
- const GROUP_USER = 1;//用户自定义配置
- const TYPE_STRING = 'string';//单行文本
- const TYPE_TEXT = 'text';//多行文本
- const TYPE_AMOUNT = 'amount';//金额
- const TYPE_NUMBER = 'number';//整型
- const TYPE_RADIO = 'radio';//单选
- const TYPE_CHECKBOX = 'checkbox';//多选
- const TYPE_PERCENTAGE = 'percentage';//百分比
- public static array $rules = [
- Config::TYPE_STRING => ['required', 'string', 'min:1', 'max:140'],
- Config::TYPE_TEXT => ['required', 'string'],
- Config::TYPE_AMOUNT => ['required', 'numeric', 'min:0.01', 'regex:/^\d+(\.\d{1,2})?$/'],
- Config::TYPE_NUMBER => ['required', 'integer', 'min:0'],
- // Config::TYPE_RADIO => ['required', 'integer', 'min:0'],
- // Config::TYPE_CHECKBOX => ['required', 'array', 'min:1'],
- Config::TYPE_PERCENTAGE => ['required', 'numeric', 'min:0.0001', 'max:1', 'regex:/^\d+(\.\d{1,4})?$/'],
- ];
- public function getRule()
- {
- if (Config::TYPE_RADIO == $this->type) {
- $val = [];
- foreach ($this->data as $value) $val[] = $value['value'];
- $val = implode(',', $val);
- return ['val' => ['required', 'integer', "in:{$val}"]];
- }
- if (Config::TYPE_CHECKBOX == $this->type) {
- $val = [];
- foreach ($this->data as $value) $val[] = $value['value'];
- $val = implode(',', $val);
- return [
- 'val' => ['required', 'array', 'min:1'],
- 'val.*' => ['required', 'integer', "in:{$val}"]
- ];
- }
- return ['val' => Config::$rules[$this->type]];
- }
- public static function groups()
- {
- return [
- static::GROUP_BASIC,
- static::GROUP_USER,
- ];
- }
- protected function getDataAttribute($value)
- {
- return json_decode($value, true);
- }
- }
|