Browse Source

修改 抽獎、紀錄 分開

maa3606 2 years ago
parent
commit
4abc7f3d31

+ 4 - 2
app/Http/Controllers/CheckInController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Models\CheckIn;
 use App\Models\User;
+use Illuminate\Http\Request;
 use App\Http\Requests\StoreCheckInRequest;
 use App\Http\Requests\UpdateCheckInRequest;
 
@@ -19,9 +20,10 @@ class CheckInController extends Controller
         //
     }
 
-    public function index_by_activity(UpdateCheckInRequest $request)
+    public function index_by_activity(Request $request)
     {
-        return CheckIn::where('activity_id', $request->activityId)->get();
+        $user = CheckIn::where('activity_id', $request->activityId)->pluck('name', 'user_id');
+        return $user;
     }
 
     public function draw_user_when_check_in(StoreCheckInRequest $request)

+ 22 - 14
app/Http/Controllers/DrawController.php

@@ -22,41 +22,49 @@ class DrawController extends Controller
 
     public function draw(Request $request)
     {
+        $prize = Prize::where('id', $request->prize_id)->first();
         $activity = Activity::where('id', $request->activity_id)->first();
-        $users = CheckIn::where('check_ins.activity_id', $request->activity_id)
+        $users = CheckIn::where('activity_id', $request->activity_id)
             ->where('is_checked_in', 'true')
             ->whereTime('check_ins.updated_at', '<=', $activity->deadline)
             ->whereIn('region', $request->region)
             ->inRandomOrder()
-            ->get()
-            ->random($request->number);
+            ->get();
+        if ($prize->count >= $request->number && count($users) >= $request->number) {
+            $output = [];
+            $draw_user = $users->random($request->number);
+            foreach ($draw_user as $user) {
+                array_push($output, [
+                    'user_id' => $user->user_id,
+                    'user_name' => $user->name,
+                    'department_id' => $user->department_id,
+                ]);
+            }
+            return $output;
+        }
+        return false;
+    }
 
+    public function store(Request $request)
+    {
         $prize = Prize::where('id', $request->prize_id)->first();
         if ($prize->count >= $request->number) {
             $prize->update([
                 'count' => $prize->count - $request->number,
                 'updated_at' => now(),
             ]);
-
             $data = [];
-            $output = [];
-            foreach ($users as $user) {
+            foreach ($request->users as $user_id) {
                 array_push($data, [
                     'prize_id' => $request->prize_id,
-                    'user_id' => $user->user_id,
+                    'user_id' => $user_id,
                     'is_claimed' => false,
                     'created_at' => now(),
                     'updated_at' => now(),
                 ]);
-                array_push($output, [
-                    'user_id' => $user->user_id,
-                    'user_name' => $user->name,
-                    'department_id' => $user->department_id,
-                ]);
             }
-
             Recipients::insert($data);
-            return $output;
+            return true;
         }
         return false;
     }

+ 1 - 1
database/seeders/CheckInSeeder.php

@@ -37,7 +37,7 @@ class CheckInSeeder extends Seeder
                     'name' => $value->name,
                     'department_id' => $value->department_id,
                     'region' => $region,
-                    'is_checked_in' => true,
+                    'is_checked_in' => false,
                     'activity_id' => 1,
                     'created_at' => now(),
                     'updated_at' => now(),

+ 2 - 2
database/seeders/DatabaseSeeder.php

@@ -48,8 +48,8 @@ class DatabaseSeeder extends Seeder
         $this->call([
             ActivitySeeder::class,
             CheckInSeeder::class,
-            //PrizeSeeder::class,
-            //RecipientsSeeder::class,
+            // PrizeSeeder::class,
+            RecipientsSeeder::class,
             DepartmentSeeder::class,
         ]);
     }

+ 78 - 16
resources/js/src/views/lottery/Draw.vue

@@ -28,8 +28,7 @@
           @click="hideModal">
           Close
         </b-button>
-        <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" class="mt-2" variant="outline-primary" block
-          v-b-modal.draw-animation @click="draw">
+        <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" class="mt-2" variant="outline-primary" block @click="draw">
           Accept
         </b-button>
 
@@ -37,7 +36,7 @@
 
       <b-modal ref="draw-error" centered title="抽獎" no-stacking hide-footer>
         <b-card-text class="my-1 text-center">
-          獎品數量以抽完
+          獎品錯誤
         </b-card-text>
         <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" class="mt-3" variant="outline-secondary" block
           @click="hideModal">
@@ -45,7 +44,7 @@
         </b-button>
       </b-modal>
 
-      <b-modal ref="draw-animation" id="draw-animation" title="抽獎" centered no-stacking hide-footer>
+      <b-modal ref="draw-animation" title="抽獎" centered no-stacking hide-footer>
         <br>
         <div :key="index" v-for="(item, index) in drawList" :class=counterId(index)>
           <i :datafinal=item.department>部門</i>
@@ -59,7 +58,7 @@
         </div>
 
         <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" class="mt-2" variant="outline-primary" block
-          @click="hideModal">
+          @click="store">
           Accept
         </b-button>
       </b-modal>
