| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- ---
- 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<Object>} 订单列表数据
- */
- 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"
- ]
- }
- ```
|