header(admin_trans( 'admin.products_list'))
->description(admin_trans('admin.all'))
->description('')
//->breadcrumb(['text'=>'Product Management','url'=>''])
->body($this->grid());
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(DistProduct::with(['distProductCategory','images']), function (Grid $grid) {
//默认分页条数
$grid->paginate(config('admin.per_page'));
$grid->model()->where('dist_id', getDistributorId());
$grid->column('id')->display(function () {
return $this->_index+1;
});
$grid->column('title');
$grid->column('sku');
$grid->column('dist_product_category.name',admin_trans_label('category_name'));
$grid->column('images')->display(function ($images) {
$images = $images->toArray();
$dataImages = array_column($images, 'image_url');
// 限制最多显示2个缩略图
$dataImages = array_slice($dataImages, 0, 1);
return CommonHelper::displayImage($dataImages,100);
});
$grid->column('order');
$grid->column('enabled')->switch();
$grid->column('created_at');
$grid->column('updated_at')->sortable();
// 筛选
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->expand();
$filter->like('title')->width(2);
$filter->equal('sku')->width(2);
$filter->equal('category_id',admin_trans_label('category'))->select(DistProductCategory::selectOptions())->width(2);;
$filter->equal('enabled', admin_trans_label('enabled'))->select(admin_trans_array( config('dictionary.enabled')))->width(2);;
});
//排序
$grid->model()->orderBy("order",'desc')->orderBy('id', 'desc');
// 传入数组
$grid->tools([
new DistProductImport(),
]);
//按钮
$grid->disableCreateButton();
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, DistProduct::with(['distProductCategory','images']), function (Show $show) {
// 比较 dist_id 和 getDistributorId(),如果不相同则返回 404
if ($show->model()->dist_id !== getDistributorId()) {
abort(404);
}
$show->field('title');
$show->field('sku');
$show->field('dist_product_category.name',admin_trans_label('category_name'));
$show->field('keywords');
$show->field('description');
$show->field('issuance_date');
$show->field('parameters')->as(function ($items) {
if (is_array($items)) {
// 创建表格的表头
$table = '
';
// 遍历数组并将数据填充到表格中
foreach ($items as $item) {
$table .= '';
$table .= '' . $item['key'] . ' | '; // 商品名称
$table .= '' . $item['value'] . ' | '; // 数量
$table .= '
';
}
$table .= '
';
return $table;
}
return ''; // 当没有数组数据时
})->unescape();
$show->field('images')->as(function ($images) {
// 开始生成 HTML
$dataImages = array_column($images, 'image_url');
return CommonHelper::displayImage($dataImages,150);
})->unescape();
$show->field('content')->unescape();
$show->field('seo_title');
$show->field('seo_keywords');
$show->field('seo_description');
$show->field('slug',admin_trans_label('url_and_handle'))->as(function ($value) {
return getSiteDomain().config('dictionary.site_url.products').'/'.$value;
});
$show->field('order');
$show->field('enabled')->using(admin_trans_array(config('dictionary.enabled')));
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(DistProduct::with('images'), function (Form $form) {
//$form->display('id');
$form->select('category_id', admin_trans_label('category_name'))
->options(DistProductCategory::selectOptions())
->required();
$form->text('title')->required();
$form->text('sku')->required();
$form->date('issuance_date');
$form->table('parameters',admin_trans_label('parameter_name'), function (Form\NestedForm $table) {
$table->text('key',admin_trans_field('key'))->required();
$table->text('value',admin_trans_field('value'))->required();
});
// 多图上传
$form->multipleImage('images', admin_trans_label('images'))
->retainable()//禁止删OSS图
->sortable() // 可拖动排序
->removable() // 可移除图片
->autoUpload() // 自动上传
->uniqueName()
->accept(config('distributor.upload.oss_image.accept'))
->maxSize(config('distributor.upload.oss_image.max_size'))
->dir(config("distributor.upload.directory.image").'/product/'.date("Ymd"))
->customFormat(function () {
// 数据格式化为数组['1.jpg','2.jpg'] 编辑时用到
return array_column($this->images, 'image_url');
})
->saving(function ($images) use ($form) {
$id = $form->getKey();
$reslut = DistProductImage::formatData($id,$images);
return $reslut;
});
$form->editor('content');
//SEO
$form->text('seo_title');
$form->text('seo_keywords');
$form->text('seo_description');
$form->text('slug',admin_trans_label('url_and_handle'))->width(4, 2)->prepend(getSiteDomain().config('dictionary.site_url.products').'/');
$form->number('order')
->default(0)
->rules('numeric');
$form->switch('enabled')->default(1);
//隐藏字段
$form->hidden('dist_id'); // 隐藏dist_id字段,用于保存
//插入JS
$this->addParametersJs();
//提交前
// 在保存时进行验证
$form->saving(function (Form $form) {
$form->dist_id =getDistributorId();//保存时直接写死dist_id
$id = $form->getKey();
//slug配置是否重复
if ($form->slug != '') {
if (DistProduct::isRepeatedSlug($id, $form->slug)) {
//slug重复
return $form->response()->error(admin_trans_label('url_repeated'));
}
}
//当slug为空时生成slug
if ($form->slug == '') {
$form->slug = DistProduct::generateSlug($form->title, $id);
}
//seo_title不能为空
if ($form->seo_title == '') {
$form->seo_title = $form->title;
}
});
});
}
/*
* 禁用新增
*/
public function store()
{
abort(404);
}
/*
* 以json型式返回产品参数
*/
public static function parameter(Request $request)
{
$id = $request->query('q');
$content = DistProductCategory::getParameter($id);
return $content;
}
/**
* 分类与参数联动JS
* @return void
*/
private function addParametersJs()
{
$prefix = config('admin.route.prefix');
//插入JS
Admin::script(
<<