소스 검색

询价管理

moshaorui 5 달 전
부모
커밋
63adeb72ca

+ 57 - 0
app/Admin/Actions/Grid/InquiryAssignment.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace App\Admin\Actions\Grid;
+
+use Dcat\Admin\Actions\Response;
+use Dcat\Admin\Admin;
+use Dcat\Admin\Grid\BatchAction;
+use Illuminate\Http\Request;
+use App\Admin\Forms\InquiryAssignment as InquiryAssignmentForm;
+use Dcat\Admin\Widgets\Modal;
+
+
+
+class InquiryAssignment extends BatchAction
+{
+    /**
+     * @return string
+     */
+	protected $title = 'Inquiry Assignment';
+
+
+    /**
+     * 初始化操作
+     */
+    public function render()
+    {
+        // 实例化表单类
+        return Modal::make()
+            ->lg()
+            ->title($this->title)
+            ->body(InquiryAssignmentForm::make())
+            //->on('click',$this->getModalScript2())
+            ->onShow($this->getModalScript())
+            // 因为此处使用了表单异步加载功能,所以一定要用 onLoad 方法
+            ->button('<button type="button" class="btn btn-success"">Assignment</button>');
+    }
+
+
+    /**
+     * 设置动作发起请求前的回调函数,返回false可以中断请求.
+     *
+     * @return string
+     */
+    public function getModalScript(){
+        $warning = __('No data selected!');
+        return <<<JS
+            var key = {$this->getSelectedKeysScript()}
+            $('#inquiryIds').val(key);
+        JS;
+    }
+
+    public function getSelectedKeysScript()
+    {
+        return "Dcat.grid.selected('{$this->parent->getName()}')";
+    }
+
+}

+ 19 - 13
app/Admin/Controllers/DistInquiryController.php

@@ -9,6 +9,7 @@ use Dcat\Admin\Show;
 use Dcat\Admin\Http\Controllers\AdminController;
 use Dcat\Admin\Http\Controllers\AdminController;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\Admin;
 use Dcat\Admin\Admin;
+use App\Admin\Actions\Grid\InquiryAssignment;
 
 
 class DistInquiryController extends AdminController
 class DistInquiryController extends AdminController
 {
 {
@@ -32,6 +33,9 @@ class DistInquiryController extends AdminController
     protected function grid()
     protected function grid()
     {
     {
         return Grid::make(DistInquiry::with(['distributor']), function (Grid $grid) {
         return Grid::make(DistInquiry::with(['distributor']), function (Grid $grid) {
+            //指定视图,去掉删除按钮
+            $grid->view('admin.grid.table');
+            //字段
             $grid->column('id')->sortable();
             $grid->column('id')->sortable();
             $grid->column('order_noumber');
             $grid->column('order_noumber');
             $grid->column('company_name');
             $grid->column('company_name');
@@ -52,7 +56,7 @@ class DistInquiryController extends AdminController
                 $filter->equal('order_noumber');
                 $filter->equal('order_noumber');
                 $filter->equal('company_name');
                 $filter->equal('company_name');
                 $filter->equal('customer_name');
                 $filter->equal('customer_name');
-                $filter->in('status', 'status')->multipleSelect(['0' => 'xx']);
+                $filter->like('distributor.name','Distributor Company Name');
             });
             });
             //排序
             //排序
             $grid->model()->orderBy("id",'desc');
             $grid->model()->orderBy("id",'desc');
@@ -62,6 +66,9 @@ class DistInquiryController extends AdminController
             $grid->disableEditButton();
             $grid->disableEditButton();
             $grid->disableDeleteButton();
             $grid->disableDeleteButton();
             $grid->disableBatchDelete();
             $grid->disableBatchDelete();
+            $grid->showBatchActions(true);
+            //批量操作
+            $grid->tools([new InquiryAssignment()]);
         });
         });
     }
     }
 
 
@@ -85,12 +92,15 @@ class DistInquiryController extends AdminController
             $show->field('freight_forwarder');
             $show->field('freight_forwarder');
             $show->field('business_model');
             $show->field('business_model');
             $show->field('ip_address');
             $show->field('ip_address');
-            $show->field('status');
+            $show->field('status')->using(config('dictionary.inquiryStatus'));
             $show->field('allocate_time');
             $show->field('allocate_time');
+            $show->field('distributor.name','Distributor Company Name');
             $show->field('content');
             $show->field('content');
-            $show->field('dist_user_id');
             $show->field('created_at');
             $show->field('created_at');
             $show->field('updated_at');
             $show->field('updated_at');
+            //按钮
+            $show->disableDeleteButton();
+            $show->disableEditButton();
         });
         });
     }
     }
 
 
