--- alwaysApply: false --- ### 项目特定配置 #### 环境配置识别 基于您的项目结构,需要特别注意以下配置文件: **配置文件优先级** 1. `config.js` - 主要配置文件(API地址、版本号等) 2. `ext.json` - 开发环境扩展配置 3. `ext-production.json` - 生产环境配置 4. `change.bat` - 环境切换脚本 **配置文件示例** ```javascript // src/config.js export default { // API 基础地址 baseUrl: 'https://api.example.com', // 版本信息 version: '1.0.0', // 环境标识 env: 'development', // development | production // 调试开关 debug: true, // 小程序配置 miniProgram: { appId: 'wx1234567890', }, // 其他配置 pageSize: 20, timeout: 10000 } ``` #### 分包结构规范 根据您的项目结构,使用了模块化分包: **主要分包识别** - `pages/` - 主包页面(首页、登录等核心页面) - `pagesOrder/` - 订单相关页面 - `pagesClient/` - 客户管理页面 - `pagesPurchase/` - 采购相关页面 - `pagesStore/` - 门店管理页面 - `pagesStatistics/` - 统计分析页面 - `pagesShare/` - 分享相关页面 - `pagesFund/` - 资金管理页面 - `pagesArrears/` - 欠款管理页面 - `pagesInvite/` - 邀请相关页面 - `pagesStorehouse/` - 仓库管理页面 **分包配置建议** ```json // pages.json { "pages": [ // 主包页面(保持最小) { "path": "pages/index/index", "style": { "navigationBarTitleText": "首页" } }, { "path": "pages/login/login", "style": { "navigationBarTitleText": "登录" } } ], "subPackages": [ { "root": "pagesOrder", "name": "order", "pages": [ { "path": "list/index", "style": { "navigationBarTitleText": "订单列表" } } ] }, { "root": "pagesClient", "name": "client", "pages": [ { "path": "list/index", "style": { "navigationBarTitleText": "客户列表" } } ] } ], "preloadRule": { "pages/index/index": { "network": "all", "packages": ["order"] } } } ``` #### 开发环境配置 针对您的 ReadMe.txt 中提到的开发配置: **HTTP 开发环境设置** ```javascript // 1. 本地 host 配置(需要开启) // 在 hosts 文件中添加: // 127.0.0.1 local.example.com // 2. 小程序开发设置 // - 不校验合法域名、web-view、TLS版本以及HTTPS证书 // - 预览及真机调试时主包、分包体积上限调整为4M // 3. 代理配置示例 // vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, pathRewrite: { '^/api': '/api' } } } } } ``` #### 通用工具方法约定 根据项目结构,建议以下通用方法规范: **API 请求封装** ```javascript // utils/request.js import config from '@/config.js' const request = { baseUrl: config.baseUrl, // 通用请求方法 async request(options) { const defaultOptions = { url: this.baseUrl + options.url, method: options.method || 'GET', data: options.data || {}, header: { 'Content-Type': 'application/json', 'Authorization': uni.getStorageSync('token') || '', ...options.header }, timeout: config.timeout || 10000 } return new Promise((resolve, reject) => { uni.request({ ...defaultOptions, success: (res) => { if (res.statusCode === 200) { resolve(res.data) } else { this.handleError(res) reject(res) } }, fail: (err) => { this.handleError(err) reject(err) } }) }) } } ``` **路由跳转封装** ```javascript // utils/router.js export const router = { // 普通跳转 push(url, params = {}) { const query = Object.keys(params).map(key => `${key}=${encodeURIComponent(params[key])}` ).join('&') const fullUrl = query ? `${url}?${query}` : url uni.navigateTo({ url: fullUrl }) }, // 替换当前页面 replace(url, params = {}) { const query = Object.keys(params).map(key => `${key}=${encodeURIComponent(params[key])}` ).join('&') const fullUrl = query ? `${url}?${query}` : url uni.redirectTo({ url: fullUrl }) }, // 返回上一页 back(delta = 1) { uni.navigateBack({ delta }) }, // 跳转到 tabBar 页面 switchTab(url) { uni.switchTab({ url }) } } ``` #### 状态管理约定 ```javascript // store/index.js import { createStore } from 'vuex' export default createStore({ state: { user: null, token: uni.getStorageSync('token') || '', systemInfo: null }, mutations: { SET_USER(state, user) { state.user = user }, SET_TOKEN(state, token) { state.token = token uni.setStorageSync('token', token) }, CLEAR_AUTH(state) { state.user = null state.token = '' uni.removeStorageSync('token') } }, actions: { // 登录 async login({ commit }, { username, password }) { const result = await loginApi({ username, password }) commit('SET_TOKEN', result.token) commit('SET_USER', result.user) return result }, // 退出登录 logout({ commit }) { commit('CLEAR_AUTH') uni.reLaunch({ url: '/pages/login/login' }) } } }) ``` #### 错误处理约定 ```javascript // utils/error.js export const errorHandler = { // 全局错误处理 handleError(error, context = '') { console.error(`[${context}] 错误:`, error) let message = '操作失败' if (error.statusCode) { switch (error.statusCode) { case 401: message = '登录已过期,请重新登录' // 跳转到登录页 uni.reLaunch({ url: '/pages/login/login' }) return case 403: message = '暂无权限' break case 404: message = '请求的资源不存在' break case 500: message = '服务器错误,请稍后重试' break default: message = error.data?.message || '网络错误' } } else if (error.message) { message = error.message } uni.showToast({ title: message, icon: 'none', duration: 2000 }) } } ``` #### 代码风格约定 **文件命名** - 页面文件:kebab-case,如 `order-list.vue` - 组件文件:PascalCase,如 `OrderCard.vue` - 工具文件:camelCase,如 `dateUtils.js` - 常量文件:SCREAMING_SNAKE_CASE,如 `API_CONSTANTS.js` **注释规范** ```javascript /** * 获取订单列表 * @param {Object} params 查询参数 * @param {number} params.page 页码 * @param {number} params.pageSize 每页数量 * @param {string} params.status 订单状态 * @returns {Promise} 订单列表数据 */ export async function getOrderList(params) { return request.get('/order/list', params) } ``` #### TypeScript 配置(如果使用) ```json // tsconfig.json { "compilerOptions": { "target": "es5", "lib": ["dom", "dom.iterable", "es6"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "baseUrl": ".", "paths": { "@/*": ["src/*"], "@/components/*": ["src/components/*"], "@/utils/*": ["src/utils/*"], "@/api/*": ["src/api/*"] } }, "include": [ "src/**/*" ], "exclude": [ "node_modules" ] } ```