@@ -111,7 +110,6 @@ export default {
       activityId: this.$route.params.activity_id,
       activity: {},
       userList: [],
-      userIdList: [],
       departmentList: [],
       prizeList: [],
       recipientsList: [],
@@ -126,7 +124,51 @@ export default {
       prizeId: '',
       drawList: [],
 
-      departments: ["行政管理部", "行政管理部庶務科", "人力資源科", "行政管理部文書科", "南區辦事處", "中區辦事處", "工程管理一部", "工程管理二部", "c3工地", "發展與企畫部", "工程製圖科", "工務部", "大地工程部", "財務部", "六張犁工地", "中華郵政工地", "法務部調查局工地", "三峽國光工地", "河濱高中工地", "運輸及土木工程部", "城鄉發展部", "軌道工程部", "董事長室", "總經理室", "企業發展中心", "成本中心", "資訊中心", "環境及水資源工程部", "環境水務部", "環境永續部", "機電系統工程部", "結構工程部", "工程設計群", "工程監理群", "總管理處", "建築及設施群", "數位工程發展部", "淡海輕軌計畫監造專案", "安坑輕軌計畫監造專案", "先進技術中心", "塭仔圳市地重劃公共工程專案管理與監造專案", "萬大果菜市場專案"]
+      departments: [
+        "行政管理部",
+        "行政管理部庶務科",
+        "人力資源科",
+        "行政管理部文書科",
+        "南區辦事處",
+        "中區辦事處",
+        "工程管理一部",
+        "工程管理二部",
+        "c3工地",
+        "發展與企畫部",
+        "工程製圖科",
+        "工務部",
+        "大地工程部",
+        "財務部",
+        "六張犁工地",
+        "中華郵政工地",
+        "法務部調查局工地",
+        "三峽國光工地",
+        "河濱高中工地",
+        "運輸及土木工程部",
+        "城鄉發展部",
+        "軌道工程部",
+        "董事長室",
+        "總經理室",
+        "企業發展中心",
+        "成本中心",
+        "資訊中心",
+        "環境及水資源工程部",
+        "環境水務部",
+        "環境永續部",
+        "機電系統工程部",
+        "結構工程部",
+        "工程設計群",
+        "工程監理群",
+        "總管理處",
+        "建築及設施群",
+        "數位工程發展部",
+        "淡海輕軌計畫監造專案",
+        "安坑輕軌計畫監造專案",
+        "先進技術中心",
+        "塭仔圳市地重劃公共工程專案管理與監造專案",
+        "萬大果菜市場專案",
+        "來賓"
+      ]
     }
   },
   created() {
@@ -138,10 +180,6 @@ export default {
       this.userList = res.data;
     });
 
-    useJwt.postData('/api/user/index').then(res => {
-      this.userIdList = res.data;
-    });
-
     useJwt.postData('/api/prize/index_by_activity', { activityId: this.activityId }).then(res => {
       this.prizeList = res.data;
     });
@@ -183,16 +221,25 @@ export default {
     getRecipientsList(recipientsList) {
       var output = [];
       recipientsList.forEach(element => {
-        output.push({ '獎項': this.getPrizeName(element.prize_id), '獲獎人': this.userIdList[element.user_id], '時間': this.dateFormat(element.created_at) });
+        output.push({ '獎項': this.getPrizeName(element.prize_id), '獲獎人': this.userList[element.user_id], '時間': this.dateFormat(element.created_at) });
       });
       return output;
     },
     counterId(id) {
       return "counter_" + id;
     },
+    onlyOne(number) {
+      if (number == 1) {
+        return true;
+      }
+      return false;
+    },
     showDraw() {
       this.$refs['draw-modal'].show();
     },
+    showDrawAnimation() {
+      this.$refs['draw-animation'].show();
+    },
     showDrawError() {
       this.$refs['draw-error'].show();
     },
@@ -224,15 +271,30 @@ export default {
     },
     draw() {
       useJwt.postData('/api/draw/draw', { activity_id: this.activityId, prize_id: this.prizeId, region: this.region, number: this.drawNumber }).then(res => {
-        if(res.data){
+        if (res.data) {
           this.drawList = res.data;
           setTimeout(() => {
             this.count();
-          }, 100);
+          }, 500);
+          this.showDrawAnimation();
+        } else {
+          this.showDrawError();
+          console.log("draw error");
+        }
+      });
+    },
+    store() {
+      var idList = [];
+      this.drawList.forEach(element => {
+        idList.push(element.user_id);
+      });
+      useJwt.postData('/api/draw/store', { users: idList, prize_id: String(this.prizeId), number: this.drawNumber }).then(res => {
+        if (res.data) {
+          console.log("success");
         } else {
-          this.hideModal();
-          console.log("error");
+          console.log("store error");
         }
+        this.hideModal();
       });
     },
     count() {

+ 1 - 0
routes/api.php

@@ -106,6 +106,7 @@ Route::middleware(['auth:sanctum', 'abilities:Admin'])->group(function () {
 
     // Draw
     Route::post('/draw/draw', [DrawController::class, 'draw']);
+    Route::post('/draw/store', [DrawController::class, 'store']);
 
     // Prize