model()->orderBy('created_at', 'desc'); $grid->column('sn'); $grid->column('store_id')->display(fn() => data_get($this->store, 'title')); $grid->column('tag_id')->display(fn() => data_get($this->tag, 'name')); $grid->column('admin_user_id')->display(fn() => data_get($this->adminUser, 'name')); $grid->column('status')->using([0 => '未确认', 1 => '已确认'])->label([0 => 'danger', 1 => 'success']); $grid->column('product_sku_id')->display(fn() => '共'.$this->productSkus->count().'件')->modal(function ($modal) { $modal->title('商品记录'); $data = $this->productSkus->map(fn($item) => [$item->name, $item->pivot?->amount])->all(); return Table::make(['名称', '数量'], $data); }); $grid->column('remarks')->editable(); $grid->column('created_at'); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->equal('store_id')->select('api/store')->width(3); $filter->equal('tag_id', '类目')->select(StockLog::tags()->pluck('name', 'id'))->width(3); $filter->equal('admin_user_id')->select()->model(Administrator::class)->ajax('api/administrators?_paginate=1')->width(3); $filter->equal('status')->select([0 => '未确认', 1 => '已确认'])->width(3); }); $user = Admin::user(); $grid->showCreateButton($user->can('dcat.admin.store.batch.create')); $grid->showViewButton($user->can('dcat.admin.store.batch.show')); $grid->actions(function (Grid\Displayers\Actions $actions) use ($user) { $row = $actions->row; if (!$row->status) { $actions->append(new \App\Admin\Actions\Store\RowAddStock()); } $actions->delete($user->can('dcat.admin.store.batch.destroy') && !$row->status); $actions->edit($user->can('dcat.admin.store.batch.edit') && !$row->status); }); }); } protected function form() { return Form::make(StockBatch::with(['productSkus']), function (Form $form) { $fullForm = $form->isCreating() || ($form->isEditing() && $form->model()->status == 0); if ($fullForm) { $form->text('sn')->required(); $form->select('store_id')->options(Store::pluck('title', 'id'))->required(); $form->select('tag_id')->options(StockLog::tags()->pluck('name', 'id'))->required(); $form->text('remarks'); $form->hidden('admin_user_id')->value(Admin::user()->id); $form->table('productSkus', function (Form\NestedForm $form) { $form->select('product_sku_id')->options(ProductSku::class)->ajax('api/product-skus'); $form->text('amount')->help('正数为增加, 负数为减少'); })->saving(function ($value) { $result = []; if ($value) { $products = ProductSku::whereIn('id', array_column($value, 'product_sku_id'))->get(); foreach($value as $item) { $product = $products->firstWhere('id', $item['product_sku_id']); if ($product) { array_push($result, [ 'product_sku_id' => $product->id, 'product_spu_id' => $product->spu_id, 'amount' => $item['amount'] ]); } } } return $result; }); } else { $form->text('sn')->required(); $form->text('remarks'); } $form->disableCreatingCheck(); $form->disableEditingCheck(); $form->disableResetButton(); }); } protected function detail($id) { return Show::make($id, StockBatch::with(['store', 'adminUser', 'tag', 'productSkus']), function (Show $show) { $show->field('sn'); $show->field('store_id')->as(fn() => $this->store?->title); $show->field('tag_id')->as(fn() => $this->tag?->name); $show->field('admin_user_id')->as(fn() => $this->adminUser?->name); $show->field('remarks'); $show->field('product_sku_id')->as(function () { $data = $this->productSkus->map(fn($item) => [$item->name, $item->pivot?->amount])->all(); return Table::make(['名称', '数量'], $data); })->unescape(); $user = Admin::user(); $model = $show->model(); $show->disableEditButton(!$user->can('dcat.admin.store.batch.edit') || $model->status); $show->disableDeleteButton(!$user->can('dcat.admin.store.batch.destroy') || $model->status); }); } }