confirmDialog.vue 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <v-dialog v-model="isOpenPop" persistent width="32.81rem">
  3. <div class="v-common-dialog-wrapper custom-dialog alert">
  4. <div class="modal-tit">
  5. <strong>{{ popUpOption.title }}</strong>
  6. <button class="btn-close" @click="fnProcNo"></button>
  7. </div>
  8. <!-- 신뢰할수있는 코드... 작성자만 넣을수있기때문에 -->
  9. <div class="v-common-dialog-content">
  10. <p class="alert-txt" v-html="popUpOption.content"></p>
  11. </div>
  12. <div class="btn-wrap">
  13. <v-btn class="custom-btn btn-white mini" v-if="popUpOption.no" @click="fnProcNo"
  14. ><i class="ico"></i>{{ popUpOption.no.text }}</v-btn
  15. >
  16. <v-btn class="custom-btn btn-blue mini" @click="fnProcYes"
  17. ><i class="ico"></i>{{ popUpOption.yes.text }}</v-btn
  18. >
  19. </div>
  20. </div>
  21. </v-dialog>
  22. </template>
  23. <script setup>
  24. import { useRouter, useRoute } from "vue-router";
  25. let pageId = "confirmDialog";
  26. const router = useRouter();
  27. const route = useRoute();
  28. const { $eventBus } = useNuxtApp();
  29. // data
  30. let isOpenPop = ref(false); // 팝업 활성화 여부
  31. // interface inPopUpOption {
  32. // id: string,
  33. // title: string,
  34. // content: string,
  35. // yes: {
  36. // text: string,
  37. // param?: any,
  38. // event?: string,
  39. // isProc: boolean, // isProc일경우 확인 버튼을 누르면 팝업이 닫히면서 특정 동작을 해야함
  40. // },
  41. // no?: {
  42. // text: string,
  43. // isProc: boolean, // isProc일경우 확인 버튼을 누르면 팝업이 닫히면서 특정 동작을 해야함
  44. // }
  45. // }
  46. let popUpOption; // 팝업 데이터
  47. $eventBus.off("OPEN_CONFIRM_POP_UP");
  48. $eventBus.on("OPEN_CONFIRM_POP_UP", (e) => {
  49. popUpOption = e; // 반응형일 필요가 없다.
  50. isOpenPop.value = true;
  51. });
  52. // methods
  53. function fnProcYes() {
  54. if (popUpOption.yes.isProc) {
  55. if (popUpOption.yes.event)
  56. $eventBus.emit(popUpOption.yes.event, popUpOption.yes.param);
  57. // 하나의 컴포넌트에서 여러개의 팝업창이 필요한 경우
  58. else $eventBus.emit(`${popUpOption.id}_PROC_YES`, popUpOption.yes.param); // 하나의 컴포넌트에서 하나의 팝업창만 열릴경우
  59. }
  60. if (popUpOption.reload) {
  61. window.location.reload();
  62. }
  63. isOpenPop.value = false;
  64. }
  65. function fnProcNo() {
  66. if (popUpOption.hasOwnProperty("no")) {
  67. if (popUpOption.no.isProc) {
  68. if (popUpOption.no.event)
  69. $eventBus.emit(popUpOption.no.event, popUpOption.no.param);
  70. else $eventBus.emit(`${popUpOption.id}_PROC_NO`, popUpOption.no.param);
  71. }
  72. }
  73. if (popUpOption.reload) {
  74. window.location.reload();
  75. }
  76. isOpenPop.value = false;
  77. }
  78. </script>
  79. <style lang="scss"></style>