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.sell_price', '销售价')->display(fn ($value) => bcdiv($value, 100, 2)); $grid->column('productSku.cost_price', '成本价')->display(fn ($value) => bcdiv($value, 100, 2)); // $grid->column('profit', '毛利')->display(function () { // $sell_price = data_get($this->productSku, 'sell_price'); // $cost_price = data_get($this->productSku, 'cost_price'); // return round(($sell_price - $cost_price) / 100, 2, PHP_ROUND_HALF_DOWN); // }); $grid->column('amount', '库存'); // $grid->column('sell', '总销售')->display(function () { // $sell_price = data_get($this->productSku, 'sell_price'); // return round($sell_price / 100 * $this->amount, 2, PHP_ROUND_HALF_DOWN); // }); // $grid->column('cost', '总成本')->display(function () { // $cost_price = data_get($this->productSku, 'cost_price'); // return round($cost_price / 100 * $this->amount, 2, PHP_ROUND_HALF_DOWN); // }); $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->where('category_id', function ($q) { $id = $this->input; $q->whereHas('productSku', fn($q1) => $q1->filter(['category' => $id], \App\Endpoint\Api\Filters\ProductSkuFilter::class)); }, '分类')->select(ProductCategory::selectOptions())->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(); // return << // // // 统计 // 总数: $count // // // // // // // 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->hidden('product_spu_id'); $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'); $sku = ProductSku::findOrFail($product_sku_id); if (StoreProductSku::where(compact('store_id', 'product_sku_id'))->exists()) { return $form->response()->error('该商品已经存在'); } $form->product_spu_id = $sku->spu_id; } }); return $form; } protected function canAdmin() { return Admin::user()->isRole('administrator'); } }