因为项目要求用vue 写后台管理系统,所以接触到 vue-element-admin 框架,现在这个项目快要结束了,准备把这个过程中能记得的(可能不全)写个系列。
框架GitHub 地址:https://github.com/PanJiaChen/vue-element-admin
框架官方文档 :https://panjiachen.github.io/vue-element-admin-site/zh/guide/
Element-UI 官方文档地址 :https://element.faas.ele.me/#/zh-CN/component/installation
解决方法:在这个文件里加一段代码: eslint --fix --ext .js,.vue src 重新跑一次
解决方法: 在这个文件里 加上三段代码
eslint-disable
eslint-disable-next-line
src/*
重新跑一次
刚运行的问题应该就这些了,有其他问题的评论再问吧。
git 上下载的项目有图表,我写的项目没有图表,所以关于图表这类的问题 我没办法。
我的页面都是表单和表格,很好写,十多个页面一天就写完了,直接从 Ele-UI 上复制粘贴 ,也不用改样式。
如下图 上面的框 是文件的路径 ,下面的框 是控制标题显示内容
title 就是页面的名字 icon 是图标 svg 存在 src/icons/svg 里面
{
path: '/',
component: Layout,
redirect: '/dashboard',
children: [
{
path: 'dashboard',
component: () => import('@/views/dashboard/index'),
name: 'Dashboard',
meta: { title: 'Dashboard', icon: 'dashboard', affix: true }
}
]
}
这两个地方要写 接口域名
(1)、 比如接口地址是 admin/index (传的值是 token 的)
需要在 src/store/modules 里面建一个 admin.js 文件 (就是跟接口地址的前一个单词一致,其实也不必非要跟接口地址一致,但是为了之后好区分,就一致对应吧)
import { index } from '@/api/admin' // index 就是地址后面的字段,一一对应
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
const getDefaultState = () => {
return {
token: getToken(),
name: '',
avatar: ''
}
}
const state = getDefaultState()
const mutations = {
RESET_STATE: (state) => {
Object.assign(state, getDefaultState())
},
SET_TOKEN: (state, token) => {
state.token = token
},
SET_NAME: (state, name) => {
state.name = name
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
}
}
const actions = {
// index 地址后面的字段
index({ state }) {
return new Promise((resolve, reject) => {
// 这里也是 index
index(getToken('token')).then(response => { //括号里的getToken('token') 是调接口需要传的值
resolve(response)
}).catch(error => {
reject(error)
})
})
},
}
export default {
namespaced: true,
state,
mutations,
actions
}
还需要在 src/api 里面建一个 admin.js 文件
import request from '@/utils/request'
export function index(data) { // index 地址后面的字段
return request({
url: 'admin/index',
method: 'post',
data // data 就是上个图 括号里的内容
})
}
在页面中
info(){ // 方法名
this.$store.dispatch('admin/index').then((res) => {
console.log(res)
}).catch((res) => {
console.log(res)
})
}
在 store/index.js 中 需要引入
import Vue from 'vue'
import Vuex from 'vuex'
import app from './modules/app'
import settings from './modules/settings'
import admin from './modules/admin'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
app,
settings,
admin,
},
getters
})
export default store
登录成功后,后台会返回token,在登录的接口 js 文件那里
// 登录
checklogin({ commit }, userInfo) {
const { username, password } = userInfo
return new Promise((resolve, reject) => {
checklogin({ username: username.trim(), password: password }).then(response => {
const { data } = response
commit('SET_TOKEN', { data }.data) // token 根据后台传过来的数据格式自取
setToken({ data }.data.token)
resolve(response)
console.log(response)
}).catch(error => {
reject(error)
})
})
},
若登录成功,看一下 F12 的控制台,cookie 中 有没有 存上 token
src/utils/auth.js
import Cookies from 'js-cookie'
const TokenKey = 'token'
//存token的设置, 'token' 这个就是存token值的key, 随便改 看登录后cookie中的token的key名字 是不是改之后的
export function setToken(token) {
return Cookies.set(TokenKey, token)
}
export function getToken(token) {
return Cookies.get(token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
然后打印一下 getToken('token') 看有没有值。有值就存上cookie了,之后再用 token 的话,就直接写 getToken('token')就可,如果没存上,就是哪里出了问题。
建 js文件 就不多说了 这里只写个 data 就可
页面中
// 这个包含获得数据渲染表头和表格,就一起说了吧
// 表格内容
// 表头
(1)得到接口返回的数据,向页面渲染的时候 报这个错的:
是数据格式的问题 , 见 => 详情
(2) [Vue warn]: Injection “elForm” not found报错
看一下
还是要看具体情况。
(3)[Vue warn]: Property "center" must be accessed with "$data.center" because properties starting with "$" or "_" are not proxied in the Vue instance to prevent conflicts with Vue internalsSee 这种错的,
一下子出来十多条的,是刚写的代码中有 字段没有定义 或者没有找到对应的方法或者对应的代码,会报这种错,要好好找。