Browse Source

更新文档。

Junling Bu 7 years ago
parent
commit
d566edc456
2 changed files with 145 additions and 7 deletions
  1. 34 7
      README.md
  2. 111 0
      doc/3.md

+ 34 - 7
README.md

@@ -52,15 +52,31 @@ litemall
 ![](doc/pic/4.png)    
 
 * 会员管理
-
-* 商场管理
-
+  * 会员管理
+  * 收货地址管理
+  * 会员收藏
+  * 会员足迹
+  * 搜索历史
+  * 购物车
+* 商城管理
+  * 区域配置
+  * 品牌制造商
+  * 订单管理
+  * 商品类目
+  * 通用问题
+  * 关键词
 * 商品管理
-
+  * 商品管理
+  * 商品参数
+  * 商品规格
+  * 货品管理
+  * 用户评论
 * 推广管理
-
+  * 广告列表
+  * 专题管理
 * 系统管理
-
+  * 管理员
+  * 对象存储
 
 云演示
 ==
@@ -124,4 +140,15 @@ litemall
 
 用户有问题或者好的建议可以用Issues反馈交流,请给出详细信息,本人会尽可能解决。
  * 如果问题是共性问题(如代码bug或文档不全),本人会及时解决。
- * 如果问题是个人问题(如用户了解不深入或者没有相关技术),请见谅(本人也是百度和谷歌)。
+ * 如果问题是个人问题(如用户了解不深入或者没有相关技术),请见谅(本人也是百度和谷歌)。
+ 
+贡献
+==
+
+任何形式的贡献都欢迎,包括:
+
+* Issue里面报告的BUG
+* Issue里面对业务或技术的讨论
+* Pull Request
+* 对文档的意见或补充
+* 其他任何有意义本项目的行为

+ 111 - 0
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