dialog = DialogTable::make($this->label); } /** * 设置弹窗标题. * * @param string $title * * @return $this */ public function title($title) { $this->dialog->title($title); return $this; } /** * 设置弹窗宽度. * * @example * $this->width('500px'); * $this->width('50%'); * * @param string $width * * @return $this */ public function dialogWidth(string $width) { $this->dialog->width($width); return $this; } /** * 设置表格异步渲染实例. * * @param LazyRenderable $renderable * * @return $this */ public function from(LazyRenderable $renderable) { $this->dialog->from($renderable); return $this; } /** * @param array $options * * @return $this */ public function options($options = []) { $this->options = $options; return $this; } /** * 设置选中数据显示. * * @param string $model * @param string $id * @param string $text * * @return $this */ public function model(string $model, string $id = 'id', string $text = 'title') { return $this->options(function ($v) use ($model, $id, $text) { if (! $v) { return []; } return $model::find($v)->pluck($text, $id); }); } protected function formatOptions() { $value = Helper::array($this->value()); if ($this->options instanceof \Closure) { $this->options = $this->options->call($this->values(), $value, $this); } $values = []; foreach (Helper::array($this->options) as $id => $label) { foreach ($value as $v) { if ($v == $id && $v !== null) { $values[] = ['id' => $v, 'label' => $label]; } } } $this->options = json_encode($values); } protected function addScript() { $this->script .= <<dialog->id()}'), container: replaceNestedFormIndex('#{$this->getAttribute('id')}'), input: replaceNestedFormIndex('#hidden-{$this->id}'), values: {$this->options}, }); JS; } protected function setUpTable() { $this->dialog ->id($this->getElementId()) ->runScript(false) ->footer($this->renderFooter()) ->button($this->renderButton()); } public function render() { $this->setUpTable(); $this->formatOptions(); $name = $this->getElementName(); $this->prepend('') ->defaultAttribute('class', 'form-control '.$this->getElementClassString()) ->defaultAttribute('type', 'text') ->defaultAttribute('name', $name) ->defaultAttribute('id', 'container-'.$this->getElementId()); $this->addVariables([ 'prepend' => $this->prepend, 'append' => $this->append, 'style' => $this->style, 'dialog' => $this->dialog->render(), 'placeholder' => $this->placeholder(), ]); $this->script = $this->dialog->getScript(); $this->addScript(); return parent::render(); } protected function renderButton() { return <<    HTML; } /** * 弹窗底部内容构建. * * @return string */ protected function renderFooter() { $submit = trans('admin.submit'); $cancel = trans('admin.cancel'); return << {$submit}   HTML; } }