瀏覽代碼

新增匯入獎項列表

maa3444 2 年之前
父節點
當前提交
992c8604d5

+ 71 - 9
app/Http/Controllers/ActivityController.php

@@ -12,9 +12,13 @@ use App\Http\Controllers\Controller;
 use Illuminate\Http\Request;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Reader\IReader;
+use PhpOffice\PhpSpreadsheet\Reader\Csv;
 use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
 use PhpOffice\PhpSpreadsheet\Reader\Xls;
 use PhpOffice\PhpSpreadsheet\IOFactory;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\File;
+
 
 class ActivityController extends Controller
 {
@@ -103,15 +107,6 @@ class ActivityController extends Controller
         //
     }
 
-    public function sql(Request $request)
-    {
-        //
-        $inputFileName = "./test.xlsx";
-        $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
-
-        return $spreadsheet;
-    }
-
     public function claim(Request $request)
     {
         $prize = '';
@@ -145,4 +140,71 @@ class ActivityController extends Controller
         $recipient->save();
         return $recipient;
     }
+
+    //TODO 目前只有匯入功能有加activity_id where
+
+    public function uploadFile(Request $request)
+    {
+        $option = $request->option;
+        $upload_path = public_path('upload');
+        $file_name = $request->file->getClientOriginalName();
+        $file_path = $upload_path . '/' . $file_name;
+        if (File::exists($file_path)) {
+            File::delete($file_path);
+        }
+        $request->file->move($upload_path, $file_name);
+
+        $extension = pathinfo($file_path, PATHINFO_EXTENSION);
+        if ('csv' == $extension) {
+            $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
+        } else if ('xls' == $extension) {
+            $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
+        } else if ('xlsx' == $extension) {
+            $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
+        }
+        $reader->setReadDataOnly(true);
+        $reader->setReadEmptyCells(false);
+        $inputFileName = public_path('upload') . '\\' . $file_name;
+        $spreadsheet = $reader->load($inputFileName);
+        $worksheet = $spreadsheet->getActiveSheet();
+        $highestRow = $worksheet->getHighestDataRow();
+        $activity_id = DB::table('activities')->orderBy('id', 'desc')->first()->id;
+
+        if($option == 'prize'){
+            DB::table('prizes')->where('activity_id', '=', $activity_id)->delete();
+            date_default_timezone_set('Asia/Taipei');
+            for ($row = 2; $row <= $highestRow; $row++) {
+                DB::table('prizes')->insert([
+                    'activity_id' => $activity_id,
+                    'name' => $worksheet->getCell([1, $row])->getValue(),
+                    'count' => $worksheet->getCell([2, $row])->getValue(),
+                    'provider' => $worksheet->getCell([3, $row])->getValue(),
+                    'created_at' => date('Y-m-d H:i:s'),
+                    'updated_at' => date('Y-m-d H:i:s'),
+                ]);
+            }
+        }else if($option == 'guest'){
+            //TODO 匯入來賓資料
+            //還要改
+            DB::table('checkin')->where('role', '=', '來賓')->delete();
+            date_default_timezone_set('Asia/Taipei');
+            for ($row = 2; $row <= $highestRow; $row++) {
+                DB::table('checkin')->insert([
+                    'activity_id' => $activity_id,
+                    'name' => $worksheet->getCell([1, $row])->getValue(),
+                    'count' => $worksheet->getCell([2, $row])->getValue(),
+                    'provider' => $worksheet->getCell([3, $row])->getValue(),
+                    'created_at' => date('Y-m-d H:i:s'),
+                    'updated_at' => date('Y-m-d H:i:s'),
+                ]);
+            }
+        }
+
+        $successText = 'You have successfully uploaded "' . $file_name . '"';
+        $response = [
+            'success' => $successText,
+        ];
+
+        return response($response, 201);
+    }
 }

+ 2 - 3
database/migrations/2023_02_02_055501_create_activities_table.php

@@ -15,12 +15,11 @@ return new class extends Migration
     {
         Schema::create('activities', function (Blueprint $table) {
             $table->id();
-            $table->string('activity_name')->unique();
+            $table->string('activity_name');
             $table->string('date');
             $table->string('place');
-            $table->string('user_id');
+            $table->string('creator');
             $table->string('deadline');
-            $table->timestamps();
         });
     }
 

