moshaorui 4 luni în urmă
părinte
comite
e4e4daa764

+ 6 - 13
app/Admin/Controllers/BaseProductController.php

@@ -139,14 +139,14 @@ class BaseProductController extends AdminController
                 ->accept(config('admin.upload.oss_image.accept'))
                 ->maxSize(config('admin.upload.oss_image.max_size'))
                 ->dir('images/product/'.date("Ymd"))
-                ->customFormat(function () {
+                ->customFormat(function ($images) {
                     // 数据格式化为数组['1.jpg','2.jpg'] 编辑时用到
-                    return array_column($this->images, 'image_url');
+                    return array_column($images, 'image_url');
                 })
-                ->saving(function ($images) {
-                    return array_map(function($image) {
-                        return ['image_url' => $image];
-                    }, $images);
+                ->saving(function ($images) use ($form) {
+                    $id = $form->getKey();
+                    $reslut =  BaseProductImage::formatData($id,$images);
+                    return $reslut;
                 });
             $form->editor('content');
             $form->switch('is_pinned')->default(0);
@@ -177,13 +177,6 @@ class BaseProductController extends AdminController
                 if ($count > 0) {
                     return $form->response()->error('sku already exists');
                 }
-                //保存前回调删除图片
-                if (!$form->isCreating()) {
-                    //清空图片
-                    $id = $form->getKey();
-                    $baseProductImage = new BaseProductImage();
-                    $baseProductImage->model()->where('product_id', $id)->delete();
-                }
             });
         });
     }

+ 2 - 1
app/Admin/Controllers/DistInquiryController.php

@@ -38,8 +38,9 @@ class DistInquiryController extends AdminController
             //字段
             $grid->column('id')->sortable();
             $grid->column('order_number');
-            $grid->column('company_name');
             $grid->column('customer_name');
+            $grid->column('company_name');
+            $grid->column('whats_app');
             $grid->column('email');
             $grid->column('consulting_products');
             //$grid->column('distributor.username', 'Distributor Username');

+ 4 - 1
app/Admin/Controllers/TestController.php

@@ -57,7 +57,10 @@ class TestController extends AdminController
         return Form::make(new Test(), function (Form $form) {
             $form->display('id');
 
-            $form->textarea('name');
+            $form->image('name')->saving(function ($name) {
+                return $name;
+              //  var_dump($name);exit;
+            });
 
             $form->display('created_at');
             $form->display('updated_at');

+ 29 - 0
app/Admin/Repositories/BaseProductImage.php

@@ -40,5 +40,34 @@ class BaseProductImage extends EloquentRepository
         return Model::insert($data);
     }
 
+    //格式化数据,用于多图上传
+    public static function formatData($productId, $images)
+    {
+        $existingImages = Model::where('product_id', $productId)->get();
+        // 用于存储结果的数组
+        $result = [];
+        // 处理条件1:如果数据在 base_product_image 中有,但在 $images 上无
+        foreach ($existingImages as $existingImage) {
+            if (!in_array($existingImage->image_url, $images)) {
+                $result[] = [
+                    'id' => $existingImage->id,
+                    'image_url' => $existingImage->image_url,
+                    '_remove_' => 1,
+                ];
+            }
+        }
+        // 处理条件2:如果数据在 base_product_image 中无,但在 $images 有
+        foreach ($images as $image) {
+            $found = $existingImages->firstWhere('image_url', $image);
+            if (!$found) {
+                $result[] = [
+                    'id' => 0,
+                    'image_url' => $image,
+                ];
+            }
+        }
+        return $result;
+    }
+
 
 }

+ 15 - 2
app/Distributor/Controllers/AdminDistController.php

