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;
}