index.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <div v-if="state === 0 && info" class="p-account">
  3. <h3 class="ptc-title">Account Information</h3>
  4. <div class="ptc-wrapper">
  5. <div class="ptc-block">
  6. <div class="ptc-inner">
  7. <p class="ptc-label">QR code</p>
  8. <img class="qrcode" />
  9. </div>
  10. </div>
  11. <div v-if="info.from === 1" class="ptc-block">
  12. <div class="ptc-inner">
  13. <div class="ptc-cell">
  14. <p class="ptc-label">Email</p>
  15. <p class="ptc-value">{{ info.email }}</p>
  16. </div>
  17. <div class="ptc-cell">
  18. <p class="ptc-label">Password</p>
  19. <p class="ptc-value">
  20. <span>********</span>
  21. <span class="primary ml354" @click="state = 1">Edit ></span>
  22. </p>
  23. </div>
  24. </div>
  25. </div>
  26. <div v-else class="ptc-block">
  27. <div class="ptc-inner">
  28. <div class="ptc-cell">
  29. <p class="ptc-label">Account</p>
  30. <p class="ptc-value flex-ac">
  31. {{ info.email
  32. }}<i
  33. class="account-icon"
  34. :class="{
  35. 'a-facebook': info.from === 2,
  36. 'a-google': info.from === 3,
  37. 'a-apple': info.from === 4,
  38. }"
  39. ></i>
  40. </p>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. <h3 class="ptc-title pr">
  46. Login Detail<button class="stroke-btn" @click="state = 2">Edit</button>
  47. </h3>
  48. <div class="ptc-block">
  49. <div class="ptc-inner">
  50. <div class="ptc-cell">
  51. <p class="ptc-label">Name</p>
  52. <p class="ptc-value">{{ info.name }}</p>
  53. </div>
  54. <div class="ptc-cell">
  55. <p class="ptc-label">Pone number</p>
  56. <p class="ptc-value">{{ info.mobile }}</p>
  57. </div>
  58. <div class="ptc-cell">
  59. <p class="ptc-label">Address</p>
  60. <p class="ptc-value">{{ info.address }}</p>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. <div v-else-if="state === 1" class="p-account">
  66. <h3 class="ptc-title">Change Password</h3>
  67. <div class="ptc-wrapper">
  68. <div class="ptc-block">
  69. <div class="ptc-inner">
  70. <div class="ptc-cell">
  71. <p class="ptc-label">New password</p>
  72. <p class="ptc-value">
  73. <input
  74. class="ptc-input"
  75. type="password"
  76. placeholder="Please enter"
  77. />
  78. </p>
  79. </div>
  80. </div>
  81. </div>
  82. <div class="ptc-button-group">
  83. <div class="ptc-inner">
  84. <button class="ptc-button">SUBMIT</button>
  85. <button class="ptc-button ptc-button--stroke" @click="state = 0">
  86. BACK
  87. </button>
  88. </div>
  89. </div>
  90. </div>
  91. </div>
  92. <div v-else-if="state === 2" class="p-account">
  93. <h3 class="ptc-title">Modify My profile</h3>
  94. <div class="ptc-wrapper">
  95. <div class="ptc-block">
  96. <div class="ptc-inner">
  97. <div class="ptc-cell">
  98. <p class="ptc-label">Name</p>
  99. <p class="ptc-value">
  100. <input
  101. class="ptc-input"
  102. placeholder="Please enter your real name"
  103. />
  104. </p>
  105. </div>
  106. <div class="ptc-cell">
  107. <p class="ptc-label">Phone Number</p>
  108. <p class="ptc-value">
  109. <input
  110. class="ptc-input"
  111. placeholder="Please enter your phone number"
  112. />
  113. </p>
  114. </div>
  115. <div class="ptc-cell">
  116. <p class="ptc-label">Address</p>
  117. <p class="ptc-value">
  118. <input class="ptc-input mb24" placeholder="Road" />
  119. <input class="ptc-input mb24" placeholder="State" />
  120. <input class="ptc-input" placeholder="Zip code" />
  121. </p>
  122. </div>
  123. </div>
  124. </div>
  125. <div class="ptc-button-group">
  126. <div class="ptc-inner">
  127. <button class="ptc-button">SUBMIT</button>
  128. <button class="ptc-button ptc-button--stroke" @click="state = 0">
  129. BACK
  130. </button>
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. </template>
  136. <script>
  137. import { defineComponent } from 'vue'
  138. import { getUserInfo } from '@/service/user'
  139. export default defineComponent({
  140. name: 'Account',
  141. async beforeRouteEnter(to, from, next) {
  142. const { results } = await getUserInfo()
  143. next(vm => (vm.info = results))
  144. },
  145. data() {
  146. return {
  147. /** @type {ApiUser.Info.Response} */
  148. info: null,
  149. state: 0,
  150. }
  151. },
  152. watch: {
  153. state() {
  154. window.scrollTo(0, 0)
  155. },
  156. },
  157. })
  158. </script>
  159. <style lang="scss">
  160. .p-account {
  161. .qrcode {
  162. width: 212px;
  163. height: 212px;
  164. background: #efefef;
  165. }
  166. .stroke-btn {
  167. position: absolute;
  168. top: 50%;
  169. transform: translateY(-50%);
  170. left: 310px;
  171. width: 132px;
  172. height: 56px;
  173. border-radius: 8px;
  174. border: 2px solid $primary-color;
  175. font-size: 32px;
  176. font-weight: bold;
  177. color: $primary-color;
  178. }
  179. .primary {
  180. margin-left: 48px;
  181. }
  182. .account-icon {
  183. margin-left: 24px;
  184. width: 56px;
  185. height: 56px;
  186. background-size: contain;
  187. }
  188. .a-google {
  189. background-image: url(@img/a-google.png);
  190. }
  191. .a-apple {
  192. background-image: url(@img/a-apple.png);
  193. }
  194. .a-facebook {
  195. background-image: url(@img/a-facebook.png);
  196. }
  197. .mb24 {
  198. margin-bottom: 24px;
  199. }
  200. .ml354 {
  201. margin-left: 354px;
  202. }
  203. }
  204. </style>