Browse Source

修正BUG

moshaorui 4 months ago
parent
commit
1a06b57dc8

+ 5 - 0
.env.dev

@@ -4,6 +4,11 @@ APP_KEY=base64:bdomFa+r6S774rRyFNeb4pCBxVe4WbuzAzk+LyP86+k=
 APP_DEBUG=true
 APP_URL=http://localhost
 
+#网站主域名,不含http
+TOP_DOMAIN=mietubl.com
+#分销商前端站点IP
+DIST_SITE_IP = 127.0.0.1
+
 LOG_CHANNEL=stack
 LOG_DEPRECATIONS_CHANNEL=null
 LOG_LEVEL=debug

+ 34 - 6
app/Admin/Controllers/DistAdminDistributorController.php

@@ -4,6 +4,7 @@ namespace App\Admin\Controllers;
 
 use App\Admin\Repositories\DistAdminDistributor;
 use App\Admin\Repositories\DistAppearance;
+use App\Models\DistProductCategory;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
@@ -37,10 +38,17 @@ class DistAdminDistributorController extends AdminController
             $grid->column('id')->sortable();
             $grid->column('company_name');
             $grid->column('site_name');
-            $grid->column('level_domain',);
+            $grid->column('domain_type',admin_trans_label('domain'))->display(function ($domainType) {
+                $title = "";
+                if ($domainType == 0) {
+                    $title = $this->secondary_domain;
+                } else {
+                    $title = $this->custom_domain;
+                }
+                return "<span style='color:#586cb1'>$title</span>";
+            });
+
             $grid->column('country',);
-            $grid->column('contact_number',);
-            $grid->column('service_hotline',);
             $grid->column('appearance.title' ,admin_trans_field('appearance'));
             $grid->column('enabled')->switch();
             $grid->column('created_at');
@@ -51,7 +59,7 @@ class DistAdminDistributorController extends AdminController
                 $filter->expand();
                 $filter->equal('company_name', )->width(2);
                 $filter->equal('site_name')->width(2);
-                $filter->equal('level_domain')->width(2);
+                $filter->equal('domain')->width(2);
                 $filter->equal('enabled', )->select(config('dictionary.enabled'))->width(2);
             });
             // 排序
@@ -79,7 +87,15 @@ class DistAdminDistributorController extends AdminController
             $show->field('company_name',);
             $show->field('company_address');
             $show->field('site_name');
-            $show->field('level_domain');
+            $show->field('domain_type',admin_trans_label('domain'))->as(function ($domainType) {
+                $title = "";
+                if ($domainType == 0) {
+                    $title = $this->secondary_domain;
+                } else {
+                    $title = $this->custom_domain;
+                }
+                return "<span style='color:#586cb1'>$title</span>";
+            })->unescape();
             $show->field('appearance.title' ,admin_trans_field('appearance'));
             $show->field('country');
             $show->field('contact_number');
@@ -111,7 +127,19 @@ class DistAdminDistributorController extends AdminController
             $form->text('company_name', )->required();
             $form->text('company_address',);
             $form->text('site_name')->required();
-            $form->text('level_domain')->required();
+
+            $form->radio('domain_type')
+                ->when(0, function (Form $form) {
+                    $form->text('secondary_domain')->help('Please enter the domain name, such as demo.'.env('TOP_DOMAIN'));
+                })
+                ->when(1, function (Form $form) {
+                    $form->text('custom_domain')->help('Please enter the domain name, such as www.example.com,and bind the domain name to the IP address '.env('DIST_SITE_IP'));
+                })
+                ->default(0)
+                ->options([0=>'second-level domain',1=>'custom domain'])
+                ->required();
+
+
             $form->select('appearance_id',admin_trans_field('appearance'))->options(DistAppearance::selectOptions())->required();
             $form->text('country')->required();
             $form->text('contact_number');

+ 1 - 2
app/Admin/Repositories/DistAppearanceTemplate.php

@@ -85,8 +85,7 @@ class DistAppearanceTemplate extends EloquentRepository
      * 请空指定模板
      */
     public static function deleteTemplates($appearanceId,$distId) {
-        $self = new self();
-        $self->model()->where('dist_id',$distId)->where('appearance_id',$appearanceId)->delete();
+        Model::deleteTemplates($appearanceId, $distId);
         return true;
     }
 

+ 1 - 1
app/Admin/Repositories/DistAppearanceVariable.php

