login-form.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <Form
  3. ref="form"
  4. :model="form"
  5. :rules="rules"
  6. @keydown.enter.native="handleSubmit"
  7. >
  8. <FormItem prop="userName">
  9. <Input
  10. size="large"
  11. v-model="form.username"
  12. placeholder="请输入账号"
  13. prefix="ios-contact-outline"
  14. ></Input>
  15. </FormItem>
  16. <FormItem prop="password">
  17. <Input
  18. size="large"
  19. type="password"
  20. v-model="form.password"
  21. placeholder="请输入密码"
  22. prefix="ios-lock-outline"
  23. ></Input>
  24. </FormItem>
  25. <FormItem>
  26. <Input
  27. size="large"
  28. v-model="form.code"
  29. placeholder="请输入验证码"
  30. prefix="ios-contact-outline"
  31. ></Input>
  32. </FormItem>
  33. <FormItem>
  34. <Checkbox v-model="remember">记住用户名</Checkbox>
  35. </FormItem>
  36. <img @click="getCodeImg" :src="image" alt=""></img>
  37. <FormItem>
  38. <Button size="large" @click="login" type="primary" long
  39. >登录</Button
  40. >
  41. </FormItem>
  42. </Form>
  43. </template>
  44. <script>
  45. import axios from 'axios'
  46. import md5 from 'js-md5'
  47. export default {
  48. name: 'form',
  49. props: {
  50. userNameRules: {
  51. type: Array,
  52. default: () => {
  53. return [
  54. {
  55. required: true,
  56. message: '账号不能为空',
  57. trigger: 'blur',
  58. },
  59. ]
  60. },
  61. },
  62. passwordRules: {
  63. type: Array,
  64. default: () => {
  65. return [
  66. {
  67. required: true,
  68. message: '密码不能为空',
  69. trigger: 'blur',
  70. },
  71. ]
  72. },
  73. },
  74. },
  75. data() {
  76. return {
  77. remember: true,
  78. form: {
  79. //租户ID
  80. tenantId: '000000',
  81. //部门ID
  82. deptId: '',
  83. //角色ID
  84. roleId: '',
  85. //用户名
  86. username: 'admin',
  87. //密码
  88. password: 'admin',
  89. //账号类型
  90. type: 'account',
  91. //验证码的值
  92. code: '',
  93. //验证码的索引
  94. key: '',
  95. grant_type: 'captcha',
  96. scope: 'all',
  97. type:'loginWithoutVerificationCode',
  98. //预加载白色背景
  99. },
  100. image: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
  101. }
  102. },
  103. computed: {
  104. rules() {
  105. return {
  106. userName: this.userNameRules,
  107. password: this.passwordRules,
  108. }
  109. },
  110. },
  111. methods: {
  112. login() {
  113. const v = this
  114. console.log(md5(v.form.password))
  115. v.formCopy = {...v.form}
  116. v.formCopy.password = md5(v.formCopy.password)
  117. axios({
  118. method:"post",
  119. url:'/api/blade-auth/oauth/token',
  120. params:this.formCopy,
  121. headers:{
  122. 'Captcha-Key':this.form.key,
  123. 'Captcha-Code':this.form.code,
  124. 'Tenant-Id': this.form.tenantId
  125. },
  126. }).then(res=>{
  127. console.log(res)
  128. if(res.status == 200 && res.data){
  129. window.localStorage.setItem("token",JSON.stringify(res.data))
  130. //v.getRouters()
  131. this.$router.push("/home")
  132. }
  133. // window.localStorage.setItem("token",JSON.stringify(res.data))
  134. // v.$router.push("/emailHome")
  135. })
  136. },
  137. getRouters(){
  138. },
  139. getCodeImg() {
  140. this.$get('/api/blade-auth/oauth/captcha').then((res) => {
  141. const data = res
  142. this.form.key = data.key
  143. this.image = data.image
  144. })
  145. },
  146. handleSubmit() {
  147. if (this.form.password == '123456') {
  148. this.$Message.info({
  149. content: '密码错误',
  150. duration: 3,
  151. })
  152. return
  153. }
  154. this.$refs.form.validate((valid) => {
  155. if (valid) {
  156. if (this.remember) {
  157. sessionStorage.setItem('userName', this.form.userName)
  158. } else {
  159. sessionStorage.setItem('userName', '')
  160. }
  161. this.$emit('on-success-valid', {
  162. userName: this.form.userName,
  163. password: this.form.password,
  164. })
  165. }
  166. })
  167. },
  168. },
  169. mounted() {
  170. let userName = sessionStorage.getItem('userName')
  171. userName && (this.form.userName = userName)
  172. this.getCodeImg()
  173. },
  174. }
  175. </script>