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; } /** * 设置选中的key以及标题字段. * * @param $visibleColumn * @param $key * @return $this */ public function pluck(?string $visibleColumn, ?string $key = 'id') { $this->visibleColumn = $visibleColumn; $this->key = $key; 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->pluck($text, $id)->options(function ($v) use ($model, $id, $text) { if (! $v) { return []; } return $model::whereIn($id, Helper::array($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 = $values; } /** * @return string */ protected function defaultPlaceholder() { return trans('admin.choose').' '.$this->label; } protected function setUpTable() { $this->dialog ->footer($this->renderFooter()) ->button($this->renderButton()); // 设置选中的字段和待显示的标题字段 $this->dialog ->getTable() ->getRenderable() ->payload([ LazyRenderable::ROW_SELECTOR_COLUMN_NAME => [$this->key, $this->visibleColumn], ]); } public function render() { $this->setUpTable(); $this->formatOptions(); $this->prepend('') ->defaultAttribute('class', 'form-control '.$this->getElementClassString()) ->defaultAttribute('type', 'text') ->defaultAttribute('name', $this->getElementName()); $this->addVariables([ 'prepend' => $this->prepend, 'append' => $this->append, 'style' => $this->style, 'dialog' => $this->dialog->render(), 'placeholder' => $this->placeholder(), 'dialogSelector' => $this->dialog->getElementSelector(), ]); return parent::render(); } protected function renderButton() { return <<    HTML; } /** * 弹窗底部内容构建. * * @return string */ protected function renderFooter() { $submit = trans('admin.submit'); $cancel = trans('admin.cancel'); return << {$submit}   HTML; } }