header(' Product Management')
->description('all')
->breadcrumb(['text'=>'Product Management','url'=>''])
->body($this->grid());
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(BaseProduct::with(['baseProductCategory','images']), function (Grid $grid) {
$grid->column('id','ID')->sortable();
$grid->column('title');
$grid->column('sku');
$grid->column('base_product_category.name','Category Name');
$grid->column('issuance_date');
$grid->column('images')->display(function ($images) {
$images = $images->toArray();
$dataImages = array_column($images, 'image_url');
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('sku');
$filter->like('title');
$filter->equal('category_id','Category')->select(BaseProductCategory::selectOptions());
$filter->equal('enabled', 'enabled')->select([
1 => 'Yes',
0 => 'No',
]);
});
//排序
$grid->model()->orderBy("is_pinned",'desc')->orderBy("order",'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('id');
$show->field('title');
$show->field('keywords');
$show->field('description');
$show->field('sku');
$show->field('base_product_category.name','Category Name');
$show->field('issuance_date');
$show->field('parameters')->as(function ($items) {
if (is_array($items)) {
// 创建表格的表头
$table = '
';
$table .= 'key | value |
';
// 遍历数组并将数据填充到表格中
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');
$show->field('created_at');
$show->field('updated_at');
$show->field('order');
$show->field('enabled')->using([
'0' => 'No', // 显示的状态名称
'1' => 'Yes',
]);
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(BaseProduct::with('images'), function (Form $form) {
$form->display('id');
$form->select('category_id', 'Category Name')
->options(BaseProductCategory::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->multipleImage('images', 'images')
->sortable() // 可拖动排序
->removable() // 可移除图片
->autoUpload() // 自动上传
->uniqueName()
->accept('jpg,png,gif,jpeg,webp')
->move('images/product/'.date("Ymd"))
->customFormat(function () {
// 数据格式化为数组['1.jpg','2.jpg'] 编辑时用到
return array_column($this->images, 'image_url');
})
->saving(function ($images) {
return array_map(function($image) {
return ['image_url' => $image];
}, $images);
});
$form->editor('content');
$form->switch('is_pinned')->default(0);
$form->switch('enabled')->default(1);
//插入JS
$this->addParametersJs();
});
}
/*
* 以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
);
}
}