Browse Source

主站翻译

moshaorui 5 months ago
parent
commit
a32ca42d94
32 changed files with 530 additions and 349 deletions
  1. 5 10
      app/Admin/Actions/Grid/AppearanceImport.php
  2. 69 0
      app/Admin/Controllers/AuthController.php
  3. 4 4
      app/Admin/Controllers/BaseProductCategoryController.php
  4. 7 7
      app/Admin/Controllers/BaseProductController.php
  5. 1 1
      app/Admin/Controllers/BaseProductParameterController.php
  6. 3 3
      app/Admin/Controllers/BaseVideoCategoryController.php
  7. 5 5
      app/Admin/Controllers/BaseVideoController.php
  8. 16 15
      app/Admin/Controllers/DistAdminDistributorController.php
  9. 16 16
      app/Admin/Controllers/DistAdminUserController.php
  10. 2 2
      app/Admin/Controllers/DistAppearanceController.php
  11. 21 15
      app/Admin/Controllers/DistAppearanceTemplateController.php
  12. 9 9
      app/Admin/Controllers/DistAppearanceVariableController.php
  13. 4 4
      app/Admin/Controllers/DistInquiryController.php
  14. 53 34
      app/Admin/Repositories/DistAppearanceTemplate.php
  15. 32 0
      app/Admin/Repositories/DistAppearanceTemplateLog.php
  16. 2 0
      app/Admin/Repositories/DistAppearanceVariable.php
  17. 7 0
      app/Admin/bootstrap.php
  18. 3 29
      app/Models/DistAppearanceTemplate.php
  19. 17 0
      app/Models/DistAppearanceTemplateLog.php
  20. 3 39
      app/Models/DistAppearanceVariable.php
  21. 25 0
      app/helpers.php
  22. 0 26
      lang/en/dist-admin-distributor.php
  23. 0 18
      lang/en/dist-admin-user.php
  24. 0 16
      lang/en/dist-appearance-template.php
  25. 0 16
      lang/en/dist-appearance-variable.php
  26. 0 16
      lang/en/dist-appearance.php
  27. 0 24
      lang/en/dist-inquiry.php
  28. 90 8
      lang/en/global.php
  29. 48 18
      lang/zh_CN/global.php
  30. 8 0
      lang/zh_CN/menu.php
  31. 47 9
      lang/zh_TW/global.php
  32. 33 5
      resources/views/admin/pages-custom/ace.blade.php

+ 5 - 10
app/Admin/Actions/Grid/AppearanceImport.php

@@ -21,7 +21,7 @@ class AppearanceImport extends RowAction
      */
     public function title()
     {
-        return 'Import Tmpl';
+        return admin_trans_label('import_tmpl');
     }
 
     public function confirm()
@@ -67,7 +67,7 @@ class AppearanceImport extends RowAction
         ];
     }
 
-    private function readDirectory($dirPath,$parentId = 0) {
+    private function readDirectory($dirPath) {
         // 检查目录是否存在
         if (!is_dir($dirPath)) {
             return;
@@ -88,19 +88,14 @@ class AppearanceImport extends RowAction
 
             // 如果是文件夹,递归读取
             if (is_dir($fullPath)) {
-                //echo "文件夹: $fullPath<br />";
-                //插数据库
-                $filePath = str_replace($this->sourcePath, '', $fullPath);
-                $fileName = basename($fullPath);
-                $newParentId = DistAppearanceTemplate::insertTemplateFolder(0, $this->appearanceId, $filePath,$fileName, $parentId);
-                $this->readDirectory($fullPath,$newParentId); // 递归调用
+                $this->readDirectory($fullPath); // 递归调用
             } else {
                 // 如果是文件,读取文件内容
                 $content = file_get_contents($fullPath);
-                $filePath = str_replace($this->sourcePath, '', $fullPath);
+                $filePath = str_replace($this->sourcePath, '', $dirPath);
                 $fileName = basename($fullPath);
                 // 插入数据库
-                DistAppearanceTemplate::insertTemplateContent(0, $this->appearanceId, $filePath,$fileName, $parentId, $content);
+                DistAppearanceTemplate::insertTemplateContent(0, $this->appearanceId, $filePath,$fileName, $content);
             }
         }
 

+ 69 - 0
app/Admin/Controllers/AuthController.php

@@ -2,10 +2,79 @@
 
 namespace App\Admin\Controllers;
 
+use Dcat\Admin\Form;
 use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
+use Dcat\Admin\Http\Repositories\Administrator;
 
 class AuthController extends BaseAuthController
 {
     protected $view = 'admin.pages.login';
 
+    /**
+     * Model-form for user setting.
+     *
+     * @return Form
+     */
+    protected function settingForm()
+    {
+
+        return new Form(new Administrator(), function (Form $form) {
+            $form->action(admin_url('auth/setting'));
+            $form->disableCreatingCheck();
+            $form->disableEditingCheck();
+            $form->disableViewCheck();
+
+            $form->tools(function (Form\Tools $tools) {
+                $tools->disableView();
+                $tools->disableDelete();
+            });
+
+            $form->display('username', trans('admin.username'));
+            $form->text('name', trans('admin.name'))->required();
+            //$form->image('avatar', trans('admin.avatar'))->autoUpload();
+
+            $form->password('old_password', trans('admin.old_password'));
+
+            $form->password('password', trans('admin.password'))
+                ->minLength(5)
+                ->maxLength(20)
+                ->customFormat(function ($v) {
+                    if ($v == $this->password) {
+                        return;
+                    }
+
+                    return $v;
+                });
+            $form->password('password_confirmation', trans('admin.password_confirmation'))->same('password');
+
+            $form->ignore(['password_confirmation', 'old_password']);
+
+            // 添加语言选择的下拉框
+            $form->select('language', trans('admin.language'))
+                ->options(config('dictionary.languages'))
+                ->default('en')
+                ->required();;  // 设置默认语言
+
+            $form->saving(function (Form $form) {
+                if ($form->password && $form->model()->password != $form->password) {
+                    $form->password = bcrypt($form->password);
+                }
+
+                if (! $form->password) {
+                    $form->deleteInput('password');
+                }
+            });
+
+            $form->saved(function (Form $form) {
+                return $form
+                    ->response()
+                    ->success(trans('admin.update_succeeded'))
+                    //->redirect('/');
+                    ->script('location.reload();');//保存成功后刷新页面
+            });
+
+        });
+    }
+
+
 }

+ 4 - 4
app/Admin/Controllers/BaseProductCategoryController.php

@@ -32,7 +32,7 @@ class BaseProductCategoryController extends AdminController
             $grid->column('id','ID')->bold()->sortable();
             $grid->column('name')->tree(true,true);
             $grid->column('parent_id');
-            $grid->column('baseProductParameter.name','Parameter Name');
+            $grid->column('baseProductParameter.name',admin_trans_label('parameter_name'));
             $grid->column('order')->orderable();
             $grid->column('enabled')->switch();
             $grid->column('created_at');
@@ -42,7 +42,7 @@ class BaseProductCategoryController extends AdminController
                 $filter->panel();
                 $filter->expand();
                 $filter->like('name')->width(2);
-                $filter->equal('enabled', 'Enabled')->select(config('dictionary.enabled'))->width(2);
+                $filter->equal('enabled', admin_trans_label('Enabled'))->select(config('dictionary.enabled'))->width(2);
             });
             //工具栏
             $grid->disableViewButton();