@@ -42,7 +42,7 @@ class DistAppearanceVariable extends EloquentRepository
      */
     public static function deleteVariable($appearanceId,$distId)
     {
-        return Model::where('appearance_id', $appearanceId)->where('dist_id', $distId)->delete();
+        return Model::deleteVariable($appearanceId, $distId);
     }
 
 

+ 53 - 0
app/Distributor/Actions/AppearanceEnable.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace App\Distributor\Actions;
+
+
+use App\Distributor\Repositories\DistAdminDistributor;
+use Dcat\Admin\Grid\RowAction;
+use Illuminate\Http\Request;
+
+class AppearanceEnable extends RowAction
+{
+
+    /**
+     * 返回字段标题
+     *
+     * @return string
+     */
+    public function title()
+    {
+        return '<i class="feather icon-edit"></i> '.admin_trans_label('enable');
+    }
+
+    public function confirm()
+    {
+        return [
+            "Confirm to enable this appearance?",
+            $this->row->title,
+        ];
+    }
+    /*
+     * 处理请求
+     */
+    public function handle(Request $request)
+    {
+        $appearanceId = $this->getKey();
+        DistAdminDistributor::enableTheme($appearanceId);
+        // 返回响应结果并刷新页面
+        return $this->response()->success("Success")->refresh();
+    }
+    /**
+     * 设置要POST到接口的数据
+     *
+     * @return array
+     */
+    public function parameters()
+    {
+        return [
+            // 发送当前行 username 字段数据到接口
+            'id' => $this->row->title,
+        ];
+    }
+
+}

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

@@ -49,7 +49,7 @@ class AuthController extends BaseAuthController
                 ]);
             }
             //将当前登录用户的公司信息存入session
-            Session::put('distributor', $distributor);
+            Session::put('distributor', $distributor->toArray());
             // 登录成功后返回登录响应
             return $this->sendLoginResponse($request);
         }

+ 91 - 0
app/Distributor/Controllers/DistAppearanceController.php

@@ -0,0 +1,91 @@
+<?php
+
+namespace App\Distributor\Controllers;
+
+
+use App\Distributor\Repositories\DistAppearance;
+use App\Distributor\Actions\AppearanceEnable;
+use App\Distributor\Repositories\DistAdminDistributor;
+use App\Libraries\CommonHelper;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Http\Controllers\AdminController;
+use Dcat\Admin\Layout\Content;
+
+class DistAppearanceController extends AdminController
+{
+    /**
+     * page index
+     */
+    public function index(Content $content)
+    {
+        return $content
+            ->header(admin_trans( 'admin.appearance'))
+            ->description('')
+            ->breadcrumb(['text'=>'list','url'=>''])
+            ->body($this->grid());
+    }
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $distInfo = DistAdminDistributor::getInfo();
+        return Grid::make(new DistAppearance(), function (Grid $grid) use ($distInfo) {
+            $grid->column('id')->sortable();
+            // 标题
+            $grid->column('title');
+            // 封面图
+            $grid->column('cover_image')->display(function ($image) {
+                $dataImages = [$image];
+                return CommonHelper::displayImage($dataImages,100);
+            });
+            $grid->column('describe');
+            $grid->column('isEnabled')->display(function () use ($distInfo) {
+                if ($this->id == $distInfo->appearance_id) {
+                    return '<span class="label" style="background:#21b978;">Yes</span>';
+                } else {
+                    return '<span class="label" style="background:#d2d6de;">No</span>';
+                }
+
+            });
+            //按钮
+            $grid->disableCreateButton();
+            $grid->disableDeleteButton();
+            $grid->disableBatchDelete();
+            // 操作
+            $grid->actions(function (Grid\Displayers\Actions $actions) {
+                $actions->disableDelete();
+                $actions->disableEdit();
+                $actions->disableView();
+            });
+            //排序
+            $grid->model()->where('enabled',1)->orderBy('order',);
+            //操作
+            $grid->actions(function (Grid\Displayers\Actions $actions) {
+                $actions->append(new AppearanceEnable());
+            });
+        });
+    }
+
+
+    //屏蔽删除
+    public function destroy($id)
+    {
+        abort(404);
+    }
+
+    //屏蔽创建
+    public function create(Content $content)
+    {
+        abort(404);
+    }
+
+    //屏蔽编辑
+    public function edit($id, Content $content)
+    {
+        abort(404);
+    }
+}

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

@@ -19,8 +19,8 @@ class DistInquiryController extends AdminController
     public function index(Content $content)
     {
         return $content
-            ->header('Inquiry Management')
-            ->description('all')
+            ->header(admin_trans('admin.inquiry_management'))
+            ->description('')
             ->breadcrumb(['text'=>'list','url'=>''])
             ->body($this->grid());
     }

