目前有以下这些 mockjs 数据拦截 异步路由 elementui 国际化 自定义表格组件 自定义主题色 增删改查 demo
git clone [email protected]:shenxingchao/vue-admin-elementui.git
npm install --registry=https://registry.npm.taobao.org
npm install
npm run serve
npm run build:prod
这里面定义的变量 所有组件都能用 定义导出用法
$theme: #50bf8d;
:export {
theme: $theme;
}
请切换到 i18n 分支,前端路由权限实现方式,后端维护一个菜单表和前端路由结构一致,返回每个菜单对应的 id,前端路由表也存这个 id,然后通过递归前端路由数组,判断 id 返回一个新的路由数组动态添加进路由当中即可,这种情况的多语言是维护在前端的,如果后端维护菜单名称多语言,那么和 master 分支权限实现方式无异
默认中英文二种 其他语言按格式增加即可 组件调用方法
<template>
<div :attr="$t('hello')">{{$t('hello')}}</div>
</template>
<script>
export default {
mounted() {
this.$i18n.t('hello')
}
}
</script>
主题颜色定义最好在这里,因为这个文件里定义的变量已经加载为全局的,包括给下面这个文件用
所有 elementui 颜色变量配置都在这个文件里,这里的颜色可以用 common.scss 导出的颜色
/* 改变主题色变量 */
$--color-primary: $theme;
/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';
@import '~element-ui/packages/theme-chalk/src/index';
请求拦截,模拟返回数据 mockjs 在线编辑器 http://mockjs.com/0.1/editor.html#help
import Upload from '@/components/Upload'
<Upload
:file="ruleForm.avatar"
@handleUploadSuccess="handleUploadSuccess($event)"
@handleDeleteFile="ruleForm.avatar = ''"
>
</Upload>
<script>
//上传成功事件
handleUploadSuccess: function(imgUrl) {
this.ruleForm.avatar = imgUrl
//取消头像验证
this.$refs['ruleForm'].clearValidate('avatar')
}
</script>
<Upload
:files="ruleForm.image_list"
multiple
@handleUploadMultipleSuccess="handleUploadMultipleSuccess($event)"
@handleClickDeleteMultiple="ruleForm.image_list = $event"
>
</Upload>
<script>
//多图上传成功事件
handleUploadMultipleSuccess: function(imgUrlList) {
this.ruleForm.image_list = imgUrlList
this.$refs['ruleForm'].clearValidate('image_list')
}
</script>
-
用户进入 dashbord 页面
-
/src/permission.js 利用 router.beforeEach 实现路由拦截; 判断 vuex 是否已经存储了 roles 角色信息,没有则调用/src/store/modules/user.js getInfo action 获取用户信息来获取用户角色并设置 store state roles,mock.js 拦截获取用户信息 返回角色 id 数组 roles[1,2,3]
-
/src/permission.js 调用/src/store/modules/permission.js generateRoutes action 动态生成路由并返回
-
generateRoutes action 里面调起 getPermissionRouter 获取后端对应角色的权限路由数组,moke.js 拦截获取路由数组 详解/src/moke.js 数据结构
-
通过 routerMapComponet 根据返回的路由数组进行路由映射 将结果 asyncRouterMapRes resolve 返回
-
回到/src/permission.js 设置路由配置 router.options.routes = store.getters.addRoutes 菜单组件中用的是这个来循环菜单的(注意)
-
通过 router.addRoutes(asyncRouterMapRes) 方法将获取到的动态路由添加到当前路由
-
结束流程