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) { if ($item->productSku) { array_push($data, ['id' => $item->productSku->id, 'text' => $item->productSku->name]); } else { // logger()->error('店铺 商品 Sku 不存在, sku_id: ' . $item->product_sku_id); } } 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->tools(function (Grid\Tools $tools) { $tools->append(new \App\Admin\Actions\Store\ImportProduct()); $tools->append(new \App\Admin\Actions\Store\DownloadProductTemplate()); }); $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 <<