From 7e4a538f5e4ab99ce02a4b5694ab768d1ecfd766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?CN32479-=E8=A9=B9=E7=BA=A2=E6=9F=B1?= <1337608148@qq.com> Date: Wed, 18 Aug 2021 20:36:58 +0800 Subject: [PATCH] no message --- src/Api/request.js | 94 ++++++++++++++++++++++ src/Api/user.js | 68 ++++++++++++++++ src/App.vue | 80 +++++++++++++++++-- src/assets/svg/{我的.svg => user.svg} | 0 src/components/Dialog.vue | 25 +----- src/components/Login.vue | 107 ++++++++++++++++++++++++++ src/main.js | 8 ++ 7 files changed, 352 insertions(+), 30 deletions(-) create mode 100644 src/Api/request.js create mode 100644 src/Api/user.js rename src/assets/svg/{我的.svg => user.svg} (100%) create mode 100644 src/components/Login.vue diff --git a/src/Api/request.js b/src/Api/request.js new file mode 100644 index 0000000..0394743 --- /dev/null +++ b/src/Api/request.js @@ -0,0 +1,94 @@ +import axios from 'axios' +import { MessageBox, Message } from 'element-ui' +import store from '@/store' +import { getToken } from '@/utils/auth' + +// create an axios instance +const service = axios.create({ + baseURL: 'https://lean.zhanhongzhu.top' || process.env.NODE_ENV === 'production' ? window.PROD_CONFIG.BASE_URL : process.env.VUE_APP_BASE_API, // url = base url + request url + // withCredentials: true, // send cookies when cross-domain requests + timeout: 50000 // request timeout +}) + +// request interceptor +service.interceptors.request.use( + config => { + // do something before request is sent + + if (store.getters.token) { + // let each request carry token + // ['X-Token'] is a custom headers key + // please modify it according to the actual situation + config.headers['X-Token'] = getToken() + } + return config + }, + error => { + // do something with request error + console.log(error) // for debug + return Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + /** + * If you want to get http information such as headers or status + * Please return response => response + */ + + /** + * Determine the request status by custom code + * Here is just an example + * You can also judge the status by HTTP Status Code + */ + response => { + const res = response.data + + if (res.status === 400) { + Message({ + message: '入参错误', + type: 'error', + duration: 5 * 1000 + }) + return false + } + + // if the custom code is not 0, it is judged as an error. + if (res.code !== 0 && res.code !== 200) { + Message({ + message: res.message || 'Error', + type: 'error', + duration: 5 * 1000 + }) + + // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; + if (res.code === 50008 || res.code === 50012 || res.code === 50014) { + // to re-login + MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { + confirmButtonText: 'Re-Login', + cancelButtonText: 'Cancel', + type: 'warning' + }).then(() => { + store.dispatch('user/resetToken').then(() => { + location.reload() + }) + }) + } + return Promise.reject(new Error(res.message || 'Error')) + } else { + return res + } + }, + error => { + console.log('err' + error) // for debug + Message({ + message: error.message, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +export default service diff --git a/src/Api/user.js b/src/Api/user.js new file mode 100644 index 0000000..2a4d04b --- /dev/null +++ b/src/Api/user.js @@ -0,0 +1,68 @@ +import AV from 'leancloud-storage' +// 用户登录 +const login = (username, password) => { + console.log(username, password) + return new Promise((resolve, reject) => { + AV.User.logIn(username, password).then(user => { + resolve(user) + }).catch(error => { + reject(error) + }) + }) +} + +// 用户登录 +const loginEmail = (username, password) => { + console.log(username, password) + return new Promise((resolve, reject) => { + AV.User.loginWithEmail(username, password).then(user => { + resolve(user) + }).catch(error => { + reject(error) + }) + }) +} +// 用户登出 +const logout = (username, password) => { + return new Promise((resolve, reject) => { + AV.User.logOut(username, password).then(user => { + resolve(user) + }) + }) +} + +// 用户注册 +const register = (username, password) => { + return new Promise((resolve, reject) => { + const user = new AV.User() + user.setUsername(username) + user.setPassword(password) + user.signUp().then((user) => { + resolve(user) + }, (error) => { + reject(error) + }) + }) +} +const getInfo = (params) => { + return new Promise((resolve, reject) => { + const user = new AV.User() + user.loginWithAuthData({ + openid: params.openid, + access_token: params.access_token, + expires_in: params.expires_in + }, 'weixin').then(function (user) { + resolve(user) + }).catch(function (error) { + reject(error) + }) + }) +} + +export default { + login, + logout, + register, + loginEmail, + getInfo +} diff --git a/src/App.vue b/src/App.vue index e6d59f3..16e80d7 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,9 +14,10 @@ - - + {{userInfo.username.slice(0, 5)}} + +
@@ -45,7 +46,6 @@ - {{card.title || 'Kestrel-bookmark'}} {{card.desc || "红隼书签-为中国 Web 前端开发人员提供优质网站导航"}}
@@ -69,16 +69,22 @@ + + + diff --git a/src/components/Login.vue b/src/components/Login.vue new file mode 100644 index 0000000..d593163 --- /dev/null +++ b/src/components/Login.vue @@ -0,0 +1,107 @@ + + + + diff --git a/src/main.js b/src/main.js index 105c918..66ef251 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,14 @@ import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' +// 接入了Leancloud +import AV from 'leancloud-storage' +AV.init({ + appId: 'BwLrCgdVyLs52mJO1HcrXakI-gzGzoHsz', + appKey: '25gNwzw4dV7IAh7i0IzDnYvV', + serverURL: 'https://bwlrcgdv.lc-cn-n1-shared.com' // 临时域名 +}) + const app = createApp(App) app.use(ElementPlus) app.mount('#app')