passwordCheck.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <!-- 비밀번호 확인 -->
  3. <v-dialog v-model="props.isPwdConfirmModal" persistent width="32.81rem">
  4. <div class="v-common-dialog-wrapper custom-dialog">
  5. <div class="modal-tit">
  6. <strong>{{$t('common.header.passwdCheckModal.title')}}</strong>
  7. <button class="btn-close" @click="$emit('closeModal')"></button>
  8. </div>
  9. <div class="v-common-dialog-content">
  10. <div class="info-mod">
  11. <p class="mod-txt">
  12. {{$t('common.header.passwdCheckModal.desc')}}
  13. </p>
  14. <div class="txt-field-box" :class="!isErrorTxt ? 'error' : ''">
  15. <v-text-field v-model="password" type="password" placeholder="Password" class="custom-input" @keydown.enter="fnClickOk" @input="setInputField()"></v-text-field>
  16. <i class="ico"></i>
  17. </div>
  18. <p class="error-txt" v-if="!isErrorTxt">{{ $t('common.header.valid.errorPasswd') }}</p>
  19. </div>
  20. </div>
  21. <div class="btn-wrap">
  22. <v-btn class="custom-btn btn-white mini" @click="$emit('closeModal')"><i class="ico"></i>{{$t('common.cancel')}}</v-btn>
  23. <v-btn class="custom-btn btn-blue mini" @click="fnClickOk"><i class="ico"></i>{{$t('common.confirm')}}</v-btn>
  24. </div>
  25. </div>
  26. </v-dialog>
  27. </template>
  28. <script setup>
  29. /***********************
  30. * import
  31. ************************/
  32. import apiUrl from '@/composables/useApi';
  33. import useUtil from '@/composables/useUtil';
  34. import { useI18n } from 'vue-i18n';
  35. /***********************
  36. * plugins inject
  37. ************************/
  38. const { $toast, $log, $dayjs, $eventBus } = useNuxtApp()
  39. // props
  40. const props = defineProps({
  41. isPwdConfirmModal: Boolean,
  42. })
  43. // 참조가능 데이터 설정
  44. defineExpose({
  45. fnInit
  46. })
  47. /**
  48. * @SCRIPT
  49. * 비밀번호 입력 validation체크
  50. */
  51. const setInputField = () => {
  52. if(useUtil.isNull(password.value) || !/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,30}$/i.test(password.value)) {
  53. //if(useUtil.isNull(password.value)) {
  54. isErrorTxt.value = false
  55. } else {
  56. isErrorTxt.value = true
  57. }
  58. }
  59. // 발신 이벤트 선언
  60. const emit = defineEmits(['closeModal', 'openMyInfoUpdateModal'])
  61. const i18n = useI18n()
  62. /***********************
  63. * data & created
  64. ************************/
  65. const password = ref("")
  66. const isErrorTxt = ref(true)
  67. /***********************
  68. * Methods
  69. ************************/
  70. function fnInit(){
  71. // 데이터 초기화
  72. password.value = ""
  73. isErrorTxt.value = true
  74. }
  75. /**
  76. * 확인
  77. */
  78. function fnClickOk(){
  79. setInputField()
  80. if(isErrorTxt.value) {
  81. fnPasswordCheck()
  82. }
  83. }
  84. /**
  85. * @API
  86. * 비밀번호 확인
  87. */
  88. function fnPasswordCheck(){
  89. let _req = {
  90. username: useAuthStore().getAccountId,
  91. password: btoa(password.value)
  92. }
  93. useAxios().post(apiUrl.idPwCheck, _req).then((res) => {
  94. emit('closeModal')
  95. emit('openMyInfoUpdateModal')
  96. $log.debug("[passwordCheck][fnPasswordCheck][success]")
  97. }).catch((error)=>{
  98. let errorData = error.response.data
  99. let errorMessage = ''
  100. if(errorData.code === '2002') {
  101. // 비밀번호 불일치 XX회
  102. errorMessage += i18n.t('login.sendFail')+' '+Number(errorData.reason)+'회 오류'
  103. $toast.error(errorMessage)
  104. }
  105. $log.debug("[passwordCheck][fnPasswordCheck][error]")
  106. }).finally(()=>{
  107. $log.debug("[passwordCheck][fnPasswordCheck][finished]")
  108. })
  109. }
  110. </script>