跳到主要内容

运费模板架构

规范定义

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
METHODGET

参数

返回值

一个数组:

[
{
"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 字段