# vue2的rup模版
**Repository Path**: rk-one/rk-vue2-rup-demo
## Basic Information
- **Project Name**: vue2的rup模版
- **Description**: vue2的rup模版
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-03-24
- **Last Updated**: 2023-07-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#### ⚡ 使用说明
基于 https://gitee.com/lyt-top/vue-next-admin/tree/vue-prev-admin
vue-next-admin开发文档 https://lyt-top.gitee.io/vue-next-admin-doc-preview/
建议使用 cnpm,因为 yarn 有时会报错。`npm install` 安装报错的话,请使用 `cnpm install`。
> 注意:`node` 需大于 `12.xxx` 小于等于 `v16.14.0`,否则安装依赖将报错。
## 开发必看【推荐】
#### ⚡ 1、全局
> 全局挂载
**(1)直接在src\utils\util.js里面加方法,export出来,不需要再main.js注入**
#### ⚡ 2、快捷CSS类样式【重点】
> 对于一些简单的样式调整直接使用变量类名即可
- 字体大小(font{变量}): 如class="font16"表示字体大小为16px的类
- 内边距(pt{变量},pr{变量},pb{变量},pl{变量}):分别表示上右下左内边距padding
- 外边距(mt{变量},mr{变量},mb{变量},ml{变量}):分别表示上右下左外边距margin
#### ⚡ 3、方法调用
> 可以对方请求方法单独export,进行按需引入使用
> 也可以将方法默认导出,通过`this.$api['请求所在文件名']['请求名']()`调用
#### ⚡ 4、公共SCSS样式(滚动条、阴影等)
> `theme/common/mixins.scss`文件中是全局常用公共样式
> 比如滚动条样式、阴影、多行文本溢出等等
使用方法:
```scss
// 在theme/common/mixins.scss中定义
@mixin xxx($a: 1px) {
}
// 基础使用
.aaa {
@include xxx;
}
```
#### ⚡ 5、数据字典调用
> 获取字典值列表示例
**(1)直接获取【不缓存到vuex中】**
```js
const data = await this.$getDictOptions(['resourceType', 'gender']);
this.menuTyps = data[0];
this.genderDict = data[1]
```
**(2)缓存到vuex中**
```js
// 示例
this.$store.dispatch('dictionary/getDictionary', 'resourceType').then(res => {
console.log(res);
})
// 获取
await this.$store.dispatch('dictionary/getDictionary', 'resourceType')
```
**(3)封装el-select数据字典下拉框**
> 使用方法
> 所传属性和方法与el-select基本一致
```html
```
**(4)vue使用全局混入的方式实现数据字典的快速获取,并用vuex缓存**
> 1、在vue中使用如下
```js
{
data() {
return {}
},
dicts: ['noticeStatus', 'examAuditStatus'],
methods: {}
}
```
> 2、使用数据
`this.dicts.noticeStatus`来使用
***
> 根据字典值获取字典的中文名称
```js
this.$selectDictLabel(genderDict, '0') // '男'
```
#### ⚡ 6、主题切换的css
> 如果有内容需要在不同主题显示不同的样式,需要去theme文件夹下写入对应主题的样式
#### ⚡ 7、提示类
```js
this.$message.success('删除成功');
this.$message.error('删除失败');
this.$message.warning('提示告警');
```
#### ⚡ 8、文件命名规范【推荐】
> 页面中的子组件放在`components`文件夹下,页面中的子页面放在`childs`或`childrens`文件夹下;
> 文件夹全小写
目录结构如下:
```
src 源码目录
|-- api 所有api接口
|-- assets 静态资源,images, icons, styles等
|-- components 公用组件
|-- config 配置信息
|-- constants 常量信息,项目所有Enum, 全局常量等
|-- directives 自定义指令
|-- filters 过滤器,全局工具
|-- datas 模拟数据,临时存放
|-- lib 外部引用的插件存放及修改文件
|-- mock 模拟接口,临时存放
|-- plugins 插件,全局使用
|-- router 路由,统一管理
|-- store vuex, 统一管理
|-- themes 自定义样式主题
|-- views 视图目录
| |-- role role模块名
| |-- |-- role-list.vue role列表页面
| |-- |-- role-add.vue role新建页面
| |-- |-- role-update.vue role更新页面
| |-- |-- index.less role模块样式
| |-- |-- components role模块通用组件文件夹
| |-- employee employee模块
```
详见[阿里巴巴前端开发前端代码规范](https://developer.aliyun.com/article/850913#slide-45)
#### ⚡ 9、git commit提交规范规范【推荐】
- feat:新功能(feature)
- fix:修补 bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改 bug 的代码变动)
- perf: 性能提升(提高性能的代码改动)
- test:测试
- build:构建过程或辅助工具的变动(webpack 等)
- ci:更改 CI 配置文件和脚本
- chore:不修改 src 或测试文件的其他更改
- revert:撤退之前的 commit
#### ⚡ 10、上传组件和api的封装
**(1)直接通过api调用来上传文件**
> 方法路径: `utils/util`
> 使用方式:通过api调用的方式来进行上传文件
```js
// 在组件中使用
this.$uploadFile({
limit: 3,
maxSize: 1,
fileType: ['.png', '.jpg'],
onSuccess: function (fileList) {
console.log(fileList);
}
// ... 配置属性...
});
```
**(2)基于elementui的upload组件封装上传图片组件**
> 使用`ImageUpload`组件
**(3)基于elementui的upload组件封装上传文件组件**
> 使用`FileUpload`组件
#### ⚡ 11、通过菜单管理新建动态路由
> 新增菜单的时候写法同vue-router的动态路由一样
#### ⚡ 12、公共样式
```js
class="flex"// 弹性布局
class="flex-auto"// flex: 1;
class="flex-margin"// margin: auto;
class="w50"// width: 50%;
class="w80"// width: 80%;
class="w90"// width: 90%;
class="w100"// width: 100%;
class="h100"// height: 100%;
class="h50"// height: 50%;
class="vh100" // height: 100vh;
class="max100vh" // max-height: 100vh;
class="min100vh"// min-height: 100vh;
//颜色
class="color-primary"// color:#409eff;
class="color-success"// color:#67c23a;
class="color-warning"// color:#e6a23c;
class="color-danger"// color:#F56c6c;
class="color-info"// color:#909399;
//溢出
class="overflow"// overflow: hidden;
class="one-text-overflow"// 单行溢出
class="two-text-overflow"// 2行溢出
class="three-text-overflow"// 3行溢出
class="four-text-overflow"// 4行溢出
//字体大小(12px-32px)
class="font12"//font-size:12px; (12px-32px)
//边距距离
class="mt5"// margin-top:5px; (范围:mt5-mt100)
class="mr5"// margin-right:5px; (范围:mr5-mr100)
class="mb5"// margin-bottom:5px; (范围:mb5-mb100)
class="ml5"// margin-left:5px; (范围:ml5-ml100)
class="pt5"// padding-top:5px; (范围:pt5-pt100)
class="pr5"// padding-right:5px; (范围:pr5-pr100)
class="pb5"// padding-bottom:5px; (范围:pb5-pb100)
class="pl5"// padding-left:5px; (范围:pl5-pl100)
//宽度、高度
class="width-1"// width:1px; (范围:width-1 - width-300)
class="height-1"// width:1px; (height-1 - height-300)
//switch按钮
//标题
class="common-head-title"
//阴影
@include box-shadow-black;
//滚动条样式
@include scrollBar;
//iconfont图标使用
在src\assets\iconfont\iconfont.css文件加上以下格式代码
.icon-map-site:before {
content: "\ea00";
}
//svg图标使用
//src\assets\icons\svg里面加上404.svg
```