Browse Source

提交代码

master
刘力 3 years ago
parent
commit
76152ca8ad
  1. 2280
      package-lock.json
  2. 7
      package.json
  3. 1
      src/App.vue
  4. 44
      src/api/login.js
  5. 9
      src/main.js
  6. 48
      src/router/index.js
  7. 21
      src/router/routers.js
  8. 25
      src/store/getters.js
  9. 23
      src/store/index.js
  10. 2
      src/utils/request.js
  11. 13
      src/view/Main.vue
  12. 239
      src/view/login.vue

2280
package-lock.json
File diff suppressed because it is too large
View File

7
package.json

@ -15,6 +15,8 @@
"element-ui": "^2.15.6",
"js-cookie": "^3.0.1",
"jsencrypt": "^3.2.1",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
"vue": "^2.5.2",
"vue-highlightjs": "^1.3.3",
"vue-router": "^3.0.1",
@ -44,7 +46,7 @@
"html-webpack-plugin": "^2.30.1",
"js-cookie": "^3.0.1",
"node-notifier": "^5.1.2",
"node-sass": "^6.0.1",
"node-sass": "^4.14.1",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
@ -52,7 +54,8 @@
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"sass-loader": "^12.1.0",
"sass": "^1.26.10",
"sass-loader": "^7.1.0",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",

1
src/App.vue

@ -1,6 +1,5 @@
<template>
<div id="app">
<router-link to="login">login</router-link>
<router-view/>
</div>
</template>

44
src/api/login.js

@ -1,13 +1,49 @@
/*
* @Author: liu·li
* @Date: 2021-09-Fr 05:18:30
* @Last Modified by: mikey.zhaopeng
* @Last Modified time: 2021-09-Fr 05:18:30
*/
import request from '@/utils/request'
//登录方法
export function login(username, password, code, uuid) {
return request({
url: 'auth/login',
method: 'post',
data: {
username,
password,
code,
uuid
}
})
}
//获取用户信息
export function getInfo() {
return request({
url: 'auth/info',
method: 'get',
})
}
//获取验证码
export function getCodeImg(){
export function getCodeImg() {
return request({
url: 'auth/code',
method: 'get'
})
}
//登出方法
export function logout() {
return request({
url:'auth/code',
method:'get'
url: 'auth/logout',
method: 'delete'
})
}

9
src/main.js

@ -1,8 +1,9 @@
import Vue from 'vue'
import App from './App'
import router from './router'
// import store from './store'
import router from './router/routers'
import store from './store'
import Cookies from 'js-cookie'
import 'normalize.css/normalize.css'
// 引入elementui组件
import ElementUI from 'element-ui'
@ -15,7 +16,7 @@ import 'highlight.js/styles/atom-one-dark.css'
import './router/index'
//加载权限指令
//import checkPer from '@./utils/permission'
import checkPer from '@/utils/permission'
//import permission from './components/Permission'
@ -37,6 +38,6 @@ Vue.config.productionTip = false
new Vue({
el: '#app',
router,
// store,
store,
render:h=>h(App)
})

48
src/router/index.js

@ -1,19 +1,39 @@
import Vue from 'vue'
import Router from 'vue-router'
import Main from '../view/Main'
import Login from '../view/Login'
import router from './routers'
import store from '@/store'
import Config from '@/settings'
//导入进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import {
getToken
} from '@/utils/auth'
// import {
// filterAsyncRouter
// } from '@/store/modules/permission'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/main',
component: Main
},{
path:'/login',
component: Login
NProgress.configure({
showSpinner: false
})
//重新定向白名单
const whiteList = ['/login']
//路由守卫,路由跳转前执行钩子函数
//to:目标路由对象
//from:即将要离开的路由对象
//next:执行效果依赖
router.beforeEach((to, from, next) => {
//如果路由标题设置则显示配置标题和目标菜单标题
if (to.meta.title) {
document.title = to.meta.title + '-' + Config.title
}
]
NProgress.start()
next(`/login?redirect=${to.fullPath}`)
NProgress.done()
})
router.afterEach(()=>{
NProgress.done()
})

21
src/router/routers.js

@ -7,20 +7,29 @@ Vue.use(Router)
//路由映射
export const constantRouterMap=[
export const constantRouterMap = [
{
//路径
path:'/login',
path: '/login',
//路由过渡信息,此处使用面包屑功能或判断用户是否登录
meta:{title:'登录',noCache:true},
meta: {
title: '登录',
noCache: true
},
//加载组件
component:(resolve)=>require(['@/views/login'], resolve),
component: (resolve) => require(['@/views/login'], resolve),
//是否展示该理由
hidden:true
hidden: true
}
]
export default new Router({
//修改路由,取消hash的注释改变部署模式
//mode:'hash',
mode: 'history',
scrollBehavior: () => ({
y: 0
}),
routes: constantRouterMap
})

25
src/store/getters.js

@ -1,4 +1,27 @@
const getters={
const getters = {
deployUploadApi: state => state.api.deployUploadApi,
databaseUploadApi: state => state.api.databaseUploadApi,
size: state => state.app.size,
sidebar: state => state.app.sidebar,
device: state => state.app.device,
token: state => state.user.token,
visitedViews: state => state.tagsView.visitedViews,
cachedViews: state => state.tagsView.cachedViews,
roles: state => state.user.roles,
user: state => state.user.user,
loadMenus: state => state.user.loadMenus,
permission_routers: state => state.permission.routers,
addRouters: state => state.permission.addRouters,
socketApi: state => state.api.socketApi,
imagesUploadApi: state => state.api.imagesUploadApi,
baseApi: state => state.api.baseApi,
fileUploadApi: state => state.api.fileUploadApi,
updateAvatarApi: state => state.api.updateAvatarApi,
qiNiuUploadApi: state => state.api.qiNiuUploadApi,
sqlApi: state => state.api.sqlApi,
swaggerApi: state => state.api.swaggerApi,
sidebarRouters: state => state.permission.sidebarRouters
}
export default getters

23
src/store/index.js

@ -1,3 +1,26 @@
import Vue from "vue"
import Vuex from 'vuex'
import getters from './getters'
Vue.use(Vuex)
//实现自动导入模块
const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
//获取上级目录modules的 所有后缀名为 .js的文件
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
const value = modulesFiles(modulePath)
modules[moduleName] = value.default
return modules
}, {})
const store = new Vuex.Store({
modules,
getters
})
export default store