+ 70 - 0
app/Distributor/Controllers/SettingsController.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace App\Distributor\Controllers;
+
+use App\Distributor\Repositories\DistAdminDistributor;
+use App\Http\Controllers\Controller;
+use Dcat\Admin\Layout\Column;
+use Dcat\Admin\Layout\Content;
+use Dcat\Admin\Layout\Row;
+use Dcat\Admin\Widgets\Form;
+use Illuminate\Http\Request;
+
+class SettingsController extends Controller
+{
+
+    public function index(Content $content)
+    {
+        return $content->title(admin_trans( 'admin.settings'))
+            ->body(
+<<<HTML
+<div class="card">{$this->form()->render()}</div>
+HTML
+            );
+    }
+
+    protected function form()
+    {
+        //查分销商信息
+        $distInfo = DistAdminDistributor::getInfo();
+        $secondaryDomain = $distInfo->secondary_domain ? $distInfo->secondary_domain : '';
+        $customDomain = $distInfo->custom_domain ? $distInfo->custom_domain : '';
+        $form = new Form();
+        $form->radio('domain_type')
+            ->when(0, function (Form $form) use ($secondaryDomain) {
+                $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'));
+            })
+            ->options([0=>admin_trans_field('secondary_domain'),1=>admin_trans_field('custom_domain')])
+            ->value($distInfo->domain_type)
+            ->required();
+        return $form;
+    }
+
+    /*
+     * 保存配置
+     */
+    public function store(Request $request)  {
+        $form = new Form();
+        $domainType = $request->input('domain_type');
+        $customDomain = $request->input('custom_domain');
+        if (!in_array($domainType, [0,1])) {
+            return $form->response()->error('Invalid argument');
+        }
+        if ($domainType == 1) {
+            if (str_starts_with($customDomain,env('TOP_DOMAIN'))) {
+                return $form->response()->error('Error in domain format');
+            }
+            if (!isDomainOnly($customDomain)) {
+                return $form->response()->error('Error in domain format');
+            }
+        }
+
+        DistAdminDistributor::updateDomain($domainType,$customDomain);
+        return $form->response()->success('Success');
+    }
+
+
+}

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

@@ -0,0 +1,65 @@
+<?php
+
+namespace App\Distributor\Repositories;
+
+use App\Models\DistAdminDistributor as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistAdminDistributor extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+
+
+    /*
+     * 得到分销商信息
+     */
+    public static function getInfo()
+    {
+        $id = getDistributorId();
+        $row = Model::find($id);
+        return $row;
+    }
+
+    /*
+     * 修改域名名称
+     */
+    public static function updateDomain($domainType,$customDomain)
+    {
+        $id = getDistributorId();
+        $row = Model::find($id);
+        $row->domain_type = $domainType;
+        if ($domainType == 1) {
+            $row->custom_domain = $customDomain;
+        }
+        $row->save();
+    }
+
+    /*
+     * 分销商切换主题
+     */
+    public static function enableTheme($appearanceId)
+    {
+        $appearanceId = intval($appearanceId);
+        $distId = getDistributorId();
+        $distAppearance = new DistAppearance();
+        $appearanceRow = $distAppearance->model()->find($appearanceId);
+        if ($appearanceRow && $appearanceRow->enabled == 1) {
+            //修改分销商主题
+            $row = Model::find($distId);
+            $row->appearance_id = $appearanceId;
+            $row->save();
+            //切换主题
+            DistAppearance::switchTheme($appearanceId, $distId);
+            return true;
+        }
+        return false;
+    }
+
+
+
+}

+ 42 - 0
app/Distributor/Repositories/DistAppearance.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Distributor\Repositories;
+
+use App\Models\DistAppearance as Model;
+use App\Models\DistAppearanceTemplate;
+use App\Models\DistAppearanceVariable;
+use Carbon\Carbon;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistAppearance extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+
+
+    /*
+     * 切换主题操作,生成销应商主题模版与变量
+     * (如果原本就有模板与变量,不会重复生成)
+     */
+    public static function switchTheme($appearanceId,$distId) {
+        DistAppearanceTemplate::copyTemplateToDist($appearanceId, $distId);
+        DistAppearanceVariable::copyAppearanceVariable($appearanceId, $distId);
+        return true;
+    }
+
+    /*
+     * 初始化分销商模版与变量
+     */
+    public static function initTheme($appearanceId,$distId)
+    {
+        //请空模版与变量
+        DistAppearanceTemplate::deleteTemplates($appearanceId,$distId);
+        DistAppearanceVariable::deleteVariable($appearanceId, $distId);
+        //重新生成模版与变量
+        self::switchTheme($appearanceId, $distId);
+    }
+}

