You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
8.9 KiB

<?php
namespace App\Admin\Controllers\Shop;
use App\Models\ShopCategory;
use App\Models\ShopGoods;
use App\Models\ShopBrand;
use App\Models\ShopAttribute;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Content;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\ModelForm;
use Encore\Admin\Widgets\Box;
use Encore\Admin\Widgets\Tab;
use Encore\Admin\Widgets\Table;
class ShopGoodsController extends Controller
{
use ModelForm;
/**
* Index interface.
*
* @return Content
*/
public function index()
{
return Admin::content(function (Content $content) {
$content->header('商城商品列表');
$content->description('商城商品管理');
$content->body($this->grid());
});
}
/**
* Edit interface.
*
* @param $id
* @return Content
*/
public function edit($id)
{
return Admin::content(function (Content $content) use ($id) {
$content->header('商城商品列表');
$content->description('商城商品管理');
$content->body($this->form()->edit($id));
});
}
/**
* Create interface.
*
* @return Content
*/
public function create()
{
return Admin::content(function (Content $content) {
$content->header('新增商品');
$content->description('商品管理');
$content->body($this->form());
});
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Admin::grid(ShopGoods::class, function (Grid $grid) {
$grid->model()->orderBy('sort_order', 'asc');
$grid->id('序号')->sortable();
$grid->primary_pic_url('商品主图')->image('', 75, 75);
$grid->goods_name('商品名')->label('info')->limit(50);
$grid->goods_sn('商品编号')->limit(50);
$grid->category_id('商品分类')
->select(ShopCategory::getAllClasses(true));
$grid->brand_id('品牌id')
->select(ShopBrand::getAllClasses(true));
$grid->goods_number('商品库存量');
$grid->sort_order('商品排序');
$getListImg = $this;
// 这里是多个信息一起显示
$grid->column('其他信息')->expand(function () use($getListImg) {
$imgUrl = '<img src="%s" style="max-width:160px;max-height:160px" class="img img-thumbnail">';
$row_arr1 = [
[
'商品主图:' . sprintf($imgUrl,config('filesystems.disks.oss.url').'/'.$this->primary_pic_url),
],
[
'商品列表图:' .$getListImg->getListImg($this->list_pic_url,$imgUrl) ,
],
[
'商品关键词:' . $this->keywords,
],
[
'商品摘要:' . $this->goods_brief,
],
[
'专柜价格:¥' . $this->counter_price,
'附加价格:¥' . $this->extra_price,
'零售价格:¥' . $this->retail_price,
'单位价格,单价:¥' . $this->unit_price,
'运费:¥' . $this->freight_price,
],
];
$table = new Table(['其他信息'], $row_arr1);
$tab = new Tab();
$tab->add('商品基础信息', $table);
$box = new Box('商品描述',$this->goods_desc);
$tab->add('商品描述', $box);
return $tab;
}, '其他信息');
// $grid->goods_price('单价');
// $grid->goods_marketprice('市场价');
// $grid->goods_onsaleprice('折扣价');
// $grid->goods_salenum('销售量');
// $grid->goods_click('点击量');
// $grid->goods_carousel('轮播图片')->image('', 50, 50);
// $grid->goods_description_pictures('描述图片')->image('', 50, 50);
//
//// $grid->goods_storage('库存');
// $grid->goods_state('状态')
// ->select(Good::getStateDispayMap());
// $grid->sort('排序');
// $grid->created_at('创建时间');
// $grid->updated_at('更新时间');
$grid->filter(function ($filter) {
$filter->like('goods_name', '商品名');
$filter->in('class_id', '分类')
->multipleSelect(ShopCategory::getAllClasses(true));
$filter->equal('is_delete', '状态')
->radio(ShopGoods::getDeleteDispayMap());
});
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Admin::form(ShopGoods::class, function (Form $form) {
$form->display('id', '序号');
$form->text('goods_name', '商品名')
->rules('required');
$form->select('category_id', '商品分类')
->rules('required')
->options(ShopCategory::selectOptions(true));
$form->select('brand_id', '品牌id')
->rules('required')
->options(ShopBrand::getAllClasses(true));
$form->currency('counter_price', '专柜价格')
->symbol('¥');
$form->currency('extra_price', '附加价格')
->symbol('¥');
$form->currency('retail_price', '零售价格')
->symbol('¥');
$form->currency('unit_price', '单位价格,单价')
->symbol('¥');
$form->currency('freight_price', '运费,单价')
->symbol('¥');
$form->textarea('keywords', '商品关键词');
$form->textarea('goods_brief', '商品摘要');
$form->editor('goods_desc', '商品描述');
$form->textarea('promotion_desc', '促销描述');
$form->text('promotion_tag', '促销标签')
->value(' ');
$form->image('primary_pic_url', '商品主图')
->rules('required')
->uniqueName()->help('建议300*300');
$form->multipleImage('list_pic_url', '商品列表图')
->uniqueName();
$form->number('goods_number', '库存')->default(10);
$form->number('sell_volume', '销售量');
$form->radio('is_on_sale', '上架状态')
->options(ShopGoods::getSaleDispayMap())
->default(ShopGoods::STATE_ON_SALE);
$form->radio('is_delete', '删除状态')
->options(ShopGoods::getDeleteDispayMap())
->default(ShopGoods::STATE_NOT_DELETE);
$form->radio('is_limited', '是否限购')
->options(ShopGoods::getLimitDispayMap())
->default(ShopGoods::STATE_SALE_NOT_LIMIT);
$form->radio('is_hot', '是否推荐')
->options(ShopGoods::getRecommendDispayMap())
->default(ShopGoods::STATE_SALE_NOT_RECOMMEND);
$form->radio('is_new', '是否新品')
->options(ShopGoods::getNewDispayMap())
->default(ShopGoods::STATE_SALE_NEW);
$form->radio('is_vip_exclusive', '是否是会员专属')
->options(ShopGoods::getVipDispayMap())
->default(ShopGoods::STATE_NOT_VIP);
$form->currency('vip_exclusive_price', '会员专享价')
->symbol('¥');
$form->number('sort_order','排序')
->default(255);
$form->hasMany('goods_attribute', '添加属性', function (Form\NestedForm $form) {
$form->select('attribute_id', '选择属性')->options(ShopAttribute::pluck('name','id'));
$form->text('value', '属性值');
});
// $form->addSpecification('attribute_category', 'wewe');
// $form->divide();
// $form->hasMany('products', '添加规格', function (Form\NestedForm $form) {
// $form->number('goods_number','库存')->default(255)->rules('required|min:1|max:20');
// $form->currency('retail_price', '单价')
// ->symbol('¥');
// });
$form->display('created_at', '创建时间');
$form->display('updated_at', '更新时间');
});
}
public function getListImg($list_pic_url,$modelUrl){
if(empty($list_pic_url) || empty($modelUrl)){
return '';
}
$url ='';
foreach($list_pic_url as $v){
$url .= sprintf($modelUrl,config('filesystems.disks.oss.url').'/'.$v);
}
return $url;
}
}