Răsfoiți Sursa

feat:添加dist新控制器

igb 5 luni în urmă
părinte
comite
71f526c549

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

@@ -71,7 +71,7 @@ class AuthController extends BaseAuthController
 
             // 添加语言选择的下拉框
             $form->select('language', trans('admin.language'))
-                ->options(config('app.languages'))
+                ->options(config('dictionary.languages'))
                 ->default('en')
                 ->required();;  // 设置默认语言
 

+ 0 - 3
app/Distributor/Controllers/DistProductCategoryController.php

@@ -19,7 +19,6 @@ class DistProductCategoryController extends AdminController
     public function index(Content $content)
     {
         return $content
-            ->view('distributor.layouts.content')
             ->header(admin_trans('admin.proudct_category'))
             ->description('')
             ->body($this->grid());
@@ -35,7 +34,6 @@ class DistProductCategoryController extends AdminController
     public function edit($id, Content $content)
     {
         return $content
-            ->view('distributor.layouts.content')
             ->translation($this->translation())
             ->title($this->title())
             ->description($this->description()['edit'] ?? trans('admin.edit'))
@@ -51,7 +49,6 @@ class DistProductCategoryController extends AdminController
     public function create(Content $content)
     {
         return $content
-            ->view('distributor.layouts.content')
             ->translation($this->translation())
             ->title($this->title())
             ->description($this->description()['create'] ?? trans('admin.create'))

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

@@ -2,7 +2,7 @@
 
 namespace App\Distributor\Controllers;
 
-
+use Dcat\Admin\Admin;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
@@ -23,7 +23,6 @@ class DistProductController extends AdminController
     public function index(Content $content)
     {
         return $content
-            ->view('distributor.layouts.content')
             ->header(admin_trans( 'admin.products_list'))
             ->description(admin_trans('admin.all'))
             ->description('all')
@@ -40,10 +39,10 @@ class DistProductController extends AdminController
      */
     public function edit($id, Content $content)
     {
+
         return $content
-            ->view('distributor.layouts.content')
             ->translation($this->translation())
-            ->title($this->title())
+            ->title(admin_trans('admin.product'))
             ->description($this->description()['edit'] ?? trans('admin.edit'))
             ->body($this->form()->edit($id));
     }
@@ -56,10 +55,10 @@ class DistProductController extends AdminController
      */
     public function create(Content $content)
     {
+
         return $content
-            ->view('distributor.layouts.content')
             ->translation($this->translation())
-            ->title($this->title())
+            ->title(admin_trans('admin.product'))
             ->description($this->description()['create'] ?? trans('admin.create'))
             ->body($this->form());
     }
@@ -114,13 +113,13 @@ class DistProductController extends AdminController
             $show->field('keywords');
             $show->field('description');
             $show->field('sku');
-            $show->field('dist_product_category.name','Category Name');
+            $show->field('dist_product_category.name',admin_trans_label('category_name'));
             $show->field('issuance_date');
             $show->field('parameters')->as(function ($items) {
                 if (is_array($items)) {
                     // 创建表格的表头
                     $table = '<table class="table">';
-                    $table .= '<tr><th>key</th><th>value</th></tr>';
+                    $table .= '<tr><th>'.admin_trans_field('key').'</th><th>'.admin_trans_field('value').'</th></tr>';
                     // 遍历数组并将数据填充到表格中
                     foreach ($items as $item) {
                         $table .= '<tr>';
@@ -155,20 +154,20 @@ class DistProductController extends AdminController
     {
         return Form::make(DistProduct::with('images'), function (Form $form) {
             $form->display('id');
-            $form->select('category_id', 'Category Name')
-                ->options(BaseProductCategory::selectOptions())
+            $form->select('category_id', admin_trans_label('category_name'))
+                ->options(DistProductCategory::selectOptions())
                 ->required();
             $form->text('title')->required();
             $form->text('keywords');
             $form->textarea('description');
             $form->text('sku')->required();
             $form->date('issuance_date');
-            $form->table('parameters','Parameters', function (Form\NestedForm $table) {
-                $table->text('key')->required();
-                $table->text('value')->required();
+            $form->table('parameters',admin_trans_label('parameters'), function (Form\NestedForm $table) {
+                $table->text('key',admin_trans_field('key'))->required();
+                $table->text('value',admin_trans_field('value'))->required();
             });
             // 多图上传
-            $form->multipleImage('images', 'images')
+            $form->multipleImage('images', admin_trans_label('images'))
                 ->sortable() // 可拖动排序
                 ->removable() // 可移除图片
                 ->autoUpload() // 自动上传
@@ -199,7 +198,7 @@ class DistProductController extends AdminController
     public static function parameter(Request $request)
     {
         $id = $request->query('q');
-        $content = BaseProductCategory::getParameter($id);
+        $content = DistProductCategory::getParameter($id);
         return $content;
     }
     /**

+ 19 - 71
app/Distributor/Controllers/DistVideoCategoryController.php

@@ -2,7 +2,7 @@
 
 namespace App\Distributor\Controllers;
 
-use App\Distributor\Repositories\DistVideoCategory;
+use App\distributor\Repositories\DistVideoCategory;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
@@ -18,46 +18,12 @@ class DistVideoCategoryController extends AdminController
     public function index(Content $content)
     {
         return $content
-            ->view('distributor.layouts.content')
-            ->header(admin_trans( 'admin.video_category'))
+            ->header(admin_trans('admin.video_category'))
             ->description(admin_trans('admin.all'))
-            ->breadcrumb(['text'=>'list','url'=>''])
+            ->breadcrumb(['text'=>'Video Category','url'=>''])
             ->body($this->grid());
     }
 
-    /**
-     * Edit interface.
-     *
-     * @param  mixed  $id
-     * @param  Content  $content
-     * @return Content
-     */
-    public function edit($id, Content $content)
-    {
-        return $content
-            ->view('distributor.layouts.content')
-            ->translation($this->translation())
-            ->title($this->title())
-            ->description($this->description()['edit'] ?? trans('admin.edit'))
-            ->body($this->form()->edit($id));
-    }
-
-    /**
-     * Create interface.
-     *
-     * @param  Content  $content
-     * @return Content
-     */
-    public function create(Content $content)
-    {
-        return $content
-            ->view('distributor.layouts.content')
-            ->translation($this->translation())
-            ->title($this->title())
-            ->description($this->description()['create'] ?? trans('admin.create'))
-            ->body($this->form());
-    }
-
     /**
      * Make a grid builder.
      *
@@ -65,39 +31,21 @@ class DistVideoCategoryController extends AdminController
      */
     protected function grid()
     {
+
         return Grid::make(new DistVideoCategory(), function (Grid $grid) {
             $grid->column('id')->sortable();
-            $grid->column('name');
+            $grid->column('name')->tree(true,true);
             $grid->column('parent_id');
-            $grid->column('order');
-            $grid->column('enabled');
+            $grid->column('order')->orderable();
+            $grid->column('enabled')->switch();
             $grid->column('created_at');
             $grid->column('updated_at')->sortable();
-
-            $grid->filter(function (Grid\Filter $filter) {
-                $filter->equal('id');
-
-            });
-        });
-    }
-
-    /**
-     * Make a show builder.
-     *
-     * @param mixed $id
-     *
-     * @return Show
-     */
-    protected function detail($id)
-    {
-        return Show::make($id, new DistVideoCategory(), function (Show $show) {
-            $show->field('id');
-            $show->field('name');
-            $show->field('parent_id');
-            $show->field('order');
-            $show->field('enabled');
-            $show->field('created_at');
-            $show->field('updated_at');
+            $grid->quickSearch('name');
+            //按钮
+            $grid->disableViewButton();
+            $grid->showQuickEditButton();
+            $grid->enableDialogCreate();
+            $grid->disableEditButton();
         });
     }
 
@@ -111,12 +59,12 @@ class DistVideoCategoryController extends AdminController
         return Form::make(new DistVideoCategory(), function (Form $form) {
             $form->display('id');
             $form->text('name');
-            $form->text('parent_id');
-            $form->text('order');
-            $form->text('enabled');
-
-            $form->display('created_at');
-            $form->display('updated_at');
+            $form->select('parent_id', admin_trans_field('parent'))
+                ->options(DistVideoCategory::selectOptions())
+                ->saving(function ($v) {
+                    return (int) $v;
+                });
+            $form->switch('enabled')->default(1);
         });
     }
 }

+ 67 - 64
app/Distributor/Controllers/DistVideoController.php

@@ -2,62 +2,31 @@
 
 namespace App\Distributor\Controllers;
 
+
 use App\Distributor\Repositories\DistVideo;
+use App\Distributor\Repositories\DistVideoCategory;
+use App\Libraries\CommonHelper;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
 use Dcat\Admin\Http\Controllers\AdminController;
 use Dcat\Admin\Layout\Content;
-use Dcat\Admin\Admin;
 
 class DistVideoController extends AdminController
 {
+
     /**
      * page index
      */
     public function index(Content $content)
     {
         return $content
-            ->view('distributor.layouts.content')
-            ->header(admin_trans( 'admin.video_list'))
+            ->header(admin_trans('admin.video_list'))
             ->description(admin_trans('admin.all'))
-            ->breadcrumb(['text'=>'list','url'=>''])
+            ->breadcrumb(['text'=>admin_trans('admin.video_list'),'url'=>''])
             ->body($this->grid());
     }
 
-    /**
-     * Edit interface.
-     *
-     * @param  mixed  $id
-     * @param  Content  $content
-     * @return Content
-     */
-    public function edit($id, Content $content)
-    {
-        return $content
-            ->view('distributor.layouts.content')
-            ->translation($this->translation())
-            ->title($this->title())
-            ->description($this->description()['edit'] ?? trans('admin.edit'))
-            ->body($this->form()->edit($id));
-    }
-
-    /**
-     * Create interface.
-     *
-     * @param  Content  $content
-     * @return Content
-     */
-    public function create(Content $content)
-    {
-        return $content
-            ->view('distributor.layouts.content')
-            ->translation($this->translation())
-            ->title($this->title())
-            ->description($this->description()['create'] ?? trans('admin.create'))
-            ->body($this->form());
-    }
-
     /**
      * Make a grid builder.
      *
@@ -65,22 +34,30 @@ class DistVideoController extends AdminController
      */
     protected function grid()
     {
-        return Grid::make(new DistVideo(), function (Grid $grid) {
+        return Grid::make(DistVideo::with(['distVideoCategory']), function (Grid $grid) {
             $grid->column('id')->sortable();
             $grid->column('title');
-            $grid->column('category_id');
-            $grid->column('remark');
-            $grid->column('enabled');
-            $grid->column('order');
-            $grid->column('video_url');
-            $grid->column('is_pinned');
+            $grid->column('dist_video_category.name','Category Name');
+            $grid->column('cover_image')->display(function ($image) {
+                // 开始生成 HTML
+                $dataImages = [$image];
+                return CommonHelper::displayImage($dataImages,150);
+            });
+            $grid->column('order')->orderable();
+            $grid->column('is_pinned')->switch();
+            $grid->column('enabled')->switch();
             $grid->column('created_at');
             $grid->column('updated_at')->sortable();
-
+            // 筛选
             $grid->filter(function (Grid\Filter $filter) {
-                $filter->equal('id');
-
+                $filter->equal('sku');
+                $filter->like('title');
+                $filter->equal('category_id','Category')->select(DistVideoCategory::selectOptions());
+                $filter->equal('enabled', 'enabled')->select(config('dictionary.enabled'));
             });
+            //排序
+            $grid->model()->orderBy("is_pinned",'desc')->orderBy("order",'desc');
+            //按钮
         });
     }
 
@@ -93,15 +70,37 @@ class DistVideoController extends AdminController
      */
     protected function detail($id)
     {
-        return Show::make($id, new DistVideo(), function (Show $show) {
+        return Show::make($id, DistVideo::with(['baseVideoCategory']), function (Show $show) {
             $show->field('id');
             $show->field('title');
-            $show->field('category_id');
-            $show->field('remark');
-            $show->field('enabled');
-            $show->field('order');
-            $show->field('video_url');
-            $show->field('is_pinned');
+            $show->field('base_video_category.name','Category Name');
+            $show->field('cover_image')->as(function ($image) {
+                // 开始生成 HTML
+                $dataImages = [$image];
+                return CommonHelper::displayImage($dataImages,150);
+            })->unescape();
+            $show->html(function () {
+                $content = $this->video_url;
+                return view('admin::show.field', [
+                    'wrapped'=>true,
+                    'escape'=>false,
+                    'width'=>['label' => '2','field'=>'8'],
+                    'label'=>'Video Url',
+                    'content'=>$content
+                ]);
+            });
+            $show->field('video_url','Video player')->as(function ($value) {
+                $html = '
+                <iframe width="560" height="315" src="'.$value.'"
+                        title="YouTube video player"
+                        frameborder="0"
+                        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+                        allowfullscreen>
+                 </iframe>';
+                return $html;
+            })->unescape();
+            $show->field('remark')->unescape();
+            $show->field('enabled')->using(config('dictionary.enabled'));
             $show->field('created_at');
             $show->field('updated_at');
         });
@@ -116,16 +115,20 @@ class DistVideoController extends AdminController
     {
         return Form::make(new DistVideo(), function (Form $form) {
             $form->display('id');
-            $form->text('title');
-            $form->text('category_id');
-            $form->text('remark');
-            $form->text('enabled');
-            $form->text('order');
-            $form->text('video_url');
-            $form->text('is_pinned');
-
-            $form->display('created_at');
-            $form->display('updated_at');
+            $form->text('title')->required();
+            $form->select('category_id', 'Category Name')
+                ->options(DistVideoCategory::selectOptions())
+                ->required();
+            $form->image("cover_image")
+                ->autoUpload()
+                ->uniqueName()
+                ->accept(config('admin.upload.oss_image.accept'))
+                ->maxSize(config('admin.upload.oss_image.max_size'))
+                ->dir('images/video/'.date("Ymd"));//
+            $form->url("video_url")->required();
+            $form->editor('remark');
+            $form->switch('is_pinned')->default(0);
+            $form->switch('enabled')->default(1);
         });
     }
 }

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

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Distributor\Repositories;
+
+use Dcat\Admin\Form;
+use App\Models\DistProduct as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistProduct extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+
+    public function delete(Form $form, array $originalData)
+    {
+        collect(explode(',', $form->getKey()))->filter()->each(function ($id) {
+            Model::find($id)->images()->delete();
+            Model::find($id)->delete();
+        });
+        return true;
+    }
+}

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

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Distributor\Repositories;
+
+use App\Models\DistProductImage as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistProductImage extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+}

+ 16 - 0
app/Distributor/Repositories/DistProductParameter.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Distributor\Repositories;
+
+use App\Models\DistProductParameter as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistProductParameter extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+}

+ 16 - 0
app/Distributor/Repositories/DistVideo.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Distributor\Repositories;
+
+use App\Models\DistVideo as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistVideo extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+}

+ 23 - 0
app/Distributor/Repositories/DistVideoCategory.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Distributor\Repositories;
+
+use App\Models\DistVideoCategory as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistVideoCategory extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+
+    // 调用模型方法
+    public static function selectOptions(\Closure $closure = null)
+    {
+        $selectOptions =  Model::class::selectOptions($closure);
+        return $selectOptions;
+    }
+}

+ 38 - 0
app/Models/DistProduct.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Models;
+
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+use App\Traits\SortableTraitPinned;
+use Illuminate\Database\Eloquent\Model;
+
+class DistProduct extends Model
+{
+	use HasDateTimeFormatter;
+    use SortableTraitPinned;
+    protected $table = 'dist_product';
+
+    // 可选:你可以在这里自定义排序配置
+    public $sortable = [
+        'order_column_name' => 'order',  // 排序字段
+        'sort_when_creating' => true,    // 创建时自动排序
+    ];
+
+    protected $casts = [
+        'created_at' => 'datetime:Y-m-d H:i:s',
+        'updated_at' => 'datetime:Y-m-d H:i:s',
+        'parameters' => 'json', // 将 attributes 字段转换为数组
+    ];
+
+    public function distProductCategory()
+    {
+        return $this->hasOne(DistProductCategory::class,'id','category_id');
+    }
+
+    // 一对多关联
+    public function images()
+    {
+        return $this->hasMany(DistProductImage::class, 'product_id');
+    }
+
+}

+ 66 - 0
app/Models/DistProductCategory.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace App\Models;
+
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+
+use Dcat\Admin\Traits\ModelTree;
+use Illuminate\Database\Eloquent\Model;
+use Spatie\EloquentSortable\Sortable;
+
+class DistProductCategory extends Model implements Sortable
+{
+    use HasDateTimeFormatter,
+        ModelTree {
+        ModelTree::boot as treeBoot;
+    }
+	use HasDateTimeFormatter;
+    protected $table = 'dist_product_category';
+
+    //名称
+    protected $titleColumn = 'name';
+    //排序
+    protected $orderColumn = 'order';
+    //父级
+    protected $parentColumn = 'parent_id';
+
+
+    protected $casts = [
+        'created_at' => 'datetime:Y-m-d H:i:s',
+        'updated_at' => 'datetime:Y-m-d H:i:s',
+    ];
+
+    /*
+     * 关联产品参数
+     */
+    public function distProductParameter()
+    {
+        return $this->hasOne(DistProductParameter::class,'id','parameter_id');
+    }
+
+
+    public static function selectOptions(\Closure $closure = null)
+    {
+        $options = (new static())->withQuery($closure)->buildSelectOptions();
+        return collect($options)->all();
+    }
+    public function getAllCategories($parentId = null)
+    {
+        // Retrieve categories with the specified parentId, or all if no parentId is specified
+        $query = self::query();
+
+        if ($parentId !== null) {
+            $query->where('parent_id', $parentId);
+        }
+
+        $categories = $query->orderBy($this->orderColumn)->get();
+
+        // If you want a hierarchical structure, you can recursively build it
+        $categories->each(function ($category) {
+            $category->children = $category->getAllCategories($category->id);
+        });
+
+        return $categories;
+    }
+
+}

+ 28 - 0
app/Models/DistProductImage.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Models;
+
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+
+use Illuminate\Database\Eloquent\Model;
+
+class DistProductImage extends Model
+{
+    use HasDateTimeFormatter;
+    protected $table = 'dist_product_image';
+
+    protected $casts = [
+        'created_at' => 'datetime:Y-m-d H:i:s',
+        'updated_at' => 'datetime:Y-m-d H:i:s',
+    ];
+    protected $fillable = [
+        'image_url',
+        'product_id'];
+
+    // 反向关联,属于某个产品
+    public function product()
+    {
+        return $this->belongsTo(DistProduct::class, 'id');
+    }
+
+}

+ 14 - 0
app/Models/DistProductParameter.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Models;
+
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+
+use Illuminate\Database\Eloquent\Model;
+
+class DistProductParameter extends Model
+{
+	use HasDateTimeFormatter;
+    protected $table = 'dist_product_parameter';
+    
+}

+ 38 - 0
app/Models/DistVideo.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Models;
+
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+
+use Illuminate\Database\Eloquent\Model;
+use Spatie\EloquentSortable\Sortable;
+use Spatie\EloquentSortable\SortableTrait;
+use App\Traits\SortableTraitPinned;
+
+class DistVideo extends Model
+{
+    use HasDateTimeFormatter;
+    use SortableTraitPinned;
+
+    protected $table = 'dist_video';
+
+    // 可选:你可以在这里自定义排序配置
+    public $sortable = [
+        'order_column_name' => 'order',  // 排序字段
+        'sort_when_creating' => true,    // 创建时自动排序
+    ];
+
+    protected $casts = [
+        'created_at' => 'datetime:Y-m-d H:i:s',
+        'updated_at' => 'datetime:Y-m-d H:i:s',
+    ];
+
+    /*
+     * 分类一对多关联
+     */
+    public function distVideoCategory()
+    {
+        return $this->hasOne(DistVideoCategory::class,'id','category_id');
+    }
+
+}

+ 29 - 0
app/Models/DistVideoCategory.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Models;
+
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+
+use Dcat\Admin\Traits\ModelTree;
+use Illuminate\Database\Eloquent\Model;
+use Spatie\EloquentSortable\Sortable;
+
+class distVideoCategory extends Model implements Sortable
+{
+    use HasDateTimeFormatter,
+        ModelTree {
+        ModelTree::boot as treeBoot;
+    }
+    protected $table = 'dist_video_category';
+    //名称
+    protected $titleColumn = 'name';
+    //排序
+    protected $orderColumn = 'order';
+    //父级
+    protected $parentColumn = 'parent_id';
+
+    protected $casts = [
+        'created_at' => 'datetime:Y-m-d H:i:s',
+        'updated_at' => 'datetime:Y-m-d H:i:s',
+    ];
+}