Dialog.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <!-- Fenêtre de dialogue -->
  2. <template>
  3. <v-dialog
  4. :model-value="show"
  5. persistent
  6. :max-width="maxWidth"
  7. :content-class="contentClass"
  8. >
  9. <v-card class="d-flex flex-row">
  10. <div :class="'dialog-type flex-column justify-center d-none d-sm-flex theme-' + theme">
  11. <h3 class="d-flex">
  12. <slot name="dialogType" />
  13. </h3>
  14. </div>
  15. <div class="dialog-container d-flex flex-column flex-grow-1">
  16. <v-card-title class="dialog-title theme-neutral">
  17. <slot name="dialogTitle" />
  18. </v-card-title>
  19. <div class="dialog-text-container">
  20. <slot name="dialogText" />
  21. </div>
  22. <v-spacer />
  23. <v-divider />
  24. <v-card-actions class="justify-center">
  25. <slot name="dialogBtn" />
  26. </v-card-actions>
  27. </div>
  28. </v-card>
  29. </v-dialog>
  30. </template>
  31. <script setup lang="ts">
  32. const props = defineProps({
  33. show: {
  34. type: Boolean,
  35. required: true
  36. },
  37. contentClass: {
  38. type: String,
  39. required: false
  40. },
  41. theme: {
  42. type: String,
  43. required: false,
  44. default: 'primary',
  45. },
  46. maxWidth: {
  47. type: [Number, String],
  48. required: false,
  49. default: 800
  50. }
  51. })
  52. </script>
  53. <style lang="scss" scoped>
  54. .dialog-title {
  55. padding-left: 40px;
  56. font-weight: normal;
  57. }
  58. .dialog-type {
  59. width: 60px;
  60. min-width: 60px;
  61. max-width: 60px;
  62. min-height: 400px;
  63. padding: 25px 10px;
  64. h3 {
  65. font-size: 25px;
  66. font-weight: normal;
  67. writing-mode: vertical-lr;
  68. transform: rotate(-180deg);
  69. }
  70. }
  71. .dialog-text-container {
  72. max-height: 70vh;
  73. overflow: auto;
  74. }
  75. .modal-level-alert {
  76. .dialog-type{
  77. background: rgb(var(--v-theme-danger, #f56954));
  78. }
  79. }
  80. .modal-level-warning {
  81. .dialog-type{
  82. background: rgb(var(--v-theme-warning, #f39c12));
  83. }
  84. }
  85. </style>