@@ -183,11 +183,24 @@ class AdminDistController extends Controller
     {
         //如果有form方法,查找数据
         if (method_exists($this, 'Form')) {
+            $idArray = explode(',', $id);
+            // 使用 array_map 将数组中的每个值转换为数字类型
+            $idArray = array_map('intval', $idArray);
             $form = $this->Form();
             $repository = $form->repository();
-            $count = $repository->model()->where('dist_id', getDistributorId())->where('id', $id)->count();
-            return $count;
+            $count = $repository->model()->where('dist_id', getDistributorId())->wherein('id', $idArray)->count();
+            if ($count === 0) {
+                //0数据不存在
+                return 0;
+            } else if ($count !== count($idArray)) {
+                //0数据异常
+                return 0;
+            } else {
+                //数据存在
+                return 1;
+            }
         }
+        //form方法不存在
         return -1;
     }
 }

+ 4 - 1
app/Distributor/Controllers/ApiController.php

@@ -75,7 +75,10 @@ class ApiController extends Controller
                 $obj = new DistVideoCategory();
                 $result = $obj->generateSlug($title);
                 break;
-
+            case 'pagesTag':
+                $obj = new SitePagesTag();
+                $result = $obj->generateSlug($title);
+                break;
         }
         return ['slug' => $result];
     }

+ 5 - 10
app/Distributor/Controllers/DistInquiryController.php

@@ -40,8 +40,8 @@ class DistInquiryController extends AdminDistController
             //字段
             $grid->column('id')->sortable();
             $grid->column('order_number');
-            $grid->column('company_name');
             $grid->column('customer_name');
+            $grid->column('company_name');
             $grid->column('email');
             $grid->column('consulting_products');
             //$grid->column('distributor.username', 'Distributor Username');
@@ -51,8 +51,7 @@ class DistInquiryController extends AdminDistController
                 1 => 'info',
                 2 => 'success',
             ]);
-            $grid->column('created_at');
-            $grid->column('updated_at')->sortable();
+           // $grid->column('created_at')->sortable();
             //筛选
             $grid->filter(function (Grid\Filter $filter) {
                 $inquiryStatus = config('dictionary.inquiryStatus');
@@ -95,16 +94,12 @@ class DistInquiryController extends AdminDistController
             $show->field('whats_app');
             $show->field('email');
             $show->field('consulting_products');
-            $show->field('freight_forwarder');
-            $show->field('business_model');
+           // $show->field('freight_forwarder');
+           // $show->field('business_model');
             $show->field('content');
             $show->field('ip_address');
             $show->field('status')->using(config('dictionary.inquiryStatus'));
-
-        //    $show->field('allocate_time');
-            //$show->field('distributor.company_name',admin_trans_label('distributor_company_name'));
-            $show->field('created_at');
-//            $show->field('updated_at');
+            //$show->field('created_at');
             //按钮
             $show->disableDeleteButton();
             $show->disableEditButton();

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

@@ -100,7 +100,7 @@ class DistProductCategoryController extends AdminDistController
                 $form->text('seo_title');
                 $form->text('seo_keywords');
                 $form->textarea('seo_description');
-                $form->text('slug',admin_trans_label('url_and_handle'))->width(9, 2)->prepend(getSiteDomain().config('dictionary.site_url.pages').'/');
+                $form->text('slug',admin_trans_label('url_and_handle'))->width(9, 2)->prepend(getSiteDomain().config('dictionary.site_url.product_category').'/');
             })->options(config('dictionary.visibility'))->default(1)->value(1);
             //隐藏字段
             $form->hidden('dist_id'); // 隐藏dist_id字段,用于保存

+ 14 - 19
app/Distributor/Controllers/DistProductController.php

@@ -6,6 +6,7 @@ use App\Admin\Repositories\BaseProductImage;
 use App\Distributor\Actions\Extensions\DistProductImport;
 use App\Distributor\Repositories\DistProduct;
 use App\Distributor\Repositories\DistProductCategory;
+use App\Distributor\Repositories\DistProductImage;
 use App\Libraries\CommonHelper;
 use Dcat\Admin\Admin;
 use Dcat\Admin\Form;
@@ -173,10 +174,10 @@ class DistProductController extends AdminDistController
                     // 数据格式化为数组['1.jpg','2.jpg'] 编辑时用到
                     return array_column($this->images, 'image_url');
                 })
