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.

57 lines
2.3 KiB

4 weeks ago
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\WechatUser;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class WechatUserController extends Controller
{
public function index(Request $request): JsonResponse
{
$pageSize = max(1, min(100, (int) $request->input('page_size', 20)));
$query = WechatUser::query()->orderByDesc('id');
if ($request->filled('keyword')) {
$keyword = trim((string) $request->input('keyword'));
$query->where(function ($q) use ($keyword) {
$q->where('phone', 'like', "%{$keyword}%")
->orWhere('nickname', 'like', "%{$keyword}%")
->orWhere('real_name', 'like', "%{$keyword}%");
});
}
$user = $request->user();
if (! $user->isSuperAdmin()) {
2 weeks ago
$venueIds = $user->venues()->pluck('venues.id')->all();
if (empty($venueIds)) {
$query->whereRaw('1 = 0');
} else {
// 活动预约可能仅填手机号、wechat_user_id 为空;通过后一条件,在「个人中心」已绑定手机号的用户仍可按手机号检索到
$query->where(function ($outer) use ($venueIds) {
$outer->whereExists(function ($sub) use ($venueIds) {
$sub->selectRaw('1')
->from('reservations')
->whereNull('reservations.deleted_at')
->whereColumn('reservations.wechat_user_id', 'wechat_users.id')
->whereIn('reservations.venue_id', $venueIds);
})->orWhereExists(function ($sub) use ($venueIds) {
$sub->selectRaw('1')
->from('reservations')
->whereNull('reservations.deleted_at')
->whereIn('reservations.venue_id', $venueIds)
->whereNotNull('reservations.visitor_phone')
->whereNotNull('wechat_users.phone')
->whereColumn('reservations.visitor_phone', 'wechat_users.phone');
});
});
}
4 weeks ago
}
return response()->json($query->paginate($pageSize));
}
}