========1001============
一、聚合支付:
(1)打开支付弹窗的时候js传了一个参数过来:j
(2)生成支付二维码:
接口:/order/pay/qrcode
参数:id, 值上面的【j.preorder_id】取用
res= {
code_img_url: 二维码地址
}
(3)二维码(聚合支付)支付检查:
接口:/order/payinfo/read
参数:id, 值上面的【j.preorder_id】取用
这个检查本身我之前是设计到js完成的,不过后面发现破坏了封装的完整度且更复杂,所以适当的让原生配合达到高封装的目的。
res = {
pay_info:{
need_pay:这个订单用户是否真的用其他手机扫了二维码支付过了
}
}
(a)检查支付后,如果网络请求错误失败或者need_pay==101,隐藏二维码再显示支付方式列表,让用户再选择app支付。
(b) need_pay !=101 支付成功,回调js,action=guanerweimaAction
========0930============
openWeb: 打开网页,这个协议之前就有的。
json:{
title: 网页标题, 可放到顶部导航条标题处
url: 网页地址
}
一、过滤:
顶部菜单点击action=barAction, data=101到104
二、专区:
顶部菜单点击action=menuAction, data=index
倒计时准确来说是三种:
ui:{
countdown:{
// is_show==102 无任何活动信息或早就过期,直接不显示。
【is_show】: 是否展示倒计时区域101展示 102全部隐藏
【is_begin】: 当is_show=101的时候,有三种情况, 如下,
desc: 描述文字,其实就是is_begin=101为距开始,is_begin=102为距结束,is_begin=103为已结束
}
}
is_begin=101,距离活动开始还有多久,此时有倒计时。其中距开始为desc,你也可以自己写死,也可以用desc。(下图中顶部图里面有个大字后面会去掉,因为图不能自动适配)
is_begin=102,距离活动结束还有多久,此时有倒计时。其中距开始为desc,你也可以自己写死,也可以用desc。
s_begin=103,为已结束,此时没有倒计时。已结束文字你也可以自己写死,也可以用desc。
========0929============
一、搜索页面:
确定action=sureAction
清空action=clearAction
点标签action=tagclick, data={title: "标签名"}
二、收藏
删除的key是goods
refreshList 有page哦,我封装在父类的。
三、添加需求
图片数组什么时候给js,是 submitAction时作为参数传给js吗?
不是。
我们用输入框来做个类比,在js对应页面有一个p = {},空对象,他主要用来【实时收集】页面产生的数据。
当你在输入框输入zybtest,此时通过vmodel已经传输到了js里面的p对象了。输入p = {name:zybtest},此时已经完成了数据的收集。
同样的VM9Imgs,当用户点+号,选了3张图片后在VM9Imgs内部立马上传,VM9Imgs在post后得到了三个图片对象。也需要立即通过vmodel告诉js里面的p对象了。此时p = {name:zybtest,images:[1,2,3]}, 有三个图片对象。
此时用户点VM9Imgs三张图片上的叉叉,删除一张,VM9Imgs立即通过vmodel告诉js里面的p对象两个最新的对象(js不删除,你给我什么我就保存什么)。
最后你点submitAction的时候,数据js全部早就【收集】好了。此时不需要传任何参数。
========0928============
我的优惠券:我的页面优惠券数字处的action=youhuiquanAction
ui={
list:{
url 列表地址
params 参数,这是个数组,size=3
}
}
========0927============
一、积分抽奖:
ui={
prize:{ //奖品信息
image:{url: ""}, //图片
title:标题
points: //需要拼接下,需要积分:+points
number:需要拼接,剩余数量:+number
},
addr_str: 一会点击选取地址后显示选中的地址
}
点击选地址事件:xuandizhi
二、切换账号:这个页面是VMList
ui = {
list: [
{
image:{url:""} 头像
name: 名字
organization_name:机构名称
}
]
}
选中行切换账号,默认的itemclick
删除事件:deleteAction
下方点添加账号是原生的事件,弹出输入框的vmodel为:
用户名:name
密码:pwd
点取消按钮:原生自己关闭弹窗,太简单了js不干涉
点确定按钮action = saveAction,这里成功有回调,回调时关闭弹窗。
========0926-3============
以下是几个相对繁琐但不复杂的页面:
一、分类
描述:分类左侧一个VMList,右侧一个VMList,右侧列表有两种情况(之前分类我给了两种情况的页面)
(1)热门类商品,商品列表样式,数据由js控制。
(2)两级分类列表。数据由js控制。
ui={
cates: [ //左侧
{
title: 分类名字
sel: 是否选中, 101选中 其他为不选中
is_hot: 是否热门商品,101是热门有一个火标记,否则没有
}
],
is_top_ranking: 是否是商品列表模式,101是商品列表模式 102为二级分类模式
goods:[], //is_top_ranking=101取用的商品数据列表,数据和商品列表一样
areas: [ //二级分类模式 ,is_top_ranking=102取用
{
title: 分类标题
sub:[
{
title: //分类子item 的标题
image: {url: ""} //分类子item 的图片
}
]
}
] ,
}
页面点击事件:
因为左侧是VMList,所以左侧点击事件会触发默认的itemclick。
二、秒杀专区:
ui = {
top:{ //顶部导航条部分
title: 标题
title_image:{url: } //顶部背景图
},
menu: { // 顶部切换列表
arr: [], //里面放的都是标题文字字符串
init_index: 默认选中的索引值
},
list:{ 下面列表,列表是单列表,不是swiper,点击菜单只是更改列表参数
url: //地址
params: //地址
},
countdown:{ //倒计时局部UI(有两个UI,一种是倒计时,另外一种是无倒计时的描述文字)
is_show:是否显示这个倒计时局部UI,101显示,102不显示整个隐藏
is_begin:倒计时状态,101距离开始倒计时 102距离结束倒计时 103已结束
}
}
三、搜索:
vmodel: kw顶部输入框
ui:{
kw: 输入框需要显示的文字
hots:[], 热门搜索,字符串数组
histories: [], 历史搜索,字符串数组
}
四、过滤筛选:这可能是最后一个压轴页面:
ui:{
kw:顶部输入框的值
title: 顶部标题,动态的
list:{url: "", params:{}}, //列表地址,参数
bar:{ //筛选工具条状态
zhonghe: 101选中 102未选中
xiaoliang: 101选中 102未选中
jiage: 0无箭头 101向上箭头 102向下箭头
shaixuan: 101选中 102未选中
},
weburl: //侧边栏网页地址
webstatus://侧边栏网页显示状态 101显示(加个从右到左的动画最好了) 102不显示
}
页面事件:
action=refreshList, 刷新列表
action=filterAction, 筛选事件,直接转发给原生的js方法
========0926-2============
一、我的订单: 订单页面地址都一样,只有参数不一样
顶部菜单依次为:全部、待付款、待发货、待收货、退款退货、已完成、已取消
ui:{
init_index:默认选中的顶部的索引值
url: //公共的地址
params:[], //参数数组
}
action:{
refreshCurrentList: //刷新当前选中的列表
}
列表点击事件:
取消订单:quxiao
立即支付:pay
查看详情:xiangqing
确认收货:shouhuo
再次购买:zaicigoumai
查看物流:wuliu
我要售后:shouhou
二、售后订单: 订单页面地址都一样,只有参数不一样
顶部菜单依次为:处理中、已完成、已关闭
ui:{
init_index:默认选中的顶部的索引值
url: //公共的地址
params:[], //参数数组
}
三、发现:
ui:{
tuijian:{url:, params: } //推荐的地址和参数
jilu:{url:, params: } //记录的地址和参数
goumai:{url:, params: } //购买的地址和参数
}
在页面onShow的时候,把三个列表都刷新一下,因为可能有切换登录的情况,js不参与这个简单的操作了
========0926-1============
一、地址列表:
ui={
list:{ url: ""} //列表地址
}
//列表item
item: {
name:"" //名字
phone: "", //手机
address_str: "", //用户自定义输入地址
detail: "", // address_str + detail 拼接成完整的地址
is_default: "" //101默认地址, 102不是默认地址
}
二、新建地址:
vmodel:
名字 name
手机 phone(数字类键盘)
选地址事件:addrAction
详细地址:detail
是否默认地址:is_default
这里有个封装,本身这里是可以不用封装的,不过从长远来看,开关也属于表单类,可以复用。
快速封装VMSwitch,点击switch的时候,valueChange事件里面调用所属页面的js方法传递,类似VMTextField。
保存按钮事件:saveAction
ui: 地址可编辑,所以这个页面的表单需要填充值,其实和上面是一样的
ui={
addr:{
name:"", //名字
phone: "", //手机
detail:"", //城市
address_str:"", //用户自定义输入地址
is_default: "" //101默认地址, 102不是默认地址
}
}
三、采购需求列表:
1. ui={
list: {url: "'} , //列表
}
item={
title:"" //标题
manufacturer:厂商
price:价格
number:数量
time_str:有效期(列表不需要显示。直接显示,不需要格式化)
note:备注(列表不需要显示。直接显示,不需要格式化)
reply_status:回复状态101已回复 102未回复
reply:回复内容文字(列表最多显示三行)
image_arr:[
{url: ""},{url: ""},....
] 图片数组(列表不需要显示)
}
2. 采购需求点击可以查看详情和上面一样。
3. 新建采购(没有编辑功能):vid字段和上面还是一样的,不同的有
ui={
date_str: 显示选了时间后,js格式化后的值
}
选取有效期:timeAction
提交事件:submitAction
四、我的收藏:
ui={
list:{url: ""}
}
因为这个页面有列表单选、全选、删除。如果是我最开始的设计,这个页面会诸多限制和操作。不过现在js的宗旨就是不干涉原生实现,只操作逻辑,所以整个单选多选是原生实现的。
原生在各种骚操作之后,点击删除按钮的时候,告诉js当前选中了哪些行即可。
删除action=deleteAction, 数据=[ {id: 1}, ... ]
页面action = refreshList, 只有这个方法,主要用来刷新列表(记得刷新列表的,下面的全选正常来说应该不选中)
五、购物车:购物车较复杂,且和收藏页面较像。
购物车是非常重要的页面。他不是下拉类列表是VMList,数据是js高度控制的.
ui = {
list:[] //数据数组,字段和商品列表item一样
bar:{
total: 下面的总价
choose_all: 是否全选中了,101选中 102未选中
}
}
注意:这里因为购物车相对复杂,js控制了数据,包括当前item是否被选中也是js控制的,item.sel=101表示被选中,其他为不选中。
事件:
页面右上角有编辑,完成切换(对应页面悬浮条要切换UI),是原生自己内部完成。
js需要知道的(不需要给数据,js非常清楚选中了哪些):
全选:action=quanxuanAction
结算:action=jiesuanAction
删除:action=deleteAction
item:
item相对购物车多了这些内容:
(1)左侧有选中与否的按钮
(2)右侧有修改数量的+-号(中间不是输入框也是按钮,点击js会自动弹出chooseNum协议)
(3)每行下面有两排文字,买赠(买赠:mz_str)+换购(换购:hg_str)文字,如果没有就隐藏。
事件:点击左侧的选中与否的事件:chooseItem(直接调用cellAction)
点+号:jiaAction
点-号:jianAction
点中间数量:xiugaiAction
========0924============
一、我的发票:
ui={
list: {url: } //无参数
}
action:{
action: "refresh", //refresh表示刷新当前列表,当前页面只有这一个action,可不判断
params: {}, //新的刷新参数 ,列表需要记录
}
默认列表的item有封装的点击事件:itemclick,会自动弹出到发票详情
二:发票详情
ui={
data: {
image: {url} //发票图
}
}
右上角有个下载按钮事件:downloadAction
========0923============
一. 资料:资料只有头像,联系人,电话号码编辑,其他下面是显示。
头像上面有个透明按钮,点击事件: chooseImg
名称vmodel:cname
电话vmodel:phone
底部提交按钮事件:saveAction
ui={
user:{
image: {url: ""}, //头像
name: //名字,会员账号
cname: //联系人
phone: //手机
membership_type: //会员类型
organization_name://单位名称
quanxian: 经营权限(字多可换行)
organization_address://经营地址
}
}
二、资质证件:
这个页面目前是7个格子,建议做成gridview:
7个格子上有透明按钮:action=imgAction data=0-6
ui = {
certs:[ //数组7个成员,这里列一个
{
url: //图片地址
title: //标题(可能会换行)
date: //有效期(加个前缀,有效期:)
}
]
}
三、我的专属客服:
电话号码按钮事件:callAction
ui = {
kefu:{
name: //业务员
phone://手机
wechat: //微信
qq: //qq
}
}
四:第一个列表:财务流水
ui = {
liushui: {url: ""}, //列表接口地址,无参数
}
item和之前是一样的。
注:关于列表的注意点
(1)列表需要封装一个cellAction的方法,供里面的按钮直接快速调用所在activity的js方法
(2)封装的列表点击默认调用cellAction("itemclick")
比如后面的订单列表item点击了里面的取消订单按钮:cellAction("quxiao")
点击购买:cellAction("buyAction") ,就很简单。
五、系统设置:
退出登录事件:logoutAction
ui ={
// is_bind_wechat=="101"?"已绑定":"未绑定"
//未绑定#0063D1,已绑定#666666
is_bind_wechat: "101", //这里是状态,因为涉及颜色变化,所以这里返回了状态
}
========0922============
完善页面:
注: 这两个字段需要判断下我给了你这个key你才操作哦,可能我这次只给你城市。下次只给你类别。
ui = {
city_str: "", //城市字符串
membership_type_text: "", //注册类别字符串
}
我的页面:
事件:
(1)下方的九宫格按钮,action=menuAction, 用data区分,data从左到右上到下依次为0-10,共11个按钮
(2)订单:dingdanAction,data=0-4
(3) 积分:jifenAction
(4)切换账号:qiehuanAction
ui = {
user:{
image:{ url: ""}, //用户头像
name: "", //用户名
organization_name: "", //公司名
money: "", //账户余额
points: "", //积分
order101_num, order102_num, order103_num,order105_num, return_num: "", //红点数量,如果为空或0,需要隐藏红点
}
}
====================
修改密码:
原密码:pwd0
新密码:pwd1
确认密码:pwd2
确定事件:quedingAction
忘记密码:
用户名:name
手机:phone (注意键盘类型为数字键盘)
验证码:vcode (注意键盘类型为数字键盘) 获取验证码事件:codeAction
新密码: pwd
找回密码事件:zhaohuiAction
绑定账号页面:
用户名:name
密码: pwd(注意键盘类型为数字键盘)
绑定账号:bangdingAction
因为页面数据原因暂时不可到达,先按逻辑操作等待验证
注册第二步完善:
姓名:lxr
单位名称:organization_name
选择城市事件:xuanchengshi (没选的时候字是灰色,选了字是深色,我的设计是上面盖一个透明按钮,下面是个输入框)
选择单位类型事件:xuanleibie
推荐人:inviter
立即注册事件:zhuceAction
注册页面:
用户名:uname
手机号:phone(注意键盘类型为数字键盘)
验证码:vcode (注意键盘类型为数字键盘) 获取验证码事件:codeAction
密码:pwd
下一步:xiayibuAction
已有账号,直接登录事件:yiyouAction
注册协议事件: xieyiAction 先忽略,因为这里涉及H5页面
一、登录页面
1. 输入框:
用户名:name
密码:pwd
2.点击事件:
立即登录:dengluAction,点击后触发网络post请求。
我要注册:zhuceAction,点击后自动push到注册页面
忘记密码:wangjiAction,点击后自动push到忘记密码页面
底部微信登录:wxLoginAction。点击后触发第三方登录协议