From 0b4fd797a3df2bd6c0dd211ee903dce7434d6362 Mon Sep 17 00:00:00 2001 From: Wisp X Date: Thu, 20 Jan 2022 16:48:49 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E8=A7=92=E8=89=B2=E7=BB=84?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/GroupController.php | 16 ++- app/Models/Group.php | 2 +- package.json | 4 +- public/css/app.css | 90 ++++++++++++++- .../{groups.blade.php => create.blade.php} | 4 +- resources/views/admin/group/edit.blade.php | 5 + resources/views/admin/group/index.blade.php | 46 ++++++++ resources/views/components/button.blade.php | 2 +- resources/views/components/table.blade.php | 22 ++++ resources/views/user/settings.blade.php | 4 +- .../vendor/pagination/tailwind.blade.php | 106 ++++++++++++++++++ routes/web.php | 6 +- 12 files changed, 292 insertions(+), 15 deletions(-) rename resources/views/admin/group/{groups.blade.php => create.blade.php} (59%) create mode 100644 resources/views/admin/group/edit.blade.php create mode 100644 resources/views/admin/group/index.blade.php create mode 100644 resources/views/components/table.blade.php create mode 100644 resources/views/vendor/pagination/tailwind.blade.php diff --git a/app/Http/Controllers/Admin/GroupController.php b/app/Http/Controllers/Admin/GroupController.php index 1f7780d2..f3e92c23 100644 --- a/app/Http/Controllers/Admin/GroupController.php +++ b/app/Http/Controllers/Admin/GroupController.php @@ -3,12 +3,24 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\Group; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Http\Request; use Illuminate\View\View; class GroupController extends Controller { - public function index(): View + public function index(Request $request): View { - return view('admin.group.groups'); + $groups = Group::query()->when($request->query('keywords'), function (Builder $builder, $keywords) { + $builder->where('name', 'like', "%{$keywords}%"); + })->withCount('users')->withCount('strategies')->latest()->paginate(); + return view('admin.group.index', compact('groups')); + } + + public function edit(Request $request): View + { + $group = Group::query()->findOrFail($request->route('id')); + return view('admin.group.edit', compact('group')); } } diff --git a/app/Models/Group.php b/app/Models/Group.php index 61fea8a8..116933e0 100644 --- a/app/Models/Group.php +++ b/app/Models/Group.php @@ -55,7 +55,7 @@ class Group extends Model public function users(): HasMany { - return $this->hasMany(User::class, 'user_id', 'id'); + return $this->hasMany(User::class, 'group_id', 'id'); } public function strategies(): HasMany diff --git a/package.json b/package.json index c86818de..fad091b2 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "copy-image-clipboard": "^2.0.1", "deepmerge": "^4.2.2", "dragselect": "^2.3.0", + "echarts": "^5.2.2", "jquery": "^3.6.0", "jquery.photoswipe": "^1.1.1", "justifiedGallery": "^3.8.1", @@ -35,7 +36,6 @@ "sweetalert2": "^11.3.3", "tailwindcss": "^3.0.0", "toastr": "^2.1.4", - "viewerjs": "^1.10.2", - "echarts": "^5.2.2" + "viewerjs": "^1.10.2" } } diff --git a/public/css/app.css b/public/css/app.css index 8c8d84e3..ef564a3b 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -735,6 +735,10 @@ select { margin-top: 0.5rem; margin-bottom: 0.5rem; } +.-my-2 { + margin-top: -0.5rem; + margin-bottom: -0.5rem; +} .ml-3 { margin-left: 0.75rem; } @@ -801,15 +805,24 @@ select { .-mr-2 { margin-right: -0.5rem; } +.mb-3 { + margin-bottom: 0.75rem; +} .block { display: block; } +.inline-block { + display: inline-block; +} .flex { display: flex; } .inline-flex { display: inline-flex; } +.table { + display: table; +} .grid { display: grid; } @@ -855,6 +868,9 @@ select { .h-6 { height: 1.5rem; } +.h-9 { + height: 2.25rem; +} .min-h-\[150px\] { min-height: 150px; } @@ -903,6 +919,9 @@ select { .w-6 { width: 1.5rem; } +.min-w-full { + min-width: 100%; +} .max-w-xl { max-width: 36rem; } @@ -971,6 +990,9 @@ select { .cursor-pointer { cursor: pointer; } +.cursor-not-allowed { + cursor: not-allowed; +} .select-none { -webkit-user-select: none; -moz-user-select: none; @@ -1095,12 +1117,19 @@ select { .divide-solid > :not([hidden]) ~ :not([hidden]) { border-style: solid; } +.divide-gray-200 > :not([hidden]) ~ :not([hidden]) { + --tw-divide-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-divide-opacity)); +} .overflow-hidden { overflow: hidden; } .overflow-scroll { overflow: scroll; } +.overflow-x-auto { + overflow-x: auto; +} .overflow-y-auto { overflow-y: auto; } @@ -1224,6 +1253,10 @@ select { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity)); } +.bg-yellow-500 { + --tw-bg-opacity: 1; + background-color: rgb(234 179 8 / var(--tw-bg-opacity)); +} .bg-black { --tw-bg-opacity: 1; background-color: rgb(0 0 0 / var(--tw-bg-opacity)); @@ -1282,14 +1315,17 @@ select { .p-2 { padding: 0.5rem; } +.p-3 { + padding: 0.75rem; +} .p-6 { padding: 1.5rem; } .p-1 { padding: 0.25rem; } -.p-3 { - padding: 0.75rem; +.p-0 { + padding: 0px; } .px-4 { padding-left: 1rem; @@ -1378,12 +1414,18 @@ select { .pb-1 { padding-bottom: 0.25rem; } +.text-left { + text-align: left; +} .text-center { text-align: center; } .text-right { text-align: right; } +.align-middle { + vertical-align: middle; +} .font-sans { font-family: Nunito, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; } @@ -1528,6 +1570,10 @@ select { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity)); } +.text-red-800 { + --tw-text-opacity: 1; + color: rgb(153 27 27 / var(--tw-text-opacity)); +} .underline { -webkit-text-decoration-line: underline; text-decoration-line: underline; @@ -1670,6 +1716,10 @@ select { --tw-bg-opacity: 1; background-color: rgb(75 85 99 / var(--tw-bg-opacity)); } +.hover\:bg-blue-600:hover { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); +} .hover\:text-gray-500:hover { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); @@ -1690,10 +1740,18 @@ select { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity)); } +.hover\:text-indigo-900:hover { + --tw-text-opacity: 1; + color: rgb(49 46 129 / var(--tw-text-opacity)); +} .hover\:text-gray-700:hover { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity)); } +.hover\:text-red-900:hover { + --tw-text-opacity: 1; + color: rgb(127 29 29 / var(--tw-text-opacity)); +} .focus\:z-10:focus { z-index: 10; } @@ -1803,6 +1861,11 @@ select { grid-column: span 3 / span 3; } + .sm\:-mx-6 { + margin-left: -1.5rem; + margin-right: -1.5rem; + } + .sm\:-my-px { margin-top: -1px; margin-bottom: -1px; @@ -1840,6 +1903,10 @@ select { width: 16rem; } + .sm\:w-full { + width: 100%; + } + .sm\:max-w-md { max-width: 28rem; } @@ -1864,6 +1931,12 @@ select { justify-content: space-between; } + .sm\:space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); + } + .sm\:rounded-md { border-radius: 0.375rem; } @@ -1949,6 +2022,14 @@ select { flex-direction: row; } + .md\:flex-col { + flex-direction: column; + } + + .md\:justify-between { + justify-content: space-between; + } + .md\:gap-x-4 { -moz-column-gap: 1rem; column-gap: 1rem; @@ -1985,6 +2066,11 @@ select { } @media (min-width: 1024px) { + .lg\:-mx-8 { + margin-left: -2rem; + margin-right: -2rem; + } + .lg\:flex { display: flex; } diff --git a/resources/views/admin/group/groups.blade.php b/resources/views/admin/group/create.blade.php similarity index 59% rename from resources/views/admin/group/groups.blade.php rename to resources/views/admin/group/create.blade.php index 0bc64b0a..400b14e8 100644 --- a/resources/views/admin/group/groups.blade.php +++ b/resources/views/admin/group/create.blade.php @@ -1,7 +1,5 @@ -@section('title', '角色组管理') -
- 111 + 创建角色组
diff --git a/resources/views/admin/group/edit.blade.php b/resources/views/admin/group/edit.blade.php new file mode 100644 index 00000000..2c65dd0a --- /dev/null +++ b/resources/views/admin/group/edit.blade.php @@ -0,0 +1,5 @@ + +
+ edit +
+
diff --git a/resources/views/admin/group/index.blade.php b/resources/views/admin/group/index.blade.php new file mode 100644 index 00000000..8faf0822 --- /dev/null +++ b/resources/views/admin/group/index.blade.php @@ -0,0 +1,46 @@ +@section('title', '角色组管理') + + +
+
+ 创建角色组 +
+ + +
+ + + @foreach($groups as $group) + + {{ $group->id }} + {{ $group->name }} + + + + + + {{ $group->users_count }} + {{ $group->strategies_count }} + + 编辑 + 删除 + + + @endforeach + + @if($groups->isEmpty()) + + @endif +
+ {{ $groups->links() }} +
+
+ + @push('scripts') + + @endpush + +
diff --git a/resources/views/components/button.blade.php b/resources/views/components/button.blade.php index 8f18773d..e9273980 100644 --- a/resources/views/components/button.blade.php +++ b/resources/views/components/button.blade.php @@ -1,3 +1,3 @@ - diff --git a/resources/views/components/table.blade.php b/resources/views/components/table.blade.php new file mode 100644 index 00000000..0dc25722 --- /dev/null +++ b/resources/views/components/table.blade.php @@ -0,0 +1,22 @@ +
+
+
+
+ + + + @foreach($columns as $column) + + @endforeach + + + + {{ $slot }} + +
+ {{ $column }} +
+
+
+
+
diff --git a/resources/views/user/settings.blade.php b/resources/views/user/settings.blade.php index 098e2326..184638d5 100644 --- a/resources/views/user/settings.blade.php +++ b/resources/views/user/settings.blade.php @@ -87,9 +87,7 @@
- + 保存设置
diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 00000000..c175234a --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,106 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/routes/web.php b/routes/web.php index cfd09a22..e877e20f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -43,7 +43,11 @@ Route::group(['middleware' => ['auth']], function () { }); Route::group(['prefix' => 'admin', 'middleware' => ['auth.admin']], function () { - Route::get('groups', [AdminGroupController::class, 'index'])->name('admin.groups'); + Route::group(['prefix' => 'groups'], function () { + Route::get('', [AdminGroupController::class, 'index'])->name('admin.groups'); + Route::get('create', fn () => view('admin.group.create'))->name('admin.group.create'); + Route::get('{id}/edit', [AdminGroupController::class, 'edit'])->name('admin.group.edit'); + }); }); require __DIR__.'/image.php';