| @ -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' // 设置默认单位 | |||
| }, | |||
| }) | |||
| ``` | |||