130 lines
4.8 KiB
PHP
130 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\Store;
|
|
|
|
use Dcat\Admin\{Form, Grid, Admin};
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
use Dcat\Admin\Models\Administrator;
|
|
use App\Models\{ProductCategory, ProductSku};
|
|
use App\Models\Store\{Store, ProductSku as StoreProductSku};
|
|
|
|
class ProductController extends AdminController
|
|
{
|
|
protected $translation = 'store-product';
|
|
|
|
public function listByStore()
|
|
{
|
|
$user = Admin::user();
|
|
$canAdmin = $this->canAdmin();
|
|
|
|
$query = StoreProductSku::with(['productSku']);
|
|
if ($canAdmin) {
|
|
$query->where('store_id', request('q'));
|
|
} else {
|
|
$stores = $user->stores->pluck('id');
|
|
$query->whereIn('store_id', $stores);
|
|
}
|
|
|
|
$list = $query->get();
|
|
$data = [];
|
|
foreach($list as $item) {
|
|
array_push($data, ['id' => $item->productSku->id, 'text' => $item->productSku->name]);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
protected function grid()
|
|
{
|
|
$grid = new Grid(StoreProductSku::with(['store', 'productSku.category']));
|
|
$user = Admin::user();
|
|
$canAdmin = $this->canAdmin();
|
|
if (!$canAdmin) {
|
|
$stores = $user->stores->pluck('id');
|
|
$grid->model()->whereIn('store_id', $stores);
|
|
}
|
|
$grid->model()->orderBy('id', 'desc');
|
|
|
|
$grid->column('productSku.id', 'ID');
|
|
$grid->column('store.title', '店铺');
|
|
$grid->column('productSku.category.name', '分类');
|
|
$grid->column('productSku.name', '名称');
|
|
$grid->column('productSku.specs', '规格')->label();
|
|
$grid->column('productSku.cost_price', '成本价')->display(function ($value) {
|
|
return bcdiv($value, 100, 2);
|
|
});
|
|
$grid->column('productSku.sell_price', '销售价')->display(function ($value) {
|
|
return bcdiv($value, 100, 2);;
|
|
});
|
|
$grid->column('amount', '库存')->sortable();
|
|
$grid->column('status', '状态')->switch();
|
|
$grid->paginate(10);
|
|
|
|
$grid->showCreateButton($user->can('dcat.admin.store.product.create'));
|
|
$grid->enableDialogCreate();
|
|
|
|
$grid->showDeleteButton($user->can('dcat.admin.store.product.destroy'));
|
|
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$filter->panel();
|
|
$filter->equal('store_id')->select('api/store')->width(3);
|
|
$filter->equal('productSku.category_id', '分类')->select(admin_route('api.product_categories', ['level' => 2]))->width(3);
|
|
$filter->like('productSku.name', '名称')->width(3);
|
|
});
|
|
$grid->footer(function ($collection) use ($grid) {
|
|
$query = StoreProductSku::join('product_skus', 'product_skus.id', '=', 'store_product_skus.product_sku_id');
|
|
$grid->model()->getQueries()->unique()->each(function ($value) use (&$query) {
|
|
if (in_array($value['method'], ['paginate', 'get', 'orderBy', 'orderByDesc'], true)) {
|
|
return;
|
|
}
|
|
|
|
$query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []);
|
|
});
|
|
$count = $query->count();
|
|
$market_price = 0;
|
|
$cost_price = 0;
|
|
$market_price = number_format($query->sum('product_skus.market_price') / 100);
|
|
$cost_price = number_format($query->sum('product_skus.cost_price') / 100);
|
|
$stock = number_format($query->sum('store_product_skus.amount'));
|
|
return <<<HTML
|
|
<table class="table table-bordered">
|
|
<tbody>
|
|
<tr>
|
|
<td>统计</td>
|
|
<td>总数: $count</td>
|
|
<td></td>
|
|
<td></td>
|
|
<td>成本价: $cost_price</td>
|
|
<td>销售价: $market_price</td>
|
|
<td>库存: $stock</td>
|
|
<tr>
|
|
</tbody>
|
|
</table>
|
|
HTML;
|
|
});
|
|
return $grid;
|
|
}
|
|
|
|
protected function form()
|
|
{
|
|
$form = Form::make(StoreProductSku::with(['productSku']));
|
|
$form->select('store_id')->options(Store::pluck('title', 'id'));
|
|
$form->select('product_sku_id')->options(ProductSku::class)->ajax('api/product-skus');
|
|
$form->switch('status', '状态')->default(1);
|
|
$form->saving(function (Form $form) {
|
|
if ($form->isCreating()) {
|
|
$store_id = $form->input('store_id');
|
|
$product_sku_id = $form->input('product_sku_id');
|
|
if (StoreProductSku::where(compact('store_id', 'product_sku_id'))->exists()) {
|
|
return $form->response()->error('该商品已经存在');
|
|
}
|
|
}
|
|
});
|
|
return $form;
|
|
}
|
|
|
|
protected function canAdmin()
|
|
{
|
|
return Admin::user()->isRole('administrator');
|
|
}
|
|
}
|