From 81a86ff65d2e0a1abc9159ec7bbc80bfb53c5574 Mon Sep 17 00:00:00 2001 From: "allen.yan" Date: Sat, 26 Jul 2025 17:22:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AA=BF=E6=95=B4=20=E6=AA=94=E6=A1=88?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=20=E4=BF=AE=E6=AD=A3=20User=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20=E5=8A=A0=E5=85=A5=E5=AF=86=E7=A2=BC=E9=A9=97?= =?UTF-8?q?=E8=A8=BC=2020250726?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Livewire/{Admin => Forms}/ArtistForm.php | 4 ++-- app/Livewire/{Admin => Forms}/BranchForm.php | 4 ++-- .../ImportDatas/Artist.php} | 6 +++--- .../ImportDatas/Branch.php} | 6 +++--- .../ImportDatas/Song.php} | 6 +++--- app/Livewire/{Admin => Forms}/RoleForm.php | 4 ++-- app/Livewire/{Admin => Forms}/SongForm.php | 4 ++-- app/Livewire/{Admin => Forms}/UserForm.php | 17 ++++++++++++++--- .../{Admin => Grids/Modals}/RoomDetailModal.php | 4 ++-- app/Livewire/{Admin => Grids}/RoomGrid.php | 4 ++-- .../{Admin => Tables}/ActivityLogTable.php | 4 ++-- app/Livewire/{Admin => Tables}/ArtistTable.php | 8 ++++---- app/Livewire/{Admin => Tables}/BranchTable.php | 10 +++++----- app/Livewire/{Admin => Tables}/RoleTable.php | 8 ++++---- app/Livewire/{Admin => Tables}/SongTable.php | 8 ++++---- app/Livewire/Tables/TextAdsTable.php | 2 +- app/Livewire/{Admin => Tables}/UserTable.php | 8 ++++---- resources/lang/zh-tw/users.php | 2 ++ .../views/livewire/admin/activity-log.blade.php | 2 +- .../views/livewire/admin/artists.blade.php | 6 +++--- .../views/livewire/admin/branches.blade.php | 8 ++++---- resources/views/livewire/admin/roles.blade.php | 4 ++-- resources/views/livewire/admin/songs.blade.php | 6 +++--- resources/views/livewire/admin/users.blade.php | 4 ++-- .../{admin => forms}/artist-form.blade.php | 0 .../{admin => forms}/branch-form.blade.php | 0 .../headers/activity-log.blade.php} | 0 .../headers/artist.blade.php} | 4 ++-- .../headers/branch.blade.php} | 4 ++-- .../headers/role.blade.php} | 2 +- .../headers/song.blade.php} | 4 ++-- .../livewire/forms/headers/text-ad.blade.php | 8 ++++++++ .../headers/user.blade.php} | 2 +- .../import-datas/artist.blade.php} | 0 .../import-datas/branch.blade.php} | 0 .../import-datas/song.blade.php} | 0 .../{admin => forms}/role-form.blade.php | 0 .../{admin => forms}/song-form.blade.php | 0 .../{admin => forms}/user-form.blade.php | 15 +++++++++++++++ .../modals}/room-detail-modal.blade.php | 2 +- .../{admin => grids}/room-grid.blade.php | 2 +- 41 files changed, 109 insertions(+), 73 deletions(-) rename app/Livewire/{Admin => Forms}/ArtistForm.php (97%) rename app/Livewire/{Admin => Forms}/BranchForm.php (98%) rename app/Livewire/{Admin/ArtistImportData.php => Forms/ImportDatas/Artist.php} (95%) rename app/Livewire/{Admin/BranchImportData.php => Forms/ImportDatas/Branch.php} (95%) rename app/Livewire/{Admin/SongImportData.php => Forms/ImportDatas/Song.php} (95%) rename app/Livewire/{Admin => Forms}/RoleForm.php (97%) rename app/Livewire/{Admin => Forms}/SongForm.php (98%) rename app/Livewire/{Admin => Forms}/UserForm.php (86%) rename app/Livewire/{Admin => Grids/Modals}/RoomDetailModal.php (96%) rename app/Livewire/{Admin => Grids}/RoomGrid.php (92%) rename app/Livewire/{Admin => Tables}/ActivityLogTable.php (97%) rename app/Livewire/{Admin => Tables}/ArtistTable.php (97%) rename app/Livewire/{Admin => Tables}/BranchTable.php (96%) rename app/Livewire/{Admin => Tables}/RoleTable.php (96%) rename app/Livewire/{Admin => Tables}/SongTable.php (98%) rename app/Livewire/{Admin => Tables}/UserTable.php (97%) rename resources/views/livewire/{admin => forms}/artist-form.blade.php (100%) rename resources/views/livewire/{admin => forms}/branch-form.blade.php (100%) rename resources/views/livewire/{admin/activity-log-header.blade.php => forms/headers/activity-log.blade.php} (100%) rename resources/views/livewire/{admin/artist-header.blade.php => forms/headers/artist.blade.php} (72%) rename resources/views/livewire/{admin/branch-header.blade.php => forms/headers/branch.blade.php} (72%) rename resources/views/livewire/{admin/role-header.blade.php => forms/headers/role.blade.php} (77%) rename resources/views/livewire/{admin/song-header.blade.php => forms/headers/song.blade.php} (72%) create mode 100644 resources/views/livewire/forms/headers/text-ad.blade.php rename resources/views/livewire/{admin/user-header.blade.php => forms/headers/user.blade.php} (76%) rename resources/views/livewire/{admin/artist-import-data.blade.php => forms/import-datas/artist.blade.php} (100%) rename resources/views/livewire/{admin/branch-import-data.blade.php => forms/import-datas/branch.blade.php} (100%) rename resources/views/livewire/{admin/song-import-data.blade.php => forms/import-datas/song.blade.php} (100%) rename resources/views/livewire/{admin => forms}/role-form.blade.php (100%) rename resources/views/livewire/{admin => forms}/song-form.blade.php (100%) rename resources/views/livewire/{admin => forms}/user-form.blade.php (78%) rename resources/views/livewire/{admin => grids/modals}/room-detail-modal.blade.php (94%) rename resources/views/livewire/{admin => grids}/room-grid.blade.php (98%) diff --git a/app/Livewire/Admin/ArtistForm.php b/app/Livewire/Forms/ArtistForm.php similarity index 97% rename from app/Livewire/Admin/ArtistForm.php rename to app/Livewire/Forms/ArtistForm.php index cd55898..3bd5847 100644 --- a/app/Livewire/Admin/ArtistForm.php +++ b/app/Livewire/Forms/ArtistForm.php @@ -1,6 +1,6 @@ '', 'gender' => 'unset', 'status' => 0, + 'password' => '', // 新增 + 'password_confirmation' => '', // 新增 ]; @@ -86,7 +88,16 @@ class UserForm extends Component public function save() { - //$this->validate(); + $rules = $this->rules; + // 加入 email / phone 唯一性驗證,排除自己(編輯時) + $rules['fields.email'] .= '|unique:users,email' . ($this->userId ? ",{$this->userId}" : ''); + $rules['fields.phone'] .= '|unique:users,phone' . ($this->userId ? ",{$this->userId}" : ''); + + // 新增時才驗證密碼 + if (!$this->userId) { + $rules['fields.password'] = ['required', 'string', 'min:8', 'confirmed']; + } + $validated = $this->validate($rules); if ($this->userId) { if ($this->canEdit) { @@ -148,6 +159,6 @@ class UserForm extends Component public function render() { - return view('livewire.admin.user-form'); + return view('livewire.forms.user-form'); } } diff --git a/app/Livewire/Admin/RoomDetailModal.php b/app/Livewire/Grids/Modals/RoomDetailModal.php similarity index 96% rename from app/Livewire/Admin/RoomDetailModal.php rename to app/Livewire/Grids/Modals/RoomDetailModal.php index 56d2efc..c6fb3d6 100644 --- a/app/Livewire/Admin/RoomDetailModal.php +++ b/app/Livewire/Grids/Modals/RoomDetailModal.php @@ -1,6 +1,6 @@ pluck('floor')->unique()->sort()->values()->toArray(); - return view('livewire.admin.room-grid',['rooms' =>$rooms,'floors' =>$floors]); + return view('livewire.grids.room-grid',['rooms' =>$rooms,'floors' =>$floors]); } } diff --git a/app/Livewire/Admin/ActivityLogTable.php b/app/Livewire/Tables/ActivityLogTable.php similarity index 97% rename from app/Livewire/Admin/ActivityLogTable.php rename to app/Livewire/Tables/ActivityLogTable.php index 6e05423..0144bd3 100644 --- a/app/Livewire/Admin/ActivityLogTable.php +++ b/app/Livewire/Tables/ActivityLogTable.php @@ -1,6 +1,6 @@ showToggleColumns(); //->showSoftDeletes() //->showSearchInput() - $header->includeViewOnTop('livewire.admin.activity-log-header'); + $header->includeViewOnTop('livewire.forms.headers.activity-log'); $actions[]=$header; $actions[]=PowerGrid::footer()->showPerPage()->showRecordCount(); return $actions; diff --git a/app/Livewire/Admin/ArtistTable.php b/app/Livewire/Tables/ArtistTable.php similarity index 97% rename from app/Livewire/Admin/ArtistTable.php rename to app/Livewire/Tables/ArtistTable.php index d0fc154..b053eae 100644 --- a/app/Livewire/Admin/ArtistTable.php +++ b/app/Livewire/Tables/ArtistTable.php @@ -1,6 +1,6 @@ showSoftDeletes() //->showSearchInput() if($this->canCreate){ - $header->includeViewOnTop('livewire.admin.artist-header') ; + $header->includeViewOnTop('livewire.forms.headers.artist') ; } $actions[]=$header; $actions[]=PowerGrid::footer()->showPerPage()->showRecordCount(); @@ -211,14 +211,14 @@ final class ArtistTable extends PowerGridComponent ->slot(__('artists.edit')) ->icon('solid-pencil-square') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.artist-form', 'openModal', ['id' => $row->id]); + ->dispatchTo('forms.artist-form', 'openModal', ['id' => $row->id]); } if($this->canDelect){ $actions[] =Button::add('delete') ->slot(__('artists.delete')) ->icon('solid-trash') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.artist-form', 'deleteArtist', ['id' => $row->id]); + ->dispatchTo('forms.artist-form', 'deleteArtist', ['id' => $row->id]); } return $actions; } diff --git a/app/Livewire/Admin/BranchTable.php b/app/Livewire/Tables/BranchTable.php similarity index 96% rename from app/Livewire/Admin/BranchTable.php rename to app/Livewire/Tables/BranchTable.php index 2a6d33c..79ff8d2 100644 --- a/app/Livewire/Admin/BranchTable.php +++ b/app/Livewire/Tables/BranchTable.php @@ -1,6 +1,6 @@ showSoftDeletes() //->showSearchInput() if($this->canCreate){ - $header->includeViewOnTop('livewire.admin.branch-header') ; + $header->includeViewOnTop('livewire.forms.headers.branch') ; } $actions[]=$header; $actions[]=PowerGrid::footer()->showPerPage()->showRecordCount(); @@ -205,7 +205,7 @@ final class BranchTable extends PowerGridComponent ->slot('包廂設定') ->icon('solid-cog') ->class('inline-flex items-center gap-1 px-3 py-1 rounded bg-amber-200 text-black') - ->dispatchTo('admin.room-grid', 'openModal', ['branch_id' => $row->id]); + ->dispatchTo('grids.room-grid', 'openModal', ['branch_id' => $row->id]); $actions[] = Button::add('room-synchronous') ->slot('包廂同步') ->icon('solid-cog') @@ -216,14 +216,14 @@ final class BranchTable extends PowerGridComponent ->slot(__('branches.edit')) ->icon('solid-pencil-square') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.branch-form', 'openModal', ['id' => $row->id]); + ->dispatchTo('forms.branch-form', 'openModal', ['id' => $row->id]); } if($this->canDelect){ $actions[] =Button::add('delete') ->slot(__('branches.delete')) ->icon('solid-trash') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.branch-form', 'deleteBranch', ['id' => $row->id]); + ->dispatchTo('forms.branch-form', 'deleteBranch', ['id' => $row->id]); } return $actions; } diff --git a/app/Livewire/Admin/RoleTable.php b/app/Livewire/Tables/RoleTable.php similarity index 96% rename from app/Livewire/Admin/RoleTable.php rename to app/Livewire/Tables/RoleTable.php index b575225..d8317ad 100644 --- a/app/Livewire/Admin/RoleTable.php +++ b/app/Livewire/Tables/RoleTable.php @@ -1,6 +1,6 @@ canCreate){ - $header->includeViewOnTop('livewire.admin.role-header'); + $header->includeViewOnTop('livewire.forms.headers.role'); } $actions[]=$header; $actions[]=PowerGrid::footer() @@ -155,14 +155,14 @@ final class RoleTable extends PowerGridComponent ->slot(__('roles.edit')) ->icon('solid-pencil-square') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.role-form', 'openEditRoleModal', ['id' => $row->id]); + ->dispatchTo('forms.role-form', 'openEditRoleModal', ['id' => $row->id]); } if($this->canDelect){ $actions[] =Button::add('delete') ->slot(__('roles.delete')) ->icon('solid-trash') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.role-form', 'deleteRole', ['id' => $row->id]); + ->dispatchTo('forms.role-form', 'deleteRole', ['id' => $row->id]); } return $actions; } diff --git a/app/Livewire/Admin/SongTable.php b/app/Livewire/Tables/SongTable.php similarity index 98% rename from app/Livewire/Admin/SongTable.php rename to app/Livewire/Tables/SongTable.php index f0fd015..56342d9 100644 --- a/app/Livewire/Admin/SongTable.php +++ b/app/Livewire/Tables/SongTable.php @@ -1,6 +1,6 @@ showSoftDeletes()->showToggleColumns(); if($this->canCreate){ - $header->includeViewOnTop('livewire.admin.song-header'); + $header->includeViewOnTop('livewire.forms.headers.song'); } $actions[]=$header; $actions[]=PowerGrid::footer()->showPerPage()->showRecordCount(); @@ -261,14 +261,14 @@ final class SongTable extends PowerGridComponent ->slot(__('songs.edit')) ->icon('solid-pencil-square') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.song-form', 'openModal', ['id' => $row->id]); + ->dispatchTo('forms.song-form', 'openModal', ['id' => $row->id]); } if($this->canDelect){ $actions[]=Button::add('delete') ->slot(__('songs.delete')) ->icon('solid-trash') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.song-form', 'deleteSong', ['id' => $row->id]); + ->dispatchTo('forms.song-form', 'deleteSong', ['id' => $row->id]); } return $actions; diff --git a/app/Livewire/Tables/TextAdsTable.php b/app/Livewire/Tables/TextAdsTable.php index db23dfa..ef950b1 100644 --- a/app/Livewire/Tables/TextAdsTable.php +++ b/app/Livewire/Tables/TextAdsTable.php @@ -53,7 +53,7 @@ final class TextAdsTable extends PowerGridComponent } $header = PowerGrid::header()->showSoftDeletes()->showToggleColumns(); if($this->canCreate){ - $header->includeViewOnTop('livewire.header.text-ad'); + $header->includeViewOnTop('livewire.forms.headers.text-ad'); } $actions[]=$header; $actions[]=PowerGrid::footer()->showPerPage()->showRecordCount(); diff --git a/app/Livewire/Admin/UserTable.php b/app/Livewire/Tables/UserTable.php similarity index 97% rename from app/Livewire/Admin/UserTable.php rename to app/Livewire/Tables/UserTable.php index 49f1f3a..e80d0db 100644 --- a/app/Livewire/Admin/UserTable.php +++ b/app/Livewire/Tables/UserTable.php @@ -1,6 +1,6 @@ showToggleColumns(); if($this->canCreate){ - $header->includeViewOnTop('livewire.admin.user-header'); + $header->includeViewOnTop('livewire.forms.headers.user'); } $actions[]=$header; $actions[]=PowerGrid::footer()->showPerPage()->showRecordCount(); @@ -239,14 +239,14 @@ final class UserTable extends PowerGridComponent ->slot(__('users.edit')) ->icon('solid-pencil-square') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.user-form', 'openModal', ['id' => $row->id]); + ->dispatchTo('forms.user-form', 'openModal', ['id' => $row->id]); } if($this->canDelect){ $actions[]=Button::add('delete') ->slot(__('users.delete')) ->icon('solid-trash') ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->dispatchTo('admin.user-form', 'deleteUser', ['id' => $row->id]); + ->dispatchTo('forms.user-form', 'deleteUser', ['id' => $row->id]); } return $actions; } diff --git a/resources/lang/zh-tw/users.php b/resources/lang/zh-tw/users.php index bb934dd..f61b6cb 100644 --- a/resources/lang/zh-tw/users.php +++ b/resources/lang/zh-tw/users.php @@ -14,6 +14,8 @@ return [ 'birthday' => '生日', 'status' => '狀態', 'role' =>'角色', + 'password' => '密碼', + 'password_confirmation' => '確認密碼', 'select_gender'=>'選擇性別', 'select_status'=>'選擇狀態', diff --git a/resources/views/livewire/admin/activity-log.blade.php b/resources/views/livewire/admin/activity-log.blade.php index 560ce2d..4619394 100644 --- a/resources/views/livewire/admin/activity-log.blade.php +++ b/resources/views/livewire/admin/activity-log.blade.php @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/resources/views/livewire/admin/artists.blade.php b/resources/views/livewire/admin/artists.blade.php index 6fb4311..53964dc 100644 --- a/resources/views/livewire/admin/artists.blade.php +++ b/resources/views/livewire/admin/artists.blade.php @@ -1,7 +1,7 @@ - - - + + + \ No newline at end of file diff --git a/resources/views/livewire/admin/branches.blade.php b/resources/views/livewire/admin/branches.blade.php index 73e8088..627fa26 100644 --- a/resources/views/livewire/admin/branches.blade.php +++ b/resources/views/livewire/admin/branches.blade.php @@ -1,8 +1,8 @@ - - - - + + + + \ No newline at end of file diff --git a/resources/views/livewire/admin/roles.blade.php b/resources/views/livewire/admin/roles.blade.php index 49ae7ed..6b5a159 100644 --- a/resources/views/livewire/admin/roles.blade.php +++ b/resources/views/livewire/admin/roles.blade.php @@ -1,6 +1,6 @@ - - + + \ No newline at end of file diff --git a/resources/views/livewire/admin/songs.blade.php b/resources/views/livewire/admin/songs.blade.php index 0fda345..e8effd8 100644 --- a/resources/views/livewire/admin/songs.blade.php +++ b/resources/views/livewire/admin/songs.blade.php @@ -1,7 +1,7 @@ - - - + + + \ No newline at end of file diff --git a/resources/views/livewire/admin/users.blade.php b/resources/views/livewire/admin/users.blade.php index 33c11d8..2ee77c7 100644 --- a/resources/views/livewire/admin/users.blade.php +++ b/resources/views/livewire/admin/users.blade.php @@ -1,6 +1,6 @@ - - + + \ No newline at end of file diff --git a/resources/views/livewire/admin/artist-form.blade.php b/resources/views/livewire/forms/artist-form.blade.php similarity index 100% rename from resources/views/livewire/admin/artist-form.blade.php rename to resources/views/livewire/forms/artist-form.blade.php diff --git a/resources/views/livewire/admin/branch-form.blade.php b/resources/views/livewire/forms/branch-form.blade.php similarity index 100% rename from resources/views/livewire/admin/branch-form.blade.php rename to resources/views/livewire/forms/branch-form.blade.php diff --git a/resources/views/livewire/admin/activity-log-header.blade.php b/resources/views/livewire/forms/headers/activity-log.blade.php similarity index 100% rename from resources/views/livewire/admin/activity-log-header.blade.php rename to resources/views/livewire/forms/headers/activity-log.blade.php diff --git a/resources/views/livewire/admin/artist-header.blade.php b/resources/views/livewire/forms/headers/artist.blade.php similarity index 72% rename from resources/views/livewire/admin/artist-header.blade.php rename to resources/views/livewire/forms/headers/artist.blade.php index dde280a..6f16fc4 100644 --- a/resources/views/livewire/admin/artist-header.blade.php +++ b/resources/views/livewire/forms/headers/artist.blade.php @@ -1,13 +1,13 @@ + + \ No newline at end of file diff --git a/resources/views/livewire/admin/user-header.blade.php b/resources/views/livewire/forms/headers/user.blade.php similarity index 76% rename from resources/views/livewire/admin/user-header.blade.php rename to resources/views/livewire/forms/headers/user.blade.php index d6bf44e..128185d 100644 --- a/resources/views/livewire/admin/user-header.blade.php +++ b/resources/views/livewire/forms/headers/user.blade.php @@ -1,6 +1,6 @@ + + @if (!$userId) + + + @endif diff --git a/resources/views/livewire/admin/room-detail-modal.blade.php b/resources/views/livewire/grids/modals/room-detail-modal.blade.php similarity index 94% rename from resources/views/livewire/admin/room-detail-modal.blade.php rename to resources/views/livewire/grids/modals/room-detail-modal.blade.php index 2ac52f5..eac9688 100644 --- a/resources/views/livewire/admin/room-detail-modal.blade.php +++ b/resources/views/livewire/grids/modals/room-detail-modal.blade.php @@ -1,4 +1,4 @@ - +