-                ->saving(function ($images) {
-                    return array_map(function($image) {
-                        return ['image_url' => $image];
-                    }, $images);
+                ->saving(function ($images) use ($form) {
+                    $id = $form->getKey();
+                    $reslut =  DistProductImage::formatData($id,$images);
+                    return $reslut;
                 });
             $form->editor('content');
             $form->switch('is_pinned')->default(0);
@@ -197,24 +198,18 @@ class DistProductController extends AdminDistController
             $form->saving(function (Form $form) {
                 $form->dist_id =getDistributorId();//保存时直接写死dist_id
 
-                /*
-                if (!$form->isCreating()) {
-                    // 验证主键 ID 的 dist_id 是否与 session 的 dist_id 一致
-                    $currentDistProduct = DistProduct::findById($form->getKey());
-                    if ($currentDistProduct && $currentDistProduct->dist_id !== $form->dist_id) {
-                        throw new \Exception('Unable to modify the product because the distributor ID does not match.');
+                $id = $form->getKey();
+                //slug配置是否重复
+                if ($form->slug != '') {
+                    if (DistProduct::isRepeatedSlug($id, $form->slug)) {
+                        //slug重复
+                        return $form->response()->error(admin_trans_label('url_repeated'));
                     }
                 }
-                */
-
-                //保存前回调删除图片
-                if (!$form->isCreating()) {
-                    //清空图片
-                    $id = $form->getKey();
-                    $baseProductImage = new BaseProductImage();
-                    $baseProductImage->model()->where('product_id', $id)->delete();
+                //当slug为空时生成slug
+                if ($form->slug == '') {
+                    $form->slug = DistProduct::generateSlug($form->title);
                 }
-
             });
         });
     }

+ 107 - 0
app/Distributor/Controllers/SitePagesTagController.php

@@ -0,0 +1,107 @@
+<?php
+
+namespace App\Distributor\Controllers;
+
+use App\Distributor\Repositories\SitePagesTag;
+use App\Distributor\Repositories\SitePagesTagRelationship;
+use App\Libraries\CommonHelper;
+use Dcat\Admin\Form;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Show;
+use Dcat\Admin\Layout\Content;
+use Dcat\Admin\Admin;
+
+class SitePagesTagController extends AdminDistController
+{
+
+    /**
+     * page index
+     */
+    public function index(Content $content)
+    {
+        return $content
+            ->header(admin_trans( 'admin.pages_tag'))
+            ->description('')
+            ->breadcrumb(['text'=>'','url'=>''])
+            ->body($this->grid());
+    }
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        return Grid::make(new SitePagesTag(), function (Grid $grid) {
+            $grid->column('id')->sortable();
+            $grid->column('name');
+            $grid->column('seo_title');
+            $grid->column('seo_keywords');
+            //$grid->column('seo_description');
+            $grid->filter(function (Grid\Filter $filter) {
+                $filter->panel();
+                $filter->expand();
+                $filter->like('name')->width(2);
+            });
+            //按钮
+            $grid->disableViewButton();
+            $grid->showQuickEditButton();
+            $grid->enableDialogCreate();
+            $grid->disableEditButton();
+        });
+    }
+
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        return Form::make(new SitePagesTag(), function (Form $form) {
+            $form->display('id');
+            $form->text('name');
+            //SEO
+            $form->radio('visibility')->when(1,function (Form $form) {
+                $form->text('seo_title');
+                $form->text('seo_keywords');
+                $form->textarea('seo_description');
+                $form->text('slug',admin_trans_label('url_and_handle'))->width(9, 2)->prepend(getSiteDomain().config('dictionary.site_url.tags').'/');
+            })->options(config('dictionary.visibility'))->default(1)->value(1);
+
+            //$form->text('slug');
+            $form->hidden('dist_id',);
+            $form->ignore(['visibility']);
+            //新建时插入JS
+            $form->creating(function (Form $form) {
+                CommonHelper::seoReplace('name','pagesTag');
+            });
+            //保存前
+            $form->saving(function (Form $form) {
+                //强制写死dist_id
+                $form->dist_id = getDistributorId();
+                //slug配置是否重复
+                $id = $form->getKey();
+                if ($form->slug != '') {
+                    if (SitePagesTag::isRepeatedSlug($id, $form->slug)) {
+                        //slug重复
+                        return $form->response()->error(admin_trans_label('url_repeated'));
+                    }
+                }
+                //当slug为空时生成slug
+                if ($form->slug == '') {
+                    $form->slug = SitePagesTag::generateSlug($form->title);
+                }
+            });
+            //删除后
+            $form->deleted(function (Form $form, $result) {
+                $data = $form->model()->toArray();
+                $ids = array_column($data, 'id');
+                //删除对应关系
+                SitePagesTagRelationship::destroyBytagID($ids);
+            });
+        });
+    }
+}

