Browse Source

bug fix + esg upload award files api

parent
commit
efb64173c1

+ 83
- 0
app/Filament/Resources/UploadFileResource.php View File

@@ -0,0 +1,83 @@
1
+<?php
2
+
3
+namespace App\Filament\Resources;
4
+
5
+use App\Filament\Resources\UploadFileResource\Pages;
6
+use App\Filament\Resources\UploadFileResource\RelationManagers;
7
+use App\Models\UploadFile;
8
+use Filament\Forms\Components\DatePicker;
9
+use Filament\Forms\Components\FileUpload;
10
+use Filament\Forms\Components\Group;
11
+use Filament\Forms\Components\Hidden;
12
+use Filament\Forms\Components\Radio;
13
+use Filament\Forms\Components\Section;
14
+use Filament\Forms\Components\TextInput;
15
+use Filament\Forms\Form;
16
+use Filament\Resources\Resource;
17
+use Filament\Tables;
18
+use Filament\Tables\Columns\TextColumn;
19
+use Filament\Tables\Table;
20
+
21
+class UploadFileResource extends Resource
22
+{
23
+    protected static ?string $model = UploadFile::class;
24
+
25
+    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
26
+    protected static ?string $navigationLabel = "附檔上傳管理";
27
+    protected static ?string $modelLabel = "附檔上傳管理";
28
+
29
+    public static function form(Form $form): Form
30
+    {
31
+        return $form
32
+            ->schema([
33
+                //
34
+                Section::make("")->schema([
35
+                    Group::make()->schema([
36
+                        TextInput::make('title')->required()->label("標題"),
37
+                        Radio::make("type")->label("類型")->options([1 => "社會公益"])->default(1),
38
+                        Group::make()->schema([
39
+                            FileUpload::make("upload_link")->label("上傳檔案")->directory("uploadFiles")->columnSpan(1),
40
+                        ])->columnSpanFull(),
41
+                        DatePicker::make("award_date")->label("獲得日期"),
42
+                    ])->columns(4)->columnSpanFull(),
43
+                ])
44
+            ]);
45
+    }
46
+
47
+    public static function table(Table $table): Table
48
+    {
49
+        return $table
50
+            ->columns([
51
+                TextColumn::make("type_name")->label("類型"),
52
+                TextColumn::make("title")->label("標題"),
53
+                TextColumn::make("award_date")->label("獲得日期")
54
+            ])
55
+            ->filters([
56
+                //
57
+            ])
58
+            ->actions([
59
+                Tables\Actions\EditAction::make(),
60
+            ])
61
+            ->bulkActions([
62
+                Tables\Actions\BulkActionGroup::make([
63
+                    Tables\Actions\DeleteBulkAction::make(),
64
+                ]),
65
+            ]);
66
+    }
67
+
68
+    public static function getRelations(): array
69
+    {
70
+        return [
71
+            //
72
+        ];
73
+    }
74
+
75
+    public static function getPages(): array
76
+    {
77
+        return [
78
+            'index' => Pages\ListUploadFiles::route('/'),
79
+            'create' => Pages\CreateUploadFile::route('/create'),
80
+            'edit' => Pages\EditUploadFile::route('/{record}/edit'),
81
+        ];
82
+    }
83
+}

+ 17
- 0
app/Filament/Resources/UploadFileResource/Pages/CreateUploadFile.php View File

@@ -0,0 +1,17 @@
1
+<?php
2
+
3
+namespace App\Filament\Resources\UploadFileResource\Pages;
4
+
5
+use App\Filament\Resources\UploadFileResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\CreateRecord;
8
+
9
+class CreateUploadFile extends CreateRecord
10
+{
11
+    protected static string $resource = UploadFileResource::class;
12
+
13
+    protected function getRedirectUrl(): string
14
+    {
15
+        return $this->getResource()::getUrl('index');
16
+    }
17
+}

+ 24
- 0
app/Filament/Resources/UploadFileResource/Pages/EditUploadFile.php View File

@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+namespace App\Filament\Resources\UploadFileResource\Pages;
4
+
5
+use App\Filament\Resources\UploadFileResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\EditRecord;
8
+
9
+class EditUploadFile extends EditRecord
10
+{
11
+    protected static string $resource = UploadFileResource::class;
12
+
13
+    protected function getRedirectUrl(): string
14
+    {
15
+        return $this->getResource()::getUrl('index');
16
+    }
17
+
18
+    protected function getHeaderActions(): array
19
+    {
20
+        return [
21
+            // Actions\DeleteAction::make(),
22
+        ];
23
+    }
24
+}

+ 19
- 0
app/Filament/Resources/UploadFileResource/Pages/ListUploadFiles.php View File

