# vite+vue3基本模板
**Repository Path**: fen-xin/vite-vue3-basic-template
## Basic Information
- **Project Name**: vite+vue3基本模板
- **Description**: 基于vite+Vue3.x+eslint+prettierrc语法检测及保存时进行自动格式化
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-11-19
- **Last Updated**: 2022-05-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### 文件夹的一些说明
- src/
- api 是将接口中的请求接口统一进行封装的文件夹
- request.js 是基于 promise 进行封装的 axios
- test.js
- components 一些自定义的组件
- layouts 页面布局的文件夹
- views 这个是视图的文件夹(就是布局页面中要显示的文件)
- router 路由文件夹
- store vuex 仓库文件夹
- utils 封装的一些工具类文件夹
- pugins 这个是插件的文件夹
- des.js cryto-js.js jsencrypt.js 这三个是请求数据的加密解密插件
- APP.js 主页面
- main.js 主入口进行挂载插件等
- 根目录
- .pretierrc.js 这个是配置格式化的文件
- .eslintrc.js 配置 eslint 检查代码语法的配置文件
- .gitignore 这个文件是上传 git 时进行配置需要过滤的文件
- public 静态文件,一般是存放压缩过的文件
- .env 这个是环境变量,在生产,测试,开发中都会使用的文件,可配置公共的路径等
- .env.development 这个是配置开发环境的一些接口路径等文件
- envproduction 这个是配置生产环境的一些接口路径等文件
- vite.config.js 进行配置整个项目的一些参数等的文件夹(如:别名,公共路径等)
- mock 是 mockjs 的请求模拟数据
- .browserslistrc 是浏览器的版本兼容限制
### 代码的基本规范
- 标签的使用,尽量使用带有与异化的标签
- css 类名,基本页面布局使用当前的组件名简写+‘-’连接,如 login 登录页面 l-wrap 等,
- 组件名: 使用多个单词使用-进行连接,或者是多个单词的大驼峰写法。如 todo-item,TodoItem,这里声明组件名的时候统一使用大驼峰的写法如:MyComponent.vue
- props: 接收父组件传递的参数的时候,一般尽量不要使用数组的方式进行接收,推荐使用对象的形式,给参数加上类型的校验
- props 传递参数的命名:组件上使用羊肉串的写法,接收的时候使用小驼峰的写法
```
props:{
redMessage: String
}
```
- emits: 使用父子组件通信的时候,要在 emits 属性中写上事件名,可以使用数组的形式,也可以使用对象的形式进行校验
```
父组件:
子组件:
emits:['myEvent'],
methods:{
toParent(){
this.$emit('myEvnet)
}
}
或:
emits:['myEvent'],
setup(props,{emit}){
const toParent = ()=>{emit('myEvent')}
return {toParent}
}
```
- v-for: 使用循环的时候要加上 key 值,最好不要使用 index 作为 key 值,一般使用 id 或者当前的文本
- v-for 和 v-if:不要一起使用这两个指令,循环要加 v-if 的时候,可以使用计算属性,将条件过滤后,直接循环计算方法就可以了,使用计算属性要记得加上 return
### 使用 element-plus 组件
- 使用 button 等样式组件,直接在页面写就可以自动导入了
```
点击提示
```
- 使用命令式组件,如 ElMessage 等,需要在当前页面使用 import 进行引入,否则报错
```
```
### 使用 element-puls 中的 icon
- 首先根据官方文档中的下载路径进行下载
- 在复制官方文档中的代码,此时 el-icon 中包裹的标签是需要我们在当前页面中进行引入并且注册的
```
npm install @element-plus/icons-vue
import { Coordinate } from '@element-plus/icons-vue';
components: {
Coordinate
},
//注意这个组件在页面中开头是小写的,注册的时候,首字母要进行大写
```
### 使用 element-plus 服务端的 loading 注意事项
- 一般我们在封装 axios 进行接口请求的时候,有个 loading 的显示问题,这里我们直接使用 loading 的组件进行封装,但是有个问题是,它里面的属性 spinner: 'el-icon-loading',这个会导致 loading 图标不进行展示,将这个去掉就可以了
### 使用 scss 的 css 预编译处理器
### 文件别名
- " /@ ": 表示是根目录下的 src 文件下的 components 文件路径
### eslint+pretirrc 代码语法检测及格式化(保存时自动进行格式化)
- 语法如:代码使用单引号的形式进行格式化规范,当不同的开发人员进行开发时,最后输入检测语法的指令,会将有的进行自动修复,有的会进行抱错的形式进行提示
```
npm run lint-fix 自动进行检测并修复
```
- 主要配置文件在根目录下的.vscode->ettings.json 中进行了配置,但是在 vscode 中进行下载插件 eslint,Prettier - Code formatter
### mitt 这个插件有空可以了解下
- 跟 Vue2.0 中的 bus 兄弟组件传值是类似的,使用 emit 进行传递参数,使用 on 进行监听(接收)参数
- 但是使用 on 的时候,要在当前组件卸载的时候使用 off,取消监听,释放资源
### 深度选择器
```
> > >
/deep/
::v-deep
```
- 一般我们还是尽量不要使用 scoped,使用当前的页面的简写加-加命名
- 如:当前页面是首页,取名 home,下面的布局导航,头部等 home-header, home-nav, home-title
### rsa 加解密,只是用一个密钥进行加解密(在 axios 的拦截和响应中进行加解密了)
```
let str = '',
des_str = '',
rsa_str = '';
//加密
str = randomString(16); // des秘钥
let encryptor = new JSEncrypt(); // 创建加密对象实例
//之前ssl生成的公钥,复制的时候要小心不要有空格
encryptor.setPublicKey(这是公钥); //设置公钥
const _data = JSON.stringify(当前,前台传递的参数);
console.log(`请求参数param:--------${_data}`);
des_str = encryptDes(_data, str); // des加密
rsa_str = encryptor.encrypt(str); // rsa加密
//这个是加密 好的参数,请求的时候直接发送这个data就好
const data = {
key: rsa_str,
value: des_str,
};
//解密
const result = JSON.parse(decryptDes(res, str));
```