selectTable添加表单联动

2024-12-10 10:48:38 阅读:2 编辑

newadmin/vendor/lin/admin/src/Form/Field/CanCascadeFields.php

/**
     * @return string
     */
    protected function getFormFrontValue()
    {
        switch (get_class($this)) {
            case Radio::class:
            case RadioButton::class:
            case RadioCard::class:
            case Select::class:
            case BelongsTo::class:
            case BelongsToMany::class:
            case MultipleSelect::class:
                return 'var checked = $(this).val();';
            case Checkbox::class:
            case CheckboxButton::class:
            case CheckboxCard::class:
                return <<<SCRIPT
var checked = $('{$this->getElementClassSelector()}:checked').map(function(){
  return $(this).val();
}).get();
SCRIPT;
            //新添加的
            case SelectTable::class:
            {
                return <<<SCRIPT
var checked = $("{$this->getElementClassSelector()}-field").val();
SCRIPT;

            }
            default:
                throw new \InvalidArgumentException('Invalid form field type');
        }
    }

newadmin/vendor/lin/admin/src/Form/Field/SelectTable.php

    use CanCascadeFields;
    protected $cascadeEvent = 'change';
public function render()
    {
        $name = $this->elementName ?: $this->formatName($this->column);
        if(is_array($name)){
            $name =  implode("_",$name);
        }
        $this->name = $name;
        $this->placeholder("请选择");
        $this->initPlainInput();

        $this->prepend('<i class="fa fa-pencil fa-fw"></i>')
            ->defaultAttribute('type', 'text')
            ->defaultAttribute('id', $this->id)
            ->defaultAttribute('name', $this->column())
            ->defaultAttribute('value', old($this->column, $this->value()))
            ->defaultAttribute('class', 'form-control ' . $this->getElementClassString() . ' ' . $this->name)
            ->defaultAttribute('placeholder', $this->getPlaceholder());

       // $this->addElementClass($name);
        if ($this->many == 0) {
            $this->select_url .= "&_only_one=1";
        }
        $this->setDisplayScript();
       $dialog =  $this->dialog($name);
        $this->addExtraData([
            'prepend' => $this->prepend,
            'select_url' => $this->select_url,
            'dialog' => $dialog,
            'options' => json_encode($this->options,JSON_UNESCAPED_UNICODE),
        ]);
        //新添加的
        $this->addCascadeScript();
        return parent::render();
    }

测试

  /**
     * 表单
     * @param null $id
     * @return Form|void
     */
    public function form($id = null)
    {
        $form = new Form(new  $this->model());
        $usertable = [
            "4022"=>"4022"
        ];
        $form->selectTable("user_id", "用户")
            ->controller("Cusertable")->title("选择用户")->model($usertable)
            ->when(4022, function (Form $form) {
                $form->text("text", "text");
            });
        return $form;
    }