select('tag', '类目')->options(Tag::where('type', Tag::TYPE_STORE_STOCK)->pluck('name', 'id')); $form->text('tag_name', '自定义类目'); $form->select('product', '商品')->options($store->productSkus()->select(['store_product_skus.id', 'product_skus.name'])->pluck('name', 'id'))->required(); $form->number('amount', '库存')->help('正数为增加, 负数为减少')->default(0)->required(); $form->text('remarks', '备注'); return (new Content())->title('新增')->body($form); } public function store($store_id, Request $request) { $request->validate([ 'amount' => ['required', Rule::notIn([0])], 'product' => 'required', 'tag' => 'required_without:tag_name' ], [ 'amount.not_in' => '库存不能为0', 'tag.required_without' => '类目必填', ]); if ($request->filled('tag')) { $tag = Tag::findOrFail($request->input('tag')); } else { $tag = Tag::firstOrCreate([ 'type' => Tag::TYPE_STORE_STOCK, 'name' => $request->input('tag_name') ]); } $store = Store::findOrFail($store_id); $product = $store->productSkus()->wherePivot('id', $request->input('product'))->firstOrFail(); $administrator = Admin::user(); $amount = $request->input('amount'); if ($product->pivot->amount + $amount < 0) { return $this->sendResponse($this->response()->error('扣减库存不能超过现有库存')); } $store->productSkus()->updateExistingPivot($product->id, [ 'amount' => $product->pivot->amount + $amount ]); $store->stockLogs()->create([ 'administrator_id' => $administrator->id, 'amount' => $request->input('amount'), 'product_sku_id' => $product->id, 'remarks' => $request->input('remarks'), 'tag_id' => $tag->id ]); return $this->sendResponse($this->response()->success(trans('admin.save_succeeded'))); } }