Files
yuezi-saas/backend/app/Http/Controllers/Admin/System/UserController.php
T
li ee2b1757d0 feat: 员工自助注册+审核流程
- 新增 registration_packages 表:管理员配置注册套餐(名称/角色)
- AuthController 新增 register() 和 registrationPackages() 公开接口
- UserController 新增 approve() / reject() 审核接口
- StoreController 新增 publicList() 公开门店列表
- 前端 /register 注册页:选门店→选岗位套餐→填信息→提交
- 前端 system/registration-packages:套餐 CRUD
- 用户管理页:待审核状态展示 + 通过/拒绝快捷操作
- 登录页底部加「申请注册」跳转链接
- 路由白名单加 /register
2026-03-14 17:39:50 +08:00

148 lines
4.4 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\System;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
public function index(Request $request): JsonResponse
{
$query = User::with(['department', 'position', 'roles']);
if ($request->keyword) {
$query->where(function ($q) use ($request) {
$q->where('name', 'like', "%{$request->keyword}%")
->orWhere('phone', 'like', "%{$request->keyword}%")
->orWhere('username', 'like', "%{$request->keyword}%");
});
}
if ($request->department_id) {
$query->where('department_id', $request->department_id);
}
if ($request->has('status')) {
$query->where('status', $request->status);
}
$users = $query->orderByDesc('id')
->paginate($request->input('page_size', 20));
return $this->paginate($users);
}
public function store(Request $request): JsonResponse
{
$data = $request->validate([
'username' => 'required|string|max:50|unique:users,username',
'password' => 'required|string|min:6',
'name' => 'required|string|max:50',
'phone' => 'nullable|string|max:20',
'email' => 'nullable|email|max:100',
'department_id' => 'nullable|exists:departments,id',
'position_id' => 'nullable|exists:positions,id',
'status' => 'in:0,1,2',
'role_ids' => 'array',
'role_ids.*' => 'exists:roles,id',
]);
$roleIds = $data['role_ids'] ?? [];
unset($data['role_ids']);
$data['store_id'] = auth()->user()->store_id;
$user = User::create($data);
if ($roleIds) {
$user->roles()->sync($roleIds);
}
return $this->success($user->load('roles'), '创建成功');
}
public function show(User $user): JsonResponse
{
$user->load(['department', 'position', 'roles']);
return $this->success($user);
}
public function update(Request $request, User $user): JsonResponse
{
$data = $request->validate([
'name' => 'string|max:50',
'phone' => 'nullable|string|max:20',
'email' => 'nullable|email|max:100',
'department_id' => 'nullable|exists:departments,id',
'position_id' => 'nullable|exists:positions,id',
'role_ids' => 'array',
'role_ids.*' => 'exists:roles,id',
]);
$roleIds = $data['role_ids'] ?? null;
unset($data['role_ids']);
$user->update($data);
if ($roleIds !== null) {
$user->roles()->sync($roleIds);
}
return $this->success($user->load('roles'), '更新成功');
}
/**
* 更新状态
*/
public function updateStatus(Request $request, User $user): JsonResponse
{
$request->validate(['status' => 'required|in:0,1,2']);
$user->update(['status' => $request->status]);
return $this->success(null, '状态更新成功');
}
/**
* 重置密码
*/
public function resetPassword(Request $request, User $user): JsonResponse
{
$request->validate(['password' => 'required|string|min:6']);
$user->update(['password' => $request->password]);
return $this->success(null, '密码重置成功');
}
/**
* 审核通过 — 激活待审核用户
*/
public function approve(User $user): JsonResponse
{
if ($user->status->value !== 2) {
return $this->error('该用户不在待审核状态');
}
$user->update(['status' => 1]);
return $this->success(null, '已审核通过');
}
/**
* 审核拒绝 — 禁用该用户
*/
public function reject(User $user): JsonResponse
{
if ($user->status->value !== 2) {
return $this->error('该用户不在待审核状态');
}
$user->update(['status' => 0]);
return $this->success(null, '已拒绝注册');
}
public function destroy(User $user): JsonResponse
{
if ($user->is_super) {
return $this->error('超级管理员不可删除');
}
$user->delete();
return $this->success(null, '删除成功');
}
}