KTV/app/Livewire/Admin/SongForm.php
allen.yan d9924bf05b 加入 ⻆色權限控制
修正 'n' => 'ㄣ' 轉值問題
加入 歌手搜尋功能
DB 開 點播次數欄位
20250505
2025-05-05 11:22:40 +08:00

120 lines
3.2 KiB
PHP

<?php
namespace App\Livewire\Admin;
use Livewire\Component;
use App\Enums\SongLanguageType;
use App\Enums\SongSituation;
use App\Models\Song;
use App\Models\SongCategory;
class SongForm extends Component
{
protected $listeners = ['openCreateSongModal','openEditSongModal', 'deleteSong'];
public bool $showCreateModal = false;
public $songCategories =[];
public $songLanguageType =[];
public $songSituation =[];
public $selectedCategories=[];
public $selectedArtists=[];
public ?int $songId = null;
public array $fields = [
'id' =>'',
'name' => '',
'adddate' => '',
'filename' => '',
'language_type' => '',
'db_change' => '',
'vocal' => '',
'situation' => '',
'copyright01' => '',
'copyright02' => '',
'note01' => '',
'note02' => '',
'note03' => '',
'note04' => '',
'enable' => true,
];
//protected $rules = [
// 'name' => 'required|string|max:255',
//
//];
public function mount()
{
$this->songCategories = SongCategory::all();
$this->songLanguageType = collect(SongLanguageType::cases())->map(fn ($languageType) => [
'name' => $languageType->labels(),
'value' => $languageType->value,
])->toArray();
$this->songSituation = collect(SongSituation::cases())->map(fn ($situation) => [
'name' => $situation->labels(),
'value' => $situation->value,
])->toArray();
}
public function openCreateSongModal()
{
$this->resetFields();
$this->showCreateModal = true;
}
public function openEditSongModal($id)
{
$song = Song::findOrFail($id);
$this->songId = $song->id;
$this->fields = $song->only(array_keys($this->fields));
$this->selectedCategories = $song->categories()->pluck('id')->toArray();
$this->selectedArtists = $song->artists()->pluck('id')->toArray();
//dd($this->fields,$this->selectedCategories,$this->selectedArtists);
$this->showCreateModal = true;
}
public function save()
{
//$this->validate();
if ($this->songId) {
$song = Song::findOrFail($this->songId);
$song->update($this->fields);
session()->flash('message', '歌曲已更新');
} else {
$song = Song::create($this->fields);
session()->flash('message', '歌曲已新增');
}
// ⭐ 同步多對多關聯
$song->artists()->sync($this->selectedArtists ?? []);
$song->categories()->sync($this->selectedCategories ?? []);
$this->resetFields();
$this->showCreateModal = false;
$this->dispatch('pg:eventRefresh-song-table');
}
public function deleteSong($id)
{
Song::findOrFail($id)->delete();
session()->flash('message', '歌曲已刪除');
}
public function resetFields()
{
foreach ($this->fields as $key => $value) {
$this->fields[$key] = is_bool($value) ? false : '';
}
$this->songId = null;
}
public function render()
{
return view('livewire.admin.song-form');
}
}