Laravel admin中,创建表单中select、datetime等组件的样式不生效,提交表单会报302 Found
1. 运行环境
1). 当前使用的 Laravel 版本?
Laravel Framework 7.30.4
2). 当前使用的 php/php-fpm 版本?
PHP 版本:PHP 7.4.19
3). 当前系统
Windows 10
4). 业务环境
开发环境
使用Laragon集成环境
5). 相关软件版本
Apache 2.4.47
MySQL 5.7
2. 问题描述?
在列表中有两列按钮,一列“编辑”,一列“派单”,点击派单按钮,其显示的form里面,select、datetime等组件的样式不生效,例如点击时间选择器无法选择时间而是直接输入
不填时间,可以派单;
填写时间,但是不规范,点击提交表单会提示302 Found。
规范填写时间,可以派单;
3. 您期望得到的结果?
我想要点击“派单”按钮,显示正确的派单表单样式,可以正常选择人员、时间,点击提交后将表单数据存入数据库。
为此,我是这样做的,在原来的列表中添加了一列“是否派单”按钮,按钮路径如下
"<a class='btn btn-primary btn-sm' href='/admin/aftersales/dispatch-order/?id={$this->id}'>派单</a>";
为了避免和编辑按钮对应的form冲突,我新建了一个DispatchController接口,里面定义了派单的form和派单动作
// 派单的form
public function form() {
$form = new Form(new AftersalesRepairDispatchOrder());
$form->tools(function (Form\Tools $tools) {
// 去掉默认`列表`按钮(因为默认的列表按钮不返回到正确的大列表)
$tools->disableList();
// 主动添加返回按钮
$tools->append("<a class='btn btn-sm btn-default' href='/admin/aftersales/repair-orders'><i class='fa fa-list'></i> 列表</a>");
});
$form->text('repair_order_id', __('维修单ID'))->value($this->getCurrentRepairOrderId())->readonly();
$form->select('dispatch_user_id', __('派单人'))->options(
、、、省略
);
$form->select('recive_user_id', __('接单人'))->options(
、、、省略
);
$form->text('quoted_price', __('报价'));
$form->datetime('appointment_time', __('预约时间'));
$form->datetime('arrive_time', __('上门时间'));
$form->textarea('note', __('备注'));
// 指定派单动作
$form->setAction('dispatch');
return $form;
}
public function dispatch() {
$request = request()->all();
$repair_dispatch_order = new AftersalesRepairDispatchOrder();
$repair_dispatch_order->repair_order_id = $request['repair_order_id'];
$repair_dispatch_order->dispatch_user_id = $request['dispatch_user_id'];
$repair_dispatch_order->recive_user_id = $request['recive_user_id'];
$repair_dispatch_order->quoted_price = $request['quoted_price'];
$repair_dispatch_order->note = $request["note"];
$repair_dispatch_order->appointment_time = $request['appointment_time'];
$repair_dispatch_order->arrive_time = $request['arrive_time'];
$bool = $repair_dispatch_order->save();
if ($bool == 1) {
$success = new MessageBag(
[ 'title' => '派单成功',
] ); }
back()->with(compact('success'));
return redirect('admin/aftersales/repair-orders');
}
然后在路由routes里指定这个接口里面的方法
$router->get('dispatch-order',"DispatchController@form");
$router->post('dispatch-order/dispatch',"DispatchController@dispatch");
以下是正常的表单样式
4. 您实际得到的结果?
1、实际结果如问题描述中一样,组件样式没有生效,无法直接选择时间。
2、如果不填时间,可以完成派单;填了时间,点击提交后会提示302 Found。
以下是控制台报的一些问题
5. 我的尝试
1、将派单表单的form等方法移动到大列表的接口中,为了避免form名称冲突,将派单的form修改名称,路由重新指定,但是结果还是一样的,组件没有显现样式,时间也不能选择。。
2、将派单表单的form内容注释,将其他可以正常显示的表单form(编辑的form)复制过来,查看,组件样式同样没有生效。
3、手动将时间的格式添加完整后进行派单,例如时间填2021-07-14,可以进行派单。
6. 疑问
1、为什么表单组件样式不生效?
2、为什么不规范填写时间,会报302 Found?
解决了,接口中没有create方法,form表单只是一个内容,加上下面的方法就好了