Files
yuezi-saas/backend/app/Http/Controllers/Client/AuthController.php
T

104 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Client;
use App\Http\Controllers\Controller;
use App\Models\Crm\Customer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AuthController extends Controller
{
/**
* 客户端登录(手机号 + 密码)
*/
public function login(Request $request): JsonResponse
{
$request->validate([
'phone' => 'required|string',
'password' => 'required|string',
]);
$customer = Customer::withoutGlobalScope('store')
->where('phone', $request->phone)
->first();
if (!$customer || !$customer->password) {
return $this->error('手机号或密码错误', 40100, 401);
}
if (!\Hash::check($request->password, $customer->password)) {
return $this->error('手机号或密码错误', 40100, 401);
}
if (in_array($customer->status, [4, 5])) {
return $this->error('账号已停用,请联系门店', 40101, 403);
}
// 清除旧 client token
$customer->tokens()->where('name', 'client')->delete();
$token = $customer->createToken('client')->plainTextToken;
$customer->update(['last_login_at' => now()]);
return $this->success([
'token' => $token,
'customer' => $this->formatCustomer($customer),
]);
}
/**
* 退出登录
*/
public function logout(Request $request): JsonResponse
{
$request->user()->currentAccessToken()->delete();
return $this->success(null, '退出成功');
}
/**
* 获取当前客户信息
*/
public function me(Request $request): JsonResponse
{
$customer = $request->user()->load(['families', 'contracts']);
return $this->success($this->formatCustomer($customer));
}
/**
* 修改密码
*/
public function changePassword(Request $request): JsonResponse
{
$request->validate([
'old_password' => 'required|string',
'new_password' => 'required|string|min:6',
]);
$customer = $request->user();
if (!\Hash::check($request->old_password, $customer->password)) {
return $this->error('原密码不正确', 40001);
}
$customer->update(['password' => $request->new_password]);
return $this->success(null, '密码修改成功');
}
private function formatCustomer(Customer $c): array
{
return [
'id' => $c->id,
'name' => $c->name,
'phone' => $c->phone,
'wechat' => $c->wechat,
'store_id' => $c->store_id,
'expected_date' => $c->expected_date?->toDateString(),
'actual_date' => $c->actual_date?->toDateString(),
'baby_count' => $c->baby_count,
'status' => $c->status,
'families' => $c->relationLoaded('families') ? $c->families : [],
'contracts' => $c->relationLoaded('contracts') ? $c->contracts : [],
];
}
}