diff --git a/package-lock.json b/package-lock.json index b790f30..d29a9ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.3", + "crypto-js": "^4.2.0", "sass": "^1.87.0", "vite": "^6.3.5", "vite-plugin-vue-devtools": "^7.7.6", @@ -2420,6 +2421,13 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "dev": true, + "license": "MIT" + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", diff --git a/package.json b/package.json index e2d7be4..e268700 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.3", + "crypto-js": "^4.2.0", "sass": "^1.87.0", "vite": "^6.3.5", "vite-plugin-vue-devtools": "^7.7.6", diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..02c56ea --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,41 @@ +import service from '@/service' + +export const login = (data) => { + return service({ + method: 'post', + url: '/store/login', + data + }) +} + +export const verifyToken = () => { + return service({ + method: 'post', + url: '/store/verifyToken', + data: {} + }) +} + +export const getSMSCode = (mobile) => { + return service({ + method: 'get', + url: '/store/getSMSCode?mobile=' + mobile, + data: {} + }) +} + +export const verifyEmail = (email,code) => { + return service({ + method: 'get', + url: `/accessory/checkMailVerifyCode?$email=${email}&$code=${code}`, + data: {} + }) +} + +export const getEmailCode = (email) => { + return service({ + method: 'get', + url: '/accessory/mailVerifyCode?email=' + email, + data: {} + }) +} diff --git a/src/router/index.js b/src/router/index.js index ad21eca..78b4add 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,4 +1,6 @@ import { createRouter,createWebHashHistory } from 'vue-router' +import { getToken } from '@/utils' +import { verifyToken } from '@/api/user' const routes = [ { @@ -20,13 +22,13 @@ const router = createRouter({ routes }) -// router.beforeEach((to, from, next) => { - // const isLogin = getToken() ? true : false; - // if (to.path == '/login' || to.path == "/register") { - // next() - // } else { - // isLogin ? next() : next('/') - // } -// }) +router.beforeEach((to, from, next) => { + const isLogin = getToken() ? true : false; + if (to.path == '/login' || to.path == "/register") { + next() + } else { + isLogin ? next() : next('/') + } +}) export default router \ No newline at end of file diff --git a/src/service/index.js b/src/service/index.js new file mode 100644 index 0000000..3a6fceb --- /dev/null +++ b/src/service/index.js @@ -0,0 +1,43 @@ +import axios from 'axios' +import { getToken,removeToken } from '@/utils' +import router from '@/router' + +const service = axios.create({ + baseURL: '/api', + timeout: 40000, +}) + +service.interceptors.request.use((config) => { + config.headers['Jifu-Token'] = getToken() + return config +},(error) => { + return Promise.reject(error) +}) + +service.interceptors.response.use((response) => { + if(response.data.error == 1001) { + removeToken() + router.push('/login') + } + return response +},(error) => { + return Promise.reject(error) +}) + +export const get = (url, params) => { + return new Promise((resolve, reject) => { + service.get(url, {params}) + .then(res => resolve(res)) + .catch(err => reject(err)); + }); +} + +export const post = (url, param) => { + return new Promise((resolve, reject) => { + service.post(url, param) + .then(res => resolve(res)) + .catch(err => reject(err)); + }); +} + +export default service \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..387c1f9 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,19 @@ +import { defineStore } from 'pinia' + +export const useUserStore = defineStore('user-info',{ + state: () => { + return { + userInfo: {} + } + }, + actions: { + setInfo(userinfo) { + this.userInfo = userinfo + }, + clearInfo() { + this.userInfo = {} + } + }, + getters: {}, + persist: true +}) diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..530aeb1 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,17 @@ +import CryptoJS from 'crypto-js' + +export const TOKEN_NAME = 'token' +export const getToken = () => localStorage.getItem(TOKEN_NAME) +export const setToken = (token) => localStorage.setItem(TOKEN_NAME,token) +export const removeToken = () => localStorage.removeItem(TOKEN_NAME) +export const stripos = (fHaystack,fNeedle,fOffset=0) => { + const haystack = (fHaystack + '').toLowerCase() + const needle = (fNeedle + '').toLowerCase() + let index = 0 + if ((index = haystack.indexOf(needle, fOffset)) !== -1) { + return index + } + return false +} + +export const md5 = str => CryptoJS.MD5(str).toString() diff --git a/src/views/Index.vue b/src/views/Index.vue index bfd3f32..a8b5658 100644 --- a/src/views/Index.vue +++ b/src/views/Index.vue @@ -1,11 +1,27 @@