123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- namespace App\Admin\Extensions\Field;
- use Encore\Admin\Admin;
- use Encore\Admin\Form;
- use Encore\Admin\Form\Field;
- use Illuminate\Support\Collection;
- /**
- * Class Template
- * 表单模板
- * @method Field\Text text($column, $label = '')
- * @method Field\Checkbox checkbox($column, $label = '')
- * @method Field\Radio radio($column, $label = '')
- * @method Field\Select select($column, $label = '')
- * @method Field\MultipleSelect multipleSelect($column, $label = '')
- * @method Field\Textarea textarea($column, $label = '')
- * @method Field\Hidden hidden($column, $label = '')
- * @method Field\Id id($column, $label = '')
- * @method Field\Ip ip($column, $label = '')
- * @method Field\Url url($column, $label = '')
- * @method Field\Color color($column, $label = '')
- * @method Field\Email email($column, $label = '')
- * @method Field\Mobile mobile($column, $label = '')
- * @method Field\Slider slider($column, $label = '')
- * @method Field\Map map($latitude, $longitude, $label = '')
- * @method Field\Editor editor($column, $label = '')
- * @method Field\File file($column, $label = '')
- * @method Field\Image image($column, $label = '')
- * @method Field\Date date($column, $label = '')
- * @method Field\Datetime datetime($column, $label = '')
- * @method Field\Time time($column, $label = '')
- * @method Field\Year year($column, $label = '')
- * @method Field\Month month($column, $label = '')
- * @method Field\DateRange dateRange($start, $end, $label = '')
- * @method Field\DateTimeRange datetimeRange($start, $end, $label = '')
- * @method Field\TimeRange timeRange($start, $end, $label = '')
- * @method Field\Number number($column, $label = '')
- * @method Field\Currency currency($column, $label = '')
- * @method Field\HasMany hasMany($relationName, $callback)
- * @method Field\SwitchField switch($column, $label = '')
- * @method Field\Display display($column, $label = '')
- * @method Field\Rate rate($column, $label = '')
- * @method Field\Divide divider()
- * @method Field\Password password($column, $label = '')
- * @method Field\Decimal decimal($column, $label = '')
- * @method Field\Html html($html, $label = '')
- * @method Field\Tags tags($column, $label = '')
- * @method Field\Icon icon($column, $label = '')
- * @method Field\Embeds embeds($column, $label = '')
- */
- class Template
- {
- /**
- * 对应表单
- * @var Collection
- */
- protected $templates;
- protected $nowId;
- public function __construct()
- {
- $this->templates=new Collection();
- }
- public function setTemplatesId($id)
- {
- $this->nowId=$id;
- if (!$this->templates->has($id)) {
- $this->templates->put($id, new Collection());
- }
- return $this;
- }
- protected function pushField(Field $field)
- {
- $this->templates->get($this->nowId)->push($field);
- }
- protected function getHtmlAndScript()
- {
- $htmls = [];
- $scripts = [];
- /* @var Field $field */
- foreach ($this->templates as $key => $template) {
- $html='';
- $script=[];
- foreach ($template as $field) {
- //when field render, will push $script to Admin
- $html.= $field->render();
- /*
- * Get and remove the last script of Admin::$script stack.
- */
- if ($field->getScript()) {
- $script[] = array_pop(Admin::$script);
- }
- }
- $htmls[$key]=$html;
- $scripts[$key]=implode("\r\n", $script);
- }
- return [$htmls, $scripts];
- }
- /**
- * Add nested-form fields dynamically.
- *
- * @param string $method
- * @param array $arguments
- *
- * @return mixed
- */
- public function __call($method, $arguments)
- {
- if ($className = Form::findFieldClass($method)) {
- $column = array_get($arguments, 0, '');
- /* @var Field $field */
- $field = new $className($column, array_slice($arguments, 1));
- $this->pushField($field);
- return $field;
- }
- return $this;
- }
- public function render()
- {
- list($template, $script) = $this->getHtmlAndScript();
- return view('admin.field.template')->with('templates', $template)->with('scripts', $script)->render();
- }
- }
|