@@ -64,13 +64,13 @@ class BaseProductCategoryController extends AdminController
     {
         return Form::make(new BaseProductCategory(), function (Form $form) {
             $form->display('id', 'ID');
-            $form->select('parent_id', trans('Parent'))
+            $form->select('parent_id', admin_trans_field('parent'))
                 ->options(BaseProductCategory::selectOptions())
                 ->saving(function ($v) {
                     return (int) $v;
                 });
             $form->text('name')->required();
-            $form->select('parameter_id', 'parameter')->options(BaseProductParameter::selectOptions())->required();
+            $form->select('parameter_id', admin_trans_field('parameter_name'))->options(BaseProductParameter::selectOptions())->required();
             $form->switch('enabled')->default(1);
           //  $form->display('created_at');
           //  $form->display('updated_at');

+ 7 - 7
app/Admin/Controllers/BaseProductController.php

@@ -36,7 +36,7 @@ class BaseProductController extends AdminController
             $grid->column('id')->sortable();
             $grid->column('title');
             $grid->column('sku');
-            $grid->column('base_product_category.name','Category Name');
+            $grid->column('base_product_category.name',admin_trans_label('category_name'));
             $grid->column('issuance_date');
             $grid->column('images')->display(function ($images) {
                 $images = $images->toArray();
@@ -54,8 +54,8 @@ class BaseProductController extends AdminController
                 $filter->expand();
                 $filter->equal('sku')->width(2);
                 $filter->like('title')->width(2);
-                $filter->equal('category_id','Category')->select(BaseProductCategory::selectOptions())->width(2);
-                $filter->equal('enabled', 'Enabled')->select(config('dictionary.enabled'))->width(2);
+                $filter->equal('category_id',admin_trans_label('Category'))->select(BaseProductCategory::selectOptions())->width(2);
+                $filter->equal('enabled', admin_trans_label('Enabled'))->select(config('dictionary.enabled'))->width(2);
             });
             //排序
             $grid->model()->orderBy("is_pinned",'desc')->orderBy("order",'desc');
@@ -77,7 +77,7 @@ class BaseProductController extends AdminController
             $show->field('keywords');
             $show->field('description');
             $show->field('sku');
-            $show->field('base_product_category.name','Category Name');
+            $show->field('base_product_category.name',admin_trans_label('category_name'));
             $show->field('issuance_date');
             $show->field('parameters')->as(function ($items) {
                 if (is_array($items)) {
@@ -119,7 +119,7 @@ class BaseProductController extends AdminController
     {
         return Form::make(BaseProduct::with('images'), function (Form $form) {
             $form->display('id');
-            $form->select('category_id', 'Category Name')
+            $form->select('category_id', admin_trans_field('category_name'))
                 ->options(BaseProductCategory::selectOptions())
                 ->required();
             $form->text('title')->required();
@@ -127,12 +127,12 @@ class BaseProductController extends AdminController
             $form->textarea('description');
             $form->text('sku')->required();
             $form->date('issuance_date');
-            $form->table('parameters','Parameters', function (Form\NestedForm $table) {
+            $form->table('parameters',admin_trans_field('parameter_name'), function (Form\NestedForm $table) {
                 $table->text('key')->required();
                 $table->text('value')->required();
             });
             // 多图上传
-            $form->multipleImage('images', 'images')
+            $form->multipleImage('images', admin_trans_field('images'))
                 ->sortable() // 可拖动排序
                 ->removable() // 可移除图片
                 ->autoUpload() // 自动上传

+ 1 - 1
app/Admin/Controllers/BaseProductParameterController.php

@@ -64,7 +64,7 @@ class BaseProductParameterController extends AdminController
         return Form::make(new BaseProductParameter(), function (Form $form) {
             $form->display('id');
             $form->text('name')->required();
-            $form->table('content','Parameters', function (NestedForm $table) {
+            $form->table('content',admin_trans_field('parameter_name'), function (NestedForm $table) {
                 $table->text('key')->required();
                 $table->text('value')->required();
             })->default([

+ 3 - 3
app/Admin/Controllers/BaseVideoCategoryController.php

@@ -20,7 +20,7 @@ class BaseVideoCategoryController extends AdminController
     {
         return $content
             ->header('Video Category')
-            ->description('all')
+            ->description('')
             ->breadcrumb(['text'=>'Video Category','url'=>''])
             ->body($this->grid());
     }
@@ -47,7 +47,7 @@ class BaseVideoCategoryController extends AdminController
                 $filter->panel();
                 $filter->expand();
                 $filter->equal('name')->width(2);
-                $filter->equal('enabled', 'Enabled')->select(config('dictionary.enabled'))->width(2);
+                $filter->equal('enabled', admin_trans_label('enabled'))->select(config('dictionary.enabled'))->width(2);
             });
             //按钮
             $grid->disableViewButton();
@@ -67,7 +67,7 @@ class BaseVideoCategoryController extends AdminController
         return Form::make(new BaseVideoCategory(), function (Form $form) {
             $form->display('id');
             $form->text('name');
-            $form->select('parent_id', trans('Parent'))
+            $form->select('parent_id', admin_trans_field('parent'))
                 ->options(BaseVideoCategory::selectOptions())
                 ->saving(function ($v) {
                     return (int) $v;

+ 5 - 5
app/Admin/Controllers/BaseVideoController.php

@@ -36,7 +36,7 @@ class BaseVideoController extends AdminController
         return Grid::make(BaseVideo::with(['baseVideoCategory']), function (Grid $grid) {
             $grid->column('id')->sortable();
             $grid->column('title');
-            $grid->column('base_video_category.name','Category Name');
+            $grid->column('base_video_category.name',admin_trans_label('category_name'));
             $grid->column('cover_image')->display(function ($image) {
                 // 开始生成 HTML
                 $dataImages = [$image];
@@ -53,8 +53,8 @@ class BaseVideoController extends AdminController
                 $filter->expand();
                 $filter->equal('sku')->width(2);
                 $filter->like('title')->width(2);
-                $filter->equal('category_id','Category')->select(BaseVideoCategory::selectOptions())->width(2);
-                $filter->equal('enabled', 'Enabled')->select(config('dictionary.enabled'))->width(2);
+                $filter->equal('category_id',admin_trans_label('category'))->select(BaseVideoCategory::selectOptions())->width(2);
+                $filter->equal('enabled', admin_trans_label('enabled'))->select(config('dictionary.enabled'))->width(2);
             });
             //排序
             $grid->model()->orderBy("is_pinned",'desc')->orderBy("order",'desc');
@@ -74,7 +74,7 @@ class BaseVideoController extends AdminController
         return Show::make($id, BaseVideo::with(['baseVideoCategory']), function (Show $show) {
             $show->field('id');
             $show->field('title');
-            $show->field('base_video_category.name','Category Name');
+            $show->field('base_video_category.name',admin_trans_field('category_name'));
             $show->field('cover_image')->as(function ($image) {
                 // 开始生成 HTML
                 $dataImages = [$image];
@@ -117,7 +117,7 @@ class BaseVideoController extends AdminController
         return Form::make(new BaseVideo(), function (Form $form) {
             $form->display('id');
             $form->text('title')->required();
-            $form->select('category_id', 'Category Name')
+            $form->select('category_id', admin_trans_field('category_name'))
                 ->options(BaseVideoCategory::selectOptions())
                 ->required();
             $form->image("cover_image")

+ 16 - 15
app/Admin/Controllers/DistAdminDistributorController.php

@@ -20,7 +20,7 @@ class DistAdminDistributorController extends AdminController
     {
         return $content
             ->header('Distro Management')
-            ->description('all')
+            ->description('')
             ->breadcrumb(['text'=>'list','url'=>''])
             ->body($this->grid());
     }
@@ -32,15 +32,16 @@ class DistAdminDistributorController extends AdminController
      */
     protected function grid()
     {
+
         return Grid::make(DistAdminDistributor::with(['appearance']), function (Grid $grid) {
             $grid->column('id')->sortable();
-            $grid->column('company_name','Company Name');
+            $grid->column('company_name');
             $grid->column('site_name');
-            $grid->column('level_domain');
-            $grid->column('country');
-            $grid->column('contact_number');
-            $grid->column('service_hotline');
-            $grid->column('appearance.title' ,'appearance');
+            $grid->column('level_domain',);
+            $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');
             $grid->column('updated_at')->sortable();
@@ -48,10 +49,10 @@ class DistAdminDistributorController extends AdminController
             $grid->filter(function (Grid\Filter $filter) {
                 $filter->panel();
                 $filter->expand();
-                $filter->equal('company_name', 'company name')->width(2);
+                $filter->equal('company_name', )->width(2);
                 $filter->equal('site_name')->width(2);
                 $filter->equal('level_domain')->width(2);
-                $filter->equal('enabled', 'enabled')->select(config('dictionary.enabled'))->width(2);
+                $filter->equal('enabled', )->select(config('dictionary.enabled'))->width(2);
             });
             // 排序
             $grid->model()->orderBy("id",'desc');
@@ -75,11 +76,11 @@ class DistAdminDistributorController extends AdminController
     {
         return Show::make($id, DistAdminDistributor::with(['appearance']), function (Show $show) {
             $show->field('id');
-            $show->field('company_name','Company Name');
-            $show->field('company_address','Company Address');
+            $show->field('company_name',);
+            $show->field('company_address');
             $show->field('site_name');
             $show->field('level_domain');
-            $show->field('appearance.title' ,'appearance');
+            $show->field('appearance.title' ,admin_trans_field('appearance'));
             $show->field('country');
             $show->field('contact_number');
             $show->field('service_hotline');
@@ -107,11 +108,11 @@ class DistAdminDistributorController extends AdminController
     {
         return Form::make(new DistAdminDistributor(), function (Form $form) {
             $form->display('id');
-            $form->text('company_name', 'Company Name')->required();
-            $form->text('company_address','Company Address');
+            $form->text('company_name', )->required();
+            $form->text('company_address',);
             $form->text('site_name')->required();
             $form->text('level_domain')->required();
-            $form->select('appearance_id','select appearance')->options(DistAppearance::selectOptions())->required();
+            $form->select('appearance_id',admin_trans_field('appearance'))->options(DistAppearance::selectOptions())->required();
             $form->text('country')->required();
             $form->text('contact_number');
             $form->text('service_hotline');

+ 16 - 16
app/Admin/Controllers/DistAdminUserController.php

@@ -38,8 +38,8 @@ class DistAdminUserController extends AdminController
             $grid->column('id')->sortable();
             $grid->column('username');
             $grid->column('name');
-            $grid->column('distributor.company_name','Company Name');
-            $grid->column('distributor.level_domain','Level Domain');
+            $grid->column('distributor.company_name',admin_trans_label('company_name'));
+            $grid->column('distributor.level_domain',admin_trans_label('level_domain'));
             $grid->column('language')->using(config('dictionary.languages'));
             $grid->column('enabled')->switch();
             $grid->column('created_at');
@@ -49,9 +49,9 @@ class DistAdminUserController extends AdminController
                 $filter->panel();
                 $filter->expand();
                 $filter->equal('username')->width(2);
-                $filter->equal('name','name')->width(2);
-                $filter->like('distributor.company_name', 'Company Name')->width(2);
-                $filter->equal('enabled', 'enabled')->select(config('dictionary.enabled'))->width(2);
+                $filter->equal('name',)->width(2);
+                $filter->like('distributor.company_name', admin_trans_label('company_name'))->width(2);
+                $filter->equal('enabled', )->select(config('dictionary.enabled'))->width(2);
             });
             //排序
             $grid->model()->orderBy("id",'desc');
@@ -77,7 +77,7 @@ class DistAdminUserController extends AdminController
             $show->row(function ($show) {
                 $show->width(6)->field('id');
                 $show->width(6)->field('username');
-                $show->width(6)->field('name','name');
+                $show->width(6)->field('name');
                 $show->width(6)->field('language')->using(config('dictionary.languages'));
                 $show->width(6)->field('enabled')->using(config('dictionary.enabled'));
                 $show->width(6)->field('created_at');
@@ -86,20 +86,20 @@ class DistAdminUserController extends AdminController
 
 
             $show->row(function ($show) {
-                $show->width(6)->field('distributor.company_name', 'Company Name');
-                $show->width(6)->field('distributor.company_address','Company Address');
-                $show->width(6)->field('distributor.site_name','Site Name');
-                $show->width(6)->field('distributor.level_domain','Level Domain');
-                $show->width(6)->field('distributor.country','Country');
-                $show->width(6)->field('distributor.contact_number','Contact Number');
-                $show->width(6)->field('distributor.service_hotline','Service Hotline');
+                $show->width(6)->field('distributor.company_name', admin_trans_label('company_name'));
+                $show->width(6)->field('distributor.company_address',admin_trans_label('company_address'));
+                $show->width(6)->field('distributor.site_name',admin_trans_label('site_name'));
+                $show->width(6)->field('distributor.level_domain',admin_trans_label('level_domain'));
+                $show->width(6)->field('distributor.country',admin_trans_label('country'));
+                $show->width(6)->field('distributor.contact_number',admin_trans_label('contact_number'));
+                $show->width(6)->field('distributor.service_hotline',admin_trans_label('service_hotline'));
                 $show->width(6)->field('distributor.whats_app','whatsApp');
                 $show->width(6)->field('distributor.facebook','Facebook');
                 $show->width(6)->field('distributor.instagram','Instagram');
                 $show->width(6)->field('distributor.youtube','Youtube');
                 $show->width(6)->field('distributor.linkedin','Linkedin');
                 $show->width(6)->field('distributor.tiktok','Tiktok');
-                $show->width(6)->field('distributor.remark','Remark');
+                $show->width(6)->field('distributor.remark',admin_trans_label('remark'));
             });
 
             // 按钮
@@ -120,9 +120,9 @@ class DistAdminUserController extends AdminController
             $form->password('password')->customFormat(function ($v) {
                 return "";
             });
-            $form->text('name','name')->required();
+            $form->text('name',)->required();
             $form->select('language')->options(config('dictionary.languages'))->required();
-            $form->selectTable('dist_id', 'Select Distributor')
+            $form->selectTable('dist_id', admin_trans_label('distributor'))
                 ->title('distId')
                 ->from(DistDistributorTable::make());
             $form->switch('enabled')->default(1);

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

@@ -21,7 +21,7 @@ class DistAppearanceController extends AdminController
     {
         return $content
             ->header('Appearance')
-            ->description('all')
+            ->description('')
             ->breadcrumb(['text'=>'list','url'=>''])
             ->body($this->grid());
     }
@@ -61,7 +61,7 @@ class DistAppearanceController extends AdminController
                 $filter->panel();
                 $filter->expand();
                 $filter->equal('title')->width(2);
-                $filter->equal('enabled', 'enabled')->select(config('dictionary.enabled'))->width(2);
+                $filter->equal('enabled', )->select(config('dictionary.enabled'))->width(2);
             });
             // 操作
             $grid->actions(function (Grid\Displayers\Actions $actions) {

+ 21 - 15
app/Admin/Controllers/DistAppearanceTemplateController.php

@@ -25,18 +25,22 @@ class DistAppearanceTemplateController extends AdminController
         if ($request->isMethod('post') || false == empty($request->get('act'))) {
             if($request->get('act') == 'tree') {
                 //获取代码树形结构
-                $appearance_id = $request->get('appearance_id');
-                $dist_id = $request->get('dist_id');
-                return $this->showTree($appearance_id, $dist_id);
+                $appearanceId = $request->get('appearance_id');
+                $distId = $request->get('dist_id');
+                return $this->showTree($appearanceId, $distId);
             } elseif ($request->get('act') == 'content') {
                 //得到文件内容
-                $id = $request->get('id');
-                return DistAppearanceTemplate::getContent($id);
+                $appearanceId = $request->get('appearance_id');
+                $distId = $request->get('dist_id');
+                $templateCode = $request->get('id');
+                return DistAppearanceTemplate::getContent($appearanceId,$distId,$templateCode);
             } elseif ($request->get('act') == 'content_save') {
                 //保存文件内容
-                $template_id = $request->get('template_id');
+                $appearanceId = $request->get('appearance_id');
+                $distId = $request->get('dist_id');
+                $templateCode = $request->get('template_code');
                 $content = $request->get('content');
-                return DistAppearanceTemplate::saveContent($template_id, $content);
+                return DistAppearanceTemplate::saveContent($appearanceId,$distId,$templateCode, $content);
             }
         }
         $leftForm = new AceLeft();
@@ -48,18 +52,20 @@ class DistAppearanceTemplateController extends AdminController
     /*
      * 显示代码树
      */
-    private function showTree($appearance_id, $dist_id) {
-        $appearance_id = empty($appearance_id) ? 0 : $appearance_id;
-        $dist_id = empty($dist_id) ? 0 : $dist_id;
-        $tree = DistAppearanceTemplate::getTemplateTree($appearance_id, $dist_id);
+    private function showTree($appearanceId, $distId) {
+        $appearanceId = empty($appearanceId) ? 0 : $appearanceId;
+        $distId = empty($distId) ? 0 : $distId;
+        $tree = DistAppearanceTemplate::getTemplateTree($appearanceId, $distId);
         $html = '<ul class="list-group list-group-flush">';
         foreach ($tree as $key => $value) {
             $fa = 'fa-angle-down';
             $file_name = $value['file_name'];
-            if ($value['file_type'] == 1) {
+            if (empty($value['children'])) {
+                //文件
                 $fa = 'fa-angle-right';
-                $file_name = '<a href="#" class="file-action" file_id="'. $value['id'].'" title="'.$file_name.'">'. $file_name.'</a>';
+                $file_name = '<a href="#" class="file-action" file_id="'. $value['template_code'].'" title="'.$file_name.'">'. $file_name.'</a>';
             }  else {
+                //文件夹
                 $file_name = '<span class="custom-blue-bold">'. $file_name.'</span>';
             }
             $html .= '<li class="list-group-item has-submenu">';
@@ -78,9 +84,9 @@ class DistAppearanceTemplateController extends AdminController
             foreach ($value['children'] as $k => $v) {
                 $fa = 'fa-angle-down';
                 $file_name = $v['file_name'];
-                if ($v['file_type'] == 1) {
+                if (empty($v['children'])) {
                     $fa = 'fa-angle-right';
-                    $file_name = '<a href="#" class="file-action" file_id="'. $v['id'].'" title="'.$file_name.'">'. $file_name.'</a>';
+                    $file_name = '<a href="#" class="file-action" file_id="'. $v['template_code'].'" title="'.$file_name.'">'. $file_name.'</a>';
                 } else {
                     $file_name = '<span class="custom-blue-bold">'. $file_name.'</span>';
                 }

+ 9 - 9
app/Admin/Controllers/DistAppearanceVariableController.php

@@ -29,13 +29,13 @@ class DistAppearanceVariableController extends AdminController
      */
     protected function grid()
     {
-        $templateId = isset($_GET['templateId']) ? intval($_GET['templateId']) : 0;
+        $templateCode = isset($_GET['templateCode']) ? $_GET['templateCode'] : 0;
         $appearanceId = isset($_GET['appearanceId']) ? intval($_GET['appearanceId']) : 0;
         $distId = isset($_GET['distId']) ? intval($_GET['distId']) : 0;
         if (empty($appearanceId)) {
             die(' <h3>Please select the theme.<h3>');
         }
-        return Grid::make(DistAppearanceVariable::with(['distributor','appearance']), function (Grid $grid) use ($templateId, $appearanceId, $distId) {
+        return Grid::make(DistAppearanceVariable::with(['distributor','appearance']), function (Grid $grid) use ($templateCode, $appearanceId, $distId) {
             $grid->column('id')->sortable();
             $grid->column('distributor.company_name','Distributor Name')->display(function ($company_name) {
                 if (empty($company_name)) {
@@ -49,7 +49,7 @@ class DistAppearanceVariableController extends AdminController
             //变量类型
             $grid->column('variable_type')->using(['1' => 'text', '2' => 'textarea', '3' => 'json']);
             //是否是站点变量
-            $grid->column('template_id','site variable')->display(function ($templateIds) {
+            $grid->column('templateCode','site variable')->display(function ($templateIds) {
                 if ($templateIds == 0) {
                     return 'Yes';
                 } else {
@@ -66,9 +66,9 @@ class DistAppearanceVariableController extends AdminController
             $grid->showQuickEditButton();
             $grid->enableDialogCreate();
             $grid->disableEditButton();
-            $addUrl = '?templateId='. $templateId . '&appearanceId='. $appearanceId . '&distId='. $distId;
+            $addUrl = '?templateCode='. $templateCode . '&appearanceId='. $appearanceId . '&distId='. $distId;
             //排序
-            $grid->model()->where('appearance_id', $appearanceId)->where('dist_id', $distId)->whereIn('template_id', [0, $templateId])->orderBy("id",'asc');
+            $grid->model()->where('appearance_id', $appearanceId)->where('dist_id', $distId)->whereIn('template_code', [0, $templateCode])->orderBy("id",'asc');
             //增加js 向新增按钮添加参数还有编辑按钮添加参数
 
             Admin::script(
@@ -129,14 +129,14 @@ JS
      */
     protected function form()
     {
-        $templateId = isset($_GET['templateId']) ? intval($_GET['templateId']) : 0;
+        $templateCode = isset($_GET['templateCode']) ? $_GET['templateCode'] : 0;
         $appearanceId = isset($_GET['appearanceId']) ? intval($_GET['appearanceId']) : 0;
         $distId = isset($_GET['distId']) ? intval($_GET['distId']) : 0;
-        return Form::make(new DistAppearanceVariable(), function (Form $form) use ($templateId, $appearanceId, $distId) {
+        return Form::make(new DistAppearanceVariable(), function (Form $form) use ($templateCode, $appearanceId, $distId) {
             $form->display('id');
             $form->hidden('appearance_id')->value($appearanceId);
             $form->hidden('dist_id')->value($distId);
-            $form->hidden('template_id')->value($templateId);
+            $form->hidden('template_code')->value($templateCode);
             $form->hidden('variable_code');
             //编辑时当template_id为0时,site_variable为默认值1,否则为0
             $variableDefaul = 0;
@@ -157,7 +157,7 @@ JS
 
             $form->submitted(function (Form $form) {
                 if ($form->site_variable == 1) {
-                    $form->template_id = 0;
+                    $form->template_code = 0;
                 }
                 if ($form->isCreating()) {
                     $form->variable_code = uniqueCode();

+ 4 - 4
app/Admin/Controllers/DistInquiryController.php

@@ -43,7 +43,7 @@ class DistInquiryController extends AdminController
             $grid->column('email');
             $grid->column('consulting_products');
             //$grid->column('distributor.username', 'Distributor Username');
-            $grid->column('distributor.company_name', 'Distributor Company Name');
+            $grid->column('distributor.company_name', admin_trans_label('distributor_company_name'));
             $grid->column('status')->using(config('dictionary.inquiryStatus'))->label([
                 0 => 'default',
                 1 => 'info',
@@ -55,10 +55,10 @@ class DistInquiryController extends AdminController
             $grid->filter(function (Grid\Filter $filter) {
                 $filter->panel();
                 $filter->expand();
-                $filter->equal('order_noumber')->width(2);
+                $filter->equal('order_number')->width(2);
                 $filter->equal('company_name')->width(2);
                 $filter->equal('customer_name')->width(2);
-                $filter->like('distributor.name','Distributor Company Name')->width(2);
+                $filter->like('distributor.name',admin_trans_label('distributor_company_name'))->width(2);
             });
             //排序
             $grid->model()->orderBy("id",'desc');
@@ -96,7 +96,7 @@ class DistInquiryController extends AdminController
             $show->field('ip_address');
             $show->field('status')->using(config('dictionary.inquiryStatus'));
             $show->field('allocate_time');
-            $show->field('distributor.company_name','Distributor Company Name');
+            $show->field('distributor.company_name',admin_trans_label('distributor_company_name'));
             $show->field('content');
             $show->field('created_at');
             $show->field('updated_at');

+ 53 - 34
app/Admin/Repositories/DistAppearanceTemplate.php

@@ -14,9 +14,11 @@ class DistAppearanceTemplate extends EloquentRepository
      */
     protected $eloquentClass = Model::class;
 
-    public static function getContent($id)
+    public static function getContent($appearanceId,$distId,$templateCode)
     {
-        $data = Model::where('id', $id)->first();
+        $appearanceId = intval($appearanceId);
+        $distId = intval($distId);
+        $data = Model::where('appearance_id', $appearanceId)->where('dist_id', $distId)->where('template_code', $templateCode)->first();
         if ($data) {
             return $data->content;
         }
@@ -24,35 +26,54 @@ class DistAppearanceTemplate extends EloquentRepository
     }
     public static function getTemplateTree($appearance_id,$dist_id)
     {
-        $data = Model::where('appearance_id', $appearance_id)->where('dist_id', $dist_id)->orderBy('file_type', 'desc')->orderBy('file_path', 'asc')->get(['id', 'file_name', 'parent_id','file_type','file_path']);
-        return self::buildTree($data->toArray(),0);
+        $data = Model::where('appearance_id', $appearance_id)->where('dist_id', $dist_id)->orderBy('file_path', 'asc')->get(['id', 'file_name', 'file_path','template_code']);
+        return self::buildTree($data->toArray());
     }
 
-    public static function buildTree(array $elements, $parentId = 0) {
-        $branch = [];
+    public static function buildTree(array $data) {
+        $result = [];
+        foreach ($data as $item) {
+            // Extract the path and file information
+            $path = $item['file_path'];
+            $id = $item['id'];
+            $file_name = $item['file_name'];
 
-        foreach ($elements as $element) {
-            if ($element['parent_id'] == $parentId) {
-                $children = self::buildTree($elements, $element['id']);
-                if ($children) {
-                    $element['children'] = $children;
-                }
-                $branch[] = $element;
+            // Initialize a new entry for this path if it doesn't exist
+            if (!isset($result[$path])) {
+                $result[$path] = [
+                    'id' => 0, // default, as there's no parent ID
+                    'dist_id' => 0, // assuming dist_id for path
+                    'file_name' => basename($path), // using the directory name for file_name
+                    'children' => []
+                ];
             }
+
+            // Add the file to the children of the respective path
+            $result[$path]['children'][] = [
+                'id' => $id,
+                'dist_id' => 0, // assuming dist_id
+                'file_name' => $file_name,
+                'template_code' => $item['template_code']
+            ];
         }
 
-        return $branch;
+        $result = array_values($result);
+        return $result;
     }
 
     /*
      * 保存模板内容
      */
-    public static function saveContent($id, $content)
+    public static function saveContent($appearanceId,$distId,$templateCode, $content)
     {
-        $data = Model::where('id', $id)->first();
+        $appearanceId = intval($appearanceId);
+        $distId = intval($distId);
+        $data = Model::where('dist_id', $distId)->where('appearance_id', $appearanceId)->where('appearance_id', $appearanceId)->where('template_code', $templateCode)->first();
         if ($data) {
             $data->content = $content;
             $data->save();
+            //加入模版修改日志
+            DistAppearanceTemplateLog::insertLog($appearanceId,$distId,$templateCode,$content);
             return true;
         }
         return false;
@@ -70,33 +91,31 @@ class DistAppearanceTemplate extends EloquentRepository
     /*
      * 插入模版文件夹
      */
-    public static function insertTemplateFolder($distId,$appearanceId,$filePath,$fileName,$parentId) {
-        $self = new self();
-        $model = $self->model();
-        $model->dist_id = $distId;
-        $model->appearance_id = $appearanceId;
-        $model->file_name = $fileName;
-        $model->parent_id = $parentId;
-        $model->file_type = 0;
-        $model->file_path = $filePath;
-        $model->template_code = uniqueCode('');
-        $model->save();
-        // 获取插入数据的 ID
-        $insertedId = $model->id;
-        return $insertedId;
-    }
+//    public static function insertTemplateFolder($distId,$appearanceId,$filePath,$fileName,$parentId) {
+//        $self = new self();
+//        $model = $self->model();
+//        $model->dist_id = $distId;
+//        $model->appearance_id = $appearanceId;
+//        $model->file_name = $fileName;
+//        $model->parent_id = $parentId;
+//        $model->file_type = 0;
+//        $model->file_path = $filePath;
+//        $model->template_code = uniqueCode('');
+//        $model->save();
+//        // 获取插入数据的 ID
+//        $insertedId = $model->id;
+//        return $insertedId;
+//    }
 
     /*
      * 插入模版文件内容
      */
-    public static function insertTemplateContent($distId,$appearanceId,$filePath,$fileName,$parentId,$content) {
+    public static function insertTemplateContent($distId,$appearanceId,$filePath,$fileName,$content) {
         $self = new self();
         $model = $self->model();
         $model->dist_id = $distId;
         $model->appearance_id = $appearanceId;
         $model->file_name = $fileName;
-        $model->parent_id = $parentId;
-        $model->file_type = 1;
         $model->file_path = $filePath;
         $model->content = $content;
         $model->template_code = uniqueCode('');

+ 32 - 0
app/Admin/Repositories/DistAppearanceTemplateLog.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Admin\Repositories;
+
+use App\Models\DistAppearanceTemplateLog as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistAppearanceTemplateLog extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+
+    /*
+     *  添加模版修改日志
+     */
+    public static function insertLog($appearanceId,$distId,$templateCode,$content)
+    {
+        $model = new Model();
+        $model->dist_id = $distId;
+        $model->appearance_id = $appearanceId;
+        $model->template_code = $templateCode;
+        $model->content = $content;
+        $model->version = generateVersionNumber();
+        $model->save();
+
+    }
+
+}

+ 2 - 0
app/Admin/Repositories/DistAppearanceVariable.php

@@ -44,4 +44,6 @@ class DistAppearanceVariable extends EloquentRepository
     }
 
 
+
+
 }

+ 7 - 0
app/Admin/bootstrap.php

@@ -38,3 +38,10 @@ app()->singleton(Content::class, function () use ($newContent) {
 // 覆盖默认配置
 config(['admin' => user_admin_config()]);
 config(['app.locale' => config('admin.lang') ?: config('app.locale')]);
+
+
+// 获取当前登录用户
+$user = Admin::guard()->check() ? Admin::user() : null;
+
+// 设置应用程序的本地化
+config(['app.locale' => $user && $user->language ? $user->language : config('app.locale')]);

+ 3 - 29
app/Models/DistAppearanceTemplate.php

@@ -24,37 +24,11 @@ class DistAppearanceTemplate extends Model
         }
         //复制
         DB::statement("
-INSERT INTO `dist_appearance_template` (`dist_id`, `appearance_id`, `file_name`, `file_path`, `content`, `created_at`, `updated_at`, `parent_id`, `file_type`,`template_code`)
-SELECT {$distId}, `appearance_id`, `file_name`, `file_path`, `content`, NOW(), NOW(), `parent_id`, `file_type`,`template_code`
+INSERT INTO `dist_appearance_template` (`dist_id`, `appearance_id`, `file_name`, `file_path`, `content`, `created_at`, `updated_at`,  `template_code`)
+SELECT {$distId}, `appearance_id`, `file_name`, `file_path`, `content`, NOW(), NOW(), `template_code`
 FROM `dist_appearance_template`
 WHERE `dist_id` = 0 AND `appearance_id` = {$appearanceId};
         ");
-        //更新parent_id
-        $rows = self::select('id','file_path','file_name','parent_id')->where('dist_id',$distId)->where('appearance_id',$appearanceId)->get();
-        if ($rows) {
-            $updateData = [];
-            foreach ($rows as $row) {
-                $parentId = $row->parent_id;
-                if ($parentId > 0) {
-                    $newParentId = self::findParentId($rows, $row->file_path, $row->file_name);
-                    if ($newParentId > -1) {
-                        $updateData[] = ['id' => $row->id, 'parent_id' => $newParentId];
-                    }
-                }
-            }
-            //批量更新
-            if ($updateData) {
-                self::upsert($updateData,['id'],['parent_id']);
-            }
-        }
-    }
-    private static function findParentId(&$rows,$filePath,$fileName) {
-        foreach ($rows as $row) {
-            $filePath = str_replace('/'.$fileName,'',$filePath);
-            if ($row->file_path == $filePath) {
-                return $row->id;
-            }
-        }
-        return -1;
     }
+
 }

+ 17 - 0
app/Models/DistAppearanceTemplateLog.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Models;
+
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\DB;
+
+class DistAppearanceTemplateLog extends Model
+{
+	use HasDateTimeFormatter;
+    protected $table = 'dist_appearance_template_log';
+
+
+
+
+}

+ 3 - 39
app/Models/DistAppearanceVariable.php

@@ -44,47 +44,11 @@ class DistAppearanceVariable extends Model
         }
         //复制
         DB::statement("
-INSERT INTO `dist_appearance_variable` (`dist_id`, `appearance_id`, `variable_name`, `variable_value`, `variable_type`, `created_at`, `updated_at`, `template_id`,`variable_code`)
-SELECT {$distId}, `appearance_id`, `variable_name`, `variable_value`, `variable_type`, NOW(), NOW(), `template_id`,`variable_code`
+INSERT INTO `dist_appearance_variable` (`dist_id`, `appearance_id`, `variable_name`, `variable_value`, `variable_type`, `created_at`, `updated_at`, `template_code`,`variable_code`)
+SELECT {$distId}, `appearance_id`, `variable_name`, `variable_value`, `variable_type`, NOW(), NOW(), `template_code`,`variable_code`
 FROM `dist_appearance_variable`
 WHERE `dist_id` = 0 AND `appearance_id` = {$appearanceId};
         ");
-        //更新模版ID
-        $tmpModel = new DistAppearanceTemplate();
-        $tmpRow = $tmpModel->select('id','dist_id','file_path','file_name','parent_id')->wherein('dist_id',[0,$distId])->where('appearance_id',$appearanceId)->get();
-        $variableRows = self::select('id','dist_id','appearance_id','variable_name','template_id')->where('dist_id', $distId)->where('appearance_id', $appearanceId)->get();
-        if ($variableRows) {
-            $updateData = [];
-            foreach ($variableRows as $row) {
-                if ($row->template_id > 0) {
-                    $newTemplateId = self::findTemplateId($row->template_id,$tmpRow);
-                    if ($newTemplateId > -1) {
-                        $updateData[] = ['id' => $row->id, 'template_id' => $newTemplateId];
-                    }
-                }
-            }
-            //批量更新
-            if ($updateData) {
-                self::upsert($updateData,['id'],['template_id']);
-            }
-        }
-    }
-    private static function findTemplateId($oldTemplateId,&$tmpRow)
-    {
-        if (!$tmpRow) {return -1;}
-        $oldRow = null;
-        foreach ($tmpRow as $row) {
-            if ($row->id == $oldTemplateId && $row->dist_id == 0) {
-                $oldRow = $row;
-            }
-        }
-        if ($oldRow) {
-            foreach ($tmpRow as $row) {
-                if ($oldRow->file_path == $row->file_path && $row->dist_id > 0) {
-                    return $row->id;
-                }
-            }
-        }
-        return -1;
     }
+
 }

+ 25 - 0
app/helpers.php

@@ -111,3 +111,28 @@ if (!function_exists('uniqueCode')) {
     }
 }
 
+if (!function_exists('generateVersionNumber')) {
+    /*
+     * 12位版本号
+     */
+    function generateVersionNumber()
+    {
+        // 获取当前的年、月、日
+        $year = date('y'); // 年份的最后两位
+        $month = date('m'); // 月份,两位数字
+        $day = date('d'); // 日期,两位数字
+        // 获取当前的毫秒级时间戳
+        $microtime = microtime(true);
+        $milliseconds = round(($microtime - floor($microtime)) * 1000);
+        // 将毫秒级时间戳转换为 6 位数字
+        $milliseconds = str_pad($milliseconds, 3, '0', STR_PAD_LEFT);
+        // 获取当前的时间戳(秒级)
+        $timestamp = time();
+        // 将时间戳转换为 6 位数字(如果需要更精确的时间戳,可以使用毫秒级时间戳)
+        $timestamp = str_pad($timestamp % 1000000, 6, '0', STR_PAD_LEFT);
+        // 组合成 12 位版本号
+        $versionNumber = $year . $month . $day. $timestamp. $milliseconds ;
+        return $versionNumber;
+    }
+}
+

+ 0 - 26
lang/en/dist-admin-distributor.php

@@ -1,26 +0,0 @@
-<?php 
-return [
-    'labels' => [
-        'DistAdminDistributor' => 'DistAdminDistributor',
-        'dist-admin-distributor' => 'DistAdminDistributor',
-    ],
-    'fields' => [
-        'country' => 'country',
-        'contact_number' => 'contact_number',
-        'service_hotline' => 'service_hotline',
-        'whats_app' => 'whats_app',
-        'facebook' => 'facebook',
-        'instagram' => 'instagram',
-        'youtube' => 'youtube',
-        'linkedin' => 'linkedin',
-        'tiktok' => 'tiktok',
-        'site_name' => 'site_name',
-        'level_domain' => 'level_domain',
-        'remark' => 'remark',
-        'company_address' => '公司地址',
-        'company_name' => '公司名称',
-        'enabled' => 'enabled',
-    ],
-    'options' => [
-    ],
-];

+ 0 - 18
lang/en/dist-admin-user.php

@@ -1,18 +0,0 @@
-<?php
-return [
-    'labels' => [
-        'DistAdminUser' => 'DistAdminUser',
-        'dist-admin-user' => 'DistAdminUser',
-    ],
-    'fields' => [
-        'username' => 'username',
-        'password' => 'password',
-        'name' => 'name',
-        'avatar' => 'avatar',
-        'remember_token' => 'remember_token',
-        'language' => 'language',
-        'enabled' => 'enabled',
-    ],
-    'options' => [
-    ],
-];

+ 0 - 16
lang/en/dist-appearance-template.php

@@ -1,16 +0,0 @@
-<?php 
-return [
-    'labels' => [
-        'DistAppearanceTemplate' => 'DistAppearanceTemplate',
-        'dist-appearance-template' => 'DistAppearanceTemplate',
-    ],
-    'fields' => [
-        'dist_id' => 'dist_id',
-        'appearance_id' => 'appearance_id',
-        'file_name' => 'file_name',
-        'file_path' => 'file_path',
-        'content' => 'content',
-    ],
-    'options' => [
-    ],
-];

+ 0 - 16
lang/en/dist-appearance-variable.php

@@ -1,16 +0,0 @@
-<?php 
-return [
-    'labels' => [
-        'DistAppearanceVariable' => 'DistAppearanceVariable',
-        'dist-appearance-variable' => 'DistAppearanceVariable',
-    ],
-    'fields' => [
-        'dist_id' => 'dist_id',
-        'appearance_id' => 'appearance_id',
-        'variable_name' => 'variable_name',
-        'variable_value' => 'variable_value',
-        'variable_type' => 'variable_type',
-    ],
-    'options' => [
-    ],
-];

+ 0 - 16
lang/en/dist-appearance.php

@@ -1,16 +0,0 @@
-<?php 
-return [
-    'labels' => [
-        'DistAppearance' => 'DistAppearance',
-        'dist-appearance' => 'DistAppearance',
-    ],
-    'fields' => [
-        'title' => 'title',
-        'cover_image' => 'cover_image',
-        'describe' => 'describe',
-        'order' => 'order',
-        'enabled' => 'enabled',
-    ],
-    'options' => [
-    ],
-];

+ 0 - 24
lang/en/dist-inquiry.php

@@ -1,24 +0,0 @@
-<?php 
-return [
-    'labels' => [
-        'Dist_inquiry' => 'Dist_inquiry',
-        'dist-inquiry' => 'Dist_inquiry',
-    ],
-    'fields' => [
-        'order_noumber' => 'order_noumber',
-        'whats_app' => 'whats_app',
-        'company_name' => 'company_name',
-        'customer_name' => 'customer_name',
-        'email' => 'email',
-        'consulting_products' => 'consulting_products',
-        'freight_forwarder' => 'freight_forwarder',
-        'business_model' => 'business_model',
-        'ip_address' => 'ip_address',
-        'status' => 'status',
-        'allocate_time' => 'allocate_time',
-        'content' => 'content',
-        'dist_user_id' => 'dist_user_id',
-    ],
-    'options' => [
-    ],
-];

+ 90 - 8
lang/en/global.php

@@ -1,14 +1,96 @@
 <?php
-
-
 return [
+    'fields' => [
+        'id'                    => 'ID',
+        'name'                  => 'Name',
+        'username'              => 'Username',
+        'email'                 => 'Email',
+        'http_path'             => 'Http Path',
+        'password'              => 'Password',
+        'password_confirmation' => 'Password Confirmation',
+        'created_at'            => 'Creation Time',
+        'updated_at'            => 'Update Time',
+        'permissions'           => 'Permissions',
+        'slug'                  => 'Slug',
+        'user'                  => 'User',
+        'order'                 => 'Order',
+        'ip'                    => 'IP',
+        'method'                => 'Method',
+        'uri'                   => 'URI',
+        'roles'                 => 'Roles',
+        'path'                  => 'Path',
+        'input'                 => 'Input',
+        'type'                  => 'Type',
+        'productslist'          => 'Product List',
+        'title'                 => 'Product Title',
+        'keywords'              => 'Keywords',
+        'description'           => 'Description',
+        'sku'                   => 'Product SKU',
+        'category_id'           => 'Category ID',
+        'issuance_date'         => 'Release Date',
+        'enabled'               => 'Enabled',
+        'content'               => 'Content',
+        'parameters'            => 'Product Parameters',
+        'is_pinned'             => 'Pinned',
+        'parent_id'             => 'Parent ID',
+        'remark'                => 'Remark',
+        'parameter_id'          => 'Parameter ID',
+        'products_list'         => 'Product List',
+        'images'                => 'Images',
+        'parent'                => 'Parent',
+        'key'                   => 'Parameter Name',
+        'value'                 => 'Parameter Value',
+        'cover_image'           => 'Cover Image',
+        'category_name'         => 'Category Name',
+        'parameter_name'        => 'Parameter Name',
+        'video_url'             => 'Video URL',
+        'contact_number'        => 'Contact Number',
+        'service_hotline'       => 'Service Hotline',
+        'site_name'             => 'Site Name',
+        'language'              => 'Language',
+        'company_name'          => 'Company Name',
+        'level_domain'          => 'Domain',
+        'country'               => 'Country',
+        'appearance'            => 'Appearance',
+        'company_address'       => 'Company Address',
+        'order_number'          => 'Order Number',
+        'customer_name'         => 'Customer Name',
+        'consulting_products'   => 'Consulting Products',
+        'status'                => 'Status',
+        'allocate_time'         => 'Allocation Time',
+        'freight_forwarder'     => 'Freight Forwarder',
+        'business_model'        => 'Business Model',
+        'ip_address'            => 'IP Address',
+        'folder'                => 'Folder Name',
+        'imported'              => 'Imported',
+        'describe'              => 'Description',
+    ],
     'labels' => [
-        'category_name' => 'Category Name',
-        'parameter_name'=> 'Parameter Name',
-        'order_tips' => 'Enter a number. The higher the number, the higher the ranking.',
-        'cover_image' => 'Cover Image',
-        'video_url' => 'Video Url',
-        'select_products_to_import' => 'Select products to import.',
+        'list'         => 'List',
+        'edit'         => 'Edit',
+        'detail'       => 'Detail',
+        'create'       => 'Create',
+        'root'         => 'Root',
+        'scaffold'     => 'Scaffold',
+        'category'     => 'Category',
+        'enabled'      => 'Enabled',
+        'Yes'          => 'Yes',
+        'No'           => 'No',
+        'order_tips'   => 'Please enter a number, the larger the number, the higher the rank in the frontend display',
+        'cover_image'  => 'Cover Image',
+        'video_url'    => 'Video URL',
+        'site_name'    => 'Site Name',
+        'company_name' => 'Company Name',
+        'level_domain' => 'Domain',
+        'distributor'  => 'Distributor',
+        'country'      => 'Country',
+        'contact_number' => 'Contact Number',
+        'service_hotline' => 'Service Hotline',
+        'remark'       => 'Remark',
+        'distributor_company_name' => 'Distributor Company Name',
+        'select_products_to_import' => 'Select products and click the import button.',
+        'company_address' => 'Company Address',
+        'import_tmpl'  => 'Import Template'
     ],
     'options' => [
         //

+ 48 - 18
lang/zh_CN/global.php

@@ -29,7 +29,7 @@ return [
         'sku'                   => '商品sku',
         'category_id'           => '分类ID',
         'issuance_date'         => '发布日期',
-        'enabled'               => '启用-1',
+        'enabled'               => '是否启用',
         'content'               => '内容',
         'parameters'            => '产品参数',
         'is_pinned'             => '置顶',
@@ -42,26 +42,56 @@ return [
         'key'                   => '参数名',
         'value'                 => '参数值',
         'cover_image'           => '封面图片',
-
-
+        'category_name'         => '分类名称',
+        'parameter_name'        => '参数名称',
+        'video_url'             => '视频URL地址',
+        'contact_number'        => '联系电话',
+        'service_hotline'       => '服务热线',
+        'site_name'             => '站点名称',
+        'language'              => '语言',
+        'company_name'          => '公司名称',
+        'level_domain'          => '域名',
+        'country'               => '国家',
+        'appearance'            => '外观',
+        'company_address'       => '公司地址',
+        'order_number'          => '订单号',
+        'customer_name'         => '客户名称',
+        'consulting_products'   => '咨询产品',
+        'status'                => '状态',
+        'allocate_time'         => '分配时间',
+        'freight_forwarder'     => '运输商名称',
+        'business_model'        => '业务模式',
+        'ip_address'            => 'IP地址',
+        'folder'                => '文件夹名称',
+        'imported'              => '是否导入',
+        'describe'              => '描述',
     ],
     'labels' => [
-        'list'     => '列表',
-        'edit'     => '编辑',
-        'detail'   => '详细',
-        'create'   => '创建',
-        'root'     => '顶级',
-        'scaffold' => '代码生成器',
-        'category_name'    => '分类名称',
-        'parameter_name'        => '参数名称',
-        'order_tips'       => '请输入数字,数字越大前台展示排名越靠前',
-        'category'              => '分类',
-        'enabled'               => '是否启用',
-        "Yes" => "是",
-        "No" => "否",
-        'cover_image' => '封面图片',
-        'video_url' => '视频URL地址',
+        'list'         => '列表',
+        'edit'         => '编辑',
+        'detail'       => '详细',
+        'create'       => '创建',
+        'root'         => '顶级',
+        'scaffold'     => '代码生成器',
+        'category'     => '分类',
+        'enabled'      => '是否启用',
+        'Yes'          => '是',
+        'No'           => '否',
+        'order_tips'   => '请输入数字,数字越大前台展示排名越靠前',
+        'cover_image'  => '封面图片',
+        'video_url'    => '视频URL地址',
+        'site_name'    => '站点名称',
+        'company_name' => '公司名称',
+        'level_domain' => '域名',
+        'distributor'  => '分销商',
+        'country'      => '国家',
+        'contact_number' => '联系电话',
+        'service_hotline' => '服务热线',
+        'remark'       => '备注',
+        'distributor_company_name' => '分销商名称',
         'select_products_to_import' => '选择产品后点击导入按钮.',
+        'company_address' => '公司地址',
+        'import_tmpl'  => '导入模板'
     ],
     'options' => [
         //

+ 8 - 0
lang/zh_CN/menu.php

@@ -21,5 +21,13 @@ return [
         'video_category'       => '视频分类',
         'video_management'     => '视频管理',
         'import_product'     => '产品导入',
+        'base_product'    => '基础产品',
+        'template'    => '模板',
+        'template_edit'    => '模板编辑',
+        'site_management'    => '站点管理',
+        'distro_management'    => '分销商管理',
+        'users_management'    => '用户管理',
+        'inquiry_management'    => '询盘管理',
+        'appearance'    => '外观管理',
     ],
 ];

+ 47 - 9
lang/zh_TW/global.php

@@ -5,14 +5,14 @@ return [
         'id'                    => 'ID',
         'name'                  => '名稱',
         'username'              => '用戶名',
-        'email'                 => '信箱',
+        'email'                 => '電郵',
         'http_path'             => 'HTTP路徑',
         'password'              => '密碼',
         'password_confirmation' => '確認密碼',
-        'created_at'            => '建時間',
+        'created_at'            => '建時間',
         'updated_at'            => '更新時間',
         'permissions'           => '權限',
-        'slug'                  => '標',
+        'slug'                  => '標',
         'user'                  => '用戶',
         'order'                 => '排序',
         'ip'                    => 'IP',
@@ -22,20 +22,58 @@ return [
         'path'                  => '路徑',
         'input'                 => '輸入',
         'type'                  => '類型',
+        'productslist'          => '產品列表',
+        'title'                 => '產品標題',
+        'keywords'              => '關鍵字',
+        'description'           => '描述',
+        'sku'                   => '商品sku',
+        'category_id'           => '分類ID',
+        'issuance_date'         => '發布日期',
+        'enabled'               => '啟用',
+        'content'               => '內容',
+        'parameters'            => '產品參數',
+        'is_pinned'             => '置顶',
+        'parent_id'             => '上級ID',
+        'remark'                => '備註',
+        'parameter_id'          => '參數',
+        'products_list'         => '產品列表',
+        'images'                => '圖片',
+        'parent'                => '上級',
+        'key'                   => '參數名',
+        'value'                 => '參數值',
+        'cover_image'           => '封面圖片',
+        'category_name'         => '分類名稱',
+        'parameter_name'        => '參數名稱',
+        'video_url'             => '視頻URL地址',
+        'contact_number'        => '聯繫電話',
+        'service_hotline'       => '服務熱線',
     ],
     'labels' => [
         'list'     => '列表',
         'edit'     => '編輯',
         'detail'   => '詳細',
         'create'   => '創建',
-        'root'     => 'root',
+        'root'     => '頂級',
         'scaffold' => '代碼生成器',
+        'category_name'         => '分類名稱',
+        'parameter_name'        => '參數名稱',
+        'order_tips'            => '請輸入數字,數字越大前台展示排名越靠前',
+        'category'              => '分類',
+        'enabled'               => '是否啟用',
+        "Yes" => "是",
+        "No" => "否",
+        'cover_image'           => '封面圖片',
+        'video_url'             => '視頻URL地址',
+        'select_products_to_import' => '選擇產品後點擊導入按鈕.',
+        'company_name'          => '公司名稱',
+        'site_name'             => '站點名稱',
+        'level_domain'          => '域名',
+        'country'               => '國家',
+        'contact_number'        => '聯繫電話',
+        'service_hotline'       => '服務熱線',
+        'appearance'            => '外觀'
     ],
-
     'options' => [
-        'permissions' => [
-
-        ],
+        //
     ],
-
 ];

+ 33 - 5
resources/views/admin/pages-custom/ace.blade.php

@@ -53,8 +53,9 @@
         </div>
         <div class="col-10 main-panel"> <!-- 右侧80% -->
             <div class="main-panel-header">
-                <button type="button" class="btn btn-primary btn-sm" id="save-btn">Save</button>
-                <button type="button" class="btn btn-success btn-sm" data-toggle="modal" data-target="#iframeModal">Variable Management</button>
+                <button type="button" class="btn btn-primary btn-sm" id="save-btn" disabled>Save</button>
+                <button type="button" class="btn btn-success btn-sm" data-toggle="modal" id="variable-btn" data-target="#iframeModal" disabled>Variable Management</button>
+                <button type="button" class="btn btn-success btn-sm float-right" id="publish-btn" disabled>Publish</button>
             </div>
             <div class="main-panel-content" id="editor" style="width: 100%; height: 100%;"></div>
             <input type="hidden" name="template_id"  id="template_id" />
@@ -100,19 +101,29 @@
     $(document).ready(function() {
         var loadingIndex = '';
         var fileId = '';
+        var changeButtonDisabled = function (status) {
+            $('#save-btn').prop('disabled', status);
+            $('#variable-btn').prop('disabled', status);
+            $('#publish-btn').prop('disabled', status);
+        }
+
         var changeIframeUrl = function() {
             appearance_id = $('select[name="appearance_id"]').val();
             dist_id = $('input[name="dist_id"]').val();
-            var iframeUrl = '/prime-control/dist-template-var?templateId=' + fileId + '&appearanceId=' + appearance_id+'&distId=' + dist_id;
+            var iframeUrl = '/prime-control/dist-template-var?templateCode=' + fileId + '&appearanceId=' + appearance_id+'&distId=' + dist_id;
             $('#iframeModal iframe').attr('src', iframeUrl);
         }
         //中间的Ace编辑器,内容展示
         var actionclick = function() {
             $('.file-action').click(function() {
+                //去掉保存与变量管理按钮的disabled
+                changeButtonDisabled(false);
+                //加载编辑代码
                 loadingIndex = layer.load(1, {
                     shade: [0.5, '#000'] // 设置遮罩层
                 });
-
+                var appearance_id = $('select[name="appearance_id"]').val();
+                var dist_id = $('input[name="dist_id"]').val();
                 fileId = $(this).attr('file_id');
                 //得到文件名
                 fileName = $(this).html();
@@ -131,6 +142,8 @@
                     type: 'POST',
                     data: {
                         act:'content',
+                        appearance_id: appearance_id,
+                        dist_id: dist_id,
                         id: fileId
                     },
                     success: function(response) {
@@ -165,6 +178,9 @@
         }
         //左边外观选择与分销商选择联动
         $('select[name="appearance_id"]').change(function() {
+            if ($(this).val() == '') {
+                changeButtonDisabled(true);
+            }
             loadingIndex = layer.load(1, {
                 shade: [0.5, '#000'] // 设置遮罩层
             });
@@ -184,21 +200,33 @@
         });
         // 模版编辑保存
         $("#save-btn").click(function() {
+            var appearance_id = $('select[name="appearance_id"]').val();
+            var dist_id = $('input[name="dist_id"]').val();
             var template_id = $("#template_id").val();
             var content = editor.getValue();
             if (template_id == '') {
                 Dcat.error('操作失败:请先选择模板');
                 return false;
             }
+            if (appearance_id == '') {
+                Dcat.error('操作失败:请先选择主题');
+                return false;
+            }
+            loadingIndex = layer.load(1, {
+                shade: [0.5, '#000'] // 设置遮罩层
+            });
             $.ajax({
                 url: '/prime-control/dist-template/ace',
                 type: 'POST',
                 data: {
                     act:'content_save',
-                    template_id: template_id,
+                    template_code: template_id,
+                    appearance_id: appearance_id,
+                    dist_id: dist_id,
                     content: content
                 },
                 success: function(response) {
+                    layer.close(loadingIndex);
                     if (response == '1') {
                         Dcat.success('保存成功');
                     }else{