和蕙健康小程序后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
4.7 KiB

10 months ago
<?php
namespace addons\shopro\controller\user;
use think\Db;
use addons\shopro\controller\Common;
use app\admin\model\shopro\data\Area as AreaModel;
use app\admin\model\shopro\user\Address as UserAddressModel;
class Address extends Common
{
protected $noNeedLogin = [];
protected $noNeedRight = ['*'];
public function index()
{
$user = auth_user();
$userAddresses = UserAddressModel::where('user_id', $user->id)
->order('is_default', 'desc')
->order('id', 'desc')
->select();
$this->success('获取成功', $userAddresses);
}
/**
* 添加收货地址
*/
public function add()
{
$user = auth_user();
$params = $this->request->only([
'consignee', 'mobile', 'province_name', 'city_name', 'district_name', 'address', 'is_default'
]);
$params['user_id'] = $user->id;
$this->svalidate($params, ".add");
$params = $this->getAreaIdByName($params);
Db::transaction(function () use ($user, $params) {
$userAddress = new UserAddressModel();
$userAddress->save($params);
if ($userAddress->is_default) {
// 修改其他收货地址为非默认
UserAddressModel::where('id', '<>', $userAddress->id)
->where('user_id', $user->id)
->where('is_default', 1)
->update(['is_default' => 0]);
}
});
$this->success('保存成功');
}
/**
* 收货地址详情
*
* @param $id
* @return \think\Response
*/
public function detail()
{
$user = auth_user();
$id = $this->request->param('id');
$userAddress = UserAddressModel::where('user_id', $user->id)->where('id', $id)->find();
if (!$userAddress) {
$this->error(__('No Results were found'));
}
$this->success('获取成功', $userAddress);
}
/**
* 默认收货地址
*
* @return \think\Response
*/
public function default()
{
$user = auth_user();
$userAddress = UserAddressModel::default()->where('user_id', $user->id)->find();
$this->success('获取成功', $userAddress);
}
/**
* 编辑收货地址
*
* @return \think\Response
*/
public function edit()
{
$user = auth_user();
$id = $this->request->param('id');
$userAddress = UserAddressModel::where('user_id', $user->id)->where('id', $id)->find();
if (!$userAddress) {
$this->error(__('No Results were found'));
}
$params = $this->request->only([
'consignee', 'mobile', 'province_name', 'city_name', 'district_name', 'address', 'is_default'
]);
$this->svalidate($params, ".edit");
$params = $this->getAreaIdByName($params);
Db::transaction(function () use ($user, $params, $userAddress) {
$userAddress->save($params);
if ($userAddress->is_default) {
// 修改其他收货地址为非默认
UserAddressModel::where('id', '<>', $userAddress->id)
->where('user_id', $user->id)
->where('is_default', 1)
->update(['is_default' => 0]);
}
});
$this->success('保存成功');
}
/**
* 删除收货地址
*
* @param string $id 要删除的收货地址
* @return void
*/
public function delete()
{
$user = auth_user();
$id = $this->request->param('id');
$userAddress = UserAddressModel::where('user_id', $user->id)->where('id', $id)->find();
if (!$userAddress) {
$this->error(__('No Results were found'));
}
$userAddress->delete();
$this->success('删除成功');
}
private function getAreaIdByName($params)
{
$province = AreaModel::where([
'name' => $params['province_name'],
'level' => 'province'
])->find();
if (!$province) $this->error('请选择正确的行政区');
$params['province_id'] = $province->id;
$city = AreaModel::where([
'name' => $params['city_name'],
'level' => 'city',
'pid' => $province->id
])->find();
if (!$city) $this->error('请选择正确的行政区');
$params['city_id'] = $city->id;
$district = AreaModel::where([
'name' => $params['district_name'],
'level' => 'district',
'pid' => $city->id
])->find();
if (!$district) $this->error('请选择正确的行政区');
$params['district_id'] = $district->id;
return $params;
}
}