DefaultDialogHeader.vue 1.2 KB

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