diff --git a/backend/modules/product/virtual/Handler.php b/backend/modules/product/virtual/Handler.php index e34ab0b3b..71693dd7d 100644 --- a/backend/modules/product/virtual/Handler.php +++ b/backend/modules/product/virtual/Handler.php @@ -176,6 +176,8 @@ class Handler extends BaseProductTypeHandler { $dao = app(VirtualProductDao::class); $dao->delete(['product_id' => $productId]); + // SKU 数据(含网盘链接/提取码)随商品彻底删除一并清理 + app(VirtualProductSkuDao::class)->delete(['product_id' => $productId]); } /** diff --git a/backend/modules/product/virtual/Installer.php b/backend/modules/product/virtual/Installer.php index 49beca808..87e68edad 100644 --- a/backend/modules/product/virtual/Installer.php +++ b/backend/modules/product/virtual/Installer.php @@ -208,6 +208,32 @@ class Installer extends BaseModuleInstaller 'access' => 1, 'auth_type' => 3, ], + // 恢复网盘商品(隐藏,仅权限认证用) + [ + 'pid' => '@网盘产品', + 'menu_name' => '恢复网盘商品', + 'controller' => 'virtualProduct', + 'action' => 'restore', + 'module' => 'admin', + 'api_url' => 'virtual/product/restore/:id', + 'methods' => 'PUT', + 'is_show' => 1, + 'access' => 1, + 'auth_type' => 3, + ], + // 彻底删除网盘商品(隐藏,仅权限认证用) + [ + 'pid' => '@网盘产品', + 'menu_name' => '彻底删除网盘商品', + 'controller' => 'virtualProduct', + 'action' => 'forceDelete', + 'module' => 'admin', + 'api_url' => 'virtual/product/force/:id', + 'methods' => 'DELETE', + 'is_show' => 1, + 'access' => 1, + 'auth_type' => 3, + ], // 网盘商品订单详情(隐藏,仅权限认证用) [ 'key' => 'virtual-order-detail', diff --git a/backend/modules/product/virtual/controller/admin/ProductController.php b/backend/modules/product/virtual/controller/admin/ProductController.php index 62b96459d..464fc59e8 100644 --- a/backend/modules/product/virtual/controller/admin/ProductController.php +++ b/backend/modules/product/virtual/controller/admin/ProductController.php @@ -75,12 +75,36 @@ class ProductController extends AuthController } /** - * 删除商品 + * 删除商品(移入回收站,标准链路同时自动下架) */ public function delete(int $id) { $service = app(\app\services\product\CenterProductServices::class); - $service->update($id, ['is_del' => 1]); + // 移入回收站前检测是否参与营销活动 + $service->checkActivity($id); + $msg = $service->del($id); + // 同步失效购物车中该商品 + app(\app\services\order\StoreCartServices::class)->changeStatus($id, 0); + return app('json')->success($msg); + } + + /** + * 从回收站恢复商品 + */ + public function restore(int $id) + { + $service = app(\app\services\product\CenterProductServices::class); + $service->batchRecover([$id]); + return app('json')->success('恢复成功'); + } + + /** + * 回收站商品彻底删除 + */ + public function forceDelete(int $id) + { + $service = app(\app\services\product\CenterProductServices::class); + $service->recycleProduct($id); return app('json')->success('删除成功'); } diff --git a/backend/modules/product/virtual/route/admin.php b/backend/modules/product/virtual/route/admin.php index 642e9b7de..d4df0f232 100644 --- a/backend/modules/product/virtual/route/admin.php +++ b/backend/modules/product/virtual/route/admin.php @@ -28,6 +28,8 @@ Route::group('virtual', function () { Route::delete('product/:id', [ProductController::class, 'delete'])->option(['real_name' => '删除网盘商品']); Route::get('product/:id', [ProductController::class, 'read'])->option(['real_name' => '网盘商品详情']); Route::put('product/status/:id/:status', [ProductController::class, 'setStatus'])->option(['real_name' => '上下架网盘商品']); + Route::put('product/restore/:id', [ProductController::class, 'restore'])->option(['real_name' => '恢复网盘商品']); + Route::delete('product/force/:id', [ProductController::class, 'forceDelete'])->option(['real_name' => '彻底删除网盘商品']); })->option(['parent' => 'virtual', 'cate_name' => '网盘商品管理']); /** 网盘订单 */