Dialog.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <q-dialog v-model="active" no-route-dismiss>
  3. <div class="column bg-white no-wrap">
  4. <div class="header row">
  5. <div class="caption col row items-center q-ml-md">
  6. <slot name="header"></slot>
  7. </div>
  8. <div class="close-icon column justify-center items-center">
  9. <q-btn flat round dense v-close-popup>
  10. <q-icon name="la la-times" size="18px"></q-icon>
  11. </q-btn>
  12. </div>
  13. </div>
  14. <div class="col q-mx-md">
  15. <slot></slot>
  16. </div>
  17. <div class="row justify-end q-pa-md">
  18. <slot name="footer"></slot>
  19. </div>
  20. </div>
  21. </q-dialog>
  22. </template>
  23. <script>
  24. //-----------------------------------------------------------------------------
  25. import Vue from 'vue';
  26. import Component from 'vue-class-component';
  27. const DialogProps = Vue.extend({
  28. props: {
  29. value: Boolean,
  30. }
  31. });
  32. export default @Component({
  33. })
  34. class Dialog extends DialogProps {
  35. get active() {
  36. return this.value;
  37. }
  38. set active(value) {
  39. this.$emit('input', value);
  40. }
  41. }
  42. //-----------------------------------------------------------------------------
  43. </script>
  44. <style scoped>
  45. .header {
  46. height: 50px;
  47. }
  48. .caption {
  49. font-size: 110%;
  50. overflow: hidden;
  51. }
  52. .close-icon {
  53. width: 50px;
  54. }
  55. </style>