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 @@
-
+
\ No newline at end of file