LoginForm.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import {getTemplateLogin} from "./Templates.js";
  2. import {getTemplateOut} from "./Templates.js";
  3. import {bindEvents, dEvent} from "../libs/helper.js";
  4. import {f} from "../libs/helper.js"
  5. export default class LoginForm extends HTMLElement {
  6. constructor() {
  7. super();
  8. this.user= null;
  9. this.data = {
  10. login: "",
  11. password: ""
  12. }
  13. this.bind();
  14. }
  15. connectedCallback() {
  16. if (!this.user) {
  17. this.render(getTemplateLogin());
  18. }
  19. }
  20. render(template) {
  21. this.innerHTML = template;
  22. this.attachModel();
  23. }
  24. bind() {
  25. bindEvents("LoginFormLogin", "user-login", (e)=> {
  26. this.user = e.detail;
  27. this.render(getTemplateOut(this.user.login));
  28. })
  29. bindEvents("LoginFormOut", "user-logout", (e)=> {
  30. this.render(getTemplateLogin());
  31. })
  32. }
  33. attachModel() {
  34. this.querySelectorAll("input")
  35. .forEach(el=>el.addEventListener("input",e =>this.inputText(e)))
  36. this.querySelector('.button')
  37. .addEventListener('click', e => this.clickButton(e));
  38. // this.querySelectorAll("input")
  39. // .forEach(el=>bindEvents("inputs","input", (el)=> {this.inputText(el)}))
  40. // this.querySelectorAll(".button")
  41. // .forEach(el=>bindEvents(el.innerHTML,"click", (el)=> {this.clickButton(el)}))
  42. }
  43. inputText(e) {
  44. if (this.data[e.target.dataset.model] !== undefined) {
  45. this.data[e.target.dataset.model] = e.target.value;
  46. }
  47. }
  48. clickButton(e) {
  49. if (this[e.target.dataset.click]) {
  50. this[e.target.dataset.click]();
  51. }
  52. }
  53. async login() {
  54. if (!this.data.login || !this.data.password) return;
  55. let res = await f("api-token-auth", "post", null, this.data)
  56. console.log(res);
  57. if (res.error) {
  58. this.querySelector('.message').innerHTML = 'Не правильный логин или пароль';
  59. this.querySelector('.message').innerHTML+=`<style>.message {background:crimson}</style>`
  60. return;
  61. }
  62. dEvent("user-login",{login:this.data.login, user_token:res.data.user_token, role: "admin"});
  63. }
  64. async logout() {
  65. console.log("work")
  66. if (!this.user) return;
  67. let res = await f('api-token-logout', 'get', this.user.user_token, null);
  68. console.log(res)
  69. if (!res.error) {
  70. dEvent('user-logout');
  71. }
  72. }
  73. }