OneShop商城开发笔记第1天

今天是2018年7月30日,最近身心疲惫,Oneshop商城开发被搁浅; 下午一觉睡到凌晨12点,醒了后无比清醒. 突然想做件具有程碑的事情; 把开发oneshop商城的点滴,每天记录下来,一来给自己定点目标,二来是记录下自己的工作历程.当成功时,每天的辛苦工作,不会被当成运运气;

之前参与设计制作过三四个网上商城的商业项目,但是老板运行的都不太好. 未来网上商城会覆盖各行业,所以比较有市场.自己之前都在考虑用别人的框架,但是个人有代码洁癖,不喜欢用别人的商城;所以自己根据之前的三四个项目,想写一套自己的代码;

基础价格介绍下:

1.thinkphp5 做接口开发, vue 做后台以及前台开发,app开发选用混合开发(apicloud);
代码已经写了很多天了.先放个思维导图总结下:


 附上之前的readme总结;

<pre>
Vue 踩坑指南:
1.Router keep-alive  缓存的组件 name属性必须要填写,而且要与路由中的name一致.
</pre>
<pre>
代码规范:
1:vue.js 中 created方法 以init开头
2:vue.js 中 工具类方法以_开头
3:方法/路由名:模块增删改查要以_edit结尾,删除要以_remove结尾,_lists,_sort...以此类推。不需要权限控制的方法要以Ajax结尾;
</pre>
2018-6-19 :动态路由方案:<br/>
<pre>
1.默认加载所有路由,在路由拦截器里面拦截路由.如果路由不允许访问,则调到403页面
2.后台菜单动态加载,并且标记不可用菜单
</pre>

<pre>
路由设计:
1.前端路由
 前端默认加载所有路由,只是通过显示隐藏菜单,按钮来控制权限.
 用户登录时,返回可以访问的路由,并存储到sessionStore['rules']里面;
  路由访问拦截器:每次路由跳转时检测本地可访问路由数组,如果该路由不在该数组中,需要跳转到403页面;
  每次请求服务器时,服务器也会检测路由规则
 2.后端路由
  后端路由在route.php中定义
  某些控制器,前置访问操作需要checkAuth时,需要查询数据库,访问用户是否有访问的权限; 
</pre>

2018-6-23 :用户管理方案:<br/>
<pre>
  每个用户都有一个scope:(int) ,if管理员scope=999,那么他login后,只能看到scope<999的用户列表
  这样,就可以防止普通管理员查看修改超级管理员的,
  如果管理员需要修改自己的密码,需要单独页面设置
  这里我先假设一个变量:
  创始人管理员scope:SUPER_ROOT:9999
  城市站平台管理员scope:SUPER_ROOT:999
  
  后台用户表 admin
  商户表 member
  用户表 user
  
  后台定义枚举,平台类,平台类型+city_id构建多城市多商户系统;
  class WebType
  {
      //商家平台
      const STORE = 1;
      //城市平台
      const CITY = 2;
      //总平台
      const SITE = 3;
  }
</pre>

2018-6-26 :按钮权限控制方案:<br/>
<pre>
 1:如果不想让其参与权限判断,需要在方法后缀加上Ajax字符串。vue tp5 分别会检测 路由,action方法。
 如果后缀是Ajax(不区分大小写)。那么会跳过权限检测【vue不会做路由检测,tp5不会做beforeaction检测】。
 2:按钮级别的权限验证,使用vue的minxis方式,写一些增删改的权限检测方法。这些方法返回ture,false来
 判断是否显示按钮控件;
 vue原理: 用户登陆时会读取到用户可访问的路由,并持久化到sessionStorage中。 minxis方法会解析sessionStorage
 中的可访问路由,例如访问到店铺分类列表时:获取当前的路由为storearea_lists,那么
 添加操作的路由应该为 storearea_edit. 
 删除操作的路由应该为 storearea_remove. 
 所以路由要根据一定的规则定义。并且tp5接口名称要跟vue路由一致;
</pre>

2018-7-9 :后台系统配置设计方案:<br/>
<pre>
 单独配置一张表放置所有的系统配置(onsp_config),并且使用group进行分组;
 CREATE TABLE `onsp_config` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '配置ID',
   `name` varchar(30) NOT NULL DEFAULT '' COMMENT '配置名称',
   `type` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '配置类型1文本2长文本3选择框4开关',
   `title` varchar(50) NOT NULL DEFAULT '' COMMENT '配置说明',
   `group` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '配置分组',
   `extra` varchar(255) NOT NULL DEFAULT '' COMMENT '配置值',
   `remark` varchar(100) NOT NULL DEFAULT '' COMMENT '配置说明',
   `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
   `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
   `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态',
   `value` text COMMENT '配置值',
   `sort` smallint(3) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
   PRIMARY KEY (`id`),
   UNIQUE KEY `uk_name` (`name`),
   KEY `type` (`type`),
   KEY `group` (`group`)
 ) ENGINE=MyISAM AUTO_INCREMENT=47 DEFAULT CHARSET=utf8;
 
 后台根据groupid +tab方式进行查询配置,在前段动态增加form对象以及属性.
 编辑时只需要把form对象中对象提交即可; form对象形式为 key=>config.name  value=>config.value;
 后台接收到post[data]  得到 [name1=>value1,name2=>value2,...] 数组,遍历保存即可;
 //----------总结
 多城市系统太过庞大,现阶段做单城市+多商户系统;
 后期遇到city_id,web_type设置默认1,'CITY'即可
</pre>


2018-7-25 :商户/城市平台设计方案:<br/>
<pre>
商户平台的管理员分组权限由城市平台控制,这样对商户平台来说比较简单一些;只需要城市设置好一系列的管理员分组如订单管理员,商品管理员,
商户平台不需要再配置权限,添加管理员时,只需要选择对应的权限分组即可;
设置城市超级管理员分组group=1,商户超级管理员分组group=2并且,这两个分组不可编辑删除.
1.后台登录后,localStorage缓存 access_token,以及info;
info包括['uid','city_id', 'web_type','group','issuper']
2.后台操作按钮判断是否是管理员如果 info.issuper==1 则 hasRules 返回true;
3.后台权限以及管理员分组有2个类型,web_type=1时,为商户平台的后台权限以及管理员分组,web_type=2 时为城市平台;
存储在一个表中,用web_type区分;

</pre>

<pre>
<h5>后期需要解决</h5>
1.单城市系统完成后,如何做多城市架构?
  1.1 多城市支付如何解决,一个域名对应一个网站. 如果做子域名支付,该如何设置.例如
  zk.tcguanzhu.com ---> 周口负责人的微信服务号收款;
  zz.tcguanzhu.com ---> 郑州负责人的微信服务号收款
  系统代码公用一套,数据库也公用一套;
   
</pre>

开山之贴已经发出,希望自己能熬过21天,养成写日志的习惯;

勉励自己;

猜你喜欢

转载自blog.csdn.net/wsxc451/article/details/81294588