Andrew 1 ヶ月 前
コミット
c2fcd1fa91
共有1 個のファイルを変更した25 個の追加23 個の削除を含む
  1. 25
    23
      app/Filament/Resources/ProjectResource.php

+ 25
- 23
app/Filament/Resources/ProjectResource.php ファイルの表示

@@ -12,6 +12,7 @@ use Filament\Forms\Components\FileUpload;
12 12
 use Filament\Forms\Components\Group;
13 13
 use Filament\Forms\Components\Radio;
14 14
 use Filament\Forms\Components\Repeater;
15
+use Filament\Forms\Components\RichEditor;
15 16
 use Filament\Forms\Components\Section;
16 17
 use Filament\Forms\Components\Select;
17 18
 use Filament\Forms\Components\Tabs;
@@ -49,7 +50,7 @@ class ProjectResource extends Resource
49 50
         return $form
50 51
             ->schema([
51 52
                 Section::make('')->schema([
52
-                    Translate::make()->schema(fn (string $locale) => [
53
+                    Translate::make()->schema(fn(string $locale) => [
53 54
                         TextInput::make('name')->label('項目名稱')->required(),
54 55
                         TextInput::make('sub_name')->label('項目子名稱')->required(),
55 56
                     ])
@@ -82,7 +83,7 @@ class ProjectResource extends Resource
82 83
                         Select::make('region_id')->label('地區')->options(function () {
83 84
                             return Region::where('visible', true)->pluck('name', 'id');
84 85
                         })->required(),
85
-                        Translate::make()->schema(fn (string $locale) => [
86
+                        Translate::make()->schema(fn(string $locale) => [
86 87
                             Textarea::make('summaries')->label('簡述'),
87 88
                             TextInput::make('district')->label('區域'),
88 89
                             TextInput::make('address')->label('地址'),
@@ -102,8 +103,8 @@ class ProjectResource extends Resource
102 103
                                     return Badge::all()->mapWithKeys(function ($badge) {
103 104
                                         return [
104 105
                                             $badge->id => '<div class="flex items-center gap-2">
105
-                                                <img src="'.Storage::url($badge->img_url).'" class="w-6 h-6 rounded-full">
106
-                                                <span>'.$badge->title.'</span>
106
+                                                <img src="' . Storage::url($badge->img_url) . '" class="w-6 h-6 rounded-full">
107
+                                                <span>' . $badge->title . '</span>
107 108
                                             </div>',
108 109
                                         ];
109 110
                                     });
@@ -116,15 +117,15 @@ class ProjectResource extends Resource
116 117
                         ])
117 118
                             ->reorderableWithButtons()
118 119
                             ->defaultItems(0)
119
-                            ->visible(fn ($get) => $get('badge_type') == 1),
120
+                            ->visible(fn($get) => $get('badge_type') == 1),
120 121
                         Repeater::make('badgesAward')->label('取得標章')->schema([
121 122
                             Select::make('badge_id')
122 123
                                 ->options(function () {
123 124
                                     return Badge::all()->mapWithKeys(function ($badge) {
124 125
                                         return [
125 126
                                             $badge->id => '<div class="flex items-center gap-2">
126
-                                                <img src="'.Storage::url($badge->img_url).'" class="w-6 h-6 rounded-full">
127
-                                                <span>'.$badge->title.'</span>
127
+                                                <img src="' . Storage::url($badge->img_url) . '" class="w-6 h-6 rounded-full">
128
+                                                <span>' . $badge->title . '</span>
128 129
                                             </div>',
129 130
                                         ];
130 131
                                     });
@@ -143,12 +144,12 @@ class ProjectResource extends Resource
143 144
                         ])
144 145
                             ->reorderableWithButtons()
145 146
                             ->defaultItems(0)
146
-                            ->visible(fn ($get) => $get('badge_type') == 2),
147
+                            ->visible(fn($get) => $get('badge_type') == 2),
147 148
                     ]),
148 149
                     Tab::make('開發歷程')->schema([
149 150
                         Repeater::make('histories')->label('')->schema([
150 151
                             TextInput::make('histories_item_key')
151
-                                ->default(fn () => Str::random())
152
+                                ->default(fn() => Str::random())
152 153
                                 ->hidden()
153 154
                                 ->afterStateHydrated(function (TextInput $component, $state) {
154 155
                                     if (empty($state)) {
@@ -156,14 +157,14 @@ class ProjectResource extends Resource
156 157
                                     }
157 158
                                 }),
158 159
                             DatePicker::make('operate_date')->label('歷程日期')->columnSpan(1)->required(),
159
-                            Translate::make()->schema(fn (string $locale) => [
160
+                            Translate::make()->schema(fn(string $locale) => [
160 161
                                 TextInput::make('title')->label('標題')->columnSpanFull()->required(),
161 162
                             ])
162 163
                                 ->locales(['zh_TW', 'en'])
163 164
                                 ->actions([
164 165
                                     app(DeepLService::class)->createTranslationAction('histories', ['title']),
165 166
                                 ])->columnSpanFull()
166
-                                ->id(fn ($get) => 'histories_'.$get('histories_item_key')),
167
+                                ->id(fn($get) => 'histories_' . $get('histories_item_key')),
167 168
                         ])
168 169
                             ->relationship('histories')
169 170
                             ->reorderableWithButtons()
@@ -173,7 +174,7 @@ class ProjectResource extends Resource
173 174
                     ]),
174 175
                     Tab::make('空間資訊')->schema([
175 176
                         Group::make()->schema([
176
-                            Translate::make()->schema(fn (string $locale) => [
177
+                            Translate::make()->schema(fn(string $locale) => [
177 178
                                 //                                TextInput::make('contact_unit')->label('物管單位'),
178 179
                                 TextInput::make('contact_phone')->label('物管電話'),
179 180
                                 TextInput::make('inversment_phone')->label('招商電話'),
@@ -187,22 +188,23 @@ class ProjectResource extends Resource
187 188
                         ])->columnSpanFull(),
188 189
                         Repeater::make('spaceInfos')->label('')->schema([
189 190
                             TextInput::make('spaceInfos_item_key')
190
-                                ->default(fn () => Str::random())
191
+                                ->default(fn() => Str::random())
191 192
                                 ->hidden()
192 193
                                 ->afterStateHydrated(function (TextInput $component, $state) {
193 194
                                     if (empty($state)) {
194 195
                                         $component->state(Str::random());
195 196
                                     }
196 197
                                 }),
197
-                            Translate::make()->schema(fn (string $locale) => [
198
+                            Translate::make()->schema(fn(string $locale) => [
198 199
                                 TextInput::make('title')->label('標題')->columnSpanFull()->required(),
199
-                                Textarea::make('content')->label('內文')->columnSpanFull()->required(),
200
+                                RichEditor::make('content')->label('內文')->columnSpanFull()->required()
201
+                                    ->toolbarButtons(['bold', 'italic', 'underline', 'link', 'redo', 'undo']),
200 202
                             ])
201 203
                                 ->locales(['zh_TW', 'en'])
202 204
                                 ->actions([
203 205
                                     app(DeepLService::class)->createTranslationAction('spaceInfos', ['title', 'content']),
204 206
                                 ])->columnSpanFull()
205
-                                ->id(fn ($get) => 'spaceInfos_'.$get('spaceInfos_item_key')),
207
+                                ->id(fn($get) => 'spaceInfos_' . $get('spaceInfos_item_key')),
206 208
                         ])
207 209
                             ->relationship('spaceInfos')
208 210
                             ->label('')
@@ -224,7 +226,7 @@ class ProjectResource extends Resource
224 226
                 ImageColumn::make('thumbnail_url')->label('縮圖')->alignCenter(),
225 227
                 ImageColumn::make('first_list_img_url')->label('列表圖')->alignCenter(),
226 228
                 TextColumn::make('region.name')->label('地址')->alignCenter()
227
-                    ->formatStateUsing(fn ($record) => $record->region->getTranslation('name', 'zh_TW').' | '.$record->getTranslation('address', 'zh_TW')),
229
+                    ->formatStateUsing(fn($record) => $record->region->getTranslation('name', 'zh_TW') . ' | ' . $record->getTranslation('address', 'zh_TW')),
228 230
             ])
229 231
             ->filters([
230 232
                 SelectFilter::make('visible')->label('上/下架')
@@ -233,9 +235,9 @@ class ProjectResource extends Resource
233 235
                         1 => '上架',
234 236
                     ])
235 237
                     ->query(
236
-                        fn (array $data, Builder $query): Builder => $query->when(
238
+                        fn(array $data, Builder $query): Builder => $query->when(
237 239
                             $data['value'],
238
-                            fn (Builder $query, $value): Builder => $query->where('visible', $data['value'])
240
+                            fn(Builder $query, $value): Builder => $query->where('visible', $data['value'])
239 241
                         )
240 242
                     ),
241 243
             ])
@@ -243,20 +245,20 @@ class ProjectResource extends Resource
243 245
                 Tables\Actions\EditAction::make(),
244 246
                 Tables\Actions\DeleteAction::make(),
245 247
                 \Filament\Tables\Actions\Action::make('audit')
246
-                    ->label(fn ($record) => match ($record->visible) {
248
+                    ->label(fn($record) => match ($record->visible) {
247 249
                         0 => '上架',
248 250
                         1 => '下架',
249 251
                     })
250
-                    ->color(fn ($record) => match ($record->visible) {
252
+                    ->color(fn($record) => match ($record->visible) {
251 253
                         0 => 'warning',
252 254
                         1 => 'gray',
253 255
                     })
254
-                    ->icon(fn ($record) => match ($record->visible) {
256
+                    ->icon(fn($record) => match ($record->visible) {
255 257
                         0 => 'heroicon-m-chevron-double-up',
256 258
                         1 => 'heroicon-m-chevron-double-down',
257 259
                     })
258 260
                     ->action(function ($record): void {
259
-                        $record->visible = ! $record->visible;
261
+                        $record->visible = !$record->visible;
260 262
                         $record->save();
261 263
                     })
262 264
                     ->outlined()