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 @@ - +