DefaultDialogHeader.vue 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <template>
  2. <q-bar class="q-py-md" v-bind="$attrs" style="height: 50px">
  3. <q-icon v-if="icon" :name="icon" />
  4. <div>{{ title() }}</div>
  5. <q-space />
  6. <q-btn
  7. v-if="maximizable"
  8. dense
  9. flat
  10. :icon="!maximizedToggle ? 'mdi-arrow-expand' : 'mdi-arrow-collapse'"
  11. @click="onMaximazedClick"
  12. />
  13. <q-btn dense flat icon="mdi-close" @click="emit('close')" />
  14. </q-bar>
  15. </template>
  16. <script setup>
  17. import { ref, onMounted } from "vue";
  18. import { useI18n } from "vue-i18n";
  19. const emit = defineEmits(["maximized", "close"]);
  20. const { title, fullscreen, maximizable, icon } = defineProps({
  21. title: {
  22. type: Function,
  23. default: () => useI18n().t("common.terms.title"),
  24. },
  25. fullscreen: {
  26. type: Boolean,
  27. default: false,
  28. },
  29. maximizable: {
  30. type: Boolean,
  31. default: false,
  32. },
  33. icon: {
  34. type: String,
  35. default: "",
  36. },
  37. });
  38. const maximizedToggle = ref(false);
  39. const onMaximazedClick = () => {
  40. maximizedToggle.value = !maximizedToggle.value;
  41. emit("maximized", maximizedToggle.value);
  42. };
  43. onMounted(() => {
  44. if (fullscreen) {
  45. maximizedToggle.value = true;
  46. }
  47. });
  48. </script>