✨ 用户列表
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
public function index(Request $request): View
|
||||
{
|
||||
$status = $request->query('status');
|
||||
$users = User::query()->when($status > -1, function (Builder $builder) use ($status) {
|
||||
$builder->where('status', $status);
|
||||
})->when($request->query('keywords'), function (Builder $builder, $keywords) {
|
||||
$builder->whereRaw("concat(name, email) like ?",["%{$keywords}%"]);
|
||||
})->with('group')->withSum('images', 'size')->latest()->paginate();
|
||||
$statuses = [-1 => '全部', 1 => '正常', 0 => '冻结'];
|
||||
return view('admin.user.index', compact('users', 'statuses'));
|
||||
}
|
||||
}
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
<x-app-layout>
|
||||
<div class="my-6 md:my-10">
|
||||
<div class="mb-3 flex justify-between w-full">
|
||||
<x-button type="button" onclick="window.location.href = '{{ route('admin.group.create') }}'">创建角色组</x-button>
|
||||
<form class="h-9.5" action="{{ route('admin.groups') }}" method="get">
|
||||
<x-input class="text-sm h-full px-2" name="keywords" placeholder="输入名称回车搜索..." value="{{ request('keywords') }}" />
|
||||
</form>
|
||||
</div>
|
||||
<form action="{{ route('admin.groups') }}" method="get">
|
||||
<div class="mb-3 flex justify-between w-full">
|
||||
<x-button type="button" onclick="window.location.href = '{{ route('admin.group.create') }}'">创建角色组</x-button>
|
||||
<input class="px-2 text-sm rounded-md bg-white border-transparent focus:border-gray-500 focus:bg-white focus:ring-0" name="keywords" placeholder="输入名称回车搜索..." value="{{ request('keywords') }}" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<x-table :columns="['ID', '名称', '是否默认', '图片审核', '原图保护', '水印' ,'用户数量', '策略数量', '操作']">
|
||||
<tr data-id="0">
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
<x-app-layout>
|
||||
<div class="my-6 md:my-10">
|
||||
<div class="mb-3 flex justify-between w-full">
|
||||
<x-button type="button" onclick="window.location.href = '{{ route('admin.strategy.create') }}'">创建储存策略</x-button>
|
||||
<form class="h-9.5" action="{{ route('admin.strategies') }}" method="get">
|
||||
<x-input class="text-sm h-full px-2" name="keywords" placeholder="输入关键字回车搜索..." value="{{ request('keywords') }}" />
|
||||
</form>
|
||||
</div>
|
||||
<form action="{{ route('admin.strategies') }}" method="get">
|
||||
<div class="mb-3 flex justify-between w-full">
|
||||
<x-button type="button" onclick="window.location.href = '{{ route('admin.strategy.create') }}'">创建储存策略</x-button>
|
||||
<input class="px-2 text-sm rounded-md bg-white border-transparent focus:border-gray-500 focus:bg-white focus:ring-0" name="keywords" placeholder="输入名称回车搜索..." value="{{ request('keywords') }}" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<x-table :columns="['ID', '名称', '驱动', '图片数量', '已使用储存', '操作']">
|
||||
@foreach($strategies as $strategy)
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
@section('title', '用户管理')
|
||||
|
||||
<x-app-layout>
|
||||
<div class="my-6 md:my-10">
|
||||
<form id="search-form" action="{{ route('admin.users') }}" method="get">
|
||||
<div class="mb-3 flex justify-between">
|
||||
<select name="status" class="text-sm rounded-md bg-white border-transparent focus:border-gray-500 focus:bg-white focus:ring-0" onchange="$('#search-form').submit()">
|
||||
@foreach($statuses as $key => $status)
|
||||
<option value="{{ $key }}" {{ request('status', -1) == $key ? 'selected' : '' }}>{{ $status }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<input class="px-2 text-sm rounded-md bg-white border-transparent focus:border-gray-500 focus:bg-white focus:ring-0" name="keywords" placeholder="输入关键字回车搜索..." value="{{ request('keywords') }}" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<x-table :columns="['ID', '邮箱', '名称', '角色组', '总容量', '剩余容量', '图片数量', '相册数量', '状态', '操作']">
|
||||
@foreach($users as $user)
|
||||
<tr data-id="{{ $user->id }}">
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ $user->id }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ $user->name }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ $user->email }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">
|
||||
<span class="rounded-md bg-sky-500 text-sm text-white py-1 px-4">
|
||||
{{ $user->group->name ?? '-' }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ \App\Utils::formatSize($user->capacity * 1024) }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ \App\Utils::formatSize(($user->capacity - $user->images_sum_size) * 1024) }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ $user->image_num }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ $user->album_num }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap">{{ $user->status ? '正常' : '冻结' }}</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium space-x-2">
|
||||
<a href="{{ route('admin.user.edit', ['id' => $user->id]) }}" class="text-indigo-600 hover:text-indigo-900">编辑</a>
|
||||
@if(Auth::user()->id != $user->id)
|
||||
<a href="javascript:void(0)" data-operate="delete" class="text-red-600 hover:text-red-900">删除</a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</x-table>
|
||||
@if($users->isEmpty())
|
||||
<x-no-data message="没有找到任何用户"/>
|
||||
@else
|
||||
<div class="mt-4">
|
||||
{{ $users->links() }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
$('[data-operate="delete"]').click(function () {
|
||||
Swal.fire({
|
||||
title: `确认删除用户【${$(this).closest('tr').find('td.name').text()}】吗?`,
|
||||
text: "⚠️注意,删除后不可恢复,且该用户的图片将会变成游客身份!",
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '确认删除',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
let id = $(this).closest('tr').data('id');
|
||||
axios.delete(`/admin/users/${id}`).then(response => {
|
||||
if (response.data.status) {
|
||||
history.go(0);
|
||||
} else {
|
||||
toastr.error(response.data.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
</x-app-layout>
|
||||
@@ -52,7 +52,7 @@
|
||||
<x-slot name="icon"><i class="fas fa-users text-blue-500"></i></x-slot>
|
||||
<x-slot name="name">角色组</x-slot>
|
||||
</x-nav-link>
|
||||
<x-nav-link :active="request()->is('admin/users*')">
|
||||
<x-nav-link :href="route('admin.users')" :active="request()->is('admin/users*')">
|
||||
<x-slot name="icon"><i class="fas fa-users-cog text-blue-500"></i></x-slot>
|
||||
<x-slot name="name">用户管理</x-slot>
|
||||
</x-nav-link>
|
||||
|
||||
@@ -20,6 +20,7 @@ use App\Http\Controllers\User\ProfileController;
|
||||
|
||||
use App\Http\Controllers\Admin\GroupController as AdminGroupController;
|
||||
use App\Http\Controllers\Admin\StrategyController as AdminStrategyController;
|
||||
use App\Http\Controllers\Admin\UserController as AdminUserController;
|
||||
|
||||
Route::get('/', fn () => view('welcome'))->name('/');
|
||||
Route::post('upload', [Controller::class, 'upload']);
|
||||
@@ -44,6 +45,13 @@ Route::group(['middleware' => ['auth']], function () {
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'admin', 'middleware' => ['auth.admin']], function () {
|
||||
Route::group(['prefix' => 'users'], function () {
|
||||
Route::get('', [AdminUserController::class, 'index'])->name('admin.users');
|
||||
Route::get('{id}', [AdminUserController::class, 'edit'])->name('admin.user.edit');
|
||||
Route::put('{id}', [AdminUserController::class, 'update'])->name('admin.user.update');
|
||||
Route::delete('{id}', [AdminUserController::class, 'delete'])->name('admin.user.delete');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'groups'], function () {
|
||||
Route::get('', [AdminGroupController::class, 'index'])->name('admin.groups');
|
||||
Route::get('create', [AdminGroupController::class, 'add'])->name('admin.group.add');
|
||||
|
||||
Reference in New Issue
Block a user