+ 7 - 1
app/Distributor/routes.php

@@ -1,6 +1,8 @@
 <?php
 
+use App\Distributor\Controllers\DistAppearanceController;
 use App\Distributor\Controllers\DistInquiryController;
+use App\Distributor\Controllers\SettingsController;
 use Illuminate\Routing\Router;
 use Illuminate\Support\Facades\Route;
 use Dcat\Admin\Admin;
@@ -37,7 +39,11 @@ Route::group([
     //询价管理
     $router->get('/dist-inquiry', [DistInquiryController::class, 'index']);
     $router->get('/dist-inquiry/{id}', [DistInquiryController::class, 'show']);
-
+    //配置
+    $router->get('/dist-settings', [SettingsController::class, 'index']);
+    $router->post('/dist-settings', [SettingsController::class, 'store']);
+    //外观选择
+    $router->get('/dist-appearance', [DistAppearanceController::class, 'index']);
 
 });
 

+ 5 - 0
app/Models/DistAppearanceTemplate.php

@@ -31,4 +31,9 @@ WHERE `dist_id` = 0 AND `appearance_id` = {$appearanceId};
         ");
     }
 
+    public static function deleteTemplates($appearanceId,$distId) {
+        self::where('dist_id',$distId)->where('appearance_id',$appearanceId)->delete();
+        return true;
+    }
+
 }

+ 5 - 0
app/Models/DistAppearanceVariable.php

@@ -51,4 +51,9 @@ WHERE `dist_id` = 0 AND `appearance_id` = {$appearanceId};
         ");
     }
 
+    public static function deleteVariable($appearanceId,$distId)
+    {
+        return self::where('appearance_id', $appearanceId)->where('dist_id', $distId)->delete();
+    }
+
 }

+ 9 - 0
app/helpers.php

@@ -145,3 +145,12 @@ if (!function_exists('isValidJson')) {
 
 }
 
+//判断是否为纯域名
+if (!function_exists('isDomainOnly')) {
+    function isDomainOnly($string) {
+        // 正则表达式:匹配不带协议或路径的纯域名
+        $pattern = '/^(?!:\/\/)([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/';
+
+        return preg_match($pattern, $string) === 1;
+    }
+}

+ 3 - 1
lang/zh_CN/admin.php

@@ -237,5 +237,7 @@ return [
     'video'  => '视频',
     'dist_product_import'=>'产品导入',
     'import'                => '产品导入',
-
+    'settings'              => '设置',
+    'inquiry_management'     => '询价管理',
+    'appearance' => '外观',
 ];

+ 9 - 3
lang/zh_CN/global.php

@@ -50,7 +50,7 @@ return [
         'site_name'             => '站点名称',
         'language'              => '语言',
         'company_name'          => '公司名称',
-        'level_domain'          => '域名',
+        'domain'          => '域名',
         'country'               => '国家',
         'appearance'            => '外观',
         'company_address'       => '公司地址',
@@ -65,7 +65,10 @@ return [
         'folder'                => '文件夹名称',
         'imported'              => '是否导入',
         'describe'              => '描述',
-
+        'domain_type'           => '域名类型',
+        'secondary_domain'      => '二级域名',
+        'custom_domain'         => '自定义域名',
+        'isEnabled'             => '是否启用',
     ],
     'labels' => [
         'list'         => '列表',
@@ -83,7 +86,7 @@ return [
         'video_url'    => '视频URL地址',
         'site_name'    => '站点名称',
         'company_name' => '公司名称',
-        'level_domain' => '域名',
+        'domain' => '域名',
         'distributor'  => '分销商',
         'country'      => '国家',
         'contact_number' => '联系电话',
@@ -98,6 +101,9 @@ return [
         'assignment'            => '分配',
         'images'                => '图片',
         'process'               => '处理',
+        'settings'              => '设置',
+        'inquiry_management'    => '询价管理',
+        'enable'                => '启用',
     ],
     'options' => [
         //

+ 1 - 0
lang/zh_CN/menu.php

@@ -29,5 +29,6 @@ return [
         'users_management'    => '用户管理',
         'inquiry_management'    => '询价管理',
         'appearance'    => '外观管理',
+        'settings'    => '设置',
     ],
 ];