---
alwaysApply: false
---
### 编码规范
#### 命名规范
**文件命名**
- 页面文件:使用 kebab-case,如 `order-list.vue`
- 组件文件:使用 PascalCase,如 `UserCard.vue`
- 工具文件:使用 camelCase,如 `dateUtils.js`
**变量命名**
- 常量:使用 SCREAMING_SNAKE_CASE,如 `API_BASE_URL`
- 变量和函数:使用 camelCase,如 `getUserInfo`
- 组件 props:使用 camelCase,如 `itemList`
- CSS 类名:使用 kebab-case,如 `.user-card`
#### 组件开发规范
**单文件组件结构顺序**
```vue
```
**Props 定义**
```javascript
// Vue 2 Options API
props: {
title: {
type: String,
required: true,
default: ''
},
list: {
type: Array,
default: () => []
}
}
```
#### API 请求规范
**统一请求处理**
```javascript
// 使用 uni.request 而不是 axios
const request = (options) => {
return new Promise((resolve, reject) => {
uni.request({
url: options.url,
method: options.method || 'GET',
data: options.data || {},
header: {
'Content-Type': 'application/json',
...options.header
},
success: (res) => {
if (res.statusCode === 200) {
resolve(res.data)
} else {
reject(res)
}
},
fail: reject
})
})
}
```
**错误处理**
```javascript
try {
const result = await apiCall()
// 处理成功结果
} catch (error) {
uni.showToast({
title: error.message || '请求失败',
icon: 'none'
})
}
```
#### 状态管理规范
**Store 结构**
```javascript
// Vuex 或 Pinia
const store = {
state: {
user: null,
loading: false
},
mutations: {
SET_USER(state, user) {
state.user = user
},
SET_LOADING(state, loading) {
state.loading = loading
}
},
actions: {
async login({ commit }, params) {
commit('SET_LOADING', true)
try {
const user = await loginApi(params)
commit('SET_USER', user)
} finally {
commit('SET_LOADING', false)
}
}
}
}
```
#### 样式规范
**使用 rpx 单位**
```scss
.container {
padding: 32rpx; // 推荐
margin: 16rpx 24rpx; // 推荐
font-size: 28rpx; // 推荐
// 避免使用 px,除非是特殊需求
border: 1px solid #ccc; // 细边框可以使用 px
}
```
**响应式设计**
```scss
.grid {
display: flex;
flex-wrap: wrap;
.item {
width: 50%;
// 条件编译样式
/* #ifdef H5 */
&:hover {
background-color: #f5f5f5;
}
/* #endif */
}
}
```
#### 性能优化规范
**列表渲染优化**
```vue
{{ item.name }}
```
**图片优化**
```vue
```
#### 调试和测试
**调试信息**
```javascript
// 条件编译调试代码
// #ifdef APP-PLUS || H5
console.log('Debug info:', data)
// #endif
// 使用 uni.getSystemInfo 获取设备信息
uni.getSystemInfo({
success: (res) => {
console.log('Platform:', res.platform)
console.log('Version:', res.version)
}
})
```
**错误监控**
```javascript
// App.vue 中的全局错误处理
onError(err => {
console.error('Global error:', err)
// 上报错误到监控平台
})
```
### 编码规范
#### 命名规范
**文件命名**
- 页面文件:使用 kebab-case,如 `order-list.vue`
- 组件文件:使用 PascalCase,如 `UserCard.vue`
- 工具文件:使用 camelCase,如 `dateUtils.js`
**变量命名**
- 常量:使用 SCREAMING_SNAKE_CASE,如 `API_BASE_URL`
- 变量和函数:使用 camelCase,如 `getUserInfo`
- 组件 props:使用 camelCase,如 `itemList`
- CSS 类名:使用 kebab-case,如 `.user-card`
#### 组件开发规范
**单文件组件结构顺序**
```vue
```
**Props 定义**
```javascript
// Vue 2 Options API
props: {
title: {
type: String,
required: true,
default: ''
},
list: {
type: Array,
default: () => []
}
}
```
#### API 请求规范
**统一请求处理**
```javascript
// 使用 uni.request 而不是 axios
const request = (options) => {
return new Promise((resolve, reject) => {
uni.request({
url: options.url,
method: options.method || 'GET',
data: options.data || {},
header: {
'Content-Type': 'application/json',
...options.header
},
success: (res) => {
if (res.statusCode === 200) {
resolve(res.data)
} else {
reject(res)
}
},
fail: reject
})
})
}
```
**错误处理**
```javascript
try {
const result = await apiCall()
// 处理成功结果
} catch (error) {
uni.showToast({
title: error.message || '请求失败',
icon: 'none'
})
}
```
#### 状态管理规范
**Store 结构**
```javascript
// Vuex 或 Pinia
const store = {
state: {
user: null,
loading: false
},
mutations: {
SET_USER(state, user) {
state.user = user
},
SET_LOADING(state, loading) {
state.loading = loading
}
},
actions: {
async login({ commit }, params) {
commit('SET_LOADING', true)
try {
const user = await loginApi(params)
commit('SET_USER', user)
} finally {
commit('SET_LOADING', false)
}
}
}
}
```
#### 样式规范
**使用 rpx 单位**
```scss
.container {
padding: 32rpx; // 推荐
margin: 16rpx 24rpx; // 推荐
font-size: 28rpx; // 推荐
// 避免使用 px,除非是特殊需求
border: 1px solid #ccc; // 细边框可以使用 px
}
```
**响应式设计**
```scss
.grid {
display: flex;
flex-wrap: wrap;
.item {
width: 50%;
// 条件编译样式
/* #ifdef H5 */
&:hover {
background-color: #f5f5f5;
}
/* #endif */
}
}
```
#### 性能优化规范
**列表渲染优化**
```vue
{{ item.name }}
```
**图片优化**
```vue
```
#### 调试和测试
**调试信息**
```javascript
// 条件编译调试代码
// #ifdef APP-PLUS || H5
console.log('Debug info:', data)
// #endif
// 使用 uni.getSystemInfo 获取设备信息
uni.getSystemInfo({
success: (res) => {
console.log('Platform:', res.platform)
console.log('Version:', res.version)
}
})
```
**错误监控**
```javascript
// App.vue 中的全局错误处理
onError(err => {
console.error('Global error:', err)
// 上报错误到监控平台
})
```