moshaorui 4 months ago
parent
commit
17d7e692f8

+ 2 - 2
app/Admin/Controllers/AuthController.php

@@ -68,9 +68,9 @@ class AuthController extends BaseAuthController
             $form->saved(function (Form $form) {
                 return $form
                     ->response()
-                    ->success(trans('admin.update_succeeded'));
+                    ->success(trans('admin.update_succeeded'))
                     //->redirect('/');
-                    //->script('location.reload();');//保存成功后刷新页面
+                    ->script('setTimeout(() => {location.reload();}, 1000);');//保存成功后刷新页面
             });
 
         });

+ 19 - 11
app/Admin/Controllers/DistAdminDistributorController.php

@@ -11,6 +11,7 @@ use Dcat\Admin\Show;
 use Dcat\Admin\Http\Controllers\AdminController;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\Admin;
+use Illuminate\Support\Facades\DB;
 
 class DistAdminDistributorController extends AdminController
 {
@@ -175,21 +176,28 @@ class DistAdminDistributorController extends AdminController
                 if ($form->isCreating()) {
                     //创建后创建默认分类
                     $newId = $form->getKey();
-                    $distProductCategory = new DistProductCategory();
-                    $categoryRow = $distProductCategory->create([
-                        'parent_id' => 0,
-                        'name' => 'Default Category',
-                        'order' => 0,
-                        'enabled' => 1,
-                        'dist_id'=>$newId,
-                    ]);
-                    //slug = id
-                    $categoryRow->slug = $categoryRow->id;
-                    $categoryRow->save();
+                    //初始化分销商
+                    DistAdminDistributor::initDist($form->input('appearance_id'),$newId);
                     //更新模版与变量
                     DistAppearance::switchTheme($form->input('appearance_id'), $newId);
                 }
             });
         });
     }
+
+    /*
+     * 新增事件事务
+     */
+    public function store()
+    {
+        try {
+            DB::beginTransaction();
+            $result =  parent::store();
+            DB::commit();
+            return $result;
+        } catch (\Exception $e) {
+            DB::rollBack();
+            throw $e;
+        }
+    }
 }

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

@@ -95,6 +95,7 @@ class DistInquiryController extends AdminController
             $show->field('business_model');
             $show->field('allocate_time');
             $show->field('distributor.company_name',admin_trans_label('distributor_company_name'));
+            $show->field('referer_url');
             $show->field('content');
             $show->field('ip_address');
             $show->field('status')->using(admin_trans_array(config('dictionary.inquiryStatus')));
@@ -122,6 +123,7 @@ class DistInquiryController extends AdminController
             $form->text('consulting_products');
             $form->text('freight_forwarder');
             $form->text('business_model');
+            $form->text('referer_url');
             $form->textarea('content');
         });
     }

+ 371 - 0
app/Admin/Repositories/DistAdminDistributor.php

@@ -3,6 +3,12 @@
 namespace App\Admin\Repositories;
 
 use App\Models\DistAdminDistributor as Model;
+use App\Models\DistProductCategory;
+use App\Models\DistProduct;
+use App\Models\SitePagesTag;
+use App\Models\SitePages;
+use App\Models\SitePagesTagRelationship;
+use Carbon\Carbon;
 use Dcat\Admin\Repositories\EloquentRepository;
 
 class DistAdminDistributor extends EloquentRepository
@@ -13,4 +19,369 @@ class DistAdminDistributor extends EloquentRepository
      * @var string
      */
     protected $eloquentClass = Model::class;
