laravel-amdin 模型表格中radio()组件完善

radio组件可以让我们在列表页进行数据状态的直接更新,但是如果你想要在更新状态的时候进行数据验证并报错,暂时laravel-admin是不支持的,所以我们自己完善下源码

Posted by 昆山吴彦祖 on 2019.03.28

radio组件可以让我们在列表页进行数据状态的直接更新,但是如果你想要在更新状态的时候进行数据验证并报错,暂时laravel-admin是不支持的,所以我们自己完善下源码


首先我们需要修改相应资源控制器的 update方法,通常这个方法是隐式调用的,我们重构它

public function update(Request $request,$id)
    {
		//判断如果订单状态为待收货4,快递公司和快递单号不能为空
        $input = $request->all();
		$order = Order::find($id);
		if($request->status==4 && (!$order->express_company || !$order->express_code)){
			return response()->json([
				'status' => false,
				'message'=>"请先输入快递公司和快递单号!",
			]);
		}
		// 如果验证没有错误,正常update
		return $this->form()->update($id,$input);
    }


然后我们需要修改下 laravel-admin库的 源码文件 vendor\encore\laravel-admin\src\Grid\Displayers\Radio.php 的​script方法

protected function script()
    {
        $name = $this->column->getName();

        return <<<EOT

$('form.grid-radio-$name').on('submit', function () {
    var value = $(this).find('input:radio:checked').val();

    $.ajax({
        url: "{$this->getResource()}/" + $(this).data('key'),
        type: "POST",
        data: {
            $name: value,
            _token: LA.token,
            _method: 'PUT'
        },
        success: function (data) {
                //修改开始
               if(data.status){
	            toastr.success(data.message);
		}else{
		    toastr.error(data.message);
		}


//修改结束

} }); return false; }); EOT; }




laravel_admin