ali 2 лет назад
Родитель
Сommit
2e50c401d6
3 измененных файлов с 81 добавлено и 2 удалено
  1. 6 2
      src/mixin/PageOptions.js
  2. 66 0
      src/pages/Public/professorLanding.vue
  3. 9 0
      src/router/routes/Public.js

+ 6 - 2
src/mixin/PageOptions.js

@@ -1,4 +1,4 @@
-import { APIGateway } from 'src/api/APIGateway'
+import { APIGateway } from 'src/api/APIGateway.js'
 
 const mixinPageOptions = {
   data() {
@@ -40,6 +40,8 @@ const mixinPageOptions = {
     }
   },
   methods: {
+    onFetchData (/* data */) {},
+    onFailedFetchData (/* error */) {},
     prefetchServerDataPromise () {
       return this.getPageConfigRequest()
     },
@@ -62,9 +64,11 @@ const mixinPageOptions = {
       this.pageBuilderLoading = false
 
       this.$store.commit('PageBuilder/updatePageDataLoaded', true)
+      this.onFetchData(pageSetting)
     },
-    prefetchServerDataPromiseCatch () {
+    prefetchServerDataPromiseCatch (error) {
       this.pageBuilderLoading = false
+      this.onFailedFetchData(error)
     },
     getPageConfigRequest() {
       this.pageBuilderLoading = true

+ 66 - 0
src/pages/Public/professorLanding.vue

@@ -0,0 +1,66 @@
+<template>
+  <q-page-builder v-model:sections="currenSections"
+                  v-model:options="pageConfig"
+                  :editable="pageBuilderEditable"
+                  :loading="pageBuilderLoading" />
+</template>
+
+<script>
+import { APIGateway } from 'src/api/APIGateway.js'
+import { PageSetting } from 'src/models/PageSetting.js'
+import { mixinSEO, mixinPageOptions, mixinPrefetchServerData, mixinAuth } from 'src/mixin/Mixins.js'
+
+export default {
+  name: 'Landing',
+  mixins: [mixinPrefetchServerData, mixinPageOptions, mixinSEO, mixinAuth],
+  computed: {
+    hasDynamicSetting () {
+      return !!this.$route.meta?.hasDynamicSetting
+    },
+    hasDynamicSettingWithParams () {
+      return !!this.$route.meta?.hasDynamicSettingWithParams
+    }
+  },
+  methods: {
+    onFailedFetchData () {
+      setTimeout(() => {
+        this.checkNewLanding()
+      }, 1000)
+    },
+    goToNotFoundLanding () {
+      // this.$router.push({ name: 'NotFound' })
+      this.$router.push({ name: 'Public.Home' })
+    },
+    checkNewLanding () {
+      if (!this.isUserLogin || !this.user.isSuperUser()) {
+        this.goToNotFoundLanding()
+        return
+      }
+
+      this.$q.dialog({
+        title: 'ساخت صفحه استاد جدید',
+        message: 'از نام لندینگ ' + this.$route.params.professor_name + ' اطمینان دارید؟ ',
+        cancel: true,
+        persistent: true
+      }).onOk(() => {
+        this.createNewLanding()
+      }).onCancel(() => {
+        // this.$router.push({ name: 'Public.Home' })
+        this.goToNotFoundLanding()
+      })
+    },
+    createNewLanding () {
+      const params = JSON.stringify(this.$route.params)
+      const routeName = this.$route.name
+      const key = 'route_name:' + routeName + '-params:' + params
+      const value = new PageSetting({
+        value: { sections: [], seo: {}, layoutConfig: {} }
+      }).getStringifyValue()
+      APIGateway.pageSetting.create({ key, value })
+        .then(() => {
+          this.currenSections = []
+        })
+    }
+  }
+}
+</script>

+ 9 - 0
src/router/routes/Public.js

@@ -173,6 +173,15 @@ export default {
       },
       component: () => import('src/pages/BasicDynamicPage.vue')
     },
+    {
+      name: 'Public.Professor',
+      path: 'professor/:professor_name',
+      meta: {
+        hasDynamicSetting: true,
+        hasDynamicSettingWithParams: true
+      },
+      component: () => import('src/pages/Public/professorLanding.vue')
+    },
     {
       name: 'Public.Rules',
       path: 'rules',