地址管理

This commit is contained in:
TL 2022-07-04 19:54:14 +08:00
parent 6640ec2728
commit 0f8ae94e22
7 changed files with 138 additions and 17 deletions

View File

@ -15,6 +15,7 @@ use Beike\Models\Category;
use Beike\Models\CategoryPath;
use Beike\Repositories\AddressRepo;
use Beike\Repositories\CustomerRepo;
use Beike\Repositories\ZoneRepo;
use Illuminate\Support\Facades\DB;
class AddressService
@ -45,7 +46,7 @@ class AddressService
'phone' => $data['phone'] ?? '',
'country_id' => (int)$data['country_id'] ?? 0,
'zone_id' => (int)$data['zone_id'] ?? 0,
'zone' => $data['zone'] ?? '',
'zone' => ZoneRepo::find($data['zone_id'])->name,
'city_id' => (int)$data['city_id'] ?? 0,
'city' => $data['city'] ?? '',
'zipcode' => $data['zipcode'] ?? '',

View File

@ -47,7 +47,7 @@ class ZoneRepo
*/
public static function find($id)
{
return Zone::query()->find($id);
return Zone::query()->findOrFail($id);
}
/**

View File

@ -12,9 +12,10 @@
namespace Beike\Shop\Http\Controllers\Account;
use Beike\Shop\Http\Controllers\Controller;
use Beike\Shop\Http\Resources\CustomerResource;
use Beike\Shop\Http\Requests\AddressRequest;
use Beike\Shop\Http\Resources\Account\AddressResource;
use Beike\Repositories\AddressRepo;
use Beike\Repositories\CustomerRepo;
use Beike\Shop\Services\AddressService;
use Illuminate\Http\Request;
class AddressController extends Controller
@ -23,28 +24,36 @@ class AddressController extends Controller
{
$addresses = AddressRepo::listByCustomer(current_customer());
$data = [
'addresses' => CustomerResource::collection($addresses),
'addresses' => AddressResource::collection($addresses),
];
return view('account/address', $data);
}
public function store(Request $request)
public function show(Request $request, $id)
{
$data = $request->only(['name', 'phone', 'country_id', 'state_id', 'state', 'city_id', 'city', 'zipcode', 'address_1', 'address_2']);
$data['customer_id'] = current_customer()->customer_id;
return AddressRepo::create($data);
$address = AddressRepo::find($id);
return json_success('获取成功', new AddressResource($address));
}
public function update(Request $request, int $addressId)
public function store(AddressRequest $request)
{
return AddressRepo::update($addressId, $request->only(['name', 'phone', 'country_id', 'state_id', 'state', 'city_id', 'city', 'zipcode', 'address_1', 'address_2']));
$data = $request->only(['name', 'phone', 'country_id', 'zone_id', 'zone', 'city_id', 'city', 'zipcode', 'address_1', 'address_2']);
$address = AddressService::create($data);
return json_success('创建成功', new AddressResource($address));
}
public function destroy(Request $request, int $addressId)
public function update(AddressRequest $request, int $id)
{
AddressRepo::delete($addressId);
$address = AddressRepo::update($id, $request->only(['name', 'phone', 'country_id', 'zone_id', 'zone', 'city_id', 'city', 'zipcode', 'address_1', 'address_2']));
return json_success('更新成功', new AddressResource($address));
}
return ['success' => true];
public function destroy(Request $request, int $id)
{
AddressRepo::delete($id);
return json_success('删除成功');
}
}

View File

@ -0,0 +1,45 @@
<?php
namespace Beike\Shop\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AddressRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
'phone' => 'required',
'country_id' => 'required|exists:countries,id',
'zone_id' => 'required|exists:zones,id',
'address_1' => 'required',
];
}
public function attributes()
{
return [
'name' => '姓名',
'phone' => '电话号码',
'country_id' => '国家ID',
'zone_id' => '省份ID',
'address_1' => '地址1',
];
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace Beike\Shop\Http\Resources\Account;
use Illuminate\Http\Resources\Json\JsonResource;
class AddressResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
$data = [
'name' => $this->name,
'phone' => $this->phone,
'country_id' => $this->country_id,
'country' => $this->country->name,
'zone_id' => $this->zone_id,
'zone' => $this->zone,
'city' => $this->city,
'zipcode' => $this->zipcode,
'address_1' => $this->address_1,
'address_2' => $this->address_2,
];
return $data;
}
}

View File

@ -43,11 +43,12 @@ Route::prefix('/')
Route::post('register', [RegisterController::class, 'store'])->name('register.store');
Route::get('logout', [LogoutController::class, 'index'])->name('logout');
Route::middleware('shop_auth:' . Customer::AUTH_GUARD)
Route::prefix('account/')
->middleware('shop_auth:' . Customer::AUTH_GUARD)
->group(function () {
Route::get('account', [AccountController::class, 'index'])->name('account.index');
Route::get('/', [AccountController::class, 'index'])->name('account.index');
Route::resource('account/addresses', AddressController::class);
Route::resource('addresses', AddressController::class);
});
Route::get('/{url_key}', [PagesController::class, 'show'])->name('pages.show');

View File

@ -0,0 +1,33 @@
<?php
/**
* AddressService.php
*
* @copyright 2022 opencart.cn - All Rights Reserved
* @link http://www.guangdawangluo.com
* @author Sam Chen <sam.chen@opencart.cn>
* @created 2022-07-04 18:52:57
* @modified 2022-07-04 18:52:57
*/
namespace Beike\Shop\Services;
use Beike\Repositories\AddressRepo;
class AddressService
{
public static function create($data)
{
$data['customer_id'] = current_customer()->customer_id;
$address = AddressRepo::create($data);
return $address;
}
public static function update($id, $data)
{
$address = AddressRepo::update($id, $data);
return $address;
}
}