parent
							
								
									623df3e5ff
								
							
						
					
					
						commit
						c10ef97e85
					
				@ -1,133 +1,123 @@ | 
				
			||||
<template> | 
				
			||||
  <div> | 
				
			||||
    <Toolbar | 
				
			||||
      v-if="item && isAdmin" | 
				
			||||
      :handle-delete="del" | 
				
			||||
      :handle-edit="editHandler" | 
				
			||||
    > | 
				
			||||
    </Toolbar> | 
				
			||||
 | 
				
			||||
    <div | 
				
			||||
      v-if="item" | 
				
			||||
      class="flex flex-row" | 
				
			||||
    > | 
				
			||||
      <div class="w-1/2"> | 
				
			||||
        <p class="text-lg"> | 
				
			||||
          {{ item["title"] }} | 
				
			||||
        </p> | 
				
			||||
        <div class="flex justify-center"> | 
				
			||||
          <div class="w-4/5"> | 
				
			||||
            <div v-html="item['content']" /> | 
				
			||||
          </div> | 
				
			||||
  <div v-if="item"> | 
				
			||||
    <p | 
				
			||||
      class="text-body-1 font-semibold" | 
				
			||||
      v-text="item.title" | 
				
			||||
    /> | 
				
			||||
 | 
				
			||||
    <div class="flex flex-row gap-4"> | 
				
			||||
      <div class="w-2/3 flex justify-center"> | 
				
			||||
        <div class="w-4/5"> | 
				
			||||
          <div v-html="item.content" /> | 
				
			||||
        </div> | 
				
			||||
      </div> | 
				
			||||
 | 
				
			||||
      <span class="w-1/2"> | 
				
			||||
        <q-markup-table> | 
				
			||||
          <tbody> | 
				
			||||
            <tr> | 
				
			||||
              <td> | 
				
			||||
                <strong>{{ $t("Author") }}</strong> | 
				
			||||
              </td> | 
				
			||||
              <td> | 
				
			||||
                {{ item["creator"]["username"] }} | 
				
			||||
              </td> | 
				
			||||
              <td></td> | 
				
			||||
              <td /> | 
				
			||||
            </tr> | 
				
			||||
            <tr> | 
				
			||||
              <td> | 
				
			||||
                <strong>{{ $t("Locale") }}</strong> | 
				
			||||
              </td> | 
				
			||||
              <td> | 
				
			||||
                {{ item["locale"] }} | 
				
			||||
              </td> | 
				
			||||
            </tr> | 
				
			||||
            <tr> | 
				
			||||
              <td> | 
				
			||||
                <strong>{{ $t("Enabled") }}</strong> | 
				
			||||
              </td> | 
				
			||||
              <td> | 
				
			||||
                {{ item["enabled"] }} | 
				
			||||
              </td> | 
				
			||||
            </tr> | 
				
			||||
            <tr> | 
				
			||||
              <td> | 
				
			||||
                <strong>{{ $t("Category") }}</strong> | 
				
			||||
              </td> | 
				
			||||
              <td> | 
				
			||||
                {{ item["category"]["title"] }} | 
				
			||||
              </td> | 
				
			||||
            </tr> | 
				
			||||
            <tr> | 
				
			||||
              <td> | 
				
			||||
                <strong>{{ $t("Created at") }}</strong> | 
				
			||||
              </td> | 
				
			||||
              <td> | 
				
			||||
                {{ item["createdAt"] ? relativeDatetime(item["createdAt"]) : "" }} | 
				
			||||
              </td> | 
				
			||||
              <td /> | 
				
			||||
            </tr> | 
				
			||||
            <tr> | 
				
			||||
              <td> | 
				
			||||
                <strong>{{ $t("Updated at") }}</strong> | 
				
			||||
              </td> | 
				
			||||
              <td> | 
				
			||||
                {{ item["updatedAt"] ? relativeDatetime(item["updatedAt"]) : "" }} | 
				
			||||
              </td> | 
				
			||||
              <td /> | 
				
			||||
            </tr> | 
				
			||||
          </tbody> | 
				
			||||
        </q-markup-table> | 
				
			||||
      </span> | 
				
			||||
    </div> | 
				
			||||
      <div class="w-1/3"> | 
				
			||||
        <dl class="grid grid-cols-2"> | 
				
			||||
          <dt | 
				
			||||
            v-t="'Author'" | 
				
			||||
            class="font-semibold" | 
				
			||||
          /> | 
				
			||||
          <dl v-text="item.creator.username" /> | 
				
			||||
 | 
				
			||||
          <dt | 
				
			||||
            v-t="'Locale'" | 
				
			||||
            class="font-semibold" | 
				
			||||
          /> | 
				
			||||
          <dl v-text="item.locale" /> | 
				
			||||
 | 
				
			||||
          <dt | 
				
			||||
            v-t="'Enabled'" | 
				
			||||
            class="font-semibold" | 
				
			||||
          /> | 
				
			||||
          <dl v-t="item.enabled ? 'Yes' : 'No'" /> | 
				
			||||
 | 
				
			||||
          <dt | 
				
			||||
            v-t="'Category'" | 
				
			||||
            class="font-semibold" | 
				
			||||
          /> | 
				
			||||
          <dl v-text="item.category.title" /> | 
				
			||||
 | 
				
			||||
    <Loading :visible="isLoading" /> | 
				
			||||
          <dt | 
				
			||||
            v-t="'Created at'" | 
				
			||||
            class="font-semibold" | 
				
			||||
          /> | 
				
			||||
          <dl v-text="item.createdAt ? relativeDatetime(item.createdAt) : ''" /> | 
				
			||||
 | 
				
			||||
          <dt | 
				
			||||
            v-t="'Updated at'" | 
				
			||||
            class="font-semibold" | 
				
			||||
          /> | 
				
			||||
          <dl v-text="item.updatedAt ? relativeDatetime(item.updatedAt) : ''" /> | 
				
			||||
        </dl> | 
				
			||||
      </div> | 
				
			||||
    </div> | 
				
			||||
  </div> | 
				
			||||
 | 
				
			||||
  <Loading :visible="isLoading" /> | 
				
			||||
