Editable 的inputType 为INPUT_SELECT2的使用

需求:
在开发项目时,遇到这样的需求,在gridView列表中,需要编辑指定列的信息,这个编辑功能使用可搜索的下拉框。
分析:
1.在Yii中,待搜索的下拉框组件使用kartik\select2\Select2
2…在Yii中,可编辑窗口小部件使用 kartik-v/yii2-editable(也有别的editable插件,这里使用的是kartik的)

很明显我的需求需要用到两者的结合体。
通过kartik-v/yii2-editable文档查阅,Editable的属性inputType有Editable::INPUT_SELECT2属性值设置,但是文档中没有涉及到这个类型小部件的完整使用demo。

于是我就结合yii-select2小部件的使用方法,写出来这个功能。
废话不多说,直接上代码:
第一种场景,要在select2里异步获取数据:

// view 层
// 引入Editable;
use kartik\editable\Editable;
// 引入JsExpression,处理回调数据
use yii\web\JsExpression;

// gridView中加入可编辑
$gridColumns[] = [
    'label'     => '所属总店',
    'encodeLabel' => false,
    'attribute' => 'mainStore',
    'format' => 'raw',
    'value' => function($row){
        $info = Editable::widget([
            'name'=>'name',
            //点击的文本内容
            'value' => $row['name'],
            'header' => '所属总店',
            'submitOnEnter' => false,
           //提交的参数
            'additionalData' => ['code' => $row['code'], 'key' => 'name'],
            'buttonsTemplate' => '{reset}{submit}',
            'submitButton' => ['class'=>'btn btn-sm btn-danger', 'icon'=>'保存'],
            'resetButton' => ['class' => 'btn btn-sm btn-default', 'icon'=>'重置'],
            'inputType'    => Editable::INPUT_SELECT2,
            'options' => [
                'pluginOptions' => [
                    'width'       => '200px',
                    'placeholder' => '请选择',
                    'ajax' => [
                        'delay' => 500,
                         // ajax查询数据接口
                        'url' => '/share-shop/shop-select2',
                        'dataType' => 'json',
                        //数据处理
                        'data' => new JsExpression('function(params) { return {q:params.term}; }')
                    ],
                ],

            ],
            // 提交保存接口
            'formOptions'  => ['method'=>'post', 'action'=>'/share-shop/save-group'],
        ]);

       return $info;
    },
];

效果展示:
在这里插入图片描述
第二种场景,select2下拉框数据同步获取:

 $shopOptions = [18=>'Test007',222=>'test2',33=>'test3'];
$gridColumns[] = [
    'label'     => '所属总店',
    'encodeLabel' => false,
    'attribute' => 'groupId',
    'format' => 'raw',
    'value' => function($row) use ($shopOptions){
        $info = Editable::widget([
            'name'=>'groupId',
            'value' => $row['group']['groupName'],
            'header' => '所属总店',
            'submitOnEnter' => false,
            'additionalData' => ['code' => $row['code'], 'key' => 'groupId'],
            'buttonsTemplate' => '{reset}{submit}',
            'submitButton' => ['class'=>'btn btn-sm btn-danger', 'icon'=>'保存'],
            'resetButton' => ['class' => 'btn btn-sm btn-default', 'icon'=>'重置'],
            'inputType'    => Editable::INPUT_SELECT2,
            'options' => [
                'pluginOptions' => [
                    'width'       => '200px',
                    'placeholder' => '请选择',
                ],
                //下拉列表数据
                'data' => $shopOptions,
            ],
             // 提交保存接口
            'formOptions'  => ['method'=>'post', 'action'=>'/share-shop/save-group'],
        ]);
        return $info;
    },
];

效果图:
在这里插入图片描述
场景一和场景二保存:
formData数据:在这里插入图片描述
接口处理:

public function actionSaveGroup()
    {
    	//获取post参数
        $data = Yii::$app->request->post();
        $code = $data['code'];
        $key = $data['key'];
        $groupId = $data[$key];
        if (empty($code) || empty($groupId)) {
            return $this->asJson(['error'=>1, 'message'=>'参数错误']);
        }
        //数据修改
        $service = $this->service(TestService::className());
        $apiResponse = $service->saveMap($code, $groupId);
        
        // 所属店铺名称
        $shopList = [11=>'test',222==>'test2',33=>'test3'];
        $newShop = ArrayHelper::index($shopList, 'groupId');
        $groupName = $shopList [$groupId];

        if ($apiResponse->isSuccess()) {
            // output是将修改的值更新当前文本的值,赋空值则默认是value值
            return $this->asJson(['output'=> $groupName, 'message'=>'']);
        } else {
            return $this->asJson(['output'=>'', 'message'=>$apiResponse->getMessage()]);
        }
    }

kartik-v/yii2-editable 具体使用文档可参考: https://demos.krajee.com/editable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值