@@ -0,0 +1,19 @@
1
+<?php
2
+
3
+namespace App\Filament\Resources\UploadFileResource\Pages;
4
+
5
+use App\Filament\Resources\UploadFileResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\ListRecords;
8
+
9
+class ListUploadFiles extends ListRecords
10
+{
11
+    protected static string $resource = UploadFileResource::class;
12
+
13
+    protected function getHeaderActions(): array
14
+    {
15
+        return [
16
+            Actions\CreateAction::make()->label("新增"),
17
+        ];
18
+    }
19
+}

+ 13
- 0
app/Http/Controllers/Api/EsgController.php View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
4 4
 
5 5
 use App\Http\Controllers\Controller;
6 6
 use App\Models\EsgHistory;
7
+use App\Models\UploadFile;
7 8
 use App\Supports\Response;
8 9
 use Carbon\Carbon;
9 10
 use Illuminate\Http\Request;
@@ -36,4 +37,16 @@ class EsgController extends Controller
36 37
         }
37 38
         return Response::ok($result);
38 39
     }
40
+
41
+    public function uploadFiles($locale = "tw")
42
+    {
43
+        $locale = $locale == "tw" ? "zh_TW" : $locale;
44
+        $fileList = UploadFile::where("type", 1)->select("upload_link", "award_date")->get()->map(function ($record) {
45
+            return [
46
+                "uploadLink" => $record->upload_link,
47
+                "awardDate" => "獲頒日期 : " . date("Y/m/d", strtotime($record->award_date))
48
+            ];
49
+        });
50
+        return Response::ok($fileList);
51
+    }
39 52
 }

+ 2
- 2
app/Models/Project.php View File

@@ -97,7 +97,7 @@ class Project extends Model
97 97
                 $badges[] = [
98 98
                     "imgUrl" => $badge->imgUrlLink,
99 99
                     "name" => $badge->getTranslation("title", $locale),
100
-                    "awardDate" => "取得時間 : " . date("Y.d", strtotime($badge->pivot->award_date))
100
+                    "awardDate" => "取得時間 : " . date("Y.m", strtotime($badge->pivot->award_date))
101 101
                 ];
102 102
             }
103 103
         }
@@ -125,7 +125,7 @@ class Project extends Model
125 125
                     $badges[] = [
126 126
                         "imgUrl" => $badge->imgUrlLink,
127 127
                         "name" => $badge->getTranslation("title", $locale),
128
-                        "awardDate" => "取得時間 : " . date("Y.d", strtotime($badge->pivot->award_date))
128
+                        "awardDate" => "取得時間 : " . date("Y.m", strtotime($badge->pivot->award_date))
129 129
                     ];
130 130
                 }
131 131
                 break;

+ 10
- 0
app/Models/UploadFile.php View File

@@ -0,0 +1,10 @@
1
+<?php
2
+
3
+namespace App\Models;
4
+
5
+use Illuminate\Database\Eloquent\Model;
6
+
7
+class UploadFile extends Model
8
+{
9
+    //
10
+}

+ 32
- 0
database/migrations/2025_11_04_081553_create_upload_files_table.php View File

@@ -0,0 +1,32 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::create('upload_files', function (Blueprint $table) {
15
+            $table->id();
16
+            $table->string("title")->nullable()->comment("標題");
17
+            $table->string("type")->comment("附檔類型 1.社會公益");
18
+            $table->string("upload_link")->comment("附檔連結");
19
+            $table->date("award_date")->nullable()->comment("獲得日期");
20
+            $table->integer("order")->comment("排序");
21
+            $table->timestamps();
22
+        });
23
+    }
24
+
25
+    /**
26
+     * Reverse the migrations.
27
+     */
28
+    public function down(): void
29
+    {
30
+        Schema::dropIfExists('upload_files');
31
+    }
32
+};

+ 28
- 0
database/migrations/2025_11_04_094305_alter_table_projects_add_column_visible.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::table("projects", function (Blueprint $table) {
15
+            $table->boolean("visible")->default(true)->comment("顯示/不顯示");
16
+        });
17
+    }
18
+
19
+    /**
20
+     * Reverse the migrations.
21
+     */
22
+    public function down(): void
23
+    {
24
+        Schema::table("projects", function (Blueprint $table) {
25
+            $table->dropColumn("visible");
26
+        });
27
+    }
28
+};

+ 2
- 1
routes/api.php View File

@@ -38,6 +38,7 @@ Route::prefix('{locale}')->group(function (){
38 38
     });
39 39
 
40 40
     Route::prefix("esg")->group(function () {
41
-        Route::get("histories", [EsgController::class, 'histories']);
41
+        Route::get("/histories", [EsgController::class, 'histories']);
42
+        Route::get("/upload-files", [EsgController::class, "uploadFiles"]);
42 43
     });
43 44
 });