+ 2 - 0
app/Distributor/Repositories/DistProduct.php

@@ -2,12 +2,14 @@
 
 namespace App\Distributor\Repositories;
 
+use App\Traits\DistSlugTrait;
 use Dcat\Admin\Form;
 use App\Models\DistProduct as Model;
 use Dcat\Admin\Repositories\EloquentRepository;
 
 class DistProduct extends EloquentRepository
 {
+    use DistSlugTrait;
     /**
      * Model.
      *

+ 29 - 0
app/Distributor/Repositories/DistProductImage.php

@@ -13,4 +13,33 @@ class DistProductImage extends EloquentRepository
      * @var string
      */
     protected $eloquentClass = Model::class;
+
+    //格式化数据,用于多图上传
+    public static function formatData($productId, $images)
+    {
+        $existingImages = Model::where('product_id', $productId)->get();
+        // 用于存储结果的数组
+        $result = [];
+        // 处理条件1:如果数据在 base_product_image 中有,但在 $images 上无
+        foreach ($existingImages as $existingImage) {
+            if (!in_array($existingImage->image_url, $images)) {
+                $result[] = [
+                    'id' => $existingImage->id,
+                    'image_url' => $existingImage->image_url,
+                    '_remove_' => 1,
+                ];
+            }
+        }
+        // 处理条件2:如果数据在 base_product_image 中无,但在 $images 有
+        foreach ($images as $image) {
+            $found = $existingImages->firstWhere('image_url', $image);
+            if (!$found) {
+                $result[] = [
+                    'id' => 0,
+                    'image_url' => $image,
+                ];
+            }
+        }
+        return $result;
+    }
 }

+ 8 - 0
app/Distributor/Repositories/SitePagesTagRelationship.php

@@ -13,4 +13,12 @@ class SitePagesTagRelationship extends EloquentRepository
      * @var string
      */
     protected $eloquentClass = Model::class;
+
+    //
+    public static function destroyBytagID($ids)
+    {
+        if (count($ids) > 0) {
+            Model::wherein('tag_id', $ids)->delete();
+        }
+    }
 }

+ 1 - 0
app/Distributor/routes.php

@@ -49,6 +49,7 @@ Route::group([
     $router->delete('site-menu/{id}', 'SiteMenuController@destroy');//删除
     //文章管理
     $router->resource('site-pages', 'SitePagesController');
+    $router->resource('site-pages-tag', 'SitePagesTagController');
     //API相关
     $router->get('api/products', 'ApiController@products');
     $router->get('api/pages', 'ApiController@pages');

+ 1 - 0
app/Models/SitePagesTag.php

@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use App\Traits\DistSlugTrait;
 use Dcat\Admin\Traits\HasDateTimeFormatter;
 
 use Illuminate\Database\Eloquent\Model;

+ 1 - 0
lang/zh_CN/admin.php

@@ -246,4 +246,5 @@ return [
     'top_menu'  => '顶部菜单',
     'footer_menu'  => '底部菜单',
     'pages'  => '文章',
+    'pages_tag'  => '标签',
 ];

+ 1 - 0
lang/zh_CN/menu.php

@@ -34,5 +34,6 @@ return [
         'top_menu'  => '顶部菜单',
         'footer_menu'  => '底部菜单',
         'pages' => '文章',
+        'tag' => '标签',
     ],
 ];