ali 3 éve
szülő
commit
fdf1e8bba1

+ 29 - 0
src/api/models/Classroom.js

@@ -2,6 +2,7 @@ import { appApi } from 'src/boot/axios.js'
 import { Invoice } from 'src/models/Invoice.js'
 import APIRepository from '../classes/APIRepository.js'
 import { Classroom, ClassroomList } from 'src/models/Classroom.js'
+import { EventRegistration } from 'src/models/EventRegistration.js'
 
 export default class ClassroomAPI extends APIRepository {
   constructor() {
@@ -11,6 +12,7 @@ export default class ClassroomAPI extends APIRepository {
       byId: (id) => '/lma/classrooms/' + id,
       enroll: (id) => '/lma/classrooms/' + id + '/enroll',
       drop: (id) => '/lma/classrooms/' + id + '/drop',
+      register: (id) => '/lma/classrooms/' + id + '/register',
       leaders: (id) => '/lma/classrooms/' + id + '/leaders',
       members: '/lma/registrations',
       activitySheet: '/lma/registrations/activity_sheet',
@@ -30,6 +32,7 @@ export default class ClassroomAPI extends APIRepository {
       api: this.api,
       request: this.APIAdresses.base,
       data: this.getNormalizedSendData({
+        unit__category__type: null, // String
         per_page: 10, // Number
         page: 1 // Number
       }, data),
@@ -70,6 +73,32 @@ export default class ClassroomAPI extends APIRepository {
     })
   }
 
+  register (id) {
+    return this.sendRequest({
+      apiMethod: 'put',
+      api: this.api,
+      request: this.APIAdresses.register(id),
+      resolveCallback: (response) => {
+        const data = {
+          type: null,
+          model: response.data
+        }
+        if (response.data.status === 'PAYING') {
+          data.type = 'Invoice'
+          data.model = new Invoice(response.data)
+        } else if (response.data.status === 'REGISTERED') {
+          data.type = 'EventRegistration'
+          data.model = new EventRegistration(response.data)
+        }
+
+        return data
+      },
+      rejectCallback: (error) => {
+        return error
+      }
+    })
+  }
+
   enrollByUser (id) {
     return this.sendRequest({
       apiMethod: 'put',

+ 3 - 2
src/components/Widgets/Classroom/AdminClassroomCreate/AdminClassroomCreate.vue

@@ -214,6 +214,7 @@ export default {
       }
       if (this.localOptions.classroomType === 'EVENT') {
         FormBuilderAssist.setAttributeByName(this.inputs, 'professor', 'label', 'برگزار کننده')
+        FormBuilderAssist.setAttributeByName(this.inputs, 'sessions_frequency', 'label', 'عنوان')
         FormBuilderAssist.setAttributeByName(this.inputs, 'unit', 'label', 'دسته')
         FormBuilderAssist.setAttributeByName(this.inputs, 'category', 'type', 'hidden') // unit -> category__type filter
         FormBuilderAssist.setAttributeByName(this.inputs, 'allowed_absence_count', 'type', 'hidden')
@@ -256,7 +257,7 @@ export default {
         .catch(() => {})
     },
     getCategories () {
-      return APIGateway.unitCategory.index({ per_page: 9999, type: 'TRAINING' })
+      return APIGateway.unitCategory.index({ per_page: 9999, type: this.localOptions.classroomType })
         .then((categories) => {
           FormBuilderAssist.setAttributeByName(this.inputs, 'category', 'options', categories.list.list.map(item => {
             return {
@@ -269,7 +270,7 @@ export default {
     },
     getUnits (selectedcategoryId = null, categoryType = null) {
       this.unitsLoading = true
-      APIGateway.unit.index({ per_page: 9999, category: selectedcategoryId, category__typ: categoryType })
+      APIGateway.unit.index({ per_page: 9999, category: selectedcategoryId, category__type: categoryType })
         .then((units) => {
           FormBuilderAssist.setAttributeByName(this.inputs, 'unit', 'options', units.list.list.map(item => {
             return {

+ 4 - 1
src/components/Widgets/Event/LastEvents/LastEvents.vue

@@ -144,7 +144,10 @@ export default {
     },
     getEvents () {
       this.events.loading = true
-      return APIGateway.event.index()
+      // return APIGateway.event.index()
+      return APIGateway.classroom.index({
+        unit__category__type: 'EVENT'
+      })
     }
   }
 }

+ 8 - 144
src/components/Widgets/Event/LastEvents/OptionPanel.vue

@@ -1,163 +1,27 @@
 <template>
   <option-panel-tabs v-model:options="localOptions">
     <template #main-tab>
-      <div class="option-panel-container">
-        <div class="row q-col-gutter-md">
-          <div class="input-container col-12 q-mt-md">
-
-            <div class="outsideLabel">آدرس فایل عکس</div>
-            <q-input v-model="localOptions.imageSource"
-                     label="image" />
-          </div>
-          <!--          <div class="input-container q-py-md">-->
-          <!--            <div class="outsideLabel">height</div>-->
-          <!--            <q-input v-model="localOptions.height"-->
-          <!--                     label="image" />-->
-          <!--          </div>-->
-          <div class="input-container col-4">
-            <div class="outsideLabel">size</div>
-            <q-select v-model="size"
-                      :options="sizeOptions"
-                      label="page size" />
-          </div>
-          <div class="input-container col-4">
-
-            <div class="outsideLabel">عرض در سایز {{size}}</div>
-            <q-input v-model="localOptions[size].width"
-                     label="width" />
-          </div>
-          <div class="input-container col-4">
-
-            <div class="outsideLabel">ارتفاع در سایز {{size}}</div>
-            <q-input v-model="localOptions[size].height"
-                     label="height" />
-          </div>
-          <div class="input-container col-12">
-            <div class="outsideLabel">لینک عکس در سایز {{size}}</div>
-            <q-input v-model="localOptions[size].src"
-                     label="image link" />
-          </div>
-          <div class="action col-md-12">
-            <div class="cehckBox">
-              <q-checkbox v-model="localOptions.useAEEEvent"
-                          label="استفاده از ایونت GTM"
-                          right-label />
-            </div>
-            <div v-if="localOptions.useAEEEvent"
-                 class="action-container q-gutter-lg-md">
-              <div>فیلد های مورد نظر ایونت GTM :</div>
-              <div class="col-9">
-                <div class="outsideLabel">id</div>
-                <q-input v-model="localOptions.AEEEventBody.id"
-                         label="id" />
-              </div>
-              <div class="col-6">
-                <div class="outsideLabel">name</div>
-                <q-input v-model="localOptions.AEEEventBody.name"
-                         label="name" />
-              </div>
-              <div class="col-6">
-                <div class="outsideLabel">creative</div>
-                <q-input v-model="localOptions.AEEEventBody.creative"
-                         label="creative" />
-              </div>
-              <div class="col-6">
-                <div class="outsideLabel">position</div>
-                <q-input v-model="localOptions.AEEEventBody.position"
-                         label="position" />
-              </div>
-            </div>
-            <div class="cehckBox">
-              <q-checkbox v-model="localOptions.hasAction"
-                          label="hasAction"
-                          right-label />
-            </div>
-            <div v-if="localOptions.hasAction"
-                 class="action-container">
-              <div>
-                <q-select v-model="localOptions.action.name"
-                          :options="actionTypes" />
-              </div>
-              <div v-if="localOptions.action.name === 'link'">
-                <q-input v-model="localOptions.action.route"
-                         label="route" />
-              </div>
-              <div v-if="localOptions.action.name === 'event'">
-                <q-input v-model="localOptions.action.eventName"
-                         label="event name" />
-                <q-input v-model="localOptions.action.eventArgs"
-                         label="event args" />
-              </div>
-              <div v-if="localOptions.action.name === 'scroll'">
-                <q-input v-model="localOptions.action.scrollTo"
-                         label="scrollTo class" />
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
+      <q-option-group v-model="localOptions.classroomType"
+                      :options="classroomTypeOptions" />
     </template>
   </option-panel-tabs>
 </template>
 
 <script>
 import { defineComponent } from 'vue'
+import { UnitCategory } from 'src/models/UnitCategory.js'
 import { mixinOptionPanel } from 'quasar-ui-q-page-builder'
 import OptionPanelTabs from 'quasar-ui-q-page-builder/src/components/OptionPanelComponents/OptionPanelTabs.vue'
 
 export default defineComponent({
   name: 'OptionPanel',
-  components: { OptionPanelTabs },
+  components: {
+    OptionPanelTabs
+  },
   mixins: [mixinOptionPanel],
-  data() {
+  data () {
     return {
-      size: 'xs',
-      sizeOptions: ['xs', 'sm', 'md', 'lg', 'xl'],
-      actionTypes: ['event', 'scroll', 'link'],
-      defaultOptions: {
-        imageSource: null,
-        ratio: null,
-        hasAction: false,
-        useAEEEvent: false,
-        AEEEventBody: {
-          id: '-',
-          name: '-',
-          creative: null,
-          position: null
-        },
-        action: {
-          name: null,
-          route: null,
-          scrollTo: null,
-          eventName: null,
-          eventArgs: null
-        },
-        xs: {
-          height: null,
-          width: null,
-          src: null
-        },
-        sm: {
-          height: null,
-          width: null,
-          src: null
-        },
-        md: {
-          height: null,
-          width: null,
-          src: null
-        },
-        lg: {
-          height: null,
-          width: null,
-          src: null
-        },
-        xl: {
-          height: null,
-          width: null,
-          src: null
-        }
-      }
+      classroomTypeOptions: (new UnitCategory()).typeEnums
     }
   }
 })

+ 1 - 1
src/components/Widgets/Event/ShowEventInfo/ShowEventInfo.vue

@@ -419,7 +419,7 @@ export default {
     },
     getEvent () {
       this.loading = true
-      return APIGateway.event.get(this.$route.params.id)
+      return APIGateway.classroom.get(this.$route.params.id)
     }
   }
 }

+ 1 - 1
src/components/Widgets/Other/Shop/ShopCompleteInfo/ShopCompleteInfo.vue

@@ -259,7 +259,7 @@ export default {
     registerEvent () {
       return new Promise((resolve, reject) => {
         this.invoice.loading = true
-        APIGateway.event.register(this.classroom.id)
+        APIGateway.classroom.register(this.classroom.id)
           .then((data) => {
             if (data.type === 'Invoice') {
               this.invoice = new Invoice(data.model)