Przeglądaj źródła

Merge branch 'Nate'

maa3444 2 lat temu
rodzic
commit
7f97f4d157

+ 8 - 10
app/Http/Controllers/ActivityController.php

@@ -69,9 +69,11 @@ class ActivityController extends Controller
      * @param  \App\Models\Activity  $activity
      * @return \Illuminate\Http\Response
      */
-    public function show(Activity $activity)
+    public function show(Request $request,Activity $activity)
     {
         //
+        $activity = Activity::where('id', '=', $request->activity_id)->first();
+        return $activity;
     }
 
     /**
@@ -154,19 +156,16 @@ class ActivityController extends Controller
         return response($response, 201);
     }
 
-    public function isClaimed(UpdateActivityRequest $request)
-    {
-        $recipient = Recipients::where('prize_id', '=', $request->prize_id)
-            ->where('user_id', '=', $request->user_id)->get()[0];
-        $recipient->is_claimed = true;
-        $recipient->save();
-        return $recipient;
-    }
 
     //這邊有兩種insert,要怎麼處理StoreRequest?
     public function uploadFile(Request $request)
     {
         $option = $request->option;
+        $activity_id = $request->activity_id;
+        if($activity_id == 'undefined'){
+            $activity_id = Activity::orderBy('id', 'DESC')->first()->id;
+        }
+
         $upload_path = public_path('upload');
         $file_name = $request->file->getClientOriginalName();
         $file_path = $upload_path . '/' . $file_name;
@@ -189,7 +188,6 @@ class ActivityController extends Controller
         $spreadsheet = $reader->load($inputFileName);
         $worksheet = $spreadsheet->getActiveSheet();
         $highestRow = $worksheet->getHighestDataRow();
-        $activity_id = ($request->activity_id == 0 ? Activity::where('activity_name', '=', $request->activity_name)->first()->id : $request->activity_id);
 
         if ($option == 'prize') {
             DB::table('prizes')->where('activity_id', '=', $activity_id)->delete();

+ 10 - 0
app/Http/Controllers/RecipientsController.php

@@ -6,6 +6,7 @@ use App\Models\Recipients;
 use App\Http\Requests\StoreRecipientsRequest;
 use App\Http\Requests\UpdateRecipientsRequest;
 use App\Models\Prize;
+use Illuminate\Http\Request;
 
 class RecipientsController extends Controller
 {
@@ -101,4 +102,13 @@ class RecipientsController extends Controller
     {
         //
     }
+
+    public function isClaimed(UpdateRecipientsRequest $request)
+    {
+        $recipient = Recipients::where('prize_id', '=', $request->prize_id)
+            ->where('user_id', '=', $request->user_id)->get()[0];
+        $recipient->is_claimed = true;
+        $recipient->save();
+        return $recipient;
+    }
 }

BIN
public/upload/2022年度歲末聯歡抽獎獎品.xlsx


+ 1 - 1
resources/js/src/@core/layouts/components/AppBreadcrumb.vue

@@ -47,7 +47,7 @@
             </b-dropdown>
 
             <b-button v-if="this.userData.role == 'Admin' && this.$route.name == 'activityList'" variant="success"
-                :to="{ name: 'activityAdd' }">新增活動</b-button>
+                :to="{ name: 'activityStore' }">新增活動</b-button>
 
             <b-dropdown v-if="$can('mange', this.$route.name)" variant="link" no-caret toggle-class="p-0" right>
 

+ 24 - 7
resources/js/src/router/config.js

@@ -33,7 +33,7 @@ export const settings = {
             },
         },
         {
-            path: '/activityPage',
+            path: '/activityPage/:activity_id',
             name: 'activityPage',
             component: () => import('@/views/Activities/ActivityPage.vue'),
             meta: {
@@ -51,9 +51,27 @@ export const settings = {
             },
         },
         {
-            path: '/activityAdd',
-            name: 'activityAdd',
-            component: () => import('@/views/Activities/ActivityAdd.vue'),
+            path: '/activityStore',
+            name: 'activityStore',
+            component: () => import('@/views/Activities/ActivityStore.vue'),
+            meta: {
+                pageTitle: '新增活動',
+                breadcrumb: [{
+                        text: '活動列表',
+                        to: '/activityList'
+                    },
+                    {
+                        text: '新增活動',
+                        active: true,
+                    },
+                ],
+                requiresAuth: true,
+            },
+        },
+        {
+            path: '/activityUpdate/:activity_id',
+            name: 'activityUpdate',
+            component: () => import('@/views/Activities/ActivityUpdate.vue'),
             meta: {
                 pageTitle: '編輯活動資訊',
                 breadcrumb: [{
@@ -69,7 +87,7 @@ export const settings = {
             },
         },
         {
-            path: '/claim',
+            path: '/claim/:activity_id',
             name: 'claim',
             component: () => import('@/views/PrizeClaim.vue'),
             meta: {
@@ -79,7 +97,6 @@ export const settings = {
                         to: '/activityList'
                     },
                     {
-                        //TODO 回到活動功能頁面後,activity內容會不見
                         text: '活動功能頁面',
                         to: '/activityPage'
                     },
@@ -146,7 +163,7 @@ export const settings = {
             },
         },
         {
-            path: '/checkin/:activity',
+            path: '/checkin/:activity_id',
             name: 'checkin',
             component: () => import('@/views/lottery/CheckIn.vue'),
             meta: {

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

@@ -7,7 +7,7 @@
                     <b-card-text>地點: {{ activity.place }}</b-card-text>
                     <b-card-text>時間: {{ activity.date }}</b-card-text>
                     <b-button variant="success"
-                        :to="{ name: 'activityPage', params: { 'activity': activity } }">進入活動頁面</b-button>
+                        :to="{ name: 'activityPage', params: { 'activity_id': activity.id } }">進入活動頁面</b-button>
                 </b-card-body>
             </b-card>
         </b-col>

+ 6 - 13
resources/js/src/views/Activities/ActivityPage.vue

@@ -5,7 +5,7 @@
                 <b-card no-body border-variant="info" class="text-center">
                     <b-card-body>
                         <b-button variant="success"
-                            :to="{ name: 'checkin', params: { 'activity': activity.id } }">報到頁面</b-button>
+                            :to="{ name: 'checkin', params: { 'activity_id': this.$route.params.activity_id } }">報到頁面</b-button>
                     </b-card-body>
                 </b-card>
             </b-col>
@@ -13,7 +13,7 @@
                 <b-card no-body border-variant="info" class="text-center">
                     <b-card-body>
                         <b-button variant="success"
-                            :to="{ name: 'draw', params: { 'activity': activity } }">抽獎頁面</b-button>
+                            :to="{ name: 'draw', params: { 'activity_id': this.$route.params.activity_id } }">抽獎頁面</b-button>
                     </b-card-body>
                 </b-card>
             </b-col>
@@ -21,7 +21,7 @@
                 <b-card no-body border-variant="info" class="text-center">
                     <b-card-body>
                         <b-button variant="success"
-                            :to="{ name: 'claim', params: { 'activity': activity } }">兌獎頁面</b-button>
+                            :to="{ name: 'claim', params: { 'activity_id': this.$route.params.activity_id } }">兌獎頁面</b-button>
                     </b-card-body>
                 </b-card>
             </b-col>
@@ -29,17 +29,17 @@
                 <b-card no-body border-variant="info" class="text-center">
                     <b-card-body>
                         <b-button variant="success"
-                            :to="{ name: 'activityAdd', params: { 'activity': activity } }">編輯活動</b-button>
+                            :to="{ name: 'activityUpdate', params: { 'activity_id': this.$route.params.activity_id } }">編輯活動</b-button>
                     </b-card-body>
                 </b-card>
             </b-col>
         </b-row>
-        <div class="redirect-back">
+        <!-- <div class="redirect-back">
             <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" variant="primary" class="btn-icon"
                 :to="{ name: 'activityList' }">
                 返回頁面
             </b-button>
-        </div>
+        </div> -->
     </div>
 </template>
 
@@ -65,19 +65,12 @@ export default {
     },
     data() {
         return {
-            activity: [],
             userData: getUserData(),
             lg: 0,
         }
     },
     created() {
-        this.activity = this.$route.params.activity;
         this.userData.role == 'User' ? this.lg = 4 : this.lg = 3;
-    },
-    methods: {
-        test() {
-            console.log(this.activity);
-        }
     }
 }
 </script>

+ 6 - 23
resources/js/src/views/Activities/ActivityAdd.vue → resources/js/src/views/Activities/ActivityStore.vue

@@ -64,11 +64,11 @@
                 成功上傳資料。
             </b-card-text>
         </b-modal>
-        <div class="redirect-back">
+        <!-- <div class="redirect-back">
             <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" variant="primary" class="btn-icon" :to="{ name: 'activityList' }">
                 返回頁面
             </b-button>
-        </div>
+        </div> -->
     </div>
 
 </template>
@@ -105,33 +105,17 @@ export default {
         return {
             userData: getUserData(),
             activity_name: '',
-            activity_id: 0,
             date: '',
             place: '',
             deadline: '',
             successText: '',
-            activity: [],
-            option: '',
-        }
-    },
-    created() {
-        this.activity = this.$route.params.activity;
-        if (this.activity == undefined) {
-            this.option = 'store';
-        } else {
-            this.option = 'update';
-            this.activity_id = this.activity.id;
-            this.activity_name = this.activity.activity_name;
-            this.date = this.activity.date;
-            this.place = this.activity.place;
-            this.deadline = this.activity.deadline.split(' ')[1];
         }
     },
     methods: {
         postData() {
-            useJwt.postData('/api/activity/' + this.option,
+            useJwt.postData('/api/activity/store',
                 {
-                    'activity_id': this.activity_id,
+                    'activity_id': this.$route.params.activity_id,
                     'activity_name': this.activity_name,
                     'date': this.date,
                     'place': this.place,
@@ -148,10 +132,9 @@ export default {
             let formData = new FormData();
             formData.append('file', event.target.files[0]);
             formData.append('option', option);
-            //這邊如果使用者在送出資料之後,匯入名單之前改到活動名稱會有問題。
-            formData.append('activity_name', this.activity_name);
-            formData.append('activity_id', this.activity_id);
+            formData.append('activity_id', this.$route.params.activity_id);
             useJwt.postData('/api/activity/uploadFile', formData).then(response => {
+                console.log(response.data);
                 this.successText = response.data.success;
                 this.$refs['insert-success-modal'].toggle();
                 this.$refs[refOption].reset();

+ 166 - 0
resources/js/src/views/Activities/ActivityUpdate.vue

@@ -0,0 +1,166 @@
+<template>
+    <div>
+        <b-card-code title="編輯活動">
+            <b-form @submit.prevent>
+                <b-row>
+                    <b-col cols="12">
+                        <b-form-group label="活動名稱" label-for="activity-name" label-cols-md="4">
+                            <b-form-input v-model="activity_name" id="activity-name" placeholder="活動名稱" />
+                        </b-form-group>
+                    </b-col>
+                    <b-col cols="12">
+                        <b-form-group label="活動時間" label-for="date" label-cols-md="4">
+                            <b-form-input v-model="date" id="date" type="date" placeholder="活動時間" />
+                        </b-form-group>
+                    </b-col>
+                    <b-col cols="12">
+                        <b-form-group label="活動地點" label-for="place" label-cols-md="4">
+                            <b-form-input v-model="place" id="place" placeholder="活動地點" />
+                        </b-form-group>
+                    </b-col>
+                    <b-col cols="12">
+                        <b-form-group label="報名截止時間" label-for="deadline" label-cols-md="4">
+                            <b-form-input v-model="deadline" id="deadline" type="time" placeholder="報名截止時間" />
+                        </b-form-group>
+                    </b-col>
+
+                    <!-- submit and reset -->
+                    <b-col offset-md="4">
+                        <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" type="submit" variant="primary"
+                            class="mr-1" @click="postData">
+                            送出
+                        </b-button>
+                        <b-button v-ripple.400="'rgba(186, 191, 199, 0.15)'" type="reset" variant="outline-secondary">
+                            取消
+                        </b-button>
+                    </b-col>
+                </b-row>
+            </b-form>
+        </b-card-code>
+
+        <b-row>
+            <b-col md="6" lg="6">
+                <b-card title="匯入獎項列表" class="mb-6">
+                    <b-form-file ref="prizeList" placeholder="請將檔案拉至此處或是點擊欄位選擇檔案" drop-placeholder="Drop file here..."
+                        accept=".xls, .xlsx, .csv" @change="importFile($event, 'prize')"></b-form-file>
+                </b-card>
+            </b-col>
+            <b-col md="6" lg="6">
+                <b-card title="匯入來賓列表" class="mb-6">
+                    <b-form-file ref="guestList" placeholder="請將檔案拉至此處或是點擊欄位選擇檔案" drop-placeholder="Drop file here..."
+                        accept=".xls, .xlsx, .csv" @change="importFile($event, 'guest')"></b-form-file>
+                </b-card>
+            </b-col>
+        </b-row>
+
+        <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>
+        <!-- <div class="redirect-back">
+            <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" variant="primary" class="btn-icon" :to="{ name: 'activityList' }">
+                返回頁面
+            </b-button>
+        </div> -->
+    </div>
+
+</template>
+
+<script>
+import BCardCode from '@core/components/b-card-code'
+import {
+    BRow, BCol, BFormGroup, BFormInput, BFormCheckbox, BForm, BButton, BFormFile, BModal, BCardText, BCard
+} from 'bootstrap-vue'
+import Ripple from 'vue-ripple-directive'
+import useJwt from '@/auth/jwt/useJwt'
+import { getUserData } from '@/auth/utils'
+
+
+export default {
+    components: {
+        BCardCode,
+        BRow,
+        BCol,
+        BFormGroup,
+        BFormInput,
+        BFormCheckbox,
+        BForm,
+        BButton,
+        BFormFile,
+        BModal,
+        BCardText,
+        BCard,
+    },
+    directives: {
+        Ripple,
+    },
+    data() {
+        return {
+            userData: getUserData(),
+            activity_name: '',
+            date: '',
+            place: '',
+            deadline: '',
+            successText: '',
+        }
+    },
+    created(){
+        useJwt.postData('/api/activity/show', {'activity_id': this.$route.params.activity_id}).then(response => {
+            this.activity_name = response.data.activity_name;
+            this.date = response.data.date;
+            this.place = response.data.place;
+            this.deadline = response.data.deadline.split(' ')[1];
+        }).catch(error => {
+            console.log(error);
+        })
+    },
+    methods: {
+        postData() {
+            useJwt.postData('/api/activity/update',
+                {
+                    'activity_id': this.$route.params.activity_id,
+                    'activity_name': this.activity_name,
+                    'date': this.date,
+                    'place': this.place,
+                    'user_id': this.userData.user_id,
+                    'deadline': this.date + ' ' + this.deadline
+                }).then(response => {
+                    this.$refs['confirm-modal'].toggle();
+                }).catch(error => {
+                    console.log("error: " + error);
+                })
+        },
+        importFile(event, option) {
+            let refOption = option + 'List';
+            let formData = new FormData();
+            formData.append('file', event.target.files[0]);
+            formData.append('option', option);
+            formData.append('activity_id', this.$route.params.activity_id);
+            useJwt.postData('/api/activity/uploadFile', formData).then(response => {
+                console.log(response.data);
+                this.successText = response.data.success;
+                this.$refs['insert-success-modal'].toggle();
+                this.$refs[refOption].reset();
+            }).catch(error => {
+                console.log(error);
+            });
+        },
+    }
+}
+</script>
+
+<style>
+.redirect-back {
+    position: fixed;
+    bottom: 5%;
+    right: 30px;
+    z-index: 99;
+}
+</style>

+ 8 - 11
resources/js/src/views/PrizeClaim.vue

@@ -48,13 +48,13 @@
                 {{ user.name }}已經領過獎品了喔。
             </b-card-text>
         </b-modal>
-
+<!--
         <div class="redirect-back">
             <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" variant="primary" class="btn-icon"
-                :to="{ name: 'activityPage', params: { 'activity': activity } }">
+                :to="{ name: 'activityPage', params: { 'activity_id': this.$route.params.activity_id } }">
                 返回頁面
             </b-button>
-        </div>
+        </div> -->
     </div>
 </template>
 <script>
@@ -78,9 +78,12 @@ export default {
     directives: {
         Ripple,
     },
+    created(){
+        this.$route.meta.breadcrumb[1].to += '/' + this.$route.params.activity_id;
+        console.log(this.$route.meta.breadcrumb[1].to);
+    },
     data() {
         return {
-            activity: [],
             user: {},
             input: "",
             isRecipients: "",
@@ -89,15 +92,10 @@ export default {
             isClaimed: false,
         }
     },
-    created() {
-        this.activity = this.$route.params.activity;
-        console.log(this.activity.id);
-    }
-    ,
     methods: {
         test_keydown_handler(event) {
             if (event.which === 13) {
-                useJwt.postData('/api/activity/claim', { 'user_id': this.input, 'activity_id': this.activity.id }).then(response => {
+                useJwt.postData('/api/activity/claim', { 'user_id': this.input, 'activity_id': this.$route.params.activity_id }).then(response => {
                     this.user = response.data.user;
                     this.isRecipients = response.data.isRecipients;
                     this.prize = response.data.prize;
@@ -120,7 +118,6 @@ export default {
         },
         handleOK() {
             useJwt.postData('/api/activity/isClaimed', { 'user_id': this.user.user_id, 'prize_id': this.prize_id }).then(response => {
-                console.log(response.data);
                 this.$refs['confirm-modal'].toggle();
             }).catch(error => {
                 console.log(error)

+ 2 - 2
resources/js/src/views/lottery/CheckIn.vue

@@ -127,7 +127,7 @@
               報到
             </b-button>
       </b-card>
-      
+
     </b-col>
   </b-row> -->
 </template>
@@ -197,7 +197,7 @@ export default {
 			}
 		},
 		searchData() {
-			useJwt.postData('/api/user/show', { 'id': this.input, 'activity_id': this.$route.params.activity }).then(response => {
+			useJwt.postData('/api/user/show', { 'id': this.input, 'activity_id': this.$route.params.activity_id }).then(response => {
 				console.log(response.data.user);
 				this.user = response.data.user;
 				this.input = "";

+ 2 - 1
routes/api.php

@@ -94,8 +94,9 @@ Route::middleware(['auth:sanctum', 'abilities:Admin'])->group(function () {
     Route::post('/activity/update', [ActivityController::class, 'update']);
     Route::post('/activity/sql', [ActivityController::class, 'sql']);
     Route::post('/activity/claim', [ActivityController::class, 'claim']);
-    Route::post('/activity/isClaimed', [ActivityController::class, 'isClaimed']);
+    Route::post('/activity/isClaimed', [RecipientsController::class, 'isClaimed']);
     Route::post('/activity/uploadFile', [ActivityController::class, 'uploadFile']);
+    Route::post('/activity/show', [ActivityController::class, 'show']);
 
     // CheckIn
     Route::post('/check_in/update', [CheckInController::class, 'update']);