From d566edc456eefca371d9cfaa66bcb3b6821a90b2 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 27 Mar 2018 21:02:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 41 ++++++++++++++++---- doc/3.md | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 424996df..8ef8eb1d 100644 --- a/README.md +++ b/README.md @@ -52,15 +52,31 @@ litemall ![](doc/pic/4.png) * 会员管理 - -* 商场管理 - + * 会员管理 + * 收货地址管理 + * 会员收藏 + * 会员足迹 + * 搜索历史 + * 购物车 +* 商城管理 + * 区域配置 + * 品牌制造商 + * 订单管理 + * 商品类目 + * 通用问题 + * 关键词 * 商品管理 - + * 商品管理 + * 商品参数 + * 商品规格 + * 货品管理 + * 用户评论 * 推广管理 - + * 广告列表 + * 专题管理 * 系统管理 - + * 管理员 + * 对象存储 云演示 == @@ -124,4 +140,15 @@ litemall 用户有问题或者好的建议可以用Issues反馈交流,请给出详细信息,本人会尽可能解决。 * 如果问题是共性问题(如代码bug或文档不全),本人会及时解决。 - * 如果问题是个人问题(如用户了解不深入或者没有相关技术),请见谅(本人也是百度和谷歌)。 \ No newline at end of file + * 如果问题是个人问题(如用户了解不深入或者没有相关技术),请见谅(本人也是百度和谷歌)。 + +贡献 +== + +任何形式的贡献都欢迎,包括: + +* Issue里面报告的BUG +* Issue里面对业务或技术的讨论 +* Pull Request +* 对文档的意见或补充 +* 其他任何有意义本项目的行为 \ No newline at end of file diff --git a/doc/3.md b/doc/3.md index 8f229a9f..e83b11c8 100644 --- a/doc/3.md +++ b/doc/3.md @@ -45,3 +45,114 @@ 注意 > 目前litemall-wx项目代码基于nideshop-mini-program的commit版本[acbf6276eb27abc6a48887cddd223d7261f0088e](https://github.com/tumobi/nideshop-mini-program/commit/acbf6276eb27abc6a48887cddd223d7261f0088e)。由于改动变化较大,因此之后litemall-wx将独立开发,nideshop-mini-program的跟新不一定会合并到litemall-wx中。 + +### 3.2.1 业务API切换 + +业务API存放在`config/api.js`。 + +但是可以发现这样的代码: + +``` +// 本机开发时使用 +var WxApiRoot = 'http://localhost:8082/wx/'; +// 局域网测试使用 +// var WxApiRoot = 'http://192.168.0.101:8082/wx/'; +// 云平台部署时使用 +// var WxApiRoot = 'http://122.152.206.172:8082/wx/'; +``` + +也就是说这里存在三种类型的API服务地址,这里是考虑到开发存在三种情况: + +1. 本机开发时,localhost是当前开发机的地址; +2. 手机预览时,192.168.0.101是开发机的IP地址; +3. 当后台部署在云主机中时,122.152.206.172是云主机的IP地址; +4. 此外,更最重要的是,如果小程序正式部署时,这里的地址必须是域名, +而不能是IP地址。 + +因此,开发阶段用户可以按照具体情况切换1,2或3的选项。 + +### 3.2.2 登陆 + +按照官方文档,开发者采用`wx.login`方法即可实现登陆操作; +然而,由于`wx.login`只能返回临时登陆凭证`code`,从服务器也只能返回对应的sessionId, +因此虽然已经可以视作登陆,但是在小程序中不能显示有意义的登陆状态, +因此实际很多小程序是继续采用`wx.getUserInfo`来进一步请求用户信息。 + +因此本模块中,用户的登陆状态也是由`wx.login`和`wx.getUserInfo`组成。 + +#### 3.2.2.1 登陆检测 + +用户可以采用`user.checkLogin`来检查是否`已登陆`,而其检测逻辑是: + +1. 可以从storage获取`userInfo`和`token` +2. 同时`wx.checkSession`也成功。 + +#### 3.2.2.2 登陆时机 + +登陆请求用户信息的时机存在两种设计: + +1. 一种是小程序加载时,即申请用户信息,这种实现较简单; +2. 另外一种是小程序加载时不需要,但是小程序用户需要真正用户信息时才申请用户信息, +而这种实现较复杂。 + +目前采用第二张实现,可以分成两种情况: + +* 用户主动登陆 + + 用户主动登陆,指的是`我的`页面中用户没有登陆显示`点击登陆`的效果。 + +* 用户被动登陆 + + 用户被动登陆,指的是用户想购买商品或者需要用户登陆才能操作的行为, + 此时因为向服务器请求时token没有设置,因此服务器拒绝用户的请求,同时返回`401`业务代码。 + + 目前需要检测用户登陆的页面有: + + * 购物车 + * 我的主页 + +讨论: +> 对于第二张情况,原nideshop-mini-program项目是采取一种自动登陆的方式。 +> 这里则采用跳转登录页面的方式。 + +#### 3.2.2.3 登陆操作 + +如前面讨论,这里的登陆操作实际包含两个操作`wx.login`和`wx.getUserInfo`。 +用户可以采用`user.loginByWeixin`来进行登陆操作。 + +按照官网文档,用户登陆前应该检测以下,来避免频繁无意义的登陆操作, +因此较合适的做法如下所示: + +``` + user.checkLogin().catch(() => { + + user.loginByWeixin().then(res => { + this.setData({ + userInfo: res.data.userInfo, + }); + }).catch((err) => { + util.showErrorToast('登陆失败'); + }); + + }); +``` + +#### 3.2.2.4 登陆拒绝授权 + +还存在一个问题,当用户登陆时,会出现"微信授权"的对话框。 +如果用户选择”拒绝“,那么之后用户的登陆操作总是失败的。 + +目前的做法是,用户拒绝授权后,如果用户登陆失败,则返回信息框, +提醒用户“请退出,左滑删除小程序,然后重新进入进行授权”。 + +### 3.2.3 立即购买和放入购物车 + +### 3.2.3 + +### 3.2.4 storage使用 + +本模块中采用storage来存储一些数据,以及组件间进行通信。 + +#### 3.2.4.1 userInfo和token + +#### 3.2.4.2 \ No newline at end of file