今天是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天,养成写日志的习惯;
勉励自己;