@@ -103,22 +113,18 @@ class DistInquiryController extends AdminController
     {
     {
         return Form::make(new DistInquiry(), function (Form $form) {
         return Form::make(new DistInquiry(), function (Form $form) {
             $form->display('id');
             $form->display('id');
-            $form->text('order_noumber');
+            $form->display('order_noumber');
             $form->text('whats_app');
             $form->text('whats_app');
             $form->text('company_name');
             $form->text('company_name');
             $form->text('customer_name');
             $form->text('customer_name');
-            $form->text('email');
+            $form->email('email');
             $form->text('consulting_products');
             $form->text('consulting_products');
             $form->text('freight_forwarder');
             $form->text('freight_forwarder');
             $form->text('business_model');
             $form->text('business_model');
-            $form->text('ip_address');
-            $form->text('status');
-            $form->text('allocate_time');
-            $form->text('content');
-            $form->text('dist_user_id');
-
-            $form->display('created_at');
-            $form->display('updated_at');
+            $form->ip('ip_address');
+            $form->textarea('content');
+//            $form->display('created_at');
+//            $form->display('updated_at');
         });
         });
     }
     }
 }
 }

+ 40 - 0
app/Admin/Forms/InquiryAssignment.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Admin\Forms;
+
+use Dcat\Admin\Contracts\LazyRenderable;
+use Dcat\Admin\Widgets\Form;
+use App\Admin\Repositories\DistInquiry;
+use App\Admin\Renderable\DistUserTable;
+use Dcat\Admin\Models\DistAdminUser;
+use Dcat\Admin\Traits\LazyWidget;
+
+class InquiryAssignment extends Form
+{
+    // 处理请求
+    public function handle(array $input)
+    {
+        $distUserId = $input['distUserId'] ?? null;
+        $id = $input['id'] ?? null;
+        if (empty($id)) {
+            return $this->response()->error('No data selected!');
+        }
+        //检查数据是否可分配状态
+        $ids = explode(',', $id);
+        if (DistInquiry::assessTheStatus($ids) == false) {
+            return $this->response()->error('The data cannot be assigned!');
+        }
+        //分配数据
+        DistInquiry::assignData($ids, $distUserId);
+        return $this->response()->success('allocation successful')->refresh();
+    }
+
+    public function form()
+    {
+        $this->selectTable('distUserId', 'Select Username')
+            ->title('distUserId')
+            ->from(DistUserTable::make());
+        // 设置隐藏表单,传递用户id
+        $this->hidden('id')->attribute('id', 'inquiryIds');
+    }
+}

+ 40 - 0
app/Admin/Renderable/DistUserTable.php

@@ -0,0 +1,40 @@
+<?php
+namespace App\Admin\Renderable;
+
+use Dcat\Admin\Grid;
+use Dcat\Admin\Grid\LazyRenderable;
+use App\Models\DistAdminUser;
+
+class DistUserTable extends LazyRenderable
+{
+    public function grid(): Grid
+    {
+        // 获取外部传递的参数
+        $id = $this->id;
+
+        return Grid::make(new DistAdminUser(), function (Grid $grid) {
+            $grid->column('id');
+            $grid->column('username');
+            $grid->column('name','Company Name');
+            $grid->column('created_at');
+            $grid->column('updated_at');
+
+            // 指定行选择器选中时显示的值的字段名称
+            // 指定行选择器选中时显示的值的字段名称
+            // 指定行选择器选中时显示的值的字段名称
+            // 如果表格数据中带有 “name”、“title”或“username”字段,则可以不用设置
+            $grid->rowSelector()->titleColumn('name');
+
+            $grid->quickSearch(['id', 'username', 'name']);
+
+            $grid->paginate(10);
+            $grid->disableActions();
+
+            $grid->filter(function (Grid\Filter $filter) {
+                $filter->like('username')->width(4);
+                $filter->like('name', 'Company Name')->width(4);
+            });
+            $grid->model()->where('enabled', 1);
+        });
+    }
+}

+ 23 - 0
app/Admin/Repositories/DistInquiry.php

@@ -15,4 +15,27 @@ class DistInquiry extends EloquentRepository
     protected $eloquentClass = Model::class;
     protected $eloquentClass = Model::class;
 
 
 
 
+    /*
+     * 检测状态是否为0,即未处理
+     */
+    public static function assessTheStatus($ids) {
+        $inquirieCount = Model::whereIn('id', $ids)->where('status', '=', 0)->count();
+        if ($inquirieCount != count($ids)) {
+            return false;
+        }
+        return true;
+    }
+
+    /*
+     * 分配询价单
+     */
+    public static function assignData($ids, $distUserId) {
+        $inquiries = Model::whereIn('id', $ids)->get();
+        foreach ($inquiries as $inquiry) {
+            $inquiry->dist_user_id = $distUserId;
+            $inquiry->status = 1;
+            $inquiry->save();
+        }
+    }
+
 }
 }

+ 17 - 0
app/Models/DistInquiry.php

@@ -18,4 +18,21 @@ class DistInquiry extends Model
     {
     {
         return $this->hasOne(DistAdminUser::class,'id', 'dist_user_id');
         return $this->hasOne(DistAdminUser::class,'id', 'dist_user_id');
     }
     }
+
+    /*
+     * 生成订单号
+     */
+    public static function generateOrderNumber()
+    {
+        // 获取当前日期,格式为YYYYMMDD
+        $date = now()->format('Ymd');
+
+        // 查询当天订单数量
+        $todayOrderCount = self::whereDate('created_at', Carbon::today())->count();
+
+        // 订单号:日期 + 当天订单数量 + 1
+        $orderNumber = $date . str_pad($todayOrderCount + 1, 4, '0', STR_PAD_LEFT);
+
+        return 'Q'.$orderNumber;
+    }
 }
 }