二進制
public/upload/2022年度歲末聯歡摸彩獎品.xlsx


+ 31 - 16
resources/js/src/views/Activities/ActivityAdd.vue

@@ -35,20 +35,27 @@
                         </b-button>
                     </b-col>
                 </b-row>
-                <b-modal ref="confirm-modal" title="成功設定活動" centered ok-only ok-title="確認">
-                    <b-card-text>
-                        已成功設定活動資訊!
-                    </b-card-text>
-                </b-modal>
             </b-form>
+        </b-card-code>
 
-            <!--TODO 匯入excel功能-->
-            <b-form-file ref="prizeList" placeholder="匯入獎項列表" drop-placeholder="Drop file here..."
-                accept=".xls, .xlsx, .csv" @change="importSQL"></b-form-file>
-            <b-form-file ref="guestList" placeholder="匯入來賓列表" drop-placeholder="Drop file here..."
-                accept=".xls, .xlsx, .csv" @change="importSQL"></b-form-file>
+        <!--TODO 匯入excel功能-->
+        <b-form-file ref="prizeList" placeholder="匯入獎項列表" drop-placeholder="Drop file here..."
+            accept=".xls, .xlsx, .csv" @change="importFile($event, 'prize')"></b-form-file>
+        <b-form-file ref="guestList" placeholder="匯入來賓列表" drop-placeholder="Drop file here..."
+            accept=".xls, .xlsx, .csv" @change="importFile($event, 'guest')"></b-form-file>
+
+        <b-modal ref="confirm-modal" title="成功設定活動" centered ok-only ok-title="確認">
+            <b-card-text>
+                已成功設定活動資訊!
+            </b-card-text>
+        </b-modal>
+
+        <b-modal ref="insert-success-modal" title="成功上傳" ok-only ok-title="確認">
+            <b-card-text>
+                成功上傳資料。
+            </b-card-text>
+        </b-modal>
 
-        </b-card-code>
     </div>
 
 </template>
@@ -81,11 +88,13 @@ export default {
     },
     data() {
         return {
+            activities: [],
             userData: getUserData(),
             activity_name: '',
             date: '',
             place: '',
             deadline: '',
+            successText: '',
         }
     },
     methods: {
@@ -104,13 +113,19 @@ export default {
                     console.log("error: " + error);
                 })
         },
-        importSQL(event) {
-            useJwt.postData('/api/activity/sql', { 'file': event.target.files[0] }).then(response => {
-                console.log(response.data);
+        importFile(event, option) {
+            let refOption = option + 'List';
+            let formData = new FormData();
+            formData.append('file', event.target.files[0]);
+            formData.append('option', option);
+            useJwt.postData('/api/activity/uploadFile', formData).then(response => {
+                this.successText = response.data.success;
+                this.$refs['insert-success-modal'].toggle();
+                this.$refs[refOption].reset();
             }).catch(error => {
-                console.log("error: " + error);
+                console.log(error);
             });
-        }
+        },
     }
 }
 </script>

+ 1 - 1
resources/js/src/views/Activities/ActivityList.vue

@@ -10,7 +10,7 @@
             </b-button>
         </div>
         <div class="col text-center">
-            <b-button variant="success" :to="{ name: 'activityAdd'}">
+            <b-button variant="success" :to="{ name: 'activityAdd', params: { 'activities': activities } }">
                 +
             </b-button>
         </div>

+ 1 - 0
routes/api.php

@@ -83,6 +83,7 @@ Route::middleware('auth:sanctum')->group(function () {
     Route::post('/activity/sql', [ActivityController::class, 'sql']);
     Route::post('/activity/claim', [ActivityController::class, 'claim']);
     Route::post('/activity/isClaimed', [ActivityController::class, 'isClaimed']);
+    Route::post('/activity/uploadFile', [ActivityController::class, 'uploadFile']);
 });
 
 Route::middleware(['auth:sanctum', 'abilities:Admin'])->group(function () {