2
src/utils/request.js

@ -2,7 +2,7 @@ import axios from "axios"
import router from '@/router/routers'
import { Notification } from 'element-ui' //elementUI 提示框组件
import store from '../store'
import { getToken } from '@./utils/auth'
import { getToken } from '@/utils/auth'
import Config from '@/settings'
import Cookies from "js-cookie"

13
src/view/Main.vue

@ -1,13 +0,0 @@
<template>
<h1>首页</h1>
</template>
<script>
export default {
name:"Main"
}
</script>
<style>
</style>

239
src/view/login.vue

@ -1,239 +0,0 @@
<template>
<div class="login" :style="'background-image:url('+ Background +');'">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form">
<h3 class="title">
阅行客后台管理系统
</h3>
<el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="code">
<el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%" @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode">
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0 0 25px 0;">
记住我
</el-checkbox>
<el-form-item style="width:100%;">
<el-button :loading="loading" size="medium" type="primary" style="width:100%;" @click.native.prevent="handleLogin">
<span v-if="!loading"> </span>
<span v-else> 中...</span>
</el-button>
</el-form-item>
</el-form>
<!-- 底部 -->
<div v-if="$store.state.settings.showFooter" id="el-login-footer">
<span v-html="$store.state.settings.footerTxt" />
<span> </span>
<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">{{ $store.state.settings.caseNumber }}</a>
</div>
</div>
</template>
<script>
import { encrypt } from "@/utils/rsaEncrypt";
import Config from "@/settings";
import Cookies from "js-cookie";
import Background from "@/assets/images/background.jpg";
export default {
//
name: "Login",
data() {
return {
//
Background: Background,
//
codeUrl: "",
//
cookiePass: "",
//--
loginForm: {
username: "admin",
password: "123456",
rememberMe: false,
code: "",
uuid: "",
},
//
loginRules: {
username: [
{ required: true, trigger: "blur", message: "用户名不能为空" },
],
password: [
{ required: true, trigger: "blur", message: "密码不能为空" },
],
code: [
{ required: true, trigger: "change", message: "验证码不能为空" },
],
},
//
loading: false,
//
redirect: undefined,
};
},
watch: {
//
$route: {
handler: function (route) {
this.redirect = route.query && route.query.redirect;
},
//handler
immediate: true,
},
},
// 使
created() {
//
this.getCode();
// Cookie
this.getCookie();
// token
this.point();
},
methods: {
//
getCode() {
getCodeImg().then((res) => {
this.codeUrl = res.img;
this.loginForm.uuid = res.uuid;
});
},
//Cookie
getCookie() {
const username = Cookies.get("username");
let password = Cookies.get("password");
const rememberMe = Cookies.get("rememberMe");
// cookie
this.cookiePass = password === undefined ? "" : password;
password = password === undefined ? this.loginForm.password : password;
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password,
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
code: "",
};
},
handleLogin() {
this.$refs.loginForm.validate((valid) => {
//
const user = {
username: this.loginForm.username,
password: this.loginForm.password,
rememberMe: this.loginForm.rememberMe,
code: this.loginForm.code,
uuid: this.loginForm.uuid,
};
//cookie
if (user.password !== this.cookiePass) {
//
user.password = encrypt(user.password);
}
if (valid) {
this.loading = true;
if (user.rememberMe) {
Cookies.set("username", user.username, {
expires: Config.passCookieExpires,
});
Cookies.set("password", user.password, {
expires: Config.passCookieExpires,
});
Cookies.set("rememberMe", user.rememberMe, {
expires: Config.passCookieExpires,
});
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove("rememberMe");
}
this.$store
.dispatch("Login", user)
.then(() => {
this.loading = false;
this.$router.push({ path: this.redirect || "/" });
})
.catch(() => {
this.loading = false;
this.getCode();
});
} else {
console.log("提交错误!!");
return false;
}
});
},
point() {
const point = Cookies.get("point") !== undefined;
if (point) {
this.$notify({
title: "提示",
message: "当前登录状态已过期,请重新登录!",
type: "warning",
duration: 5000,
});
Cookies.remove("point");
}
},
},
};
</script>
<style rel="stylesheet/scss" lang="scss">
.login {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
background-size: cover;
}
.title {
margin: 0 auto 30px auto;
text-align: center;
color: #707070;
}
.login-form {
border-radius: 6px;
background: #ffffff;
width: 385px;
padding: 25px 25px 5px 25px;
.el-input {
height: 38px;
input {
height: 38px;
}
}
.input-icon {
height: 39px;
width: 14px;
margin-left: 2px;
}
}
.login-tip {
font-size: 13px;
text-align: center;
color: #bfbfbf;
}
.login-code {
width: 33%;
display: inline-block;
height: 38px;
float: right;
img {
cursor: pointer;
vertical-align: middle;
}
}
</style>
Loading…
Cancel
Save