运费模板架构
规范定义
area规范定义
{
"1": {
"local_name":"北京","parent_id":0,selected_all:true,level:1,
},
"2":{
"local_name":"河北省","parent_id":0,selected_all:false,level:1,
"children":
{
"21":{"local_name":"唐山市","parent_id":2,selected_all:true,level:2},
"22":{"local_name":"承德市","parent_id":2,selected_all:true,level:2},
"23":{
"local_name":"石家庄市","parent_id":2,selected_all:false,level:2,
"children":{"24":{...},"25":{...}}
}
}
}
}
regions规范定义
[
{"name":"北京市"},
{"name":"唐山市","name":"石家庄市",children:[{"name":"古冶区"},{"name":"开平区"}] }
]
这个规范是前后端交互的重要规范,我们先定义在这里,在后面会用到。
模板地区名称显示逻辑
需求
一、如果是全省包含则只显示省名字,顿号隔开,如选择了河北省,山西省全省的所有地区:
河北省、山西省
二、如果某个省的某部分市没有被选择,则直接显示被选择的市,如河北省只选择了三个市,山西省选择了全省,则显示为:
石家庄市、唐山市、秦皇岛市、山西省
三、如果某个市只选择了某些地区,则在此市后面用括号显示出已经选择的市:
石家庄市、唐山市(古冶区,开平区,丰南区)、秦皇岛市、山西省
快递模板列表API
路径
URL: | {seller-api}/seller/shops/ship-templates |
---|---|
METHOD | GET |
参数
无
返回值
一个数组:
[
{
"id": 1,
"name": "江浙沪包邮,其它15元",
"seller_id": 15,
"type":1,//1 重量算运费 2 计件算运费
"items": [
//一行规则 运费是0,续重1公斤,续费5元
{
first_company: 1000 , //首重或首计
first_price: "0" , //运费
continued_company: 1000, //续件或续重
continued_price: "5", //续费
regions: 《regions规范》
},
//另一个规则 运费是15,续重1公斤,续费5元
{
first_company: 1000 , //首重或首计
first_price: "15" , //运费
continued_company: 1000, //续件或续重
continued_price: "5", //续费
regions: 《regions规范》
}
]
},
]
前端处理逻辑
循环regions,如果有children,则加括号显示出来,没有直接顿号加后面的地区名。
后端处理逻辑
就是要将《area规范》的数据转为《regions规范》的数据
相应的逻辑为:
1、如果是省级且selected_all==true直接显示名字,如果selected_all==false,不显示省级名字,继续处理市
2、如果是市级且selected_all==true直接显示名字,如果selected_all==false,先显示市,再显示子。
3、只处理到第三级,也就是第三级一定显示在某个市区的括号里了。
模板的编辑
获取模板数据API:
/seller/shops/ship-templates/{id}
返回值
{
"id": 1,
"name": "江浙沪包邮,其它15元",
"seller_id": 15,
"type":1,//1 重量算运费 2 计件算运费
"items": [
//一行规则 运费是0,续重1公斤,续费5元
{
first_company: 1000 , //首重或首计
first_price: "0" , //运费
continued_company: 1000, //续件或续重
continued_price: "5", //续费
regons:《regons规范》,
area:《area规范》
},
//另一个规则 运费是15,续重1公斤,续费5元
{
first_company: 1000 , //首重或首计
first_price: "15" , //运费
continued_company: 1000, //续件或续重
continued_price: "5", //续费
regons:《regons规范》,
area:《area规范》
}
]
}
其中的《regions规范》数据用来显示地区名字
《area规范》的数据在点击某一行规则的编辑时弹出的地区选择器要使用。
模板的保存
前端处理逻辑:
要将如下参数递给服务器端
{
"id": 1,
"name": "江浙沪包邮,其它15元",
"seller_id": 15,
"type":1,//1 重量算运费 2 计件算运费
"items": [
//一行规则 运费是0,续重1公斤,续费5元
{
first_company: 1000 , //首重或首计
first_price: "0" , //运费
continued_company: 1000, //续件或续重
continued_price: "5", //续费
area:《area规范》
},
//另一个规则 运费是15,续重1公斤,续费5元
{
first_company: 1000 , //首重或首计
first_price: "15" , //运费
continued_company: 1000, //续件或续重
continued_price: "5", //续费
area:《area规范》
}
]
}
后端处理逻辑
1、保存 《area规范》 到相应字段
2、将《area规范》中的数据转为地区id,逗号隔开,存在area_id字段中。
表结构变化:
es_ship_template表去掉detial字段
es_ship_template_child表去掉 area_json 字段