diff --git a/app/Admin/Controllers/TagController.php b/app/Admin/Controllers/TagController.php index 7b759bbc..648d3f0e 100644 --- a/app/Admin/Controllers/TagController.php +++ b/app/Admin/Controllers/TagController.php @@ -2,9 +2,8 @@ namespace App\Admin\Controllers; -use App\Admin\Repositories\Tag; use App\Exceptions\BizException; -use App\Models\Tag as TagModel; +use App\Models\Tag; use App\Models\Taggable; use Dcat\Admin\Admin; use Dcat\Admin\Form; @@ -24,11 +23,7 @@ class TagController extends AdminController { return Grid::make(new Tag(), function (Grid $grid) { $grid->column('id')->sortable(); - $grid->column('type')->using([ - TagModel::TYPE_ORDER =>'订单', - TagModel::TYPE_PACKAGE=>'货运', - TagModel::TYPE_AFTER_SALE=>'售后', - ])->label(); + $grid->column('type')->using(Tag::$typeMaps)->label(); $grid->column('name'); $grid->column('created_at')->sortable(); @@ -52,11 +47,7 @@ class TagController extends AdminController $grid->setResource('tags'); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); - $filter->equal('type')->select([ - TagModel::TYPE_ORDER =>'订单', - TagModel::TYPE_PACKAGE =>'货运', - TagModel::TYPE_AFTER_SALE =>'售后', - ])->width(3); + $filter->equal('type')->select(Tag::$typeMaps)->width(3); }); }); } @@ -87,11 +78,7 @@ class TagController extends AdminController protected function form() { return Form::make(new Tag(), function (Form $form) { - $types = [ - TagModel::TYPE_ORDER =>'订单', - TagModel::TYPE_PACKAGE=>'货运', - TagModel::TYPE_AFTER_SALE =>'售后', - ]; + $types = Tag::$typeMaps; $type = Request::Input('type', 0); if ($types[$type]) { $types = [ diff --git a/app/Admin/Repositories/Tag.php b/app/Admin/Repositories/Tag.php deleted file mode 100644 index f55032e8..00000000 --- a/app/Admin/Repositories/Tag.php +++ /dev/null @@ -1,16 +0,0 @@ -productSkus()->wherePivot('product_sku_id', $sku_id)->exists()) { - throw new BizException('商品未在该店铺出售, ' . $sku_id); + $store_product = $store->productSkus()->wherePivot('product_sku_id', $sku_id)->first(); + if (!$store_product) { + throw new BizException('店铺未出售商品: ' . $store_product->name); + } + + // 验证商品是否可销售 + if (!$store_product->pivot->status) { + throw new BizException('店铺已下架商品: ' . $store_product->name); + } + + // 验证商品库存(店铺库存) + if ($store_product->pivot->amount < $quantity) { + throw new BizException('店铺商品: ' . $store_product->name . ' 库存不足'); } // 验证商品的购买数量 大于 发货数量 diff --git a/app/Endpoint/Api/Http/Controllers/StoreController.php b/app/Endpoint/Api/Http/Controllers/StoreController.php index ca013640..7cb6aca8 100644 --- a/app/Endpoint/Api/Http/Controllers/StoreController.php +++ b/app/Endpoint/Api/Http/Controllers/StoreController.php @@ -3,11 +3,10 @@ namespace App\Endpoint\Api\Http\Controllers; use Illuminate\Http\Request; -use App\Models\Store; -use App\Endpoint\Api\Http\Resources\StoreResource; -use App\Endpoint\Api\Http\Resources\ProductSkuTinyResource; +use App\Models\Store\Store; use App\Models\ProductSku; use App\Helpers\Paginator; +use App\Endpoint\Api\Http\Resources\{StoreResource, StoreProductResource}; class StoreController extends Controller { @@ -40,10 +39,15 @@ class StoreController extends Controller $input['sort'] = '-id'; } - $fields = ['id', 'name', 'cover', 'sell_price', 'vip_price', 'market_price']; + $fields = ['product_skus.id', 'product_skus.name', 'product_skus.cover', 'product_skus.sell_price', 'product_skus.vip_price', 'product_skus.market_price', 'store_product_skus.amount']; - $skus = $store->productSkus()->select($fields)->filter($input)->online()->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); + $skus = $store->productSkus() + ->select($fields) + ->filter($input) + ->online() + ->wherePivot('status', 1) + ->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); - return ProductSkuTinyResource::collection($skus); + return StoreProductResource::collection($skus); } } diff --git a/app/Endpoint/Api/Http/Resources/StoreProductResource.php b/app/Endpoint/Api/Http/Resources/StoreProductResource.php new file mode 100644 index 00000000..e5f387c0 --- /dev/null +++ b/app/Endpoint/Api/Http/Resources/StoreProductResource.php @@ -0,0 +1,21 @@ + $this->id, + 'name' => $this->name, + 'cover' => (string) $this->cover, + 'sell_price' => (string) $this->sell_price_format, + 'vip_price' => (string) $this->vip_price_format, + 'market_price' => (string) $this->market_price_format, + 'amount' => (int) $this->pivot->amount + ]; + } +} diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 4387b03c..40ac3e40 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -18,6 +18,13 @@ class Tag extends Model protected $fillable = ['type', 'name']; + public static $typeMaps = [ + self::TYPE_ORDER => '订单', + self::TYPE_PACKAGE => '货运', + self::TYPE_AFTER_SALE => '售后', + self::TYPE_STORE_STOCK => '店铺库存', + ]; + // /** // * 标签下的订单 // * diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index 2d073ae8..0dedbb0e 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -243,13 +243,18 @@ class AdminMenuSeeder extends Seeder 'icon' => '', 'uri' => 'aftersale-tags?type=3', ], + [ + 'title' => '售后打款', + 'icon' => '', + 'uri' =>'finance-after-sales?state=5', + ], ], ], - [ - 'title' => '财务管理', - 'icon' => 'fa fa-jpy', - 'uri'=> '', - 'children'=>[ + // [ + // 'title' => '财务管理', + // 'icon' => 'fa fa-jpy', + // 'uri'=> '', + // 'children'=>[ // [ // 'title' => '可提账户', // 'icon'=>'', @@ -270,13 +275,13 @@ class AdminMenuSeeder extends Seeder // 'icon' => '', // 'uri' =>'wallet-to-bank-logs', // ], - [ - 'title' => '售后打款', - 'icon' => '', - 'uri' =>'finance-after-sales?state=5', - ], - ], - ], + // [ + // 'title' => '售后打款', + // 'icon' => '', + // 'uri' =>'finance-after-sales?state=5', + // ], + // ], + // ], [ 'title' => '系统管理', 'icon' => 'feather icon-settings', @@ -307,6 +312,7 @@ class AdminMenuSeeder extends Seeder 'icon' => '', 'uri' => 'settings', ], + ['title' => '标签管理', 'icon' => '', 'uri' => 'tags'] ], ], ];