wyyl/beike/Admin/Http/Controllers/LogisticsController.php

222 lines
6.6 KiB
PHP

<?php
namespace Beike\Admin\Http\Controllers;
use Beike\Admin\Http\Requests\LogisticsRequest;
use Beike\Admin\Http\Resources\LogisticsAttributeResource;
use Beike\Admin\Http\Resources\LogisticsResource;
use Beike\Admin\Repositories\TaxClassRepo;
use Beike\Admin\Services\LogisticsService;
use Beike\Libraries\Weight;
use Beike\Models\Logistics;
use Beike\Repositories\CategoryRepo;
use Beike\Repositories\LanguageRepo;
use Beike\Repositories\LogisticsRepo;
use Illuminate\Http\Request;
class LogisticsController extends Controller
{
protected string $defaultRoute = 'logistics.index';
public function index(Request $request)
{
$requestData = $request->all();
if (! isset($requestData['sort'])) {
$requestData['sort'] = 'logistics.updated_at';
}
$productList = LogisticsRepo::list($requestData);
$products = LogisticsResource::collection($productList);
$productsFormat = $products->jsonSerialize();
$data = [
'categories' => CategoryRepo::flatten(locale()),
'products_format' => $productsFormat,
'products' => $products,
'type' => 'products',
];
$data = hook_filter('admin.product.index.data', $data);
if ($request->expectsJson()) {
return $productsFormat;
}
return view('admin::pages.products.index', $data);
}
public function trashed(Request $request)
{
$requestData = $request->all();
$requestData['trashed'] = true;
$productList = LogisticsRepo::list($requestData);
$products = LogisticsResource::collection($productList);
$productsFormat = $products->jsonSerialize();
$data = [
'categories' => CategoryRepo::flatten(locale()),
'products_format' => $productsFormat,
'products' => $products,
'type' => 'trashed',
];
$data = hook_filter('admin.product.trashed.data', $data);
if ($request->expectsJson()) {
return $products;
}
return view('admin::pages.products.index', $data);
}
public function create(Request $request)
{
return $this->form($request, new Logistics());
}
public function store(LogisticsRequest $request)
{
try {
$requestData = $request->all();
$product = (new LogisticsService)->create($requestData);
$data = [
'request_data' => $requestData,
'product' => $product,
];
hook_action('admin.product.store.after', $data);
return redirect()->to(admin_route('products.index'))
->with('success', trans('common.created_success'));
} catch (\Exception $e) {
return redirect(admin_route('products.create'))
->withInput()
->withErrors(['error' => $e->getMessage()]);
}
}
public function edit(Request $request, Logistics $product)
{
return $this->form($request, $product);
}
public function update(LogisticsRequest $request, Logistics $product)
{
try {
$requestData = $request->all();
$product = (new LogisticsService)->update($product, $requestData);
$data = [
'request_data' => $requestData,
'product' => $product,
];
hook_action('admin.product.update.after', $data);
return redirect()->to($this->getRedirect())->with('success', trans('common.updated_success'));
} catch (\Exception $e) {
return redirect(admin_route('products.edit', $product))->withErrors(['error' => $e->getMessage()]);
}
}
public function copy(LogisticsRequest $request, Logistics $product)
{
try {
$product = (new LogisticsService)->copy($product);
$data = [
'product' => $product,
];
hook_action('admin.product.copy.after', $data);
return json_success(trans('common.copy_success'), []);
} catch (\Exception $e) {
return json_encode($e->getMessage());
}
}
public function destroy(Request $request, Logistics $product)
{
$product->delete();
hook_action('admin.product.destroy.after', $product);
return json_success(trans('common.deleted_success'));
}
public function restore(Request $request)
{
$productId = $request->id ?? 0;
Logistics::withTrashed()->find($productId)->restore();
hook_action('admin.product.restore.after', $productId);
return ['success' => true];
}
protected function form(Request $request, Logistics $logistics)
{
$logistics = hook_filter('admin.logistics.form.product', $logistics);
$data = [
'logistics' => $logistics,
'languages' => LanguageRepo::all(),
'weight_classes' => Weight::getWeightUnits(),
'_redirect' => $this->getRedirect(),
];
$data = hook_filter('admin.logistics.form.data', $data);
return view('admin::pages.logistics.form.form', $data);
}
public function name(int $id)
{
$name = LogisticsRepo::getName($id);
return json_success(trans('common.get_success'), $name);
}
/**
* 根据商品ID批量获取商品名称
*
* @param Request $request
* @return array
*/
public function getNames(Request $request): array
{
$productIds = explode(',', $request->get('product_ids'));
$name = LogisticsRepo::getNames($productIds);
return json_success(trans('common.get_success'), $name);
}
public function autocomplete(Request $request)
{
$products = LogisticsRepo::autocomplete($request->get('name') ?? '');
return json_success(trans('common.get_success'), $products);
}
public function updateStatus(Request $request)
{
LogisticsRepo::updateStatusByIds($request->get('ids'), $request->get('status'));
return json_success(trans('common.updated_success'), []);
}
public function destroyByIds(Request $request)
{
$productIds = $request->get('ids');
LogisticsRepo::DeleteByIds($productIds);
hook_action('admin.product.destroy_by_ids.after', $productIds);
return json_success(trans('common.deleted_success'), []);
}
public function trashedClear()
{
LogisticsRepo::forceDeleteTrashed();
}
}