index.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <div v-if="action === 'bind'" class="p-imei">
  3. <h3 class="ptc-title">
  4. You have a {{ state.currentOrder.product_name }} version of membership
  5. service to be bound
  6. </h3>
  7. <div class="ptc-wrapper">
  8. <div class="ptc-block">
  9. <div class="ptc-inner">
  10. <p class="label">IMEI</p>
  11. <p class="control">
  12. <input
  13. v-model="imei"
  14. class="ptc-input"
  15. placeholder="please enter"
  16. />
  17. </p>
  18. <p class="tip">
  19. <span class="pointer" @click="$router.push('view')"
  20. >How to view IMEI?</span
  21. >
  22. </p>
  23. </div>
  24. </div>
  25. <div class="ptc-button-group">
  26. <div class="ptc-inner">
  27. <button class="ptc-button" :loading="loading" @click="applyBind">
  28. BIND IMEI
  29. </button>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. <div v-else class="p-imei">
  35. <h3 class="ptc-title">What is an IMEI number?</h3>
  36. <div class="ptc-wrapper">
  37. <div class="ptc-block">
  38. <div class="guide ptc-inner">
  39. <p class="guide-txt">
  40. The IMEI and series number are between 10 - 20 serial character
  41. unique to each and every phone.
  42. </p>
  43. <p class="guide-txt bold">
  44. You’ll usually find it printed on the back of your phone or on the
  45. SIM tray.
  46. </p>
  47. <img class="guide-img" src="@img/imei-1.jpg" />
  48. <img class="guide-img" src="@img/imei-2.jpg" />
  49. <p class="guide-txt">
  50. Alternatively you can have your mobile display its IMEI number by
  51. typing the following on the keypad: <strong>*#06#</strong>
  52. </p>
  53. <img class="guide-img" src="@img/imei-3.jpg" />
  54. <p class="guide-txt">
  55. *If your handset display character and symbol please enter character
  56. only. *
  57. </p>
  58. </div>
  59. </div>
  60. <div class="ptc-button-group">
  61. <div class="ptc-inner">
  62. <button class="ptc-button" @click="$router.back()">BACK</button>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. </template>
  68. <script lang="ts">
  69. import { defineComponent } from 'vue'
  70. import { getCurrentOrder } from '@/store'
  71. export default defineComponent({
  72. name: 'IMEI',
  73. async beforeRouteEnter(to) {
  74. await getCurrentOrder(to.query.id as string)
  75. },
  76. })
  77. </script>
  78. <script setup lang="ts">
  79. import { ref } from 'vue'
  80. import { useRoute, useRouter } from 'vue-router'
  81. import { bindIMEI } from '@/service/order'
  82. import { state, getUserInfo } from '@/store'
  83. import Toast from '@/components/toast'
  84. defineProps<{ action: 'bind' | 'view' }>()
  85. const router = useRouter()
  86. const imei = ref('')
  87. const loading = ref(false)
  88. const { id } = useRoute().query as any
  89. const fromPath = history.state.back || '/'
  90. async function applyBind() {
  91. if (!imei.value) return Toast('Please enter IMEI')
  92. loading.value = true
  93. try {
  94. const { message } = await bindIMEI({ id, imei: imei.value })
  95. Toast(message)
  96. getUserInfo()
  97. state.currentOrder.id = -1
  98. const matched = fromPath.match(/order\/(\d+)/)
  99. matched?.[1] === id ? router.back() : router.push(`/order/${id}`)
  100. } catch {}
  101. loading.value = false
  102. }
  103. </script>
  104. <style lang="scss">
  105. .p-imei {
  106. .label {
  107. font-size: 32px;
  108. color: #999;
  109. }
  110. .control {
  111. margin: 48px 0;
  112. }
  113. .tip {
  114. font-size: 32px;
  115. color: $primary-color;
  116. }
  117. .guide {
  118. &-txt {
  119. margin-top: 40px;
  120. line-height: 44px;
  121. font-size: 32px;
  122. color: #333;
  123. }
  124. &-img {
  125. display: block;
  126. margin-top: 40px;
  127. height: 328px;
  128. background: #eee;
  129. }
  130. }
  131. }
  132. </style>