header($this->title())
->description('')
->breadcrumb(['text'=>'list','url'=>''])
->body($this->grid());
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(BaseProduct::with(['baseProductCategory','images']), function (Grid $grid) {
//默认分页条数
$grid->paginate(config('admin.per_page'));
$grid->column('id')->display(function () {
return $this->_index+1;
});
$grid->column('title');
$grid->column('sku');
$grid->column('base_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')->sortable();
$grid->column('enabled')->switch();
$grid->column('created_at')->sortable();
$grid->column('updated_at')->sortable();
// 筛选
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->expand();
$filter->equal('sku')->width(2);
$filter->like('title')->width(2);
$filter->equal('category_id',admin_trans_label('category_name'))->select(BaseProductCategory::selectOptions())->width(3);
$filter->equal('enabled')->select(admin_trans_array(config('dictionary.enabled')))->width(2);
});
//排序
$grid->model()->orderBy('created_at','desc');
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, BaseProduct::with(['baseProductCategory','images']), function (Show $show) {
$show->field('title');
$show->field('sku');
$show->field('base_product_category.name',admin_trans_label('category_name'));
$show->field('issuance_date');
$show->field('parameters',admin_trans_label('attribute_name'))->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('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(BaseProduct::with('images'), function (Form $form) {
$form->select('category_id', admin_trans_label('category_name'))
->options(BaseProductCategory::selectOptions())
->required();
$form->text('title')->required();
$form->text('sku')->required();
$form->date('issuance_date');
$form->table('parameters',admin_trans_label('attribute_name'), function (Form\NestedForm $table) {
$table->text('key')->required();
$table->text('value')->required();
});
// 多图上传
$form->multipleImage('images', admin_trans_label('images'))
->retainable()//禁止删OSS图
->sortable() // 可拖动排序
->removable() // 可移除图片
->autoUpload() // 自动上传
->uniqueName()
->limit(config('admin.upload.oss_image.limit'))
->accept(config('admin.upload.oss_image.accept'))
->maxSize(config('admin.upload.oss_image.max_size'))
->dir(config("admin.upload.directory.image").'/product/'.date("Ymd"))
->customFormat(function ($images) {
// 数据格式化为数组['1.jpg','2.jpg'] 编辑时用到
return array_column($images, 'image_url');
})
->saving(function ($images) use ($form) {
$id = $form->getKey();
$reslut = BaseProductImage::formatData($id,$images);
return $reslut;
});
$form->editor('content');
$form->text('seo_title');
$form->text('seo_keywords');
$form->text('seo_description');
$form->number('order')
->default(0)
->rules('numeric');
$form->switch('enabled')->default(1);
//插入参数联动JS
$this->addParametersJs();
//新建时插入JS
$form->creating(function (Form $form) {
CommonHelper::seoReplace('title',false);
});
//保存前回调
$form->saving(function ($form) {
//检查sku是否重复
$baseProduct = new BaseProduct();
if ($form->isCreating()) {
$count = $baseProduct->model()->where('sku', $form->sku)->count();
} else {
$count = $baseProduct->model()->where('sku', $form->sku)->where('id', '!=', $form->getKey())->count();
}
if ($count > 0) {
return $form->response()->error('sku already exists');
}
});
});
}
/*
* 以json型式返回产品参数
*/
public static function parameter(Request $request)
{
$id = $request->query('q');
$content = BaseProductCategory::getParameter($id);
return $content;
}
/**
* 分类与参数联动JS
* @return void
*/
private function addParametersJs()
{
$prefix = config('admin.route.prefix');
//插入JS
Admin::script(
<< 0) {
$.ajax({
url: '/{$prefix}/base-product/parameter',
data: { q: category_id},
dataType: 'json',
type: 'GET', // GET
success: function(data) { // success
if (Array.isArray(data) && data.length === 0) {
return null;
}
// 动态添加新数据到表格
$.each(data, function(index, item) {
$(".has-many-table-parameters").find(".add").click();
fill_param(item.key,item.value);
});
},
error: function(error) { // 错误时执行的代码
console.log('error:', error);
}
});
}
});
JS
);
}
}