# avue_pc_base
**Repository Path**: ioolm/avue_pc_base
## Basic Information
- **Project Name**: avue_pc_base
- **Description**: avue+element
- **Primary Language**: JavaScript
- **License**: Unlicense
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-12-03
- **Last Updated**: 2022-01-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 前端目录结构
````
seefa-ui -- UI工程
├── public -- 静态资源
├ └── cdn -- 伪CDN
├ └── img -- 图片资源
├ └── svg -- SVG资源
├ └── util -- 网上下载的工具
├ └── favicon.ico -- 网站图标
├ └── index.html -- 网站首页,也是唯一的一张页面
├── src -- 源码目录
├ └── api -- 和后端交互的API相关
├ ├── components -- 自己封装的组件
├ ├── config -- 工程配置
├ ├── const -- 常量
├ ├── docker -- docker部署相关
├ ├── filters -- 全局过滤器
├ └── mixins -- VUE组件混入
├ └── page -- 页面组件
├ └── route -- VUE-Router相关
├ └── page -- 页面路由
├ └── views -- 业务路由
├ └── avue-router.js --自定义路由处理,包括路由拦截,动态路由等
├ └── axios.js --axios增强
├ └── route.js --路由配置入口
├ └── store -- VUEX相关
├ └── styles -- 样式管理
├ └── util -- 工具包
├ └── views -- 业务代码
├ └── App.vue -- 根组件
├ └── error.js -- 自定义错误日志处理
├ └── main.js -- 入口js
├ └── permission.js -- 权限判断,导航守卫
├── .browserslistrc -- barbel兼容配置
├── .editorconfig -- 开发组统一环境配置
├── .editorconfig -- ESLint配置
├── .gitignore -- git忽略列表
├── .postcssrc.js -- CSS预处理配置
├── babel.config.js -- barbel配置入口
├── package.json -- 依赖管理
├── vue.config.js -- vue cli3的webpack配置
````
## 技术栈
vue(2.6.10)+ ElementUI(2.15.6)
## 启动前端
````
# 更改npm 镜像源
npm config set registry https://registry.npm.taobao.org
# 安装依赖
npm install
# 启动
npm run dev
````
## 前端文档及其使用说明
* pigx-ui 前端基于 element、avue 混开完成,同时兼容 element、avue 的功能.
* 推荐复杂表单直接使用 element 开发, avue 在复杂界面配置较为复杂且渲染速度较慢
* element-ui 文档: [element.eleme.cn](https://element.eleme.cn/#/zh-CN/component/installation)
* avue 文档: [avue 2.X](https://avuejs.com/doc/installation)
## 前端字典功能使用
### 新增字典及其字典项目



### 前端下拉框、单多选框
[Avue 网络字典使用](https://avuejs.com/doc/form/form-dic)
### 效果

* crud 字段定义若类型为 select 、 checkbox、radio
````
dicUrl: '/admin/dict/type/对应后台字典类型',
````
* 上图展示实例
````
{
label: '类型',
prop: 'type',
type: 'select',
dicUrl: '/admin/dict/type/log_type',
}
````
### 特别说明
后台返回的字段类型 必须为 String ,不然前端没法处理 比如 0 , 1
## 按钮权限控制
### seefa如何控制菜单权限控制
在后台菜单管理中给指定菜单添加 按钮节点 需要指定 权限标志 例如: sys_user_add
### 前端控制
前端主要使用vuex保存用户的权限信息,然后通过v-if 判断是否有权限,如果有权限就渲染这个dom元素。 我们以 用户管理页面来讲解
````
//按钮v-if使用
编辑
删除
// 变量初始化
created() {
this.getList();
this.sys_user_add = this.permissions["sys_user_add"];
this.sys_user_upd = this.permissions["sys_user_upd"];
this.sys_user_del = this.permissions["sys_user_del"];
},
// 从vuex 获取保存的permissions
computed: {
...mapGetters(["permissions"])
}
//permissions获取
getUserInfo(state.token).then(response => {
commit('SET_PERMISSIONS', data.permissions)
})
````
### 后端权限控制
通过获取用户菜单列表,和请求的地址和请求方法对比判断有没有权限
````
public boolean hasPermission(HttpServletRequest request, Authentication authentication) {
Object principal = authentication.getPrincipal();
List grantedAuthorityList = (List) authentication.getAuthorities();
boolean hasPermission = false;
if (principal != null) {
if (CollectionUtil.isEmpty(grantedAuthorityList)) {
return hasPermission;
}
Set urls = new HashSet<>();
for (SimpleGrantedAuthority authority : grantedAuthorityList) {
urls.addAll(menuService.findMenuByRole(authority.getAuthority()));
}
for (MenuVo menu : urls) {
if (StringUtils.isNotEmpty(menu.getUrl()) && antPathMatcher.match(menu.getUrl(), request.getRequestURI())
&& request.getMethod().equalsIgnoreCase(menu.getMethod())) {
hasPermission = true;
break;
}
}
}
return hasPermission;
}
````