4
0
Fork 0
dcat-admin/packages/goods/src/Http/Controllers/Admin/GoodsController.php

84 lines
3.7 KiB
PHP

<?php
namespace Peidikeji\Goods\Http\Controllers\Admin;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\Tools\Selector;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Show;
use Peidikeji\Goods\Models\Goods;
use Peidikeji\Goods\Models\GoodsBrand;
use Peidikeji\Goods\Models\GoodsCategory;
use Peidikeji\Goods\Models\GoodsType;
class GoodsController extends AdminController
{
protected $translation = 'peidikeji.dcat-admin-extension-goods::goods';
protected function grid()
{
return Grid::make(Goods::with(['category', 'brand', 'type']), function (Grid $grid) {
$grid->model()->sort();
$grid->selector(function (Selector $selector) {
$brands = GoodsBrand::get();
$types = GoodsType::get();
$categories = GoodsCategory::where('level', 3)->get();
$prices = ['0-999', '1000-1999', '2000-4999', '5000+'];
$selector->selectOne('category_id', __('peidikeji.dcat-admin-extension-goods::goods.fields.category_id'), $categories->pluck('name', 'id'));
$selector->selectOne('brand_id', __('peidikeji.dcat-admin-extension-goods::goods.fields.brand_id'), $brands->pluck('name', 'id'));
$selector->selectOne('type_id', __('peidikeji.dcat-admin-extension-goods::goods.fields.type_id'), $types->pluck('name', 'id'));
$selector->selectOne('price', __('peidikeji.dcat-admin-extension-goods::goods.fields.price'), $prices, function ($q, $value) use ($prices) {
$parsePrice = data_get($prices, $value);
if ($parsePrice) {
$parts = explode('-', $parsePrice);
$parts = array_map(fn($v) => (int)$v, $parts);
if (count($parts) > 1) {
$q->whereBetween('price', $parts);
} else {
$q->where('price', '>', $parts[0]);
}
}
});
});
$grid->column('goods_sn');
$grid->column('category.name');
$grid->column('brand.name');
$grid->column('type.name')->label();
$grid->column('name')->display(function () {
return ($this->cover_image ? '<img src="'.$this->cover_image.'" width="60" class="img-thumbnail"/>&nbsp;' : '') . '<a href="'.admin_url('goods/' . $this->id).'">'.$this->name.'</a>';
});
$grid->column('price');
$grid->column('spec')->view('peidikeji.dcat-admin-extension-goods::grid.spec');
$grid->column('on_sale')->switch();
$grid->column('sold_count');
$grid->disableRowSelector();
});
}
protected function detail($id)
{
$info = Goods::with(['category', 'brand', 'type'])->findOrFail($id);
$show = Show::make($info);
$show->field('goods_sn');
$show->field('category.name');
$show->field('brand.name');
$show->field('type.name');
$show->field('name');
$show->field('price');
$show->field('cover_image')->image('', 100);
$show->field('images')->image('', 100);
$show->field('content')->image('');
$show->field('spec')->view('peidikeji.dcat-admin-extension-goods::grid.spec');
$show->field('attr')->view('peidikeji.dcat-admin-extension-goods::grid.attr');
$show->field('part')->view('peidikeji.dcat-admin-extension-goods::grid.spec');
$show->field('on_sale')->bool();
$show->field('sold_count');
$show->field('created_at')->as(fn($v) => $this->created_at->format('Y-m-d H:i:s'));
$show->field('updated_at')->as(fn($v) => $this->updated_at->format('Y-m-d H:i:s'));
return $show;
}
}