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。
规范填写时间,可以派单;
Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

3. 您期望得到的结果?

我想要点击“派单”按钮,显示正确的派单表单样式,可以正常选择人员、时间,点击提交后将表单数据存入数据库。
为此,我是这样做的,在原来的列表中添加了一列“是否派单”按钮,按钮路径如下

"<a class='btn btn-primary btn-sm' href='/admin/aftersales/dispatch-order/?id={$this->id}'>派单</a>";

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式
为了避免和编辑按钮对应的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>&nbsp;&nbsp;列表</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");

以下是正常的表单样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

4. 您实际得到的结果?

1、实际结果如问题描述中一样,组件样式没有生效,无法直接选择时间。
2、如果不填时间,可以完成派单;填了时间,点击提交后会提示302 Found。

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

以下是控制台报的一些问题
Laravel admin中,列表中有编辑和派单按钮,点击派单按钮,其表单页面不显示组件的样式

Laravel admin中,创建表单中不显示select、datetime组件的样式,提交表单会报302 Found

5. 我的尝试

1、将派单表单的form等方法移动到大列表的接口中,为了避免form名称冲突,将派单的form修改名称,路由重新指定,但是结果还是一样的,组件没有显现样式,时间也不能选择。。
2、将派单表单的form内容注释,将其他可以正常显示的表单form(编辑的form)复制过来,查看,组件样式同样没有生效。
3、手动将时间的格式添加完整后进行派单,例如时间填2021-07-14,可以进行派单。

6. 疑问

1、为什么表单组件样式不生效?
2、为什么不规范填写时间,会报302 Found?

橙子
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
橙子
最佳答案

解决了,接口中没有create方法,form表单只是一个内容,加上下面的方法就好了

 public function create(Content $content)
    {
        return $content
            ->title("test")
            ->description("test")
            ->body($this->form());
    }
1年前 评论
讨论数量: 1
橙子

解决了,接口中没有create方法,form表单只是一个内容,加上下面的方法就好了

 public function create(Content $content)
    {
        return $content
            ->title("test")
            ->description("test")
            ->body($this->form());
    }
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!