赞
踩
这是是将Vue-admin-template改为登录自己的,拿自己的数据,原作者是gitee花裤衩或者github
devServer: { proxy: { '/dev-api': { target: 'http://localhost:8035', changeOrigin: true, pathRewrite: { '^/dev-api': '' } } } },
main.js如下
- import Vue from 'vue'
-
- import 'normalize.css/normalize.css' // A modern alternative to CSS resets
-
- import ElementUI from 'element-ui'
- import 'element-ui/lib/theme-chalk/index.css'
- import locale from 'element-ui/lib/locale/lang/en' // lang i18n
-
- import '@/styles/index.scss' // global css
-
- import App from './App'
- import store from './store'
- import router from './router'
-
- import '@/icons' // icon
- import '@/permission' // permission control
-
- /**
- * If you don't want to use mock-server
- * you want to use MockJs for mock api
- * you can execute: mockXHR()
- *
- * Currently MockJs will be used in the production environment,
- * please remove it before going online ! ! !
- */
- // if (process.env.NODE_ENV === 'production') {
- // const { mockXHR } = require('../mock')
- // mockXHR()
- // }
-
- // set ElementUI lang to EN
- Vue.use(ElementUI, { locale })
- // 如果想要中文版 element-ui,按如下方式声明
- // Vue.use(ElementUI)
-
- Vue.config.productionTip = false
-
- new Vue({
- el: '#app',
- router,
- store,
- render: h => h(App)
- })
utils目录下面的request文件
- 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: process.env.VUE_APP_BASE_API, // url = base url + request url
- // withCredentials: true, // send cookies when cross-domain requests
- timeout: 5000 // 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 the custom code is not 20000, it is judged as an error.
- if (res.code !== 20000) {
- 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
router目录下面的index文件
- import Vue from 'vue'
- import Router from 'vue-router'
-
- Vue.use(Router)
-
- /* Layout */
- import Layout from '@/layout'
-
- /**
- * Note: sub-menu only appear when route children.length >= 1
- * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
- *
- * hidden: true if set true, item will not show in the sidebar(default is false)
- * alwaysShow: true if set true, will always show the root menu
- * if not set alwaysShow, when item has more than one children route,
- * it will becomes nested mode, otherwise not show the root menu
- * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb
- * name:'router-name' the name is used by <keep-alive> (must set!!!)
- * meta : {
- roles: ['admin','editor'] control the page roles (you can set multiple roles)
- title: 'title' the name show in sidebar and breadcrumb (recommend set)
- icon: 'svg-name'/'el-icon-x' the icon show in the sidebar
- breadcrumb: false if set false, the item will hidden in breadcrumb(default is true)
- activeMenu: '/example/list' if set path, the sidebar will highlight the path you set
- }
- */
- /**
- * constantRoutes
- * a base page that does not have permission requirements
- * all roles can be accessed
- */
- export const constantRoutes = [
- {
- path: '/login',
- component: () => import('@/views/login/index'),
- hidden: true
- },
-
- {
- path: '/404',
- component: () => import('@/views/404'),
- hidden: true
- },
-
- {
- path: '/',
- component: Layout,
- redirect: '/dashboard',
- children: [{
- path: 'dashboard',
- name: 'Dashboard',
- component: () => import('@/views/dashboard/index'),
- meta: { title: 'Dashboard', icon: 'dashboard' }
- }]
- },
-
- {
- path: '/example',
- component: Layout,
- redirect: '/example/book',
- name: 'Example',
- meta: { title: '图书管理', icon: 'el-icon-s-help' },
- children: [
- {
- path: 'book',
- name: 'Book',
- component: () => import('@/views/book/index'),
- meta: { title: '图书列表', icon: 'table' }
- }
- ]
- },
-
- {
- path: '/form',
- component: Layout,
- children: [
- {
- path: 'index',
- name: 'Form',
- component: () => import('@/views/form/index'),
- meta: { title: 'Form', icon: 'form' }
- }
- ]
- },
-
- {
- path: '/nested',
- component: Layout,
- redirect: '/nested/menu1',
- name: 'Nested',
- meta: {
- title: 'Nested',
- icon: 'nested'
- },
- children: [
- {
- path: 'menu1',
- component: () => import('@/views/nested/menu1/index'), // Parent router-view
- name: 'Menu1',
- meta: { title: 'Menu1' },
- children: [
- {
- path: 'menu1-1',
- component: () => import('@/views/nested/menu1/menu1-1'),
- name: 'Menu1-1',
- meta: { title: 'Menu1-1' }
- },
- {
- path: 'menu1-2',
- component: () => import('@/views/nested/menu1/menu1-2'),
- name: 'Menu1-2',
- meta: { title: 'Menu1-2' },
- children: [
- {
- path: 'menu1-2-1',
- component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
- name: 'Menu1-2-1',
- meta: { title: 'Menu1-2-1' }
- },
- {
- path: 'menu1-2-2',
- component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
- name: 'Menu1-2-2',
- meta: { title: 'Menu1-2-2' }
- }
- ]
- },
- {
- path: 'menu1-3',
- component: () => import('@/views/nested/menu1/menu1-3'),
- name: 'Menu1-3',
- meta: { title: 'Menu1-3' }
- }
- ]
- },
- {
- path: 'menu2',
- component: () => import('@/views/nested/menu2/index'),
- name: 'Menu2',
- meta: { title: 'menu2' }
- }
- ]
- },
-
- {
- path: 'external-link',
- component: Layout,
- children: [
- {
- path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
- meta: { title: 'External Link', icon: 'link' }
- }
- ]
- },
-
- // 404 page must be placed at the end !!!
- { path: '*', redirect: '/404', hidden: true }
- ]
-
- const createRouter = () => new Router({
- // mode: 'history', // require service support
- scrollBehavior: () => ({ y: 0 }),
- routes: constantRoutes
- })
-
- const router = createRouter()
-
- // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
- export function resetRouter() {
- const newRouter = createRouter()
- router.matcher = newRouter.matcher // reset router
- }
-
- export default router
api目录下面的user.js如下
- import request from '@/utils/request'
-
- export function login(data) {
- return request({
- url: '/user/login',
- method: 'post',
- data
- })
- }
-
- export function getInfo(token) {
- return request({
- url: '/user/info',
- method: 'get',
- params: { token }
- })
- }
-
- export function logout() {
- return request({
- url: '/user/logout',
- method: 'post'
- })
- }
接下来是后端的编写
注意后端端口要与前端定义的接口相同
server: port: 8035 spring: datasource: url: jdbc:mysql://localhost:3306/t155?characterEncoding=utf-8 driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root mybatis-plus: configuration: map-underscore-to-camel-case: false log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
- @RestController
- public class IndexController {
-
- @PostMapping("/user/login")
- public R userLogin(@RequestBody User user) {
- System.out.println("进来了userLogin");
- HashMap<String, Object> map = new HashMap<>();
- if (user.getUsername().equals("admin")&&user.getPassword().equals("111111")){
- map.put("token", "admin-token");
- }else {
- map.put("token", "editor-token");
- }
- return new R(20000,"登录成功", map);
- }
-
- @GetMapping("/user/info")
- public R userInfo(@RequestParam("token") String token) {
- HashMap<String, Object> map = new HashMap<>();
- if (token.equals("admin-token")){
- map.put("roles", "admin");
- map.put("name", "Super Admin");
- }else {
- map.put("roles", "editor");
- map.put("name", "Normal Editor");
- }
- map.put("avatar", "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
- return new R(20000,"查看用户信息", map);
- }
-
- @PostMapping("/user/logout")
- public R userLogout(){
- return new R(20000,"退出成功!");
- }
-
-
- @GetMapping("/book/list/{current}/{pageSize}")
- public R getAllBooks(@PathVariable int current, @PathVariable int pageSize) {
-
- System.out.println("进来了getAllBooks");
-
- return new R(20000, "查询成功!",null);
- }
-
-
- }
接下来就可以测试了,如果登录进去了,就表示成功了,祝各位小伙伴成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。