6
0
Fork 0
jiqu-library-server/app/Admin/Controllers/Store/StockBatchController.php

122 lines
5.6 KiB
PHP

<?php
namespace App\Admin\Controllers\Store;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\{Form, Grid, Admin, Show};
use App\Models\Store\{Store, StockBatch, StockLog};
use App\Models\{ProductSku};
use Dcat\Admin\Widgets\Table;
use App\Models\Admin\Administrator;
class StockBatchController extends AdminController
{
protected $translation = 'store-stock-bacth';
protected function grid()
{
return Grid::make(StockBatch::with(['store', 'adminUser', 'tag', 'productSkus']), function (Grid $grid) {
$grid->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);
});
}
}