fauzie811

vuetify login dialog

Nov 6th, 2018
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.09 KB | None | 0 0
  1. // App.vue
  2. <template>
  3. <v-app>
  4. <v-toolbar app>
  5. <v-toolbar-title class="headline text-uppercase">
  6. <span>{{ title }}</span>
  7. </v-toolbar-title>
  8. <v-spacer></v-spacer>
  9. <v-btn flat @click="reglogModal = true">
  10. <span class="mr-2">Masuk/Daftar</span>
  11. </v-btn>
  12. </v-toolbar>
  13.  
  14. <LoginRegisterModal v-model="reglogModal" />
  15.  
  16. <v-content>
  17. <HelloWorld/>
  18. </v-content>
  19. </v-app>
  20. </template>
  21.  
  22. <script>
  23. import HelloWorld from './components/HelloWorld'
  24. import LoginRegisterModal from './components/LoginRegisterModal'
  25.  
  26. export default {
  27. name: 'App',
  28. components: {
  29. HelloWorld,
  30. LoginRegisterModal
  31. },
  32. data () {
  33. return {
  34. title: 'bimbelX',
  35. reglogModal: false
  36. }
  37. }
  38. }
  39. </script>
  40.  
  41. // LoginRegisterModal.vue
  42. <template>
  43. <v-dialog
  44. role="dialog"
  45. :value="value"
  46. @input="toggleDialog($event)"
  47. max-width="450px"
  48. :persistent="loading"
  49. >
  50. <v-card v-if="!loading">
  51. <v-tabs fixed-tabs
  52. color="#35B729"
  53. dark
  54. slider-color="#FFFFFF"
  55. >
  56. <v-tab :disabled="loading">
  57. Login
  58. </v-tab>
  59. <v-tab :disabled="loading">
  60. Register
  61. </v-tab>
  62.  
  63. <v-tabs-items>
  64. <v-tab-item>
  65. <v-form ref="loginModalForm" v-model="loginForm.valid" lazy-validation>
  66. <v-card-text>
  67. <v-container grid-list-md>
  68. <v-layout wrap>
  69. <v-flex xs12>
  70. <v-text-field
  71. v-model="loginForm.login"
  72. label="Email atau username"
  73. type="text"
  74. name="login"
  75. :rules="[rules.required, rules.min]"
  76. :disabled="loading">
  77. </v-text-field>
  78. </v-flex>
  79. <v-flex xs12>
  80. <v-text-field
  81. label="Kata sandi"
  82. name="password"
  83. v-model="loginForm.password"
  84. :type="showPassword ? 'text' : 'password'"
  85. :append-icon="showPassword ? 'visibility_off' : 'visibility'"
  86. :rules="[rules.required]"
  87. @click:append="showPassword = !showPassword"
  88. :disabled="loading"
  89. ></v-text-field>
  90. </v-flex>
  91. </v-layout>
  92. </v-container>
  93. </v-card-text>
  94. </v-form>
  95. <v-card-actions>
  96. <v-btn :disabled="loading" color="#35B729" flat @click.native="toggleDialog(false)">Tutup</v-btn>
  97. <v-spacer></v-spacer>
  98. <v-btn :disabled="loading" color="#35B729" class="white--text" @click.native="masuk">Masuk</v-btn>
  99. </v-card-actions>
  100. </v-tab-item>
  101.  
  102. <v-tab-item>
  103. <v-form ref="registerModalForm" v-model="registerForm.valid" lazy-validation>
  104. <v-card-text>
  105. <v-container grid-list-md>
  106. <v-layout wrap>
  107. <v-flex xs12 sm6 md12>
  108. <v-text-field
  109. v-model="registerForm.nama"
  110. label="Nama lengkap"
  111. name="nama"
  112. :rules="[rules.required]"
  113. :disabled="loading"
  114. hint="Masukan nama lengkap anda"></v-text-field>
  115. </v-flex>
  116. <v-flex xs12 sm6 md12>
  117. <v-text-field
  118. v-model="registerForm.username"
  119. label="Username"
  120. name="username"
  121. :rules="[rules.required, rules.min]"
  122. :disabled="loading"
  123. hint="Username minimal 6 karakter"></v-text-field>
  124. </v-flex>
  125. <v-flex xs12>
  126. <v-text-field
  127. v-model="registerForm.email"
  128. label="Email"
  129. name="email"
  130. type="email"
  131. :rules="[rules.required, rules.email]"
  132. :disabled="loading"
  133. hint="Masukan alamat email yang valid"></v-text-field>
  134. </v-flex>
  135. <v-flex xs12 sm6 md6>
  136. <v-text-field
  137. label="Kata sandi"
  138. name="password"
  139. v-model="registerForm.password"
  140. :append-icon="showPassword ? 'visibility_off' : 'visibility'"
  141. :rules="[rules.required, rules.min]"
  142. :type="showPassword ? 'text' : 'password'"
  143. hint="Kata sandi minimal 6 karakter"
  144. class="input-group--focused"
  145. :disabled="loading"
  146. @click:append="showPassword = !showPassword"
  147. ></v-text-field>
  148. </v-flex>
  149. <v-flex xs12 sm6 md6>
  150. <v-text-field
  151. label="Konfirmasi kata sandi anda"
  152. :append-icon="showConfirmPassword ? 'visibility_off' : 'visibility'"
  153. :rules="[rules.required, rules.min, rules.passwordMatch]"
  154. :type="showConfirmPassword ? 'text' : 'password'"
  155. hint="Kata sandi harus 6 karakter"
  156. v-model="registerForm.passwordConfirm"
  157. :disabled="loading"
  158. @click:append="showConfirmPassword = !showConfirmPassword"
  159. ></v-text-field>
  160. </v-flex>
  161. </v-layout>
  162. </v-container>
  163. </v-card-text>
  164. </v-form>
  165. <v-card-actions>
  166. <v-btn :disabled="loading" color="#35B729" flat @click.native="toggleDialog(false)">Tutup</v-btn>
  167. <v-spacer></v-spacer>
  168. <v-btn color="#35B729" :disabled="loading" class="white--text" @click.native="daftar">Daftar</v-btn>
  169. </v-card-actions>
  170. </v-tab-item>
  171. </v-tabs-items>
  172. </v-tabs>
  173. </v-card>
  174. <v-card
  175. color="#35B729"
  176. v-if="loading"
  177. >
  178. <v-card-text class="white--text">
  179. Tunggu sebentar...
  180. <v-progress-linear
  181. indeterminate
  182. color="white"
  183. class="mb-0"
  184. ></v-progress-linear>
  185. </v-card-text>
  186. </v-card>
  187. </v-dialog>
  188. </template>
  189.  
  190. <script>
  191. // import axios from 'axios'
  192.  
  193. export default {
  194. name: 'LoginRegisterModal',
  195. props: {
  196. value: Boolean
  197. },
  198. data () {
  199. return {
  200. showPassword: false,
  201. showConfirmPassword: false,
  202. tempPassword: '',
  203. loading: false,
  204. rules: {
  205. required: value => !!value || 'Wajib diisi.',
  206. min: value => value.length >= 6 || 'Minimal 6 karakter.',
  207. email: value => {
  208. const pattern = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  209. return pattern.test(value) || 'Alamat email tidak valid.'
  210. },
  211. passwordMatch: value => value === this.registerForm.password || 'Password tidak cocok.'
  212. },
  213. loginForm: {
  214. valid: true,
  215. login: '',
  216. password: ''
  217. },
  218. registerForm: {
  219. valid: true,
  220. nama: '',
  221. username: '',
  222. email: '',
  223. password: '',
  224. passwordConfirm: ''
  225. }
  226. }
  227. },
  228. methods: {
  229. daftar: function () {
  230. if (this.$refs.registerModalForm.validate()) {
  231. this.loading = true
  232. }
  233. },
  234. masuk: function () {
  235. if (this.$refs.loginModalForm.validate()) {
  236. this.loading = true
  237. }
  238. },
  239. toggleDialog (show) {
  240. this.$emit('input', show)
  241. }
  242. }
  243. }
  244. </script>
Advertisement
Add Comment
Please, Sign In to add comment