Browse Source

feat:产品导入等

igb 5 months ago
parent
commit
3a18e9bbef

+ 75 - 0
app/Distributor/Actions/Extensions/DistProductImportForm.php

@@ -0,0 +1,75 @@
+<?php
+namespace App\Distributor\Actions\Extensions;
+
+use Dcat\Admin\Grid\Tools\AbstractTool;
+use Dcat\Admin\Widgets\Modal;
+use App\Distributor\Forms\ImportProduct;
+use Dcat\Admin\Grid\BatchAction;
+
+class DistProductImportForm extends BatchAction
+{
+    protected $title = '倒入产品';
+
+
+
+    public function render()
+    {
+        // 实例化表单类
+        $form = ImportProduct::make();
+
+        return Modal::make()
+            ->lg()
+            ->title($this->title)
+            ->body($form)
+            // 因为此处使用了表单异步加载功能,所以一定要用 onLoad 方法
+            // 如果是非异步方式加载表单,则需要改成 onShow 方法
+            ->onShow($this->getModalScript())
+            ->button($this->getButtonHTML());
+
+
+    }
+
+    /**
+     * 填充选择的产品ID
+     * @return string
+     */
+    protected function getModalScript()
+    {
+        // 弹窗显示后往隐藏的id表单中写入批量选中的行ID
+        return <<<JS
+        // 获取选中的ID数组
+        var key = {$this->getSelectedKeysScript()}
+        if (key.length > 0) {
+            $('#product_ids').val(key.join(','));
+        } else {
+            $('#product_ids').val('');
+            //return false;
+        }
+
+JS;
+    }
+//
+//    protected function getSelectedKeysScript()
+//    {
+//        return '[]'; // 这里可以返回一个空数组,因为工具按钮不需要选择行
+//    }
+
+    /**
+     * 获取按钮的 HTML
+     * @return string
+     */
+
+    public function title()
+    {
+        return '<i class="feather icon-shopping-cart"></i> &nbsp;'.admin_trans('admin.dist_product_import');
+    }
+
+    protected function getButtonHTML()
+    {
+        return <<<HTML
+        <button class="btn btn-danger">
+            <i class="feather"></i> {$this->title}
+        </button>
+        HTML;
+    }
+}

+ 1 - 1
app/Distributor/Controllers/AuthController.php

@@ -84,7 +84,7 @@ class AuthController extends BaseAuthController
     protected function settingForm()
     {
 
-        return new Form(new Admincistrator(), function (Form $form) {
+        return new Form(new Administrator(), function (Form $form) {
             $form->action(admin_url('auth/setting'));
             $form->disableCreatingCheck();
             $form->disableEditingCheck();

+ 6 - 4
app/Distributor/Controllers/DistProductController.php

@@ -98,10 +98,12 @@ class DistProductController extends AdminController
             $grid->column('updated_at')->sortable();
             // 筛选
             $grid->filter(function (Grid\Filter $filter) {
-                $filter->equal('sku');
-                $filter->like('title');
-                $filter->equal('category_id',admin_trans_label('category'))->select(DistProductCategory::selectOptions());
-                $filter->equal('enabled', admin_trans_label('enabled'))->select(array_map('admin_trans_label', config('dictionary.enabled')));
+                $filter->panel();
+                $filter->expand();
+                $filter->like('title')->width(2);
+                $filter->equal('sku')->width(2);
+                $filter->equal('category_id',admin_trans_label('category'))->select(DistProductCategory::selectOptions())->width(2);;
+                $filter->equal('enabled', admin_trans_label('enabled'))->select(array_map('admin_trans_label', config('dictionary.enabled')))->width(2);;
             });
             //排序
             $grid->model()->orderBy("is_pinned",'desc')->orderBy("order",'desc');

+ 6 - 4
app/Distributor/Controllers/DistVideoController.php

@@ -61,10 +61,12 @@ class DistVideoController extends AdminController
             $grid->column('updated_at')->sortable();
             // 筛选
             $grid->filter(function (Grid\Filter $filter) {
-                $filter->equal('sku');
-                $filter->like('title');
-                $filter->equal('category_id',admin_trans_label('category'))->select(DistVideoCategory::selectOptions());
-                $filter->equal('enabled', admin_trans_label('enabled'))->select(array_map('admin_trans_label', config('dictionary.enabled')));
+                $filter->panel();
+                $filter->expand();
+                $filter->equal('sku')->width(2);
+                $filter->like('title')->width(2);
+                $filter->equal('category_id',admin_trans_label('category'))->select(DistVideoCategory::selectOptions())->width(2);
+                $filter->equal('enabled', admin_trans_label('enabled'))->select(array_map('admin_trans_label', config('dictionary.enabled')))->width(2);
 
 
             });

+ 13 - 5
app/Distributor/Controllers/ImportProductController.php

@@ -2,6 +2,8 @@
 
 namespace App\Distributor\Controllers;
 
+use App\Distributor\Actions\Extensions\DistProductImport;
+use App\Distributor\Actions\Extensions\DistProductImportForm;
 use App\Distributor\Repositories\BaseProduct;
 use App\Admin\Repositories\BaseProductCategory;
 use App\Distributor\Actions\BatchCopy;
@@ -23,7 +25,7 @@ class ImportProductController extends AdminController
     {
         return $content
             ->header('倒入产品')
-            ->description('<span style="color: red; font-weight: bold;">After select,click "Selected" to import products.</span>')
+            ->description('<span style="color: red; font-weight: bold;">Select products to import.</span>')
             ->breadcrumb(['text'=>'列表','url'=>''])
             ->body($this->grid());
     }
@@ -67,10 +69,12 @@ class ImportProductController extends AdminController
 
             // 筛选
             $grid->filter(function (Grid\Filter $filter) {
-                $filter->equal('sku');
-                $filter->like('title');
-                $filter->equal('category_id',admin_trans_label('category'))->select(BaseProductCategory::selectOptions());
-                $filter->equal('enabled', admin_trans_label('enabled'))->select(array_map('admin_trans_label', config('dictionary.enabled')));
+                $filter->panel();
+                $filter->expand();
+                $filter->equal('sku')->width(2);
+                $filter->like('title')->width(2);
+                $filter->equal('category_id',admin_trans_label('category'))->select(BaseProductCategory::selectOptions())->width(2);
+                $filter->equal('enabled', admin_trans_label('enabled'))->select(array_map('admin_trans_label', config('dictionary.enabled')))->width(2);
             });
             //$grid->column('order');
            //$grid->column('enabled');
@@ -97,6 +101,10 @@ class ImportProductController extends AdminController
                 $batch->add(new BatchCopy());
             });
 
+            $grid->tools([
+                new DistProductImportForm(),
+            ]);
+
 
         });
     }

+ 9 - 0
app/Distributor/Forms/ImportProduct.php

@@ -28,6 +28,15 @@ class ImportProduct extends Form
         $productIds = explode(',', $input['product_ids']);
         $categoryId = $input['category_id'];
 
+        // 检查 product_ids 是否为空
+
+        if (empty($input['product_ids'])) {
+            return $this
+                ->response()
+                ->error('请选择要导入的产品');
+        }
+
+
         try {
             foreach ($productIds as $productId) {
                 // 从 BaseProduct 获取产品数据