From 085f34a479b1e5775e99e6b728b37637f0d221fb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=9C=D0=B0=D1=82?=
 =?UTF-8?q?=D0=B2=D0=B5=D0=B5=D0=B2?= <aetherchase@ya.ru>
Date: Sun, 28 Nov 2021 14:10:12 +0400
Subject: [PATCH] init

---
 .eslintrc.js                        |   3 ++-
 package.json                        |   2 ++
 src/App.vue                         |   3 +--
 src/api/auth.ts                     |   5 ++++
 src/api/index.ts                    |   0
 src/assets/images/6jk524tfr3261.gif | Bin 0 -> 27819 bytes
 src/assets/images/login-pig.png     | Bin 0 -> 7353 bytes
 src/components/PForm.vue            |  26 +++++++++++++++++++
 src/main.ts                         |   9 ++++++-
 src/{views => pages}/Home.vue       |   0
 src/pages/Login.vue                 |  39 ++++++++++++++++++++++++++++
 src/plugins/index.ts                |   5 ++++
 src/plugins/restClient.ts           |   8 ++++++
 src/router/index.ts                 |  11 +++-----
 src/store/index.ts                  |  13 ++++++++++
 src/views/About.vue                 |   5 ----
 yarn.lock                           |  14 +++++++++-
 17 files changed, 126 insertions(+), 17 deletions(-)
 create mode 100644 src/api/auth.ts
 create mode 100644 src/api/index.ts
 create mode 100644 src/assets/images/6jk524tfr3261.gif
 create mode 100644 src/assets/images/login-pig.png
 create mode 100644 src/components/PForm.vue
 rename src/{views => pages}/Home.vue (100%)
 create mode 100644 src/pages/Login.vue
 create mode 100644 src/plugins/index.ts
 create mode 100644 src/plugins/restClient.ts
 delete mode 100644 src/views/About.vue

diff --git a/.eslintrc.js b/.eslintrc.js
index 905c914..f8e8417 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -13,6 +13,7 @@ module.exports = {
   },
   rules: {
     'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
-    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'vue/html-indent': 2
   }
 }
diff --git a/package.json b/package.json
index 8413005..112c031 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,8 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "axios": "^0.24.0",
+    "bulma-helpers": "^0.4.2",
     "core-js": "^3.6.5",
     "vue": "^3.0.0",
     "vue-router": "^4.0.0-0",
diff --git a/src/App.vue b/src/App.vue
index 3fa872e..31c836e 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,7 +1,6 @@
 <template>
   <div id="nav">
-    <router-link to="/">Home</router-link> |
-    <router-link to="/about">About</router-link>
+    <router-link to="/">War pigs</router-link>
   </div>
   <router-view/>
 </template>
diff --git a/src/api/auth.ts b/src/api/auth.ts
new file mode 100644
index 0000000..df8f2fa
--- /dev/null
+++ b/src/api/auth.ts
@@ -0,0 +1,5 @@
+import { restClient } from '@/plugins'
+
+export function login (params: any) {
+  return restClient.post('/login', params)
+}
diff --git a/src/api/index.ts b/src/api/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/assets/images/6jk524tfr3261.gif b/src/assets/images/6jk524tfr3261.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c7b36ae4e26c518bf8250275fc66d696bce261f1
GIT binary patch
literal 27819
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

literal 0
HcmV?d00001

diff --git a/src/assets/images/login-pig.png b/src/assets/images/login-pig.png
new file mode 100644
index 0000000000000000000000000000000000000000..bee9279641c858aa13b3cb4f627c8fb2053c0e80
GIT binary patch
literal 7353
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

literal 0
HcmV?d00001

diff --git a/src/components/PForm.vue b/src/components/PForm.vue
new file mode 100644
index 0000000..b0ee55d
--- /dev/null
+++ b/src/components/PForm.vue
@@ -0,0 +1,26 @@
+<template>
+  <form @submit.prevent="submit">
+    <slot></slot>
+  </form>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue'
+
+export default defineComponent({
+  name: 'Form',
+  setup (_, { emit }) {
+    const submit = () => {
+      emit('submit')
+      console.log('submit')
+    }
+    return {
+      submit
+    }
+  }
+})
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/main.ts b/src/main.ts
index a92f228..95d36ac 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -2,5 +2,12 @@ import { createApp } from 'vue'
 import App from './App.vue'
 import router from './router'
 import store from './store'
+import './plugins'
+import 'bulma-helpers/css/bulma-helpers.min.css'
+import PForm from '@/components/PForm.vue'
 