+
+
+    /*
+     * 始始化分销商
+     */
+    public static function initDist($appearanceId,$distId)
+    {
+        //初始化数据,现在用默认,以后有可能不同主题不同
+        self::default($distId);
+    }
+
+    //默认
+    public static function default($distId)
+    {
+        //生成默认产品分类
+        $distProductCategory = new DistProductCategory();
+        $categoryRow = $distProductCategory->create([
+            'parent_id' => 0,
+            'name' => 'Default Category',
+            'order' => 0,
+            'enabled' => 1,
+            'dist_id'=>$distId,
+            'slug' => 'default-category',
+        ]);
+        //生成默认产品
+        $distProduct = new DistProduct();
+        $productRow = $distProduct->create([
+            'category_id' => $categoryRow->id,
+            'title' => 'Default Product',
+            'sku' => 'sku001',
+            'order' => 1,
+            'enabled' => 1,
+            'dist_id'=>$distId,
+            'content' => 'Default Content',
+            'slug' => 'default-product',
+            'seo_title' => 'Default Product',
+            'issuance_date' => Carbon::now(),
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        $productRow->order = $productRow->id;
+        $productRow->save();
+        //生成默认tab
+        $sitePagesTag = new SitePagesTag();
+        $tagRow = $sitePagesTag->create([
+            'name' => 'News',
+            'dist_id'=>$distId,
+            'slug' => 'news',
+            'seo_title' => 'News',
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        //生成默认页面
+        $sitePages = new SitePages();
+        $pageRow = $sitePages->create([
+            'title' => 'Default Page',
+            'status' => 1,
+            'author' => 'admin',
+            'dist_id'=>$distId,
+            'content' => 'Default Content',
+            'slug' => 'default-page',
+            'seo_title' => 'Default Page',
+            'post_date' => Carbon::now(),
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        //生成绑定关系
+        $sitePagesTagRelationship = new SitePagesTagRelationship();
+        $sitePagesTagRelationship->create([
+            'tag_id' => $tagRow->id,
+            'pages_id' => $pageRow->id,
+        ]);
+        //生成about-us
+        $aboutUs = $sitePages->create([
+            'title' => 'About Us',
+            'status' => 1,
+            'author' => 'admin',
+            'dist_id'=>$distId,
+            'content' => 'Default Content',
+            'slug' => 'about-us',
+            'seo_title' => 'About Us',
+            'post_date' => Carbon::now(),
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        //生成privacy
+        $privacy = $sitePages->create([
+            'title' => 'Privacy',
+            'status' => 1,
+            'author' => 'admin',
+            'dist_id'=>$distId,
+            'content' => 'Default Content',
+            'slug' => 'privacy',
+            'seo_title' => 'Privacy',
+            'post_date' => Carbon::now(),
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        //生成sales
+        $sales = $sitePages->create([
+            'title' => 'Sales',
+            'status' => 1,
+            'author' => 'admin',
+            'dist_id'=>$distId,
+            'content' => 'Default Content',
+            'slug' => 'sales',
+            'seo_title' => 'Sales',
+            'post_date' => Carbon::now(),
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        //生成service
+        $service = $sitePages->create([
+            'title' => 'Services',
+            'status' => 1,
+            'author' => 'admin',
+            'dist_id'=>$distId,
+            'content' => 'Default Content',
+            'slug' => 'services',
+            'seo_title' => 'Services',
+            'post_date' => Carbon::now(),
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        //生成faqs
+        $faqs = $sitePages->create([
+            'title' => 'FAQs',
+            'status' => 1,
+            'author' => 'admin',
+            'dist_id'=>$distId,
+            'content' => 'Default Content',
+            'slug' => 'faqs',
+            'seo_title' => 'FAQs',
+            'post_date' => Carbon::now(),
+            'created_at'=>Carbon::now(),
+            'updated_at'=>Carbon::now(),
+        ]);
+        //生成菜单
+        $siteMenu = new SiteMenu();
+        $menuConfig = [
+            'collections_type' => '',
+            'product_category' => '',
+            'pages_tag' => '',
+            'product' => '',
+            'pages' => '',
+            'url' => '',
+            'unique_page' => '',
+        ];
+        /*
+         * ==========================================
+         * 顶部菜单
+         * ==========================================
+         */
+        //----------------主页------------------
+        $data = [];
+        $newMenuConfig = $menuConfig;
+        $menuType = 0; //主页
+        $data[1] = [
+            'parentId' => 0,
+            'title' => 'Home',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$menuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 0,
+        ];
+
+        //----------------Products------------------
+        $menuType = 0; //主页
+        $newMenuConfig = $menuConfig;
+        $data[2] = [
+            'parentId' => 0,
+            'title' => 'Products',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$menuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 0,
+        ];
+        //----------------Products Category------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['collections_type'] = 0;
+        $newMenuConfig['product_category'] = $categoryRow->id;
+        $menuType = 1;//collections
+        $data[3] = [
+            'parentId' => 2,
+            'title' => 'Default Category',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 0,
+        ];
+        //----------------news------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['collections_type'] = 1;
+        $newMenuConfig['pages_tag'] = $tagRow->id;
+        $menuType = 1;//collections
+        $data[4] = [
+            'parentId' => 0,
+            'title' => 'News',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 0,
+        ];
+        //----------------About Us------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['pages'] = $aboutUs->id;
+        $menuType = 3;//pages
+        $data[5] = [
+            'parentId' => 0,
+            'title' => 'About Us',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 0,
+        ];
+        //----------------Contact------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['unique_page'] = 'contact';
+        $menuType = 4;//pages
+        $data[6] = [
+            'parentId' => 0,
+            'title' => 'Contact',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 0,
+        ];
+        $siteMenu->createMenuBatch($data);
+
+        /*
+         * ==========================================
+         * 底部菜单
+         * ==========================================
+         */
+        //----------------SUPPORT------------------
+        $data = [];
+        $newMenuConfig = $menuConfig;
+        $menuType = 0; //主页
+        $data[1] = [
+            'parentId' => 0,
+            'title' => 'SUPPORT',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$menuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+        //----------------FAQ------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['pages'] = $faqs->id;
+        $menuType = 3;//pages
+        $data[2] = [
+            'parentId' => 1,
+            'title' => 'FAQ',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+        //----------------Sales------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['pages'] = $sales->id;
+        $menuType = 3;//pages
+        $data[3] = [
+            'parentId' => 1,
+            'title' => 'Sales',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+
+        //----------------COMPANY------------------
+        $newMenuConfig = $menuConfig;
+        $menuType = 0; //主页
+        $data[4] = [
+            'parentId' => 0,
+            'title' => 'COMPANY',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$menuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+
+        //----------------Home------------------
+        $newMenuConfig = $menuConfig;
+        $menuType = 0; //主页
+        $data[5] = [
+            'parentId' => 4,
+            'title' => 'Home',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$menuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+
+        //----------------About Us------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['pages'] = $aboutUs->id;
+        $menuType = 3;//pages
+        $data[6] = [
+            'parentId' => 4,
+            'title' => 'About Us',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+        //----------------Services------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['pages'] = $service->id;
+        $menuType = 3;//pages
+        $data[7] = [
+            'parentId' => 4,
+            'title' => 'Services',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+
+        //----------------News------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['collections_type'] = 1;
+        $newMenuConfig['pages_tag'] = $tagRow->id;
+        $menuType = 1;//collections
+        $data[8] = [
+            'parentId' => 4,
+            'title' => 'news',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+        //----------------Contact------------------
+        $newMenuConfig = $menuConfig;
+        $newMenuConfig['unique_page'] = 'contact';
+        $menuType = 4;//pages
+        $data[9] = [
+            'parentId' => 4,
+            'title' => 'Contact',
+            'distId'=>$distId,
+            'uri' =>  $siteMenu->generateUri($menuType,$newMenuConfig,$distId),
+            'menuType' => $menuType,
+            'menuConfig' => $newMenuConfig,
+            'menuLocation' => 1,
+        ];
+
+        $siteMenu->createMenuBatch($data);
+    }
+
+
 }

+ 61 - 0
app/Admin/Repositories/SiteMenu.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Admin\Repositories;
+
+use App\Models\SiteMenu as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class SiteMenu extends EloquentRepository
+{
+
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+
+
+
+
+    /*
+     * 只能显示2层
+     */
+    public static function selectOptions(\Closure $closure = null)
+    {
+        if (!$closure) {
+            $closure = function ($query) {
+                $query =  $query->where('dist_id', getDistributorId())->orderBy('order', 'asc');
+                return $query;
+            };
+        }
+        $selectOptions =  Model::class::selectOptions($closure);
+        //只显示2层
+        foreach ($selectOptions as $key => $value) {
+            if (substr_count($value,'&nbsp;') > 2) {
+                unset($selectOptions[$key]);
+            }
+        }
+        return $selectOptions;
+    }
+
+    /*
+    * 获取一个标签
+    */
+    public static function getOneById($id)
+    {
+        return Model::where('id', $id)->where('dist_id', getDistributorId())->first();
+    }
+
+    public static function createMenuBatch($data) {
+        $model = new Model();
+        return $model->createMenuBatch($data);
+    }
+
+    //生成uri
+    public static function generateUri($menuType,$menuConfig,$distId,$isId = true) {
+        $model = new Model();
+        return $model->generateUri($menuType,$menuConfig,$distId,$isId);
+    }
+
+}

+ 0 - 1
app/Admin/routes.php

@@ -14,7 +14,6 @@ Route::group([
 ], function (Router $router) {
     //主页
     $router->get('/', 'HomeController@index');
-    $router->resource('test', 'TestController');
     //产品
     $router->get('base-product/parameter', 'BaseProductController@parameter');
     $router->resource('base-product', 'BaseProductController');

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

@@ -134,9 +134,9 @@ class AuthController extends BaseAuthController
             $form->saved(function (Form $form) {
                 return $form
                     ->response()
-                    ->success(trans('admin.update_succeeded'));
+                    ->success(trans('admin.update_succeeded'))
                     //->redirect('/');
-                   // ->script('location.reload();');//保存成功后刷新页面
+                    ->script('setTimeout(() => {location.reload();}, 1000);');//保存成功后刷新页面
             });
 
 //            // 在从数据库中取出记录时,如果 language 为空,则默认给它一个值

+ 4 - 2
app/Distributor/Controllers/DistAppearanceController.php

@@ -34,6 +34,8 @@ class DistAppearanceController extends AdminDistController
     {
         $distInfo = DistAdminDistributor::getInfo();
         return Grid::make(new DistAppearance(), function (Grid $grid) use ($distInfo) {
+            //指定视图,去掉删除按钮
+            $grid->view('admin.grid.table');
             $grid->column('id')->sortable();
             // 标题
             $grid->column('title');
@@ -41,8 +43,8 @@ class DistAppearanceController extends AdminDistController
             $grid->column('cover_image')->display(function ($image) {
                 $dataImages = [$image];
                 return CommonHelper::displayImage($dataImages,100);
-            });
-            $grid->column('describe');
+            })->width('20%');
+            $grid->column('describe')->width('40%');
             $grid->column('isEnabled')->display(function () use ($distInfo) {
                 if ($this->id == $distInfo->appearance_id) {
                     return '<span class="label" style="background:#21b978;">Yes</span>';

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

@@ -95,7 +95,7 @@ class DistInquiryController extends AdminDistController
             $show->field('email');
             $show->field('consulting_products');
            // $show->field('freight_forwarder');
-           // $show->field('business_model');
+            $show->field('business_model');
             $show->field('content');
             $show->field('ip_address');
             $show->field('status')->using(config('dictionary.inquiryStatus'));

+ 0 - 40
app/Distributor/Controllers/ImportProductController.php

@@ -76,22 +76,8 @@ class ImportProductController extends AdminDistController
                 $filter->equal('category_id',admin_trans_label('category'))->select(BaseProductCategory::selectOptions())->width(2);
                 //$filter->equal('enabled', admin_trans_label('enabled'))->select(admin_trans_array( config('dictionary.enabled')))->width(2);
             });
-            //$grid->column('order');
-           //$grid->column('enabled');
-            ///$grid->column('content');
-            //$grid->column('parameters');
-            //$grid->column('is_pinned');
             // 删除新增按钮
             $grid->disableCreateButton();
-//            $grid->column('created_at');
-//            $grid->column('updated_at')->sortable();
-
-
-//            $grid->filter(function (Grid\Filter $filter) {
-//                $filter->equal('id');
-//
-//            });
-
             //$grid->disableViewButton();
             $grid->disableEditButton();
             $grid->disableDeleteButton();
@@ -160,30 +146,4 @@ class ImportProductController extends AdminDistController
         });
     }
 
-    /**
-     * Make a form builder.
-     *
-     * @return Form
-     */
-//    protected function form()
-//    {
-//        return Form::make(new BaseProduct(), function (Form $form) {
-//            $form->display('id');
-//            $form->text('title');
-//            $form->text('keywords');
-//            $form->text('description');
-//            $form->text('sku');
-//            $form->text('category_id');
-//            $form->text('issuance_date');
-//            $form->text('order');
-//            $form->text('enabled');
-//            $form->text('content');
-//            $form->text('parameters');
-//            $form->text('is_pinned');
-//
-//            $form->display('created_at');
-//            $form->display('updated_at');
-//
-//        });
-//    }
 }

+ 39 - 2
app/Distributor/Controllers/SettingsController.php

@@ -9,9 +9,12 @@ use Dcat\Admin\Layout\Content;
 use Dcat\Admin\Layout\Row;
 use Dcat\Admin\Widgets\Form;
 use Illuminate\Http\Request;
+use Dcat\Admin\Models\Setting as SettingModel;
+use Dcat\Admin\Traits\HasUploadedFile;
 
 class SettingsController extends Controller
 {
+    use HasUploadedFile;
 
     public function index(Content $content)
     {
@@ -36,13 +39,21 @@ HTML
                     $form->text('secondary_domain')->width(4,2)->value($secondaryDomain)->readOnly();
                 })
                 ->when(1, function (Form $form) use ($customDomain){
-                    $form->text('custom_domain')->width(4,2)->value($customDomain)->required()->help('Please enter the domain name, such as www.example.com,and bind the domain name to the IP address '.env('DIST_SITE_IP'));
+                    $form->text('custom_domain')->width(4,2)->value($customDomain)->help('Please enter the domain name, such as www.example.com,and bind the domain name to the IP address '.env('DIST_SITE_IP'));
                 })
                 ->options([0=>admin_trans_field('secondary_domain'),1=>admin_trans_field('custom_domain')])
                 ->value($distInfo->domain_type)
                 ->required();
         });
-        $form->tab('site', function (Form $form)   use ($distInfo) {
+        $form->tab('site', function (Form $form) use ($distInfo) {
+            $form->image("logo")
+                ->autoUpload()
+                ->uniqueName()
+                ->accept(config('distributor.upload.oss_image.accept'))
+                ->maxSize(config('distributor.upload.oss_image.max_size'))
+                ->dir(config("distributor.upload.directory.image").'/logo/'.date("Ymd"))
+                ->url('/dist-settings/upload')
+                ->default($distInfo->logo);
             $form->text('site_name')->value($distInfo->site_name)->required();
             $form->text('company_name')->value($distInfo->company_name)->required();
             $form->text('company_address')->value($distInfo->company_address);
@@ -56,6 +67,8 @@ HTML
         return $form;
     }
 
+
+
     /*
      * 保存配置
      */
@@ -83,4 +96,28 @@ HTML
     }
 
 
+    public function upload()
+    {
+        $disk = $this->disk('oss');
+        // 判断是否是删除文件请求
+        if ($this->isDeleteRequest()) {
+            // 删除文件并响应
+            //return $this->deleteFileAndResponse($disk);
+            return $this->responseDeleted();
+        }
+        // 获取上传的文件
+        $file = $this->file();
+        // 获取上传的字段名称
+       // $column = $this->uploader()->upload_column;
+        $column = uniqueCode("logo");
+        $dir = config("distributor.upload.directory.image").'/logo';
+        $newName = $column.'.'.$file->getClientOriginalExtension();
+        $result = $disk->putFileAs($dir, $file, $newName);
+        $path = "{$dir}/$newName";
+        return $result
+            ? $this->responseUploaded($path, $disk->url($path))
+            : $this->responseErrorMessage('文件上传失败');
+    }
+
+
 }

+ 22 - 33
app/Distributor/Controllers/SiteMenuController.php

@@ -29,6 +29,9 @@ class SiteMenuController extends AdminDistController
     public function index(Content $content)
     {
         $location = isset($_GET['location']) ? intval($_GET['location']) : 0;
+        //保存临时变量
+        setTempValue('location', $location);
+        //翻译
         $header = admin_trans( 'admin.top_menu');
         if ($location == 1) {
             $header = admin_trans( 'admin.footer_menu');
@@ -52,7 +55,7 @@ class SiteMenuController extends AdminDistController
             $tree->branch(function ($branch) {
                 $arr[] = $branch['title'];
                 if ($branch['uri']) {
-                    $arr[] = $branch['uri'];
+                    $arr[] = SiteMenu::generateUri($branch['menu_type'], $branch['menu_config'],false);
                 }
                 return implode(' - ', $arr);
             });
@@ -89,6 +92,7 @@ class SiteMenuController extends AdminDistController
         $thisObject = $this;
         return Form::make(new SiteMenu(), function (Form $form) use ($thisObject,$location) {
             $menuConfig = $form->model()->menu_config;
+            //$menuConfig = json_decode($menuConfig,true);
             //父ID
             $form->select('parent_id', admin_trans_label('parent_id'))
                 ->options(SiteMenu::selectOptions(function ($query) use ($location) {
@@ -121,9 +125,13 @@ class SiteMenuController extends AdminDistController
                         ->value($thisObject->getArrayValue('pages',$menuConfig))
                         ->help('The latest 30 published posts are displayed by default, and you can also use the search function to find all posts.');
                 })
-                ->when(4, function (Form $form) use ($menuConfig,$thisObject) {
+                ->when(10, function (Form $form) use ($menuConfig,$thisObject) {
                     //url
-                    $form->url('url')->value($thisObject->getArrayValue('url',$menuConfig));
+                    $form->text('url')->value($thisObject->getArrayValue('url',$menuConfig));
+                })
+                ->when(4, function (Form $form) use ($menuConfig,$thisObject) {
+                    $form->select('unique_page',admin_trans_label('unique_page'))->options(config('dictionary.unique_page'))
+                        ->value($thisObject->getArrayValue('unique_page',$menuConfig));
                 });
             //显示
             $form->switch('show')->default(1);
@@ -133,7 +141,7 @@ class SiteMenuController extends AdminDistController
             $form->hidden('uri');
             $form->hidden('dist_id'); // 隐藏dist_id字段,用于保存
             //以下字段不保存
-            $form->ignore(['collections_type','product_category','pages_tag','product','pages','url']);
+            $form->ignore(['collections_type','product_category','pages_tag','product','pages','url','unique_page']);
             //保存事件
             $form->submitted(function (Form $form) use ($thisObject) {
                 $result = $thisObject->convertMenuConfig($form);
@@ -148,7 +156,6 @@ class SiteMenuController extends AdminDistController
     }
 
     protected function convertMenuConfig(Form $form) {
-        $uri = "";
         $menuConfig = [
             'collections_type' => $form->input('collections_type'),
             'product_category' => $form->input('product_category'),
@@ -156,35 +163,10 @@ class SiteMenuController extends AdminDistController
             'product' => $form->input('product'),
             'pages' => $form->input('pages'),
             'url' => $form->input('url'),
+            'unique_page' => $form->input('unique_page'),
         ];
         $menuType = $form->input('menu_type');
-        switch ($menuType) {
-            case 0: //选择产品
-                $uri ="/";
-                break;
-            case 1: //集合
-                if ($form->input('collections_type') == 0) {
-                    //产品分类
-                    $row = DistProductCategory::getOneById($form->input('product_category'));
-                    $uri = $row ? "/product-category/".$row->slug : "/";
-                } else {
-                    //文章标签
-                    $row = SitePagesTag::getOneById($form->input('pages_tag'));
-                    $uri = $row ? "/collections/".$row->slug : "/";
-                }
-                break;
-            case 2: //选择产品
-                $row = DistProduct::getOneById($form->input('product'));
-                $uri = $row ? "/products/".$row->slug : "/";
-                break;
-            case 3: //选择页面
-                $row = SitePages::getOneById($form->input('pages'));
-                $uri = $row ? "/pages/".$row->slug : "/";
-                break;
-            case 4: //url
-                $uri = $form->input('url');
-                break;
-        }
+        $uri = SiteMenu::generateUri($menuType,$menuConfig);
         return ['uri'=>$uri,'menuConfig'=>$menuConfig];
     }
     protected function getArrayValue($key,$arr) {
@@ -194,5 +176,12 @@ class SiteMenuController extends AdminDistController
         return "";
     }
 
-
+    /*
+     * 重写store
+     */
+    public function store()
+    {
+        $location = getTempValue('location');
+        return $this->form()->store(null,'/site-menu?location='.$location);
+    }
 }

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

@@ -50,6 +50,7 @@ class SitePagesTagController extends AdminDistController
             $grid->showQuickEditButton();
             $grid->enableDialogCreate();
             $grid->disableEditButton();
+            $grid->model()->where('dist_id', getDistributorId())->orderBy('id', 'desc');
         });
     }
 

+ 1 - 1
app/Distributor/Forms/ImportProduct.php

@@ -56,7 +56,7 @@ class ImportProduct extends Form
                     'title' => $baseProduct->title,
                     'sku' => $baseProduct->sku, // 假设 $baseProduct 也有 sku 字段
                     'issuance_date' => $baseProduct->issuance_date, // 假设 $baseProduct 也有 issuance_date 字段
-                    'order' => $baseProduct->order, // 假设 $baseProduct 也有 order 字段
+                   // 'order' => $baseProduct->order, // 假设 $baseProduct 也有 order 字段
                     'enabled' => $baseProduct->enabled, // 假设 $baseProduct 也有 enabled 字段
                     'content' => $baseProduct->content, // 假设 $baseProduct 也有 content 字段
                     'parameters' => $baseProduct->parameters, // 假设 $baseProduct 也有 parameters 字段

+ 1 - 0
app/Distributor/Repositories/DistAdminDistributor.php

@@ -43,6 +43,7 @@ class DistAdminDistributor extends EloquentRepository
     {
         $id = getDistributorId();
         $row = Model::find($id);
+        $row->logo = $info['logo'];
         $row->site_name = $info['site_name'];
         $row->company_name = $info['company_name'];
         $row->company_address = $info['company_address'];

+ 12 - 0
app/Distributor/Repositories/SiteMenu.php

@@ -46,4 +46,16 @@ class SiteMenu extends EloquentRepository
         return Model::where('id', $id)->where('dist_id', getDistributorId())->first();
     }
 
+    public static function createMenuBatch($data) {
+        $model = new Model();
+        return $model->createMenuBatch($data);
+    }
+
+    //生成uri
+    public static function generateUri($menuType,$menuConfig,$isId = true) {
+        $distId = getDistributorId();
+        $model = new Model();
+        return $model->generateUri($menuType,$menuConfig,$distId,$isId);
+    }
+
 }

+ 1 - 0
app/Distributor/Repositories/SitePagesTag.php

@@ -65,6 +65,7 @@ class SitePagesTag extends EloquentRepository
                 'slug' => $self->generateSlug($tag),
                 'dist_id'=> getDistributorId(),
                 'created_at' => now(),
+                'seo_title' => $tag,
             ]);
             $existingTags[$tag] = $id;
         }

+ 1 - 0
app/Distributor/routes.php

@@ -38,6 +38,7 @@ Route::group([
     //配置
     $router->get('dist-settings', 'SettingsController@index');
     $router->post('dist-settings', 'SettingsController@store');
+    $router->post('dist-settings/upload', 'SettingsController@upload');
     //外观选择
     $router->get('dist-appearance', 'DistAppearanceController@index');
     //菜单管理

+ 1 - 1
app/Models/DistProductCategory.php

@@ -34,7 +34,7 @@ class DistProductCategory extends Model implements Sortable
     ];
 
     protected $fillable = [
-        'name', 'parent_id', 'order','enabled','dist_id', // 假设已有的可填充字段
+        'name', 'parent_id', 'order','enabled','dist_id','slug', // 假设已有的可填充字段
     ];
 
 

+ 90 - 0
app/Models/SiteMenu.php

@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use Carbon\Carbon;
 use Dcat\Admin\Traits\HasDateTimeFormatter;
 
 use Illuminate\Database\Eloquent\Model;
@@ -27,4 +28,93 @@ class SiteMenu extends Model
         'updated_at' => 'datetime:Y-m-d H:i:s',
         'menu_config' => 'json', // 将 menu_config 字段转换为数组
     ];
+
+    protected $fillable = [
+        'parent_id',
+        'order',
+        'title',
+        'uri',
+        'show',
+        'menu_type',
+        'menu_config',
+        'menu_location',
+        'dist_id',
+    ];
+
+
+    /**
+     * @return 批量生成菜单
+     */
+    public function createMenuBatch($data) {
+        $parentIdArray = [];
+        $i = 0;
+        foreach ($data as $item) {
+            $parentId = $item['parentId'] == 0 ? 0 : $parentIdArray[$item['parentId']];
+            $i++;
+            $row = $this->create([
+                'parent_id' => $parentId,
+                'title' => $item['title'],
+                'order' => $i,
+                'dist_id'=>$item['distId'],
+                'uri' => $item['uri'],
+                'menu_type' => $item['menuType'],
+                'menu_config' => $item['menuConfig'],
+                'menu_location' => $item['menuLocation'],//0顶部 1底部
+                'show'  => 1,
+                'created_at'=>Carbon::now(),
+                'updated_at'=>Carbon::now(),
+            ]);
+            $parentIdArray[$i] = $row->id;
+        }
+    }
+
+
+    public  function generateUri($menuType,$menuConfig,$distId,$isId = true) {
+        switch ($menuType) {
+            case 0: //选择产品
+                $uri ="/";
+                break;
+            case 1: //集合
+                if ($menuConfig['collections_type'] == 0) {
+                    $distProductCategory = new DistProductCategory();
+                    $row = $distProductCategory->where('dist_id', $distId)->where('id', $menuConfig['product_category'])->first();
+                    //产品分类
+                    $slug = $isId ? $row->id : $row->slug;
+                    $uri = $row ? config('dictionary.site_url.product_category').'/'.$slug : "/";
+                } else {
+                    $sitePagesTag = new SitePagesTag();
+                    $row = $sitePagesTag->where('dist_id', $distId)->where('id', $menuConfig['pages_tag'])->first();
+                    $slug = $isId ? $row->id : $row->slug;
+                    //文章标签
+                    $uri = $row ? config('dictionary.site_url.tags').'/'.$slug : "/";
+                }
+                break;
+            case 2: //选择产品
+                $distProduct = new DistProduct();
+                $row = $distProduct->where('dist_id', $distId)->where('id', $menuConfig['product'])->first();
+                $slug = $isId ? $row->id : $row->slug;
+                $uri = $row ? config('dictionary.site_url.products').'/' .$slug : "/";
+                break;
+            case 3: //选择页面
+                $sitePages = new SitePages();
+                $row = $sitePages->where('dist_id', $distId)->where('id', $menuConfig['pages'])->first();
+                $slug = $isId ? $row->id : $row->slug;
+                $uri = $row ? config('dictionary.site_url.pages').'/'.$slug : "/";
+                break;
+            case 4: //选择页面
+                $uniquePage = $menuConfig['unique_page'];
+                if ($uniquePage) {
+                    $uri = config('dictionary.site_url')[$uniquePage];
+                }
+                $uri = $uri ? $uri : "/";
+                break;
+            case 10: //url
+                $uri = $menuConfig['url'];
+                break;
+        }
+        return $uri;
+    }
+
+
+
 }

+ 14 - 0
app/Models/SitePages.php

@@ -11,6 +11,20 @@ class SitePages extends Model
 	use HasDateTimeFormatter;
     protected $table = 'site_pages';
 
+    protected $fillable = [
+        'title',
+        'content',
+        'status',
+        'author',
+        'post_date',
+        'dist_id',
+        'cover_image',
+        'slug',
+        'seo_title',
+        'seo_keywords',
+        'seo_description',
+    ];
+
     /**
      * 定义你的关联模型.
      *

+ 9 - 1
app/Models/SitePagesTag.php

@@ -12,5 +12,13 @@ class SitePagesTag extends Model
 	use HasDateTimeFormatter;
     protected $table = 'site_pages_tag';
     public $timestamps = false;
-
+    protected $fillable = [
+        'name',
+        'slug',
+        'dist_id',
+        'created_at',
+        'seo_title',
+        'seo_keywords',
+        'seo_description'
+    ];
 }

+ 4 - 0
app/Models/SitePagesTagRelationship.php

@@ -12,4 +12,8 @@ class SitePagesTagRelationship extends Model
     protected $table = 'site_pages_tag_relationship';
     public $timestamps = false;
 
+    protected $fillable = [
+        'pages_id',
+        'tag_id',
+    ];
 }

+ 2 - 2
app/Traits/DistSlugTrait.php

@@ -22,7 +22,7 @@ trait DistSlugTrait
         $self = new self();
         $model = $self->model();
         $slug = generateSlug($slug);
-        for ($i=0;$i<5;$i++) {
+        for ($i=0;$i<3;$i++) {
             if ($id > 0) {
                 $count = $model->where('id','!=',$id)->where('slug', $slug)->where('dist_id', getDistributorId())->count();
             } else {
@@ -31,7 +31,7 @@ trait DistSlugTrait
             if ($count == 0) {
                 return $slug;
             } else {
-                $slug = $slug . '-' . generateRandomString();
+                $slug = $slug . '-' . generateRandomString(2);
             }
         }
         return $slug . '-' . generateRandomString(5);

+ 31 - 0
app/helpers.php

@@ -59,6 +59,37 @@ if (!function_exists('getDistributorId')) {
     }
 }
 
+/*
+ * 使用session记录与显示临时变量,变量名在config/dictionary.php中的temp_value
+ */
+
+if (!function_exists('setTempValue')) {
+    function setTempValue($key, $value) {
+        $arr = config('dictionary.temp_value');
+        if (isset($arr[$key])) {
+            $newKey = '_temp_value_'.$key;//加前缀
+            Session::put($newKey, $value);
+            return true;
+        }
+        return false;
+    }
+}
+/*
+ * 拿临时变量
+ */
+if (!function_exists('getTempValue')) {
+    function getTempValue($key) {
+        $arr = config('dictionary.temp_value');
+        if (isset($arr[$key])) {
+            $newKey = '_temp_value_'.$key; //加前缀
+            $value = Session::get($newKey);
+            return $value === null ? $arr[$key] : $value;
+        }
+        return false;
+    }
+}
+
+
 if (!function_exists('getSiteDomain')) {
     //得到分销商域名
     function getSiteDomain($hasHttp = true) {

+ 1 - 1
config/admin.php

@@ -285,7 +285,7 @@ return [
 
         'oss_image' => [
             'accept' => 'jpg,png,gif,jpeg,webp',//允许上传的文件类型
-            'max_size' => 1024, // 上传文件大小限制,单位B
+            'max_size' => 500, // 上传文件大小限制,单位kB
         ],
 
     ],

+ 12 - 1
config/dictionary.php

@@ -49,7 +49,11 @@ return [
         '1' => 'collections',
         '2' => 'products',
         '3' => 'pages',
-        '4' => 'url',
+        '4' => 'unique_page',
+        '10' => 'url',
+    ],
+    'unique_page' => [
+        'contact' => 'Contact Us',
     ],
     'collections_type' => [
         '0' => 'product_category',
@@ -73,6 +77,13 @@ return [
         'product_category' => '/products/categories',
         'video' => '/videos',
         'video_category' => '/videos/categories',
+        'contact' => '/contact'
+    ],
+
+    //临时变量
+    'temp_value' => [
+        'location' => 0, //用于SiteMenuController中location变量
     ],
 
+
 ];

+ 1 - 1
config/distributor.php

@@ -274,7 +274,7 @@ return [
 
         'oss_image' => [
             'accept' => 'jpg,png,gif,jpeg,webp',//允许上传的文件类型
-            'max_size' => 10240, // 上传文件大小限制,单位B
+            'max_size' => 500, // 上传文件大小限制,单位kB
         ],
     ],
 

+ 1 - 0
lang/en/global.php

@@ -127,6 +127,7 @@ return [
         'url'                  => 'Url',
         'product_category'      => 'Product Category',
         'pages_tag'             => 'Pages Tag',
+        'unique_page'          => 'Unique Page',
     ],
     'options' => [
         //

+ 3 - 0
lang/zh_CN/global.php

@@ -82,6 +82,8 @@ return [
         'seo_title'            => 'SEO标题',
         'seo_description'      => 'SEO描述',
         'seo_keywords'         => 'SEO关健字',
+        'logo'                  => 'LOGO',
+        'referer_url'           => '来源URL',
     ],
     'labels' => [
         'list'         => '列表',
@@ -140,6 +142,7 @@ return [
         'url'                  => '外部连接',
         'product_category'      => '产品分类',
         'pages_tag'             => '文章标签',
+        'unique_page'          => '独立页面',
     ],
     'options' => [
         //

+ 1 - 0
lang/zh_CN/menu.php

@@ -35,5 +35,6 @@ return [
         'footer_menu'  => '底部菜单',
         'pages' => '文章',
         'tag' => '标签',
+        'site' => '站点',
     ],
 ];