index.tsx 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. import { defineComponent } from "vue"
  2. import { ElForm, ElFormItem, ElInput, ElMessage } from "element-plus";
  3. import styles from './index.module.less'
  4. import request from "/src/helpers/request";
  5. import { setToken } from "/src/utils/auth";
  6. export default defineComponent({
  7. data() {
  8. // const validateUsername = (rule: any, value: any, callback: () => void) => {
  9. // if (!value) {
  10. // // @ts-ignore
  11. // callback(new Error("请输入手机号"));
  12. // } else {
  13. // callback();
  14. // }
  15. // }
  16. const validatePassword = (rule: any, value: string | any[], callback: () => void) => {
  17. if (value.length < 6) {
  18. // @ts-ignore
  19. callback(new Error("密码必须大于六位"));
  20. } else {
  21. callback();
  22. }
  23. }
  24. return {
  25. loginForm: {
  26. username: null,
  27. password: null
  28. } as any,
  29. loginRules: {
  30. username: [
  31. { required: true, message: '请输入手机号', trigger: 'blur' },
  32. {
  33. pattern: /^1[3456789]\d{9}$/,
  34. message: '请输入正确的手机号',
  35. trigger: 'blur',
  36. },
  37. ],
  38. password: [
  39. { required: true, trigger: "blur", validator: validatePassword }
  40. ]
  41. },
  42. passwordType: "password",
  43. redirect: undefined as any,
  44. isSaveUserInfo: true
  45. }
  46. },
  47. mounted() {
  48. if (this.$route.query.redirect) {
  49. this.redirect = this.$route.query.redirect;
  50. }
  51. this.loginForm.username = localStorage.getItem('username');
  52. this.loginForm.password = localStorage.getItem('password');
  53. },
  54. methods: {
  55. showPwd() {
  56. if (this.passwordType === "password") {
  57. this.passwordType = "";
  58. } else {
  59. this.passwordType = "password";
  60. }
  61. this.$nextTick(() => {
  62. (this as any).$refs.password.focus();
  63. });
  64. },
  65. handleLogin() {
  66. // 判断是否点击了记住密码 => 存储密码
  67. const loginForm = this.loginForm;
  68. if (this.isSaveUserInfo) {
  69. localStorage.setItem('username', loginForm.username);
  70. localStorage.setItem('password', loginForm.password);
  71. } else {
  72. localStorage.setItem('username', '');
  73. localStorage.setItem('password', '');
  74. }
  75. (this as any).$refs.loginForm.validate(async (valid: any) => {
  76. if (valid) {
  77. try {
  78. // 根据手机号获取学生信息
  79. // export const checkStudentPhone = (data) => request2({
  80. // url: '/api-web/studentManage/queryUserByPhone',
  81. // method: 'get',
  82. // params: data,
  83. // hideLoading: true
  84. // })
  85. // /auth-server/user/queryUserByPhone
  86. const resPhone: any = await request('/api-auth/user/queryClient', {
  87. params: {
  88. phone: loginForm.username
  89. }
  90. })
  91. console.log(resPhone)
  92. // "SYSTEM,STUDENT,TEACHER"
  93. const authType = resPhone.data
  94. let clientType = 'SYSTEM'
  95. if (authType.includes('SYSTEM')) {
  96. clientType = 'SYSTEM'
  97. } else if(authType.includes('TEACHER')) {
  98. clientType = 'TEACHER'
  99. }
  100. const res: any = await request.post('/api-auth/usernameLogin', {
  101. data: {
  102. username: loginForm.username,
  103. password: loginForm.password,
  104. clientId: clientType,
  105. clientSecret: clientType
  106. }
  107. })
  108. let token: string = res?.data.authentication.token_type + ' ' + res?.data.authentication.access_token;
  109. console.log(token);
  110. setToken(token)
  111. const roomUid = sessionStorage.getItem('roomUid')
  112. const details:any = await request.get('/api-web/imLiveBroadcastRoom/queryRoom', {
  113. params: {
  114. roomUid: roomUid
  115. }
  116. })
  117. sessionStorage.setItem('details',JSON.stringify(details.data))
  118. ElMessage.success('登录成功')
  119. this.$router.push(this.redirect || '/')
  120. } catch (error) {
  121. // console.log(error)
  122. }
  123. } else {
  124. return false;
  125. }
  126. });
  127. },
  128. saveUserInfo() {
  129. this.isSaveUserInfo = !this.isSaveUserInfo;
  130. }
  131. },
  132. render() {
  133. return (
  134. <div class={styles.loginContainer}>
  135. <div class={styles.loginHeader}>
  136. <div class={styles.logo}>
  137. <img src="/src/assets/home/logo.png" alt="" />
  138. </div>
  139. <i class={styles.line}></i>
  140. <div class={styles.logoName}>乐团管理系统</div>
  141. </div>
  142. <div>
  143. <div class={styles.loginSection}>
  144. <div class={styles.formBg}>
  145. <img src="/src/pages/login/images/from-bg.png" alt="" />
  146. </div>
  147. <ElForm ref="loginForm"
  148. model={this.loginForm}
  149. rules={this.loginRules}
  150. class={styles.loginForm}
  151. auto-complete="on"
  152. label-position="left">
  153. <div class={styles.titleContainer}>登录</div>
  154. <ElFormItem prop="username"
  155. class={styles.logitem}>
  156. <span class={styles.svgContainer}>
  157. {/* <img class={styles.icon} src="/src/icons/svg/user.svg" alt="" /> */}
  158. <SvgIcon class={styles.icon} name="svg-user" color="#fff" />
  159. </span>
  160. <ElInput ref="username"
  161. class={styles.loginInput}
  162. v-model={this.loginForm.username}
  163. placeholder="请输入手机号"
  164. maxlength="11"
  165. type="tel"
  166. tabindex="1"
  167. auto-complete="off" />
  168. </ElFormItem>
  169. <ElFormItem prop="password"
  170. class={styles.logitem}>
  171. <span class={styles.svgContainer}>
  172. {/* <img class={styles.icon} src="/src/icons/svg/password.svg" alt="" /> */}
  173. <SvgIcon class={styles.icon} name="svg-password" color="#fff" />
  174. </span>
  175. <ElInput
  176. ref="password"
  177. class={styles.loginInput}
  178. v-model={this.loginForm.password}
  179. type={this.passwordType}
  180. placeholder="请输入密码"
  181. tabindex="2"
  182. auto-complete="off" />
  183. <span class={styles.showPwd} onClick={this.showPwd}>
  184. {this.passwordType === 'password' ? <SvgIcon class={styles.icon} name="svg-eye" color="#fff" /> : <SvgIcon class={styles.icon} name="svg-eye-open" color="#fff" />}
  185. </span>
  186. </ElFormItem>
  187. <div class={[!this.loginForm.username || !this.loginForm.password ? styles.disabled : '', styles.loginBtn]}
  188. onClick={this.handleLogin}>登录</div>
  189. <div class={styles.remberBox} onClick={() => { this.isSaveUserInfo = !this.isSaveUserInfo }}>
  190. <div class={[this.isSaveUserInfo ? styles.checked : '', styles.dotWrap]}></div>
  191. 记住密码
  192. </div>
  193. </ElForm>
  194. </div>
  195. <div class={styles.footer}>
  196. Copyright © 2022 管乐迷, Inc.ALL Rights Reserved
  197. </div>
  198. </div>
  199. </div>
  200. )
  201. }
  202. })