'int', 'name' => 'varchar', 'key' => 'varchar', 'value' => 'varchar', 'status' => 'tinyint', 'group_code' => 'varchar', 'is_developer' => 'tinyint', 'type' => 'varchar', 'content' => 'json', 'tip' => 'varchar', 'weigh' => 'int', 'rule' => 'json', 'group_name' => 'varchar', 'extra_rule' => 'json', 'width' => 'varchar', 'height' => 'varchar', 'create_at' => 'datetime', 'update_at' => 'datetime', 'delete_at' => 'datetime', ]; protected $json = ['content','extra_rule']; protected $jsonAssoc = true; //追加属性 protected $append = [ 'status_txt', 'type_txt', 'content_txt', 'extra_rule_txt', ]; /**配置类型列表 */ static public function getTypeList() { $typeList = [ 'string' => '单行文本', 'text' => '多行文本', 'editor' => '编辑器', 'number' => '数字', 'date' => '日期', 'time' => '时间', 'datetime' => '日期时间', 'datetimerange' => '日期时间区间', 'select' => '列表', 'selects' => '列表(多选)', 'image' => '单图', 'images' => '多图', 'file' => '单文件', 'files' => '多文件', 'switch' => '开关', 'checkbox' => '复选', 'radio' => '单选', 'color' => '颜色', 'json' => 'JSON数组', 'slider' => '滑块', ]; return $typeList; } /**配置状态列表 */ static public function getStatusList() { return [1=>"可用",2=>"不可用"]; } public function getStatusTxtAttr($value,$row) { $statusList = $this->getStatusList(); return $statusList[$value ?? $row['status']] ?? ''; } public function getTypeTxtAttr($value,$row) { $typeList = self::getTypeList(); $value = $value ?? $row['type'] ?? ''; return $typeList[$value] ?? ''; } // value修改器 public function setValueAttr($value,$data) { if(!empty($value)){ switch($data['type']){ case 'selects': case 'checkbox': $value = implode(',',$value);break; case 'file': case 'image': $value = str_replace(WEBURL,'',$value);break; case 'files': case 'images': $value = str_replace(WEBURL,'',implode(',',$value));break; case 'datetimerange': $tmp = ['start'=>$value[0],'end'=>$value[1]]; $value = json_encode($tmp); break; case 'json': $value = json_encode($value);break; case 'slider': $value = $data['extra_rule']['range']!='false'?json_encode($value):$value; break; default:break; } return $value; } return ''; } // value获取器 public function getValueAttr($value,$data) { if($data['type']){ switch($data['type']){ case 'selects': case 'checkbox': $value = array_filter(explode(',',$value));break; case 'file': case 'image': $value = ImageToServer($value,WEBURL,1);break; case 'files': case 'images': $value = ImageToServer($value,WEBURL,2);break; case 'datetimerange': $value = json_decode($value,true); $value = $value?[$value['start'],$value['end']]:[]; break; case 'json': if(!empty($value)){ $value = json_decode($value,true); }else{ $value = []; if(!empty($data['content'])){ $tmp = []; foreach($data['content'] as $content){ $tmp[$content['key']] = ''; } $value[] = $tmp; } } break; case 'slider': foreach($data['extra_rule'] as $item){ if($item['key']=='range'){ if($item['value']!='false'){ $value = !empty($value)?json_decode($value):[0,0]; }else{ $value = !empty($value)?intval($value):0; } break; } } break; } } return $value; } // content获取器 public function getContentTxtAttr($value,$data) { if(!empty($data['content'])){ $contentAry = []; foreach($data['content'] as $content){ $contentAry[] = $content['key'].'|'.$content['value']; } return implode("\n",$contentAry); } return $value; } // content修改器 public function setContentAttr($value,$data) { if(!empty($data['content_txt'])){ $contentAry = explode("\n",$data['content_txt']); $contentAry = array_filter($contentAry); $newContent = []; foreach($contentAry as $item){ $itemAry = explode('|',$item); $key = $itemAry[0]; $value = $itemAry[1]; $newContent[] = ['key'=>$key,'value'=>$value]; } return json_encode($newContent); } return $value; } //排序修改器 public function setWeighAttr($value,$data) { if(empty($value)){ $maxWeigh = self::where('group_code',$data['group_code'])->max('weigh'); return $maxWeigh + 1; }else{ return $value; } } // 组件属性获取器 public function getExtraRuleAttr($value,$data) { $value = $value??$data['extra_rule']??[]; $res = []; foreach($value as $item){ $res[$item['key']] = $item['value']; } return $res; } // 组件属性文本获取器 public function getExtraRuleTxtAttr($value,$data) { if(!empty($data['extra_rule'])){ $contentAry = []; foreach($data['extra_rule'] as $content){ $contentAry[] = $content['key'].'|'.$content['value']; } return implode("\n",$contentAry); } return $value; } // 组件属性修改器 public function setExtraRuleAttr($value,$data) { if(!empty($data['extra_rule_txt'])){ $contentAry = explode("\n",$data['extra_rule_txt']); $contentAry = array_filter($contentAry); $newContent = []; foreach($contentAry as $item){ $itemAry = explode('|',$item); $key = $itemAry[0]; $value = $itemAry[1]; $newContent[] = ['key'=>$key,'value'=>$value]; } return json_encode($newContent); } return $value; } // 规则修改器 public function setRuleAttr($value,$data) { $value = $value??$data['rule']??''; return empty($value)||$value=='null'?'':$value; } // 分类名称修改器 public function setGroupNameAttr($value,$data) { if(!empty($data['group_code'])){ return ConfigClass::where('code',$data['group_code'])->value('name'); }else{ return $value; } } }