-createApp(App).use(store).use(router).mount('#app')
+const app = createApp(App)
+
+app.component('p-form', PForm)
+
+app.use(store).use(router).mount('#app')
diff --git a/src/views/Home.vue b/src/pages/Home.vue
similarity index 100%
rename from src/views/Home.vue
rename to src/pages/Home.vue
diff --git a/src/pages/Login.vue b/src/pages/Login.vue
new file mode 100644
index 0000000..c096a93
--- /dev/null
+++ b/src/pages/Login.vue
@@ -0,0 +1,39 @@
+<template>
+  <p-form @sumbit="auth">
+    <div class="flex-column align-items-center s">
+      <img :src="pigImg" style="width: 100px"/>
+      <div class="flex-column">
+        <input v-model="credentials.login" type="text" placeholder="Логин">
+        <input v-model="credentials.password" type="password" placeholder="Пароль">
+      </div>
+      <div class="flex justify-center">
+        <button type="submit">Let me in</button>
+      </div>
+    </div>
+  </p-form>
+</template>
+
+<script lang="ts">
+import { defineComponent, reactive } from 'vue'
+import { login } from '@/api/auth'
+
+export default defineComponent({
+  name: 'Login',
+  setup () {
+    const credentials = reactive({
+      login: '',
+      password: ''
+    })
+
+    const auth = async () => {
+      const res = await login(credentials)
+    }
+
+    return {
+      credentials,
+      auth,
+      pigImg: require('./../assets/images/6jk524tfr3261.gif')
+    }
+  }
+})
+</script>
diff --git a/src/plugins/index.ts b/src/plugins/index.ts
new file mode 100644
index 0000000..3f75fc1
--- /dev/null
+++ b/src/plugins/index.ts
@@ -0,0 +1,5 @@
+import restClient from '@/plugins/restClient'
+
+export {
+  restClient
+}
diff --git a/src/plugins/restClient.ts b/src/plugins/restClient.ts
new file mode 100644
index 0000000..fb70e95
--- /dev/null
+++ b/src/plugins/restClient.ts
@@ -0,0 +1,8 @@
+import axios from 'axios'
+
+const restClient = axios.create({
+  baseURL: 'http://localhost:8080',
+  timeout: 5000
+})
+
+export default restClient
diff --git a/src/router/index.ts b/src/router/index.ts
index a6021e1..2c87f14 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -1,5 +1,5 @@
 import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
-import Home from '../views/Home.vue'
+import Home from '../pages/Home.vue'
 
 const routes: Array<RouteRecordRaw> = [
   {
@@ -8,12 +8,9 @@ const routes: Array<RouteRecordRaw> = [
     component: Home
   },
   {
-    path: '/about',
-    name: 'About',
-    // route level code-splitting
-    // this generates a separate chunk (about.[hash].js) for this route
-    // which is lazy-loaded when the route is visited.
-    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
+    path: '/login',
+    name: 'Login',
+    component: () => import(/* webpackChunkName: "about" */ '../pages/Login.vue')
   }
 ]
 
diff --git a/src/store/index.ts b/src/store/index.ts
index 5f05f19..db80895 100644
--- a/src/store/index.ts
+++ b/src/store/index.ts
@@ -2,8 +2,21 @@ import { createStore } from 'vuex'
 
 export default createStore({
   state: {
+    userToken: localStorage.getItem('userToken') || null,
+    refreshToken: localStorage.getItem('refreshToken') || null
   },
   mutations: {
+    setTokens ({ userToken, refreshToken }, { newToken, newRefreshToken }) {
+      userToken = newToken
+      localStorage.setItem('userToken', newToken)
+      refreshToken = newRefreshToken
+      localStorage.setItem('refreshToken', newRefreshToken)
+    }
+  },
+  getters: {
+    token ({ userToken }) {
+      return userToken
+    }
   },
   actions: {
   },
diff --git a/src/views/About.vue b/src/views/About.vue
deleted file mode 100644
index 3fa2807..0000000
--- a/src/views/About.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-<template>
-  <div class="about">
-    <h1>This is an about page</h1>
-  </div>
-</template>
diff --git a/yarn.lock b/yarn.lock
index 0fac00a..9d679c2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2114,6 +2114,13 @@ aws4@^1.8.0:
   resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
   integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
 
+axios@^0.24.0:
+  version "0.24.0"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6"
+  integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==
+  dependencies:
+    follow-redirects "^1.14.4"
+
 babel-code-frame@^6.22.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
@@ -2431,6 +2438,11 @@ builtin-status-codes@^3.0.0:
   resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
   integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
 
+bulma-helpers@^0.4.2:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/bulma-helpers/-/bulma-helpers-0.4.2.tgz#48ff73aab48155522485b80936c014650557c195"
+  integrity sha512-EAzZHoRbwujCsmtrBWzjI8087at0tIuk58HoR/j5R7n9iXVRJumRUWtRCO/J4Ft+fuxGoV9oZSISLC/neqrnjw==
+
 bytes@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -4389,7 +4401,7 @@ flush-write-stream@^1.0.0:
     inherits "^2.0.3"
     readable-stream "^2.3.6"
 
-follow-redirects@^1.0.0:
+follow-redirects@^1.0.0, follow-redirects@^1.14.4:
   version "1.14.5"
   resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381"
   integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==
-- 
GitLab