update 登录优化
This commit is contained in:
parent
bbebce27a6
commit
51ed9e8ce1
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const devEnv = require('./dev.env')
|
const devEnv = require('./dev.env')
|
||||||
|
const IP = require('ip').address()
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
dev: {
|
dev: {
|
||||||
@ -11,19 +12,15 @@ module.exports = {
|
|||||||
// Paths
|
// Paths
|
||||||
assetsSubDirectory: 'static',
|
assetsSubDirectory: 'static',
|
||||||
assetsPublicPath: '/',
|
assetsPublicPath: '/',
|
||||||
// 代理列表, 是否开启代理通过[./dev.env.js]配置
|
proxyTable: {
|
||||||
proxyTable: devEnv.OPEN_PROXY === false ? {} : {
|
'/renren-fast-server': {
|
||||||
'/proxyApi': {
|
target: 'http://demo.open.renren.io',
|
||||||
target: 'http://demo.renren.io/renren-fast/',
|
changeOrigin: true
|
||||||
changeOrigin: true,
|
},
|
||||||
pathRewrite: {
|
|
||||||
'^/proxyApi': '/'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Various Dev Server settings
|
// Various Dev Server settings
|
||||||
host: 'localhost', // can be overwritten by process.env.HOST
|
host: IP, // can be overwritten by process.env.HOST
|
||||||
port: 8001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
port: 8001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
||||||
autoOpenBrowser: true,
|
autoOpenBrowser: true,
|
||||||
errorOverlay: true,
|
errorOverlay: true,
|
||||||
|
|||||||
@ -64,6 +64,7 @@
|
|||||||
"file-loader": "1.1.4",
|
"file-loader": "1.1.4",
|
||||||
"friendly-errors-webpack-plugin": "1.6.1",
|
"friendly-errors-webpack-plugin": "1.6.1",
|
||||||
"html-webpack-plugin": "2.30.1",
|
"html-webpack-plugin": "2.30.1",
|
||||||
|
"ip": "^1.1.5",
|
||||||
"jest": "21.2.0",
|
"jest": "21.2.0",
|
||||||
"jest-serializer-vue": "0.3.0",
|
"jest-serializer-vue": "0.3.0",
|
||||||
"nightwatch": "0.9.12",
|
"nightwatch": "0.9.12",
|
||||||
|
|||||||
6
src/api/api_menu.js
Normal file
6
src/api/api_menu.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import http from '../utils/http'
|
||||||
|
|
||||||
|
// 获取侧边菜单栏
|
||||||
|
export const apiGetMenuNav = params => {
|
||||||
|
return http({ url: '/renren-fast-server/sys/menu/nav', method: 'get', params })
|
||||||
|
}
|
||||||
11
src/api/api_user.js
Normal file
11
src/api/api_user.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import http from '../utils/http'
|
||||||
|
|
||||||
|
// 登录
|
||||||
|
export const apiLogin = data => {
|
||||||
|
return http({ url: '/renren-fast-server/sys/login', method: 'post', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取用户相关
|
||||||
|
export const apiGetUserInfo = params => {
|
||||||
|
return http({ url: '/renren-fast-server/sys/user/info', method: 'get', params })
|
||||||
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import Router from 'vue-router'
|
import Router from 'vue-router'
|
||||||
import http from '@/utils/httpRequest'
|
import { apiGetMenuNav } from '../api/api_menu'
|
||||||
import { isURL } from '@/utils/validate'
|
import { isURL } from '@/utils/validate'
|
||||||
import { clearLoginInfo } from '@/utils'
|
import { clearLoginInfo } from '@/utils'
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ const mainRoutes = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const router = new Router({
|
const router = new Router({
|
||||||
mode: 'hash',
|
mode: 'history',
|
||||||
scrollBehavior: () => ({ y: 0 }),
|
scrollBehavior: () => ({ y: 0 }),
|
||||||
isAddDynamicMenuRoutes: false, // 是否已经添加动态(菜单)路由
|
isAddDynamicMenuRoutes: false, // 是否已经添加动态(菜单)路由
|
||||||
routes: globalRoutes.concat(mainRoutes)
|
routes: globalRoutes.concat(mainRoutes)
|
||||||
@ -62,25 +62,18 @@ router.beforeEach((to, from, next) => {
|
|||||||
if (router.options.isAddDynamicMenuRoutes || fnCurrentRouteType(to, globalRoutes) === 'global') {
|
if (router.options.isAddDynamicMenuRoutes || fnCurrentRouteType(to, globalRoutes) === 'global') {
|
||||||
next()
|
next()
|
||||||
} else {
|
} else {
|
||||||
http({
|
apiGetMenuNav({}).then(res => {
|
||||||
url: http.adornUrl('/sys/menu/nav'),
|
if (res && res.code === 0) {
|
||||||
method: 'get',
|
fnAddDynamicMenuRoutes(res.menuList)
|
||||||
params: http.adornParams()
|
|
||||||
}).then(({data}) => {
|
|
||||||
if (data && data.code === 0) {
|
|
||||||
fnAddDynamicMenuRoutes(data.menuList)
|
|
||||||
router.options.isAddDynamicMenuRoutes = true
|
router.options.isAddDynamicMenuRoutes = true
|
||||||
sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]'))
|
sessionStorage.setItem('menuList', JSON.stringify(res.menuList || '[]'))
|
||||||
sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]'))
|
sessionStorage.setItem('permissions', JSON.stringify(res.permissions || '[]'))
|
||||||
next({ ...to, replace: true })
|
next({ ...to, replace: true })
|
||||||
} else {
|
} else {
|
||||||
sessionStorage.setItem('menuList', '[]')
|
sessionStorage.setItem('menuList', '[]')
|
||||||
sessionStorage.setItem('permissions', '[]')
|
sessionStorage.setItem('permissions', '[]')
|
||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
}).catch((e) => {
|
|
||||||
console.log(`%c${e} 请求菜单列表和权限失败,跳转至登录页!!`, 'color:blue')
|
|
||||||
router.push({ name: 'login' })
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
48
src/utils/http.js
Normal file
48
src/utils/http.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import axios from 'axios'
|
||||||
|
import router from '@/router'
|
||||||
|
import { clearLoginInfo } from '@/utils'
|
||||||
|
import { Message } from 'element-ui'
|
||||||
|
|
||||||
|
const http = axios.create({
|
||||||
|
timeout: 1000 * 30,
|
||||||
|
withCredentials: true,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json; charset=utf-8'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求拦截
|
||||||
|
*/
|
||||||
|
http.interceptors.request.use(config => {
|
||||||
|
config.headers['token'] = Vue.cookie.get('token') // 请求头带上token
|
||||||
|
config.data = Object.assign({}, config.data, { t: new Date().getTime() })
|
||||||
|
return config
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
return Promise.reject(error)
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应拦截
|
||||||
|
*/
|
||||||
|
http.interceptors.response.use(
|
||||||
|
response => {
|
||||||
|
if (response.data && response.data.code === 401) { // 401, token失效
|
||||||
|
clearLoginInfo()
|
||||||
|
router.push({ name: 'login' })
|
||||||
|
}
|
||||||
|
return response.data
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
Message({
|
||||||
|
message: error.message,
|
||||||
|
type: 'error',
|
||||||
|
duration: 5 * 1000
|
||||||
|
})
|
||||||
|
return Promise.reject(error)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
export default http
|
||||||
@ -8,9 +8,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="login-main">
|
<div class="login-main">
|
||||||
<h3 class="login-title">管理员登录</h3>
|
<h3 class="login-title">管理员登录</h3>
|
||||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" status-icon>
|
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="handleLogin()" status-icon>
|
||||||
<el-form-item prop="userName">
|
<el-form-item prop="username">
|
||||||
<el-input v-model="dataForm.userName" placeholder="帐号"></el-input>
|
<el-input v-model="dataForm.username" placeholder="帐号"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="password">
|
<el-form-item prop="password">
|
||||||
<el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input>
|
<el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input>
|
||||||
@ -22,12 +22,13 @@
|
|||||||
</el-input>
|
</el-input>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="10" class="login-captcha">
|
<el-col :span="10" class="login-captcha">
|
||||||
<img :src="captchaPath" @click="getCaptcha()" alt="">
|
<img @click="handleGetImgCaptcha()" id="img-captcha" :src="'/renren-fast-server/captcha.jpg?uuid='+ this.dataForm.uuid">
|
||||||
|
<!-- <img :src="captchaPath" @click="getCaptcha()" alt=""> -->
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button class="login-btn-submit" type="primary" @click="dataFormSubmit()">登录</el-button>
|
<el-button class="login-btn-submit" type="primary" @click="handleLogin()">登录</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
@ -38,62 +39,48 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getUUID } from '@/utils'
|
import { getUUID } from '@/utils'
|
||||||
|
import { apiLogin } from '../../api/api_user'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
dataForm: {
|
dataForm: {
|
||||||
userName: '',
|
username: '',
|
||||||
password: '',
|
password: '',
|
||||||
uuid: '',
|
uuid: '',
|
||||||
captcha: ''
|
captcha: ''
|
||||||
},
|
},
|
||||||
dataRule: {
|
dataRule: {
|
||||||
userName: [
|
username: [{ required: true, message: '帐号不能为空', trigger: 'blur' }],
|
||||||
{ required: true, message: '帐号不能为空', trigger: 'blur' }
|
password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
|
||||||
],
|
captcha: [{ required: true, message: '验证码不能为空', trigger: 'blur' }]
|
||||||
password: [
|
|
||||||
{ required: true, message: '密码不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
captcha: [
|
|
||||||
{ required: true, message: '验证码不能为空', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
captchaPath: ''
|
captchaPath: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
this.getCaptcha()
|
// this.getCaptcha()
|
||||||
|
this.dataForm.uuid = getUUID()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 提交表单
|
// 获取图像验证码
|
||||||
dataFormSubmit () {
|
handleGetImgCaptcha () {
|
||||||
this.$refs['dataForm'].validate((valid) => {
|
this.dataForm.uuid = getUUID()
|
||||||
if (valid) {
|
let imgSrc = document.getElementById('img-captcha')
|
||||||
this.$http({
|
imgSrc.setAttribute('src', '/renren-fast-server/captcha.jpg?uuid=' + this.dataForm.uuid)
|
||||||
url: this.$http.adornUrl('/sys/login'),
|
},
|
||||||
method: 'post',
|
// 登录提交表单
|
||||||
data: this.$http.adornData({
|
handleLogin () {
|
||||||
'username': this.dataForm.userName,
|
let param = Object.assign(this.dataForm, { 'uuid': this.dataForm.uuid })
|
||||||
'password': this.dataForm.password,
|
apiLogin(param).then(res => {
|
||||||
'uuid': this.dataForm.uuid,
|
console.log('res==', res)
|
||||||
'captcha': this.dataForm.captcha
|
if (res && res.code === 0) {
|
||||||
})
|
this.$cookie.set('token', res.token)
|
||||||
}).then(({data}) => {
|
this.$router.replace({ name: 'home' })
|
||||||
if (data && data.code === 0) {
|
} else {
|
||||||
this.$cookie.set('token', data.token)
|
this.$message.error(res.msg)
|
||||||
this.$router.replace({ name: 'home' })
|
|
||||||
} else {
|
|
||||||
this.getCaptcha()
|
|
||||||
this.$message.error(data.msg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
|
||||||
// 获取验证码
|
|
||||||
getCaptcha () {
|
|
||||||
this.dataForm.uuid = getUUID()
|
|
||||||
this.captchaPath = this.$http.adornUrl(`/captcha.jpg?uuid=${this.dataForm.uuid}`)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,8 @@
|
|||||||
import MainNavbar from './main-navbar'
|
import MainNavbar from './main-navbar'
|
||||||
import MainSidebar from './main-sidebar'
|
import MainSidebar from './main-sidebar'
|
||||||
import MainContent from './main-content'
|
import MainContent from './main-content'
|
||||||
|
import { apiGetUserInfo } from '../api/api_user'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
provide () {
|
provide () {
|
||||||
return {
|
return {
|
||||||
@ -58,7 +60,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
this.getUserInfo()
|
this.handleGetUserInfo()
|
||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
this.resetDocumentClientHeight()
|
this.resetDocumentClientHeight()
|
||||||
@ -71,17 +73,15 @@
|
|||||||
this.documentClientHeight = document.documentElement['clientHeight']
|
this.documentClientHeight = document.documentElement['clientHeight']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 获取当前管理员信息
|
// 获取当前登录用户的信息
|
||||||
getUserInfo () {
|
handleGetUserInfo () {
|
||||||
this.$http({
|
apiGetUserInfo({}).then(res => {
|
||||||
url: this.$http.adornUrl('/sys/user/info'),
|
if (res && res.code === 0) {
|
||||||
method: 'get',
|
|
||||||
params: this.$http.adornParams()
|
|
||||||
}).then(({data}) => {
|
|
||||||
if (data && data.code === 0) {
|
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.userId = data.user.userId
|
this.userId = res.user.userId
|
||||||
this.userName = data.user.username
|
this.userName = res.user.username
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,8 +5,7 @@
|
|||||||
window.SITE_CONFIG = {}
|
window.SITE_CONFIG = {}
|
||||||
|
|
||||||
// api接口请求地址
|
// api接口请求地址
|
||||||
// window.SITE_CONFIG['baseUrl'] = 'http://localhost:8080/renren-fast'
|
window.SITE_CONFIG['baseUrl'] = 'http://localhost:8080/renren-fast'
|
||||||
window.SITE_CONFIG['baseUrl'] = 'http://demo.open.renren.io/renren-fast-server'
|
|
||||||
|
|
||||||
// cdn地址 = 域名 + 版本号
|
// cdn地址 = 域名 + 版本号
|
||||||
window.SITE_CONFIG['domain'] = './' // 域名
|
window.SITE_CONFIG['domain'] = './' // 域名
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user