</template> | 
				
			||||
 | 
				
			||||
<script> | 
				
			||||
import { mapActions, mapGetters } from "vuex" | 
				
			||||
import { mapFields } from "vuex-map-fields" | 
				
			||||
<script setup> | 
				
			||||
import Loading from "../../components/Loading.vue" | 
				
			||||
import ShowMixin from "../../mixins/ShowMixin" | 
				
			||||
import Toolbar from "../../components/Toolbar.vue" | 
				
			||||
import { useFormatDate } from "../../composables/formatDate" | 
				
			||||
 | 
				
			||||
const servicePrefix = "Page" | 
				
			||||
import { useConfirm } from "primevue/useconfirm" | 
				
			||||
import { useRoute, useRouter } from "vue-router" | 
				
			||||
import { inject, ref, watch } from "vue" | 
				
			||||
import { useSecurityStore } from "../../store/securityStore" | 
				
			||||
import { storeToRefs } from "pinia" | 
				
			||||
import pageService from "../../services/page" | 
				
			||||
import { useNotification } from "../../composables/notification" | 
				
			||||
 | 
				
			||||
const { relativeDatetime } = useFormatDate() | 
				
			||||
 | 
				
			||||
export default { | 
				
			||||
  name: "PageShow", | 
				
			||||
  components: { | 
				
			||||
    Loading, | 
				
			||||
    Toolbar, | 
				
			||||
  }, | 
				
			||||
  data() { | 
				
			||||
    return { | 
				
			||||
      relativeDatetime, | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  mixins: [ShowMixin], | 
				
			||||
  computed: { | 
				
			||||
    ...mapFields("page", { | 
				
			||||
      isLoading: "isLoading", | 
				
			||||
    }), | 
				
			||||
    ...mapGetters("page", ["find"]), | 
				
			||||
    ...mapGetters({ | 
				
			||||
      isAuthenticated: "security/isAuthenticated", | 
				
			||||
      isAdmin: "security/isAdmin", | 
				
			||||
      isCurrentTeacher: "security/isCurrentTeacher", | 
				
			||||
    }), | 
				
			||||
  }, | 
				
			||||
  methods: { | 
				
			||||
    ...mapActions("page", { | 
				
			||||
      deleteItem: "del", | 
				
			||||
      reset: "resetShow", | 
				
			||||
      retrieve: "loadWithQuery", | 
				
			||||
    }), | 
				
			||||
  }, | 
				
			||||
  servicePrefix, | 
				
			||||
} | 
				
			||||
const securityStore = useSecurityStore() | 
				
			||||
const { isAdmin } = storeToRefs(securityStore) | 
				
			||||
const route = useRoute() | 
				
			||||
const router = useRouter() | 
				
			||||
 | 
				
			||||
const confirm = useConfirm() | 
				
			||||
const notification = useNotification() | 
				
			||||
 | 
				
			||||
const isLoading = ref(true) | 
				
			||||
const item = ref() | 
				
			||||
 | 
				
			||||
const layoutMenuItems = inject("layoutMenuItems") | 
				
			||||
 | 
				
			||||
watch(item, () => { | 
				
			||||
  if (!isAdmin.value) { | 
				
			||||
    return | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  layoutMenuItems.value = [ | 
				
			||||
    { | 
				
			||||
      label: "Edit page", | 
				
			||||
      to: { | 
				
			||||
        name: "PageUpdate", | 
				
			||||
        query: { id: item.value["@id"] }, | 
				
			||||
      }, | 
				
			||||
    }, | 
				
			||||
 | 
				
			||||
    { | 
				
			||||
      label: "Delete page", | 
				
			||||
      command() { | 
				
			||||
        confirm.require({ | 
				
			||||
          header: "Confirmation", | 
				
			||||
          message: "Are you sure you want to delete it?", | 
				
			||||
          async accept() { | 
				
			||||
            await pageService.del(item.value) | 
				
			||||
 | 
				
			||||
            await router.push({ name: "PageList" }) | 
				
			||||
          }, | 
				
			||||
        }) | 
				
			||||
      }, | 
				
			||||
    }, | 
				
			||||
  ] | 
				
			||||
}) | 
				
			||||
 | 
				
			||||
pageService | 
				
			||||
  .find(route.query.id) | 
				
			||||
  .then((response) => response.json()) | 
				
			||||
  .then((json) => (item.value = json)) | 
				
			||||
  .catch((e) => notification.showErrorNotification(e)) | 
				
			||||
  .finally(() => (isLoading.value = false)) | 
				
			||||
</script> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue