| @ -1,3 +1,334 @@ | |||||
| # jewelry-front | |||||
| # 珠宝商城项目文档 | |||||
| 珠宝小程序前端代码 | |||||
| ## 项目概述 | |||||
| 本项目是一个基于uni-app开发的珠宝商城小程序,采用Vue框架开发,集成了完整的商城功能模块。 | |||||
| ## 目录结构 | |||||
| ``` | |||||
| ├── api # API接口目录 | |||||
| │ ├── api.js # API统一出口 | |||||
| │ ├── http.js # HTTP请求封装 | |||||
| │ └── model # 业务模块API | |||||
| ├── components # 公共组件 | |||||
| ├── mixins # 混入文件 | |||||
| ├── pages # 页面文件 | |||||
| ├── static # 静态资源 | |||||
| ├── store # Vuex状态管理 | |||||
| ├── utils # 工具函数 | |||||
| └── uni_modules # uni-app插件模块 | |||||
| ``` | |||||
| ## 核心模块详解 | |||||
| ### 1. Mixins 混入 | |||||
| #### 1.1 list.js - 列表数据加载混入 | |||||
| 提供列表数据的加载、分页、下拉刷新、上拉加载更多等功能。 | |||||
| **主要功能:** | |||||
| - 统一的分页参数处理 | |||||
| - 下拉刷新和上拉加载更多 | |||||
| - 数据加载状态管理 | |||||
| **使用示例:** | |||||
| ```javascript | |||||
| // 在页面中使用list混入 | |||||
| import listMixin from '@/mixins/list.js' | |||||
| export default { | |||||
| mixins: [listMixin], | |||||
| data() { | |||||
| return { | |||||
| // 指定API接口 | |||||
| mixinsListApi: 'product.list' | |||||
| } | |||||
| } | |||||
| } | |||||
| ``` | |||||
| #### 1.2 configList.js - 全局配置混入 | |||||
| 已全局引入的配置管理混入,无需手动引入即可使用。 | |||||
| **主要功能:** | |||||
| - 统一的分享配置 | |||||
| - 全局配置管理 | |||||
| - 用户信息关联 | |||||
| **配置参数:** | |||||
| ```javascript | |||||
| // 分享配置示例 | |||||
| this.Gshare.title = '分享标题' | |||||
| this.Gshare.path = '分享路径' | |||||
| ``` | |||||
| ### 2. API 模块 | |||||
| #### 2.1 http.js - 请求封装 | |||||
| 统一的HTTP请求处理,包含: | |||||
| - 请求拦截器 | |||||
| - 响应拦截器 | |||||
| - 统一的错误处理 | |||||
| - Token管理 | |||||
| #### 2.2 api.js - 接口管理 | |||||
| 统一管理API接口,支持模块化组织。API模块采用分层结构,便于维护和扩展。 | |||||
| **目录结构:** | |||||
| ``` | |||||
| api/ | |||||
| ├── api.js # API统一出口 | |||||
| ├── http.js # HTTP请求封装 | |||||
| └── model/ # 业务模块API | |||||
| ├── product.js # 商品相关接口 | |||||
| ├── order.js # 订单相关接口 | |||||
| └── user.js # 用户相关接口 | |||||
| ``` | |||||
| **接口定义示例:** | |||||
| ```javascript | |||||
| // api/model/product.js | |||||
| export default { | |||||
| // GET请求示例 | |||||
| list: { | |||||
| url: '/api/product/list', | |||||
| method: 'GET', | |||||
| loading: true // 显示加载提示 | |||||
| }, | |||||
| // POST请求示例 | |||||
| create: { | |||||
| url: '/api/product/create', | |||||
| method: 'POST', | |||||
| loading: true | |||||
| }, | |||||
| } | |||||
| ``` | |||||
| **调用接口示例:** | |||||
| ```javascript | |||||
| // 1. 基础列表查询 | |||||
| this.$api('product.list', { | |||||
| pageNo: 1, | |||||
| pageSize: 10, | |||||
| categoryId: '123' | |||||
| }, res => { | |||||
| // 处理列表数据 | |||||
| }) | |||||
| // 2. 创建商品 | |||||
| this.$api('product.create', { | |||||
| name: '商品名称', | |||||
| price: 99.99, | |||||
| description: '商品描述' | |||||
| }, res => { | |||||
| if (res.code === 0) { | |||||
| // 创建成功 | |||||
| uni.showToast({ title: '创建成功' }) | |||||
| } | |||||
| }) | |||||
| ``` | |||||
| ### 3. 公共代码 | |||||
| #### 3.1 工具函数 (utils) | |||||
| - authorize.js: 授权处理 | |||||
| - pay.js: 微信网页支付相关 | |||||
| - utils.js: 通用工具函数 | |||||
| - timeUtils.js: 时间处理 | |||||
| - position.js: 定位与位置计算 | |||||
| **使用示例:** | |||||
| ```javascript | |||||
| // 时间格式化 | |||||
| const formattedTime = this.$timeUtils.formatTime(new Date()) | |||||
| // 微信网页支付调用 | |||||
| import { wxPay } from '@/utils/pay' | |||||
| wxPay(orderData) | |||||
| ``` | |||||
| #### 3.2 公共组件 | |||||
| - navbar.vue: 自定义导航栏 | |||||
| - tabbar.vue: 底部导航栏 | |||||
| - productItem.vue: 商品列表项 | |||||
| **使用示例:** | |||||
| ```html | |||||
| <template> | |||||
| <view> | |||||
| <navbar title="商品列表" /> | |||||
| <product-item | |||||
| v-for="item in list" | |||||
| :key="item.id" | |||||
| :product="item" | |||||
| /> | |||||
| </view> | |||||
| </template> | |||||
| ``` | |||||
| ## 最佳实践 | |||||
| ### 1. 列表页面开发 | |||||
| ```javascript | |||||
| // pages/product/list.vue | |||||
| import listMixin from '@/mixins/list.js' | |||||
| export default { | |||||
| mixins: [listMixin], | |||||
| data() { | |||||
| return { | |||||
| mixinsListApi: 'product.list', | |||||
| queryParams: { | |||||
| pageNo: 1, | |||||
| pageSize: 10, | |||||
| categoryId: '' | |||||
| } | |||||
| } | |||||
| }, | |||||
| methods: { | |||||
| // 分类切换 | |||||
| onCategoryChange(categoryId) { | |||||
| this.queryParams.categoryId = categoryId | |||||
| this.getData() | |||||
| } | |||||
| } | |||||
| } | |||||
| ``` | |||||
| ### 2. 详情页面开发 | |||||
| ```javascript | |||||
| // pages/product/detail.vue | |||||
| import configMixin from '@/mixins/configList.js' | |||||
| export default { | |||||
| mixins: [configMixin], | |||||
| data() { | |||||
| return { | |||||
| productId: '', | |||||
| detail: {} | |||||
| } | |||||
| }, | |||||
| onLoad(options) { | |||||
| this.productId = options.id | |||||
| this.getDetail() | |||||
| }, | |||||
| methods: { | |||||
| getDetail() { | |||||
| this.$api('product.detail', { | |||||
| id: this.productId | |||||
| }, res => { | |||||
| this.detail = res.result | |||||
| // 设置分享信息 | |||||
| this.Gshare.title = this.detail.name | |||||
| this.Gshare.path = `/pages/product/detail?id=${this.productId}` | |||||
| }) | |||||
| } | |||||
| } | |||||
| } | |||||
| ``` | |||||
| ## 注意事项 | |||||
| 1. 使用mixins时注意命名冲突 | |||||
| 2. API调用建议统一使用this.$api方式 | |||||
| 3. 页面开发建议继承相应的混入来复用通用功能 | |||||
| ## 常见问题 | |||||
| 1. 列表加载失败 | |||||
| - 检查mixinsListApi是否正确配置 | |||||
| - 确认网络请求是否正常 | |||||
| - 查看请求参数格式是否正确 | |||||
| ## 分包结构说明 | |||||
| ### pages_order分包 | |||||
| 分包是小程序优化加载性能的重要手段,pages_order作为独立分包,包含以下模块: | |||||
| ``` | |||||
| ├── auth # 认证相关页面 | |||||
| │ ├── loginAndRegisterAndForgetPassword.vue # 登录注册 | |||||
| │ ├── wxLogin.vue # 微信登录 | |||||
| │ └── wxUserInfo.vue # 微信用户信息 | |||||
| ├── components # 分包内公共组件 | |||||
| │ ├── address/ # 地址选择组件 | |||||
| │ ├── areaSelector/ # 区域选择器 | |||||
| │ └── product/ # 商品相关组件 | |||||
| ├── home # 首页相关 | |||||
| │ ├── addEnterprise.vue # 添加企业 | |||||
| │ ├── contact.vue # 联系我们 | |||||
| │ ├── introduce.vue # 介绍页面 | |||||
| │ ├── journalism.vue # 新闻资讯 | |||||
| │ └── notice.vue # 公告 | |||||
| ├── mine # 我的模块 | |||||
| │ ├── address.vue # 收货地址 | |||||
| │ ├── balance.vue # 余额 | |||||
| │ ├── commission.vue # 佣金 | |||||
| │ ├── coupon.vue # 优惠券 | |||||
| │ ├── memberCenter.vue # 会员中心 | |||||
| │ └── more... # 更多功能页面 | |||||
| ├── order # 订单模块 | |||||
| │ ├── createOrder.vue # 创建订单 | |||||
| │ ├── orderDetail.vue # 订单详情 | |||||
| │ └── giftList.vue # 礼品列表 | |||||
| ├── product # 商品模块 | |||||
| │ └── productDetail.vue # 商品详情 | |||||
| └── static # 分包静态资源 | |||||
| ├── address/ # 地址相关图片 | |||||
| ├── auth/ # 认证相关图片 | |||||
| ├── coupon/ # 优惠券图片 | |||||
| └── more... # 其他静态资源 | |||||
| ``` | |||||
| **分包特点:** | |||||
| - 静态资源就近原则:分包相关的图片等静态资源存放在分包目录下,避免主包体积过大 | |||||
| - 模块化组织:按功能模块划分目录,便于维护和管理 | |||||
| - 组件复用:分包内的通用组件集中管理,提高代码复用性 | |||||
| ## 配置文件说明 | |||||
| ### config.js | |||||
| 项目核心配置文件,包含以下配置: | |||||
| **1. 环境配置** | |||||
| ```javascript | |||||
| // 当前环境 | |||||
| const type = 'prod' | |||||
| // 环境配置 | |||||
| const config = { | |||||
| dev: { | |||||
| baseUrl: 'http://h5.xzaiyp.top/jewelry-admin', | |||||
| }, | |||||
| prod: { | |||||
| baseUrl: 'https://jewelry-admin.hhlm1688.com/jewelry-admin', | |||||
| } | |||||
| } | |||||
| ``` | |||||
| **2. 默认配置** | |||||
| ```javascript | |||||
| const defaultConfig = { | |||||
| // 腾讯地图Key | |||||
| mapKey: 'XMBBZ-BCPCV-SXPPQ-5Y7MY-PHZXK-YFFVU', | |||||
| // 阿里云OSS配置 | |||||
| aliOss: { | |||||
| url: 'https://image.hhlm1688.com/', | |||||
| config: { | |||||
| region: 'oss-cn-guangzhou', | |||||
| accessKeyId: '***', | |||||
| accessKeySecret: '***', | |||||
| bucket: 'hanhaiimage', | |||||
| endpoint: 'oss-cn-shenzhen.aliyuncs.com', | |||||
| } | |||||
| }, | |||||
| } | |||||
| ``` | |||||
| **3. UI框架配置** | |||||
| ```javascript | |||||
| uni.$uv.setConfig({ | |||||
| config: { | |||||
| unit: 'rpx' // 设置默认单位 | |||||
| }, | |||||
| }) | |||||
| ``` | |||||