diff --git a/package-lock.json b/package-lock.json index 3559c78..24e5cc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,30 @@ { - "name": "wechat-app-mall", - "version": "7.4.1", - "lockfileVersion": 1, + "name": "fire-shop-lite", + "version": "2.1.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "fire-shop-lite", + "version": "2.1.0", + "license": "ISC", + "dependencies": { + "apifm-wxapi": "^3.36.0", + "wxa-plugin-canvas": "^1.1.12" + }, + "devDependencies": {} + }, + "node_modules/apifm-wxapi": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/apifm-wxapi/-/apifm-wxapi-3.36.0.tgz", + "integrity": "sha512-NkJ83foxe40D7wso72XR+1S5zbuyJOVepoPrcfF3INLpxbahmPFGw70GalNFT8i+pfwKPjGkWYlHk6m06e8xgQ==" + }, + "node_modules/wxa-plugin-canvas": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/wxa-plugin-canvas/-/wxa-plugin-canvas-1.1.12.tgz", + "integrity": "sha512-iMmGFjXYminWm/yni0n/MprSUReAQpIL9LWLsJfr0Na/pt4Chzs2VbLsEtflZx11qtrDcfM7+1eCgj1ju6TN4w==" + } + }, "dependencies": { "apifm-wxapi": { "version": "3.36.0", diff --git a/project.config.json b/project.config.json index ae45183..6925aef 100644 --- a/project.config.json +++ b/project.config.json @@ -32,13 +32,20 @@ "packNpmManually": false, "packNpmRelationList": [], "minifyWXSS": true, - "showES6CompileOption": false + "showES6CompileOption": false, + "compileWorklet": false, + "minifyWXML": true, + "localPlugins": false, + "disableUseStrict": false, + "useCompilerPlugins": false, + "condition": false, + "swc": false, + "disableSWC": true }, "compileType": "miniprogram", "libVersion": "2.12.0", - "appid": "wx5cd346d266bd8041", + "appid": "wxa8f4a9febbe656df", "projectname": "fire-shop-lite", - "scripts": {}, "simulatorType": "wechat", "simulatorPluginLibVersion": {}, "condition": { @@ -141,5 +148,10 @@ } ] } - } + }, + "packOptions": { + "ignore": [], + "include": [] + }, + "editorSetting": {} } \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..5407ed4 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,23 @@ +{ + "libVersion": "3.12.1", + "projectname": "fire-shop-lite", + "condition": {}, + "setting": { + "urlCheck": false, + "coverView": true, + "lazyloadPlaceholderEnable": false, + "skylineRenderEnable": false, + "preloadBackgroundData": false, + "autoAudits": false, + "useApiHook": true, + "showShadowRootInWxmlPanel": true, + "useStaticServer": false, + "useLanDebug": false, + "showES6CompileOption": false, + "compileHotReLoad": true, + "checkInvalidKey": true, + "ignoreDevUnusedFiles": true, + "bigPackageSizeSupport": false, + "useIsolateContext": true + } +} \ No newline at end of file diff --git "a/\345\274\200\345\217\221\346\226\271\346\241\210\346\226\207\346\241\243.md" "b/\345\274\200\345\217\221\346\226\271\346\241\210\346\226\207\346\241\243.md" new file mode 100644 index 0000000..ab1ac5f --- /dev/null +++ "b/\345\274\200\345\217\221\346\226\271\346\241\210\346\226\207\346\241\243.md" @@ -0,0 +1,417 @@ +# 微信电商小程序开发方案 + +## 一、项目概述 + +### 1.1 项目简介 +本项目是一个基于微信小程序开发的电商平台,具备**拼团、砍价、分销**三大核心功能。项目采用前后端分离架构,前端使用微信小程序原生开发框架,后端基于API工厂提供的云服务接口。 + +### 1.2 技术栈 +- **前端**:微信小程序原生框架、ColorUI组件库 +- **后端**:API工厂云服务(https://www.it120.cc) +- **工具库**:apifm-wxapi SDK、wxa-plugin-canvas(海报生成) + +### 1.3 项目结构 +``` +fire-shop-lite/ +├── colorui/ # ColorUI组件库 +├── components/ # 自定义组件 +├── images/ # 图片资源 +├── miniprogram_npm/ # npm依赖 +├── pages/ # 页面文件 +│ ├── index/ # 首页 +│ ├── category/ # 分类页 +│ ├── goods-details/ # 商品详情 +│ ├── my-pintuan/ # 我的拼团 +│ ├── my-kanjia/ # 我的砍价 +│ ├── fx/ # 分销相关(申请、佣金、成员) +│ └── ... # 其他页面 +├── utils/ # 工具函数 +├── app.js # 小程序入口 +├── app.json # 小程序配置 +├── config.js # 项目配置 +└── project.config.json # 项目配置 +``` + +--- + +## 二、核心功能模块详解 + +### 2.1 首页功能(商品展示+分类) + +#### 功能描述 +- 轮播图展示 +- 导航菜单 +- 推荐商品列表(下拉滚动加载) +- 砍价商品专区 +- 拼团商品专区 + +#### 关键代码实现 +```javascript +// pages/index/index.js - 首页商品加载 +async getRecommendGoodsList(append) { + const res = await WXAPI.goods({ + recommendStatus: 1, + pageSize: this.data.pageSize, + page: this.data.curPage + }) + // 处理商品数据... +}, + +// 触底加载更多 +onReachBottom: function() { + this.setData({ + curPage: this.data.curPage + 1 + }); + this.getRecommendGoodsList(true) +} +``` + +--- + +### 2.2 拼团功能 + +#### 功能特性 +1. **拼团商品设置**:设置拼团价格、成团人数、活动时效 +2. **开团/参团**:用户可发起新团或参与已有团 +3. **分享功能**:分享拼团链接邀请好友参团 +4. **自动成团**:支持超时自动成团规则 +5. **订单区分**:拼团订单与普通订单独立管理 + +#### 拼团流程 +``` +用户选择拼团商品 + ↓ +发起新团 / 加入已有团 + ↓ +支付拼团价格 + ↓ +分享链接邀请好友 + ↓ +达到成团人数 → 订单生效 +未达到人数 → 超时自动退款 +``` + +#### 关键代码 +```javascript +// pages/my-pintuan/index.js - 我的拼团列表 +getPtGoodsList(append){ + WXAPI.pingtuanMyJoined({ + token: wx.getStorageSync('token'), + page: this.data.currentPage, + pageSize: this.data.pageSize + }).then(res => { + // 处理拼团数据... + }) +} +``` + +--- + +### 2.3 砍价功能 + +#### 功能特性 +1. **砍价商品设置**:设置底价、库存、砍价次数上限、助力人数限制 +2. **发起砍价**:用户选择商品发起砍价 +3. **好友助力**:分享砍价链接,好友助力获得随机砍价金额 +4. **底价下单**:砍到底价后用户可下单购买 +5. **数据记录**:记录所有砍价及助力数据 + +#### 砍价流程 +``` +用户发起砍价 + ↓ +获得初始砍价金额 + ↓ +分享给好友助力 + ↓ +每次助力获得随机金额 + ↓ +达到底价 → 可下单购买 +未达底价 → 活动结束失效 +``` + +#### 关键代码 +```javascript +// pages/my-kanjia/index.js - 我的砍价 +mykanjia: function(e) { + var that = this; + var kjGoodsList = []; + for (var i = 0; i < e.length; i++) { + var id = e[i] + WXAPI.kanjiaMyJoinInfo(wx.getStorageSync('token'), id).then(res => { + if (res.code == 0) { + kjGoodsList.push(res.data) + that.setData({ + kjGoodsList: kjGoodsList + }); + } + }) + } +} +``` + +--- + +### 2.4 分销功能 + +#### 微信平台开通要求 +- ✅ 国内企业主体 +- ✅ 近半年无严重违规 +- ✅ 近30日有交易 +- ✅ 服务类目合规 + +#### 功能特性 +1. **分销员招募**:用户申请成为分销员 +2. **等级设置**:支持多级分销员等级 +3. **佣金配置**:一二级分销佣金比例配置 +4. **订单分账**:订单完成后自动计算佣金 +5. **佣金提现**:分销员可申请提现佣金 +6. **业绩查询**:查看推广业绩及佣金明细 + +#### 分销关系链 +``` +用户A(分销员) + ↓ 分享推广 +用户B(通过A的链接注册)→ A获一级佣金 + ↓ 分享推广 +用户C(通过B的链接注册)→ A获二级佣金,B获一级佣金 +``` + +#### 关键代码 +```javascript +// pages/fx/apply.js - 分销员申请 +bindSaveDone: function () { + const name = this.data.name + const mobile = this.data.mobile + if (!name || !mobile) { + wx.showToast({ title: '请填写完整信息', icon: 'none' }) + return + } + WXAPI.fxApply(wx.getStorageSync('token'), name, mobile).then(res => { + if (res.code != 0) { + wx.showToast({ title: res.msg, icon: 'none' }) + return + } + wx.navigateTo({ url: "/pages/fx/apply-status" }) + }) +} +``` + +--- + +## 三、数据库表结构设计 + +### 3.1 商品相关表 + +#### 商品表(goods) +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int | 商品ID | +| name | varchar | 商品名称 | +| originalPrice | decimal | 原价 | +| minPrice | decimal | 最低价 | +| pic | varchar | 商品主图 | +| categoryId | int | 分类ID | +| status | int | 上架状态 | +| pingtuan | tinyint | 是否拼团商品 | +| kanjia | tinyint | 是否砍价商品 | + +#### 拼团活动表(pingtuan_activity) +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int | 活动ID | +| goodsId | int | 商品ID | +| pingtuanPrice | decimal | 拼团价格 | +| people | int | 成团人数 | +| startTime | datetime | 开始时间 | +| endTime | datetime | 结束时间 | +| autoGroup | tinyint | 是否自动成团 | + +#### 砍价活动表(kanjia_activity) +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int | 活动ID | +| goodsId | int | 商品ID | +| originalPrice | decimal | 原价 | +| bottomPrice | decimal | 底价 | +| stock | int | 库存 | +| maxHelpCount | int | 最大助力次数 | +| maxHelpPeople | int | 最大助力人数 | + +### 3.2 订单相关表 + +#### 订单表(orders) +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int | 订单ID | +| orderNo | varchar | 订单号 | +| userId | int | 用户ID | +| totalAmount | decimal | 订单总额 | +| status | int | 订单状态 | +| orderType | varchar | 订单类型(普通/拼团/砍价) | +| pingtuanId | int | 拼团ID(如为拼团订单) | +| kanjiaId | int | 砍价ID(如为砍价订单) | + +### 3.3 分销相关表 + +#### 分销员表(fx_seller) +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int | 分销员ID | +| userId | int | 用户ID | +| level | int | 分销等级 | +| name | varchar | 真实姓名 | +| mobile | varchar | 手机号 | +| status | int | 状态(待审核/已通过/已拒绝) | +| totalCommission | decimal | 累计佣金 | +| availableCommission | decimal | 可用佣金 | + +#### 分销关系表(fx_relation) +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int | 关系ID | +| userId | int | 用户ID | +| parentId | int | 上级分销员ID(一级) | +| grandParentId | int | 上上级分销员ID(二级) | + +#### 佣金记录表(fx_commission_log) +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int | 记录ID | +| sellerId | int | 分销员ID | +| orderId | int | 订单ID | +| amount | decimal | 佣金金额 | +| level | int | 佣金级别(1/2) | +| status | int | 状态(待结算/已结算/已提现) | + +--- + +## 四、关键接口说明 + +### 4.1 商品接口 +| 接口 | 方法 | 说明 | +|------|------|------| +| /shop/goods/list | GET | 获取商品列表 | +| /shop/goods/detail | GET | 获取商品详情 | +| /shop/goods/category/all | GET | 获取全部分类 | + +### 4.2 拼团接口 +| 接口 | 方法 | 说明 | +|------|------|------| +| /shop/goods/pingtuan/list | GET | 获取拼团商品列表 | +| /shop/goods/pingtuan/join | POST | 加入拼团 | +| /shop/goods/pingtuan/my | GET | 我的拼团列表 | + +### 4.3 砍价接口 +| 接口 | 方法 | 说明 | +|------|------|------| +| /shop/goods/kanjia/list | GET | 获取砍价商品列表 | +| /shop/goods/kanjia/join | POST | 发起砍价 | +| /shop/goods/kanjia/help | POST | 助力砍价 | +| /shop/goods/kanjia/info | GET | 砍价详情 | + +### 4.4 分销接口 +| 接口 | 方法 | 说明 | +|------|------|------| +| /distribution/apply | POST | 申请成为分销员 | +| /distribution/commission/log | GET | 佣金记录 | +| /distribution/withdraw/apply | POST | 申请提现 | + +--- + +## 五、功能模块兼容性设计 + +### 5.1 分销与拼团/砍价的打通 +- 分销员推广拼团/砍价商品,用户通过分销链接进入并下单后,分销员可正常获得佣金 +- 佣金计算基于实际支付金额(拼团价/砍价后的价格) +- 在订单创建时记录分销关系 + +```javascript +// 订单创建时记录分销关系 +if (wx.getStorageSync('referrer')) { + // 有分销推荐人,记录分销关系 + orderData.referrerId = wx.getStorageSync('referrer') +} +``` + +### 5.2 用户便捷成为分销员 +- 在拼团成功页、砍价成功页增加"成为分销员赚佣金"入口 +- 用户参与活动后引导成为分销员 + +--- + +## 六、部署与运行 + +### 6.1 环境准备 +1. 下载并安装[微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) +2. 注册[API工厂账号](https://www.it120.cc/?referrer=9436) + +### 6.2 后台配置 +1. 登录API工厂后台 +2. 工厂设置 → 数据克隆 → 商户ID填 9436 进行克隆(获取测试数据) +3. 系统设置 → 小程序设置,填写小程序AppID和AppSecret +4. 系统设置 → 支付设置,配置微信支付 + +### 6.3 前端配置 +修改 `config.js` 文件: +```javascript +module.exports = { + version: "2.1.0", + subDomain: "fireshop", // 改为你的subDomain + shareProfile: '百款精品商品,总有一款适合您', + goodsDetailSkuShowType: 0, +} +``` + +### 6.4 编译运行 +1. 在微信开发者工具中打开项目 +2. 勾选"使用npm模块" +3. 开启"增强编译" +4. 点击"编译"运行 + +### 6.5 小程序后台配置 +在微信公众平台配置服务器域名: +- request合法域名:`https://api.it120.cc` +- downloadFile合法域名:`https://api.it120.cc, https://wx.qlogo.cn` + +--- + +## 七、项目截图(示意) + +### 首页 +- 轮播图、导航、推荐商品、砍价专区、拼团专区 + +### 商品详情 +- 商品展示、规格选择、加入购物车、立即购买 + +### 拼团页面 +- 拼团商品、开团/参团、分享链接 + +### 砍价页面 +- 砍价进度、助力好友、分享助力 + +### 分销中心 +- 分销申请、佣金明细、我的团队、提现 + +--- + +## 八、注意事项 + +1. **直播功能**:如无直播权限,需在 `app.json` 中移除直播插件配置 +2. **充值提现**:微信审核时需隐藏,可通过后台参数 `RECHARGE_OPEN` 控制 +3. **图片显示**:iOS图片显示问题,全局搜索并注释掉 `console.dir` +4. **支付配置**:确保微信支付商户号与小程序AppID对应 + +--- + +## 九、技术支持 + +- 文档教程:https://www.kancloud.cn/thundersword/fire-shop-lite/ +- API文档:https://www.yuque.com/apifm/doc +- QQ交流群:878573318(口令:fire-shop-lite) + +--- + +## 十、开源协议 + +本项目基于开源协议发布,可自由使用和修改。