Repository: bailicangdu/node-elm
Branch: master
Commit: 32ea999c63f5
Files: 91
Total size: 745.4 KB
Directory structure:
gitextract_pq5b2d9_/
├── .babelrc
├── .gitignore
├── API.md
├── COPYING
├── InitData/
│ ├── activity.js
│ ├── category.js
│ ├── cities.js
│ ├── delivery.js
│ ├── entry.js
│ ├── explain.js
│ ├── hongbao.js
│ ├── payments.js
│ ├── rate.js
│ └── remark.js
├── README.md
├── app.js
├── config/
│ ├── .gitignore
│ ├── default.js
│ └── development.js
├── controller/
│ ├── admin/
│ │ └── admin.js
│ ├── member/
│ │ └── vipcart.js
│ ├── promotion/
│ │ └── hongbao.js
│ ├── shopping/
│ │ ├── category.js
│ │ ├── food.js
│ │ └── shop.js
│ ├── statis/
│ │ └── statis.js
│ ├── ugc/
│ │ └── rating.js
│ ├── v1/
│ │ ├── address.js
│ │ ├── captchas.js
│ │ ├── carts.js
│ │ ├── cities.js
│ │ ├── order.js
│ │ ├── remark.js
│ │ └── search.js
│ ├── v2/
│ │ ├── entry.js
│ │ └── user.js
│ └── v3/
│ └── explain.js
├── ecosystem.config.js
├── index.js
├── logs/
│ └── .gitignore
├── middlewares/
│ ├── check.js
│ ├── history.js
│ ├── statistic.js
│ └── w2-proxy
├── models/
│ ├── admin/
│ │ └── admin.js
│ ├── bos/
│ │ └── order.js
│ ├── ids.js
│ ├── promotion/
│ │ └── hongbao.js
│ ├── shopping/
│ │ ├── activity.js
│ │ ├── category.js
│ │ ├── delivery.js
│ │ ├── food.js
│ │ └── shop.js
│ ├── statis/
│ │ └── statis.js
│ ├── ugc/
│ │ └── rating.js
│ ├── v1/
│ │ ├── address.js
│ │ ├── cart.js
│ │ ├── cities.js
│ │ ├── payments.js
│ │ └── remark.js
│ ├── v2/
│ │ ├── entry.js
│ │ ├── user.js
│ │ └── userInfo.js
│ └── v3/
│ └── explain.js
├── mongodb/
│ └── db.js
├── package.json
├── prototype/
│ ├── addressComponent.js
│ └── baseComponent.js
├── public/
│ ├── elm/
│ │ └── static/
│ │ ├── css/
│ │ │ └── app.css
│ │ └── js/
│ │ ├── app.js
│ │ ├── manifest.js
│ │ └── vendor.js
│ ├── img/
│ │ └── .gitignore
│ └── index.html
├── routes/
│ ├── admin.js
│ ├── bos.js
│ ├── eus.js
│ ├── index.js
│ ├── member.js
│ ├── payapi.js
│ ├── promotion.js
│ ├── shopping.js
│ ├── statis.js
│ ├── ugc.js
│ ├── v1.js
│ ├── v2.js
│ ├── v3.js
│ └── v4.js
├── todo.txt
└── views/
├── home.ejs
└── index.html
================================================
FILE CONTENTS
================================================
================================================
FILE: .babelrc
================================================
{
"presets": ["stage-3"],
"plugins": [
"transform-async-to-generator",
"transform-es2015-modules-commonjs",
"transform-export-extensions"
]
}
================================================
FILE: .gitignore
================================================
/node_modules
coverage
package-lock.json
.DS_Store
**/.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
================================================
FILE: API.md
================================================
# node-elm 接口文档
```
baseUrl: https://elm.cangdu.org
```
## 目录:
[1、获取城市列表](#1获取城市列表)
[2、获取所选城市信息](#2获取所选城市信息)
[3、搜索地址](#3搜索地址)
[4、根据经纬度详细定位](#4根据经纬度详细定位)
[5、食品分类列表](#5食品分类列表)
[6、获取商铺列表](#6获取商铺列表)
[7、搜索餐馆](#7搜索餐馆)
[8、获取所有商铺分类列表](#8获取所有商铺分类列表)
[9、获取配送方式](#9获取配送方式)
[10、商家属性活动列表](#10商家属性活动列表)
[11、餐馆详情](#11餐馆详情)
[12、上传图片](#12上传图片)
[13、添加餐馆](#13添加餐馆)
[14、添加食品种类](#14添加食品种类)
[15、添加食品](#15添加食品)
[16、获取食品列表](#16获取食品列表)
[17、获取评价信息](#17获取评价信息)
[18、获取评价分数](#18获取评价分数)
[19、获取评价分类](#19获取评价分类)
[20、加入购物车](#20加入购物车)
[21、获取备注信息](#21获取备注信息)
[22、获取收货地址列表](#22获取收货地址列表)
[23、获取验证码](#23获取验证码)
[24、获取用户信息](#24获取用户信息)
[25、登录](#25登录)
[26、退出](#26退出)
[27、修改密码](#27修改密码)
[28、增加收货地址](#28增加收货地址)
[29、删除收货地址](#29删除收货地址)
[30、下单](#30下单)
[31、订单列表](#31订单列表)
[32、订单详情](#32订单详情)
[33、服务中心](#33服务中心)
[34、可用红包](#34可用红包)
[35、过期红包](#35过期红包)
[36、兑换红包](#36兑换红包)
[37、管理员登录](#37管理员登录)
[38、管理员退出登录](#38管理员退出登录)
[39、管理员信息](#39管理员信息)
[40、获取某日API请求量](#40获取某日API请求量)
[41、获取所有API请求量](#41获取所有API请求量)
[42、获取某天用户注册量](#42获取某天用户注册量)
[43、获取所有用户注册量](#43获取所有用户注册量)
[44、获取某天订单数量](#44获取某天订单数量)
[45、获取所有订单数量](#45获取所有订单数量)
[46、管理员列表](#46管理员列表)
[47、获取管理员数量](#47获取管理员数量)
[48、获取店铺食品种类](#48获取店铺食品种类)
[49、获取餐馆数量](#49获取餐馆数量)
[50、更新餐馆](#50更新餐馆)
[51、删除餐馆](#51删除餐馆)
[52、获取食品列表](#52获取食品列表)
[53、获取食品数量](#53获取食品数量)
[54、获取食品种类详情](#54获取食品种类详情)
[55、更新食品](#55更新食品)
[56、删除食品](#56删除食品)
[57、获取用户列表](#57获取用户列表)
[58、获取订单列表](#58获取订单列表)
[59、获取地址信息](#59获取地址信息)
[60、获取用户分布信息](#60获取用户分布信息)
[61、获取某天管理员注册量](#61获取某天管理员注册量)
## 接口列表:
### 1、获取城市列表
#### 请求URL:
```
https://elm.cangdu.org/v1/cities
```
#### 示例:
[https://elm.cangdu.org/v1/cities?type=guess](https://elm.cangdu.org/v1/cities?type=guess)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|type |Y |string |guess:定位城市, hot:热门城市, group:所有城市 |
#### 返回示例:
```javascript
{
id: 1,
name: "上海",
abbr: "SH",
area_code: "021",
sort: 1,
latitude: 31.23037,
longitude: 121.473701,
is_map: true,
pinyin: "shanghai"
}
```
### 2、获取所选城市信息
#### 请求URL:
```
https://elm.cangdu.org/v1/cities/:id
```
#### 示例:
[https://elm.cangdu.org/v1/cities/1](https://elm.cangdu.org/v1/cities/1)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|id |Y |int |城市id |
#### 返回示例:
```javascript
{
id: 1,
name: "上海",
abbr: "SH",
area_code: "021",
sort: 1,
latitude: 31.23037,
longitude: 121.473701,
is_map: true,
pinyin: "shanghai"
}
```
### 3、搜索地址
#### 请求URL:
```
https://elm.cangdu.org/v1/pois
```
#### 示例:
[https://elm.cangdu.org/v1/pois?city_id=1&keyword=迪士尼&type=search](https://elm.cangdu.org/v1/pois?city_id=1&keyword=%E8%BF%AA%E5%A3%AB%E5%B0%BC&type=search)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|city_id |Y |int |城市id |
|keyword |Y |string |搜索关键词 |
|type |N |string |搜索类型,默认为search |
#### 返回示例:
```javascript
[
{
name: "上海迪士尼乐园",
address: "上海市浦东新区申迪西路753号",
latitude: 31.14419,
longitude: 121.66034,
geohash: "31.14419,121.66034"
},
{
name: "迪士尼",
address: "上海市浦东新区妙境路1118号家乐福川沙店1层",
latitude: 31.18183,
longitude: 121.69279,
geohash: "31.18183,121.69279"
},
... //共10条数据
]
```
### 4、根据经纬度详细定位
#### 请求URL:
```
https://elm.cangdu.org/v2/pois/:geohash
```
#### 示例:
[https://elm.cangdu.org/v2/pois/31.22967,121.4762](https://elm.cangdu.org/v2/pois/31.22967,121.4762)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|geohash |Y |string |经纬度 |
#### 返回示例:
```javascript
{
address: "上海市黄浦区西藏中路",
city: "上海市",
geohash: "31.22967,121.4762",
latitude: "31.22967",
longitude: "121.4762",
name: "黄浦区上海人民广场"
}
```
### 5、食品分类列表
#### 请求URL:
```
https://elm.cangdu.org/v2/index_entry
```
#### 示例:
[https://elm.cangdu.org/v2/index_entry](https://elm.cangdu.org/v2/index_entry)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
[
{
id: 1,
is_in_serving: true,
description: "0元早餐0起送,每天都有新花样。",
title: "预订早餐",
link: "",
image_url: "/d/49/7757ff22e8ab28e7dfa5f7e2c2692jpeg.jpeg",
icon_url: "",
title_color: "",
__v: 0
},
{
id: 65,
is_in_serving: true,
description: "",
title: "土豪推荐",
image_url: "/d/49/7757ff22e8ab28e7dfa5f7e2c2692jpeg.jpeg",
link: "",
icon_url: "",
title_color: "",
__v: 0
},
... 共n条数据
]
```
### 6、获取商铺列表
#### 请求URL:
```
https://elm.cangdu.org/shopping/restaurants
```
#### 示例:
[https://elm.cangdu.org/shopping/restaurants?latitude=31.22967&longitude=121.4762](https://elm.cangdu.org/shopping/restaurants?latitude=31.22967&longitude=121.4762)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|latitude |Y |string |纬度|
|longitude |Y |string |经度|
|offset |N |int |跳过多少条数据,默认0|
|limit |N |int |请求数据的数量,默认20|
|restaurant_category_id |N |int |餐馆分类id|
|order_by |N |int |排序方式id: 1:起送价、2:配送速度、3:评分、4: 智能排序(默认)、5:距离最近、6:销量最高|
|delivery_mode |N |array |配送方式id|
|support_ids |N |array |餐馆支持特权的id|
|restaurant_category_ids |N |array |餐馆分类id|
#### 返回示例:
```javascript
[
{
name: "肯德基",
address: "上海市宝山区淞宝路155弄18号星月国际商务广场1层",
id: 1,
latitude: 31.38098,
longitude: 121.50146,
location: [
121.50146,
31.38098
],
phone: "1232313124324",
category: "快餐便当/简餐",
supports: [
{
description: "已加入“外卖保”计划,食品安全有保障",
icon_color: "999999",
icon_name: "保",
id: 7,
name: "外卖保",
_id: "591bec73c2bbc84a6328a1e5"
},
{
description: "准时必达,超时秒赔",
icon_color: "57A9FF",
icon_name: "准",
id: 9,
name: "准时达",
_id: "591bec73c2bbc84a6328a1e4"
},
{
description: "该商家支持开发票,请在下单时填写好发票抬头",
icon_color: "999999",
icon_name: "票",
id: 4,
name: "开发票",
_id: "591bec73c2bbc84a6328a1e3"
}
],
status: 0,
recent_order_num: 615,
rating_count: 389,
rating: 1.6,
promotion_info: "他依然有人有人有人有人有人",
piecewise_agent_fee: {
tips: "配送费约¥5"
},
opening_hours: [
"8:30/20:30"
],
license: {
catering_service_license_image: "",
business_license_image: ""
},
is_new: true,
is_premium: true,
image_path: "/img/shop/15c1513a00615.jpg",
identification: {
registered_number: "",
registered_address: "",
operation_period: "",
licenses_scope: "",
licenses_number: "",
licenses_date: "",
legal_person: "",
identificate_date: null,
identificate_agency: "",
company_name: ""
},
float_minimum_order_amount: 20,
float_delivery_fee: 5,
distance: "19.5公里",
order_lead_time: "40分钟",
description: "好吃的",
delivery_mode: {
color: "57A9FF",
id: 1,
is_solid: true,
text: "蜂鸟专送"
},
activities: [
{
icon_name: "减",
name: "满减优惠",
description: "满30减5,满60减8",
icon_color: "f07373",
id: 1,
_id: "591bec73c2bbc84a6328a1e7"
},
{
icon_name: "特",
name: "优惠大酬宾",
description: "是对冯绍峰的上市房地产",
icon_color: "EDC123",
id: 2,
_id: "591bec73c2bbc84a6328a1e6"
}
],
}
... 共20条数据
]
```
### 7、搜索餐馆
#### 请求URL:
```
https://elm.cangdu.org/v4/restaurants
```
#### 示例:
[https://elm.cangdu.org/v4/restaurants?geohash=31.22967,121.4762&keyword=肯德基](https://elm.cangdu.org/v4/restaurants?geohash=31.22967,121.4762&keyword=肯德基)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|geohash |Y |string |经纬度|
|keyword |Y |string |关键词|
#### 返回示例:
```javascript
[
{
name: "肯德基",
address: "上海市宝山区淞宝路155弄18号星月国际商务广场1层",
id: 1,
latitude: 31.38098,
longitude: 121.50146,
location: [
121.50146,
31.38098
],
phone: "1232313124324",
category: "快餐便当/简餐",
supports: [
{
description: "已加入“外卖保”计划,食品安全有保障",
icon_color: "999999",
icon_name: "保",
id: 7,
name: "外卖保",
_id: "591bec73c2bbc84a6328a1e5"
},
{
description: "准时必达,超时秒赔",
icon_color: "57A9FF",
icon_name: "准",
id: 9,
name: "准时达",
_id: "591bec73c2bbc84a6328a1e4"
},
{
description: "该商家支持开发票,请在下单时填写好发票抬头",
icon_color: "999999",
icon_name: "票",
id: 4,
name: "开发票",
_id: "591bec73c2bbc84a6328a1e3"
}
],
status: 0,
recent_order_num: 615,
rating_count: 389,
rating: 1.6,
promotion_info: "他依然有人有人有人有人有人",
piecewise_agent_fee: {
tips: "配送费约¥5"
},
opening_hours: [
"8:30/20:30"
],
license: {
catering_service_license_image: "",
business_license_image: ""
},
is_new: true,
is_premium: true,
image_path: "/img/shop/15c1513a00615.jpg",
identification: {
registered_number: "",
registered_address: "",
operation_period: "",
licenses_scope: "",
licenses_number: "",
licenses_date: "",
legal_person: "",
identificate_date: null,
identificate_agency: "",
company_name: ""
},
float_minimum_order_amount: 20,
float_delivery_fee: 5,
distance: "19.5公里",
order_lead_time: "40分钟",
description: "好吃的",
delivery_mode: {
color: "57A9FF",
id: 1,
is_solid: true,
text: "蜂鸟专送"
},
activities: [
{
icon_name: "减",
name: "满减优惠",
description: "满30减5,满60减8",
icon_color: "f07373",
id: 1,
_id: "591bec73c2bbc84a6328a1e7"
},
{
icon_name: "特",
name: "优惠大酬宾",
description: "是对冯绍峰的上市房地产",
icon_color: "EDC123",
id: 2,
_id: "591bec73c2bbc84a6328a1e6"
}
],
}
... 共n条数据
]
```
### 8、获取所有商铺分类列表
#### 请求URL:
```
https://elm.cangdu.org/shopping/v2/restaurant/category
```
#### 示例:
[https://elm.cangdu.org/shopping/v2/restaurant/category](https://elm.cangdu.org/shopping/v2/restaurant/category)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|latitude |N |string |纬度 |
|longitude |N |string |经度 |
#### 返回示例:
```javascript
[
{
count: 0,
id: 248,
image_url: "0e07558e305abfb2618ae760142222f9png",
level: 1,
name: "鲜花蛋糕",
sub_categories: [
{
count: 0,
id: 248,
image_url: "3edf3f4ef8ed1d300896c5b9178685ebpng",
level: 1,
name: "全部鲜花蛋糕",
_id: "591af9a4c434cf6a823d63d8"
},
{
count: 0,
id: 251,
image_url: "cf598de7338b4bf9dd2924736c4ec9d2png",
level: 2,
name: "鲜花",
_id: "591af9a4c434cf6a823d63d7"
},
{
count: 0,
id: 249,
image_url: "ac94b005c97ef158282326cb49389893png",
level: 2,
name: "蛋糕",
_id: "591af9a4c434cf6a823d63d6"
},
{
count: 0,
id: 250,
image_url: "512232422a83e25a2c0a5588b7b6e730png",
level: 2,
name: "面包",
_id: "591af9a4c434cf6a823d63d5"
}
],
}
...共n条数据
]
```
### 9、获取配送方式
#### 请求URL:
```
https://elm.cangdu.org/shopping/v1/restaurants/delivery_modes
```
#### 示例:
[https://elm.cangdu.org/shopping/v1/restaurants/delivery_modes](https://elm.cangdu.org/shopping/v1/restaurants/delivery_modes)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|latitude |N |string |纬度 |
|longitude |N |string |经度 |
#### 返回示例:
```javascript
[
{
color: "57A9FF",
id: 1,
is_solid: true,
text: "蜂鸟专送",
__v: 0
}
]
```
### 10、商家属性活动列表
#### 请求URL:
```
https://elm.cangdu.org/shopping/v1/restaurants/activity_attributes
```
#### 示例:
[https://elm.cangdu.org/shopping/v1/restaurants/activity_attributes](https://elm.cangdu.org/shopping/v1/restaurants/activity_attributes)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|latitude |N |string |纬度 |
|longitude |N |string |经度 |
#### 返回示例:
```javascript
[
{
description: "可使用支付宝、微信、手机QQ进行在线支付",
icon_color: "FF4E00",
icon_name: "付",
id: 3,
name: "在线支付",
ranking_weight: 2,
__v: 0
},
...共n条数据
]
```
### 11、餐馆详情
#### 请求URL:
```
https://elm.cangdu.org/shopping/restaurant/:shopid
```
#### 示例:
[https://elm.cangdu.org/shopping/restaurant/1](https://elm.cangdu.org/shopping/restaurant/1)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|shopid |Y |int |餐馆id |
#### 返回示例:
```javascript
{
name: "肯德基",
address: "上海市宝山区淞宝路155弄18号星月国际商务广场1层",
id: 1,
latitude: 31.38098,
longitude: 121.50146,
location: [
121.50146,
31.38098
],
phone: "1232313124324",
category: "快餐便当/简餐",
supports: [
{
description: "已加入“外卖保”计划,食品安全有保障",
icon_color: "999999",
icon_name: "保",
id: 7,
name: "外卖保",
_id: "591bec73c2bbc84a6328a1e5"
},
{
description: "准时必达,超时秒赔",
icon_color: "57A9FF",
icon_name: "准",
id: 9,
name: "准时达",
_id: "591bec73c2bbc84a6328a1e4"
},
{
description: "该商家支持开发票,请在下单时填写好发票抬头",
icon_color: "999999",
icon_name: "票",
id: 4,
name: "开发票",
_id: "591bec73c2bbc84a6328a1e3"
}
],
status: 0,
recent_order_num: 615,
rating_count: 389,
rating: 1.6,
promotion_info: "他依然有人有人有人有人有人",
piecewise_agent_fee: {
tips: "配送费约¥5"
},
opening_hours: [
"8:30/20:30"
],
license: {
catering_service_license_image: "",
business_license_image: ""
},
is_new: true,
is_premium: true,
image_path: "/img/shop/15c1513a00615.jpg",
identification: {
registered_number: "",
registered_address: "",
operation_period: "",
licenses_scope: "",
licenses_number: "",
licenses_date: "",
legal_person: "",
identificate_date: null,
identificate_agency: "",
company_name: ""
},
float_minimum_order_amount: 20,
float_delivery_fee: 5,
distance: "19.5公里",
order_lead_time: "40分钟",
description: "好吃的",
delivery_mode: {
color: "57A9FF",
id: 1,
is_solid: true,
text: "蜂鸟专送"
},
activities: [
{
icon_name: "减",
name: "满减优惠",
description: "满30减5,满60减8",
icon_color: "f07373",
id: 1,
_id: "591bec73c2bbc84a6328a1e7"
},
{
icon_name: "特",
name: "优惠大酬宾",
description: "是对冯绍峰的上市房地产",
icon_color: "EDC123",
id: 2,
_id: "591bec73c2bbc84a6328a1e6"
}
],
}
```
### 12、上传图片
#### 请求URL:
```
https://elm.cangdu.org/v1/addimg/:type
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|type |Y |string |shop:商铺图片,food:食品图片,avatar:头像 |
#### 返回示例:
```javascript
{
status: 1,
image_path: '15bfafa418322.jpeg'
// 图片保存至七牛,图片全部地址为, https://elm.cangdu.org/img/15bfafa418322.jpeg
}
```
### 13、添加餐馆
#### 请求URL:
```
https://elm.cangdu.org/shopping/addshop
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|name |Y |string | 餐馆名称 |
|address |Y |string | 餐馆地址 |
|phone |Y |int |联系电话 |
|latitude |Y |string | 纬度 |
|longitude |Y |string | 经度 |
|category |Y |string |食品分类 |
|image_path |Y |string |店铺图片地址 |
|float_delivery_fee |Y |int | 运费|
|float_minimum_order_amount |Y | init | 起送价 |
|description |N |string | 餐馆介绍 |
|promotion_info |N |string | 店铺标语 |
|is_premium |N |boolean | 品牌商铺,默认false |
|delivery_mode |N |boolean | 支持蜂鸟专送,默认false |
|new |N |boolean |新开店铺,默认false|
|bao |N |boolean |支持保险,默认false|
|zhun |N |boolean |准时达,默认false|
|piao |N |boolean |开发票,默认false|
|startTime |N |string |开始营业时间 |
|endTime |N |string |停止营业时间 |
|business_license_image |N |string |营业执照图片地址 |
|catering_service_license_image |N |string |餐饮服务许可证图片地址 |
|catering_service_license_image |N |string |餐饮服务许可证图片地址 |
|activities |N |array | 商铺活动:示例:[{icon_name:'新', name:'新用户立减', description: ''}]|
#### 返回示例:
```javascript
{
status: 1,
sussess: '添加餐馆成功',
}
```
### 14、添加食品种类
#### 请求URL:
```
https://elm.cangdu.org/shopping/addcategory
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|name |Y |string | 种类 |
|description |Y |string | 描述 |
|restaurant_id |Y |int | 餐馆id |
#### 返回示例:
```javascript
{
status: 1,
sussess: '添加食品种类成功',
}
```
### 15、添加食品
#### 请求URL:
```
https://elm.cangdu.org/shopping/addfood
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆ID |
|category_id |Y |int | 分类ID |
|name |Y |string | 食品名称 |
|image_path |Y |string | 图片地址 |
|specs |Y |array | 规格: [{specs: '默认',packing_fee: 0,price: 20,}]|
|description |N |string |描述 |
|activity |N |string |活动 |
|attributes |N |array |特点:[{value: '新',label: '新品'}] |
#### 返回示例:
```javascript
{
status: 1,
sussess: '添加食品成功',
}
```
### 16、获取食品列表
#### 请求URL:
```
https://elm.cangdu.org/shopping/v2/menu
```
#### 示例:
[https://elm.cangdu.org/shopping/v2/menu?restaurant_id=1](https://elm.cangdu.org/shopping/v2/menu?restaurant_id=1)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆ID |
#### 返回示例:
```javascript
[
{
name: "热销榜",
description: "大家喜欢吃,才叫真好吃。",
id: 1,
restaurant_id: 3,
foods: [
{
name: "好似懂非",
image_path: "/img/food/15c1ab95e7620.jpg",
activity: {
image_text_color: "f1884f",
icon_color: "f07373",
image_text: "实行政策支持支持支持"
},
restaurant_id: 3,
category_id: 1,
item_id: 1,
tips: "626评价 月售713份",
_id: "591d5ea243f73a7dbdc97c6b",
specfoods: [
{
name: "好似懂非",
item_id: 1,
sku_id: 1,
food_id: 1,
restaurant_id: 3,
_id: "591d5ea243f73a7dbdc97c6c",
specs: [ ],
stock: 1000,
checkout_mode: 1,
is_essential: false,
recent_popularity: 941,
sold_out: false,
price: 21,
promotion_stock: -1,
recent_rating: 0.6,
packing_fee: 1,
pinyin_name: "",
original_price: 0
}
],
satisfy_rate: 79,
satisfy_count: 461,
attributes: [
{
icon_color: "5ec452",
icon_name: "新"
},
{
icon_color: "f07373",
icon_name: "招牌"
}
],
is_essential: false,
server_utc: "2017-05-18T08:37:10.963Z",
specifications: [ ],
rating_count: 626,
month_sales: 713,
description: "中小城镇创新政策中",
attrs: [ ],
display_times: [ ],
pinyin_name: "",
is_featured: 0,
rating: 3.2
}
],
type: 1,
icon_url: "5da3872d782f707b4c82ce4607c73d1ajpeg",
is_selected: true,
__v: 1
},
]
```
### 17、获取评价信息
#### 请求URL:
```
https://elm.cangdu.org/ugc/v2/restaurants/:restaurant_id/ratings
```
#### 示例:
[https://elm.cangdu.org/ugc/v2/restaurants/1/ratings?offset=0&limit=10](https://elm.cangdu.org/ugc/v2/restaurants/1/ratings?offset=0&limit=10)
#### 请求方式:
```
GET
```
#### 参数类型:query, param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆ID |
|tag_name |N |string | 评价类型,默认全部 |
|offset |N |int | 跳过数据条数 |
|limit |N |int | 单次获取数据条数 |
#### 返回示例:
```javascript
[
{
rated_at: "2017-02-10",
rating_star: 5,
rating_text: "",
time_spent_desc: "按时送达",
_id: "591d5e5643f73a7dbdc97c66",
username: "4*******b",
tags: [ ],
item_ratings: [
{
food_id: 508807792,
food_name: "超级至尊比萨-铁盘",
_id: "591d5e5643f73a7dbdc97c68",
is_valid: 1,
image_hash: "dc864033625905f0a15a2d181d53a425jpeg"
},
{
food_id: 508808743,
food_name: "韩式浓情风味鸡(标准份)",
_id: "591d5e5643f73a7dbdc97c67",
is_valid: 1,
image_hash: "074e0e203f613deff4e456c31e4177d1jpeg"
}
],
highlights: [ ],
avatar: ""
},
]
```
### 18、获取评价分数
#### 请求URL:
```
https://elm.cangdu.org/ugc/v2/restaurants/:restaurant_id/ratings/scores
```
#### 示例:
[https://elm.cangdu.org/ugc/v2/restaurants/1/ratings/scores](https://elm.cangdu.org/ugc/v2/restaurants/1/ratings/scores)
#### 请求方式:
```
GET
```
#### 参数类型: param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆ID |
#### 返回示例:
```javascript
{
compare_rating: 0.76869,
deliver_time: 40,
food_score: 4.76378,
order_rating_amount: 473,
overall_score: 4.72836,
service_score: 4.69295
}
```
### 19、获取评价分类
#### 请求URL:
```
https://elm.cangdu.org/ugc/v2/restaurants/:restaurant_id/ratings/tags
```
#### 示例:
[https://elm.cangdu.org/ugc/v2/restaurants/1/ratings/tags](https://elm.cangdu.org/ugc/v2/restaurants/1/ratings/tags)
#### 请求方式:
```
GET
```
#### 参数类型: param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆ID |
#### 返回示例:
```javascript
[
{
name: "全部",
_id: "591d5e5643f73a7dbdc97c52",
unsatisfied: false,
count: 473
},
]
```
### 20、加入购物车
#### 请求URL:
```
https://elm.cangdu.org/v1/carts/checkout
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型: param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆ID |
|geohash |Y |string | 经纬度 |
|entities |Y |array | 购物车数据[{attrs:[],extra:{},id:食品id,name:食品名称,packing_fee:打包费,price:价格,quantity:数量,sku_id:规格id,specs:规格,stock:存量,}] |
#### 返回示例:
```javascript
{
cart: {
id: 1,
groups: [],
extra: this.extra,
deliver_amount,
deliver_time: '',
discount_amount: '',
dist_info: '',
is_address_too_far: false,
is_deliver_by_fengniao: !!restaurant.delivery_mode,
is_online_paid: 1,
is_ontime_available: 0,
must_new_user: 0,
must_pay_online: 0,
ontime_status: 0,
ontime_unavailable_reason: '',
original_total: total,
phone: restaurant.phone,
promise_delivery_time: 0,
restaurant_id,
restaurant_info: restaurant,
restaurant_minimum_order_amount: restaurant.float_minimum_order_amount,
restaurant_name_for_url: '',
restaurant_status: 1,
service_fee_explanation: 0,
total,
user_id: 1,
},
delivery_reach_time,
invoice,
sig: "8d65fd81cb962c1f64cd162c6ac5728f",
current_address: {},
payments,
deliver_times: [],
deliver_times_v2: [],
merchant_coupon_info: {},
number_of_meals: {},
discount_rule: {},
hongbao_info: {},
is_support_coupon: false,
is_support_ninja: 1,
}
```
### 21、获取备注信息
#### 请求URL:
```
https://elm.cangdu.org/v1/carts/:cart_id/remarks
```
#### 示例:
[https://elm.cangdu.org/v1/carts/1/remarks](https://elm.cangdu.org/v1/carts/1/remarks)
#### 请求方式:
```
GET
```
#### 参数类型: param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|cart_id |Y |int | 购物车id |
#### 返回示例:
```javascript
{
remarks: [
[
"不要辣",
"少点辣",
"多点辣"
],
],
}
```
### 22、获取收货地址列表
#### 请求URL:
```
https://elm.cangdu.org/v1/users/:user_id/addresses
```
#### 示例:
[https://elm.cangdu.org/v1/users/1/addresses](https://elm.cangdu.org/v1/users/1/addresses)
#### 请求方式:
```
GET
```
#### 参数类型: param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
#### 返回示例:
```javascript
[
{
id: 297740202,
address: "桂平路680号33幢",
phone: "13683220505",
is_valid: 1,
created_at: "2017-03-31T15:10:25+0800",
phone_bk: "",
name: "1231",
st_geohash: "wtw2dfyxb62",
address_detail: "123123",
poi_type: 0,
sex: 1,
city_id: 1,
tag: "家",
agent_fee: 3,
deliver_amount: 20,
is_deliverable: true,
phone_had_bound: true,
is_brand_member: false
}
]
```
### 23、获取验证码
#### 请求URL:
```
https://elm.cangdu.org/v1/captchas
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
code: base64
}
```
### 24、获取用户信息
#### 请求URL:
```
https://elm.cangdu.org/v1/user
```
#### 示例:
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
username: "1",
user_id: 2,
id: 2,
point: 0,
mobile: "",
is_mobile_valid: true,
is_email_valid: false,
is_active: 1,
gift_amount: 3,
email: "",
delivery_card_expire_days: 0,
current_invoice_id: 0,
current_address_id: 0,
brand_member_new: 0,
balance: 0,
avatar: "/img/default/default.jpg",
__v: 0
}
```
### 25、登录
#### 请求URL:
```
https://elm.cangdu.org/v2/login
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|username |Y |string | 用户名 |
|password |Y |string | 密码 |
|captcha_code |Y |string | 验证码 |
#### 返回示例:
```javascript
{
username: "1",
user_id: 2,
id: 2,
point: 0,
mobile: "",
is_mobile_valid: true,
is_email_valid: false,
is_active: 1,
gift_amount: 3,
email: "",
delivery_card_expire_days: 0,
current_invoice_id: 0,
current_address_id: 0,
brand_member_new: 0,
balance: 0,
avatar: "/img/default/default.jpg",
__v: 0
}
```
### 26、退出
#### 请求URL:
```
https://elm.cangdu.org/v2/signout
```
#### 示例:
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
message: '退出成功'
}
```
### 27、修改密码
#### 请求URL:
```
https://elm.cangdu.org/v2/changepassword
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|username |Y |string | 用户名 |
|oldpassWord |Y |string | 旧密码 |
|newpassword |Y |string | 新密码 |
|confirmpassword |Y |string | 确认密码 |
|captcha_code |Y |string | 验证码 |
#### 返回示例:
```javascript
{
status: 1,
success: '密码修改成功',
}
```
### 28、增加收货地址
#### 请求URL:
```
https://elm.cangdu.org/v1/users/:user_id/addresses
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:param, query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
|address |Y |string | 地址 |
|address_detail |Y |string | 地址详情 |
|geohash |Y |string | 经纬度 |
|name |Y |string | 收货人姓名 |
|phone |Y |string | 电话号码 |
|tag |Y |string | 标签 |
|sex |Y |int | 性别, 1:男,2:女 |
|poi_type |N |int | 类型,默认:0 |
|phone_bk |Y |string | 备注电话 |
|tag_type |Y |int | 标签类型,2:家,3:学校,4:公司 |
#### 返回示例:
```javascript
{
status: 1,
success: '添加地址成功',
}
```
### 29、删除收货地址
#### 请求URL:
```
https://elm.cangdu.org/v1/users/:user_id/addresses/:address_id
```
#### 示例:
#### 请求方式:
```
DELETE
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
|address_id |Y |int | 收货地址id |
#### 返回示例:
```javascript
{
status: 1,
success: '删除地址成功',
}
```
### 30、下单
#### 请求URL:
```
https://elm.cangdu.org/v1/users/:user_id/carts/:cart_id/orders
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型: param, query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户ID |
|cart_id |Y |int | 购物车ID |
|address_id |Y |int | 收货地址ID |
|restaurant_id |Y |int | 餐馆ID |
|geohash |N |string | 经纬度 |
|description |N |string | 备注 |
|entities |Y |array | 购物车数据[{attrs:[],extra:{},id:食品id,name:食品名称,packing_fee:打包费,price:价格,quantity:数量,sku_id:规格id,specs:规格,stock:存量,}] |
#### 返回示例:
```javascript
{
status: 1,
success: '下单成功,请及时付款',
need_validation: false,
}
```
### 31、订单列表
#### 请求URL:
```
https://elm.cangdu.org/bos/v2/users/:user_id/orders
```
#### 示例:
[https://elm.cangdu.org/bos/v2/users/1/orders?limit=10&offset=0](https://elm.cangdu.org/bos/v2/users/1/orders?limit=10&offset=0)
#### 请求方式:
```
GET
```
#### 参数类型: param, query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
|limit |N |int | 获取数据数量 |
|offset |N |int | 跳过数据条数 |
#### 返回示例:
```javascript
[
{
restaurant_id: 6,
restaurant_image_url: "/img/shop/15c19349ebe12.jpg",
restaurant_name: "sdf",
formatted_created_at: "2017-05-21 42:34",
order_time: 1495298554692,
time_pass: 55315,
total_amount: 21,
total_quantity: 1,
unique_id: 16,
id: 16,
user_id: 3,
address_id: 6,
__v: 0,
top_show: 0,
timeline_node: {
in_processing: 0,
actions: [ ]
},
status_code: 0,
status_bar: {
color: "f60",
image_type: "",
sub_title: "15分钟内支付",
title: "支付超时"
},
restaurant_type: 0,
remind_reply_count: 0,
rated_point: 0,
pay_remain_seconds: 0,
operation_upload_photo: 0,
operation_rebuy: 2,
operation_rate: 0,
operation_pay: 0,
operation_confirm: 0,
is_pindan: 0,
is_new_pay: 1,
is_deletable: 1,
is_brand: 0,
basket: {
pindan_map: [ ],
packing_fee: {
price: 0,
quantity: 1,
name: "餐盒",
category_id: 1
},
group: [
[
{
name: "fsefsf",
price: 21,
quantity: 1,
_id: "592071f966867336d7f8bce6",
specs: [
""
],
new_specs: [ ],
attrs: [ ]
}
]
],
extra: [ ],
deliver_fee: {
quantity: 1,
price: 4,
name: "配送费",
category_id: 2
},
abandoned_extra: [ ]
}
},
]
```
### 32、订单详情
#### 请求URL:
```
https://elm.cangdu.org/bos/v1/users/:user_id/orders/:order_id/snapshot
```
#### 示例:
[https://elm.cangdu.org/bos/v1/users/1/orders/1/snapshot](https://elm.cangdu.org/bos/v1/users/1/orders/1/snapshot)
#### 请求方式:
```
GET
```
#### 参数类型: param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
|order_id |Y |int | 订单id |
#### 返回示例:
```javascript
{
isNew: false,
_doc: {
__v: 0,
basket: {
abandoned_extra: [ ],
deliver_fee: {
category_id: 2,
name: "配送费",
price: 4,
quantity: 1
},
extra: [ ],
group: [
[
{
name: "fsefsf",
price: 21,
quantity: 2,
_id: "5920fffc12df813c6643d76b",
specs: [
""
],
new_specs: [ ],
attrs: [ ]
},
{
name: "35345435",
price: 21,
quantity: 2,
_id: "5920fffc12df813c6643d76a",
specs: [
""
],
new_specs: [ ],
attrs: [ ]
}
]
],
packing_fee: {
category_id: 1,
name: "餐盒",
quantity: 1,
price: 4
},
pindan_map: [ ]
},
is_brand: 0,
is_deletable: 1,
is_new_pay: 1,
is_pindan: 0,
operation_confirm: 0,
operation_pay: 0,
operation_rate: 0,
operation_rebuy: 2,
operation_upload_photo: 0,
pay_remain_seconds: 0,
rated_point: 0,
remind_reply_count: 0,
restaurant_type: 0,
status_bar: {
title: "支付超时",
sub_title: "15分钟内支付",
image_type: "",
color: "f60"
},
status_code: 0,
timeline_node: {
actions: [ ],
in_processing: 0
},
top_show: 0,
address_id: 6,
user_id: 3,
id: 17,
unique_id: 17,
total_quantity: 2,
total_amount: 88,
time_pass: 18959,
order_time: 1495334910518,
formatted_created_at: "2017-05-21 48:30",
restaurant_name: "sdf",
restaurant_image_url: "/img/shop/15c19349ebe12.jpg",
restaurant_id: 6
},
addressDetail: "sdfsf",
consignee: "ccc",
deliver_time: "尽快送达",
pay_method: "在线支付",
phone: "13323454321"
}
```
### 33、服务中心
#### 请求URL:
```
https://elm.cangdu.org/v3/profile/explain
```
#### 示例:
[https://elm.cangdu.org/v3/profile/explain](https://elm.cangdu.org/v3/profile/explain)
#### 请求方式:
```
GET
```
#### 参数类型: param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
}
```
### 34、可用红包
#### 请求URL:
```
https://elm.cangdu.org/promotion/v2/users/:user_id/hongbaos
```
#### 示例:
[https://elm.cangdu.org/promotion/v2/users/1/hongbaos?limit=20&offset=0](https://elm.cangdu.org/promotion/v2/users/1/hongbaos?limit=20&offset=0)
#### 请求方式:
```
GET
```
#### 参数类型: param, query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
|limit |N |int | 获取数据数量 |
|offset |N |int | 跳过数据条数 |
#### 返回示例:
```javascript
[
{
id: 7160761341773,
sn: "201705211244186655961161757573",
user_id: 186655961,
amount: 2,
sum_condition: 40,
name: "分享红包",
phone: "13681711254",
begin_date: "2017-05-21",
end_date: "2017-05-23",
status: 0,
present_status: 1,
share_status: 0,
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "剩3日",
validity_periods: "2017-05-23到期",
sum_condition: "满 40 元可用"
},
__v: 0
},
]
```
### 35、过期红包
#### 请求URL:
```
https://elm.cangdu.org/promotion/v2/users/:user_id/expired_hongbaos
```
#### 示例:
[https://elm.cangdu.org/promotion/v2/users/1/expired_hongbaos?limit=20&offset=0](https://elm.cangdu.org/promotion/v2/users/1/expired_hongbaos?limit=20&offset=0)
#### 请求方式:
```
GET
```
#### 参数类型: param, query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
|limit |N |int | 获取数据数量 |
|offset |N |int | 跳过数据条数 |
#### 返回示例:
```javascript
[
{
id: 7160761341773,
sn: "201705211244186655961161757573",
user_id: 186655961,
amount: 2,
sum_condition: 40,
name: "分享红包",
phone: "13681711254",
begin_date: "2017-05-21",
end_date: "2017-05-23",
status: 0,
present_status: 4,
share_status: 0,
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "剩3日",
validity_periods: "2017-05-23到期",
sum_condition: "满 40 元可用"
},
__v: 0
},
]
```
### 36、兑换红包
#### 请求URL:
```
https://elm.cangdu.org/v1/users/:user_id/hongbao/exchange
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型: param, query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_id |Y |int | 用户id |
|exchange_code |Y |int | 兑换码 |
|captcha_code |Y |int | 验证码 |
#### 返回示例:
```javascript
{
status: 0,
type: 'NOT_ALLOWD_API',
message: '无效的兑换码'
}
```
### 37、管理员登录
#### 请求URL:
```
https://elm.cangdu.org/admin/login
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|user_name |Y |string | 用户名 |
|password |Y |string | 密码 |
#### 返回示例:
```javascript
{
status: 1,
success: '登录成功'
}
```
### 38、管理员退出登录
#### 请求URL:
```
https://elm.cangdu.org/admin/singout
```
#### 示例:
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
success: '退出成功'
}
```
### 39、管理员信息
#### 请求URL:
```
https://elm.cangdu.org/admin/info
```
#### 示例:
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
data: {
user_name: "cangdu",
id: 1,
create_time: "2017-05-29 12:02",
status: 1,
city: "上海",
avatar: "default.jpg",
admin: "管理员"
}
}
```
### 40、获取某日API请求量
#### 请求URL:
```
https://elm.cangdu.org/statis/api/:date/count
```
#### 示例:
[https://elm.cangdu.org/statis/api/2017-05-29/count](https://elm.cangdu.org/statis/api/2017-05-29/count)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|date |Y |string | 日期:格式 2017-05-29 |
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 41、获取所有API请求量
#### 请求URL:
```
https://elm.cangdu.org/statis/api/count
```
#### 示例:
[https://elm.cangdu.org/statis/api/count](https://elm.cangdu.org/statis/api/count)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 42、获取某天用户注册量
#### 请求URL:
```
https://elm.cangdu.org/statis/user/:date/count
```
#### 示例:
[https://elm.cangdu.org/statis/user/2017-05-29/count](https://elm.cangdu.org/statis/user/2017-05-29/count)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|date |Y |string | 日期:格式 2017-05-29 |
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 43、获取所有用户注册量
#### 请求URL:
```
https://elm.cangdu.org/v1/users/count
```
#### 示例:
[https://elm.cangdu.org/v1/users/count](https://elm.cangdu.org/v1/users/count)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 44、获取某天订单数量
#### 请求URL:
```
https://elm.cangdu.org/statis/order/:date/count
```
#### 示例:
[https://elm.cangdu.org/statis/order/2017-05-29/count](https://elm.cangdu.org/statis/order/2017-05-29/count)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|date |Y |string | 日期:格式 2017-05-29 |
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 45、获取所有订单数量
#### 请求URL:
```
https://elm.cangdu.org/bos/orders/count
```
#### 示例:
[https://elm.cangdu.org/bos/orders/count](https://elm.cangdu.org/bos/orders/count)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 46、管理员列表
#### 请求URL:
```
https://elm.cangdu.org/admin/all
```
#### 示例:
[https://elm.cangdu.org/admin/all?offset=0&limit=20](https://elm.cangdu.org/admin/all?offset=0&limit=20)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|limit |Y |int | 获取数据数量,默认 20 |
|offset |Y |int | 跳过数据条数 默认 0 |
#### 返回示例:
```javascript
{
status: 1,
data: [
{
user_name: "s",
id: 14,
create_time: "2017-05-29 21:23",
status: 1,
city: "北京",
__v: 0,
avatar: "default.jpg",
admin: "管理员"
},
]
}
```
### 47、获取管理员数量
#### 请求URL:
```
https://elm.cangdu.org/admin/count
```
#### 示例:
[https://elm.cangdu.org/admin/count](https://elm.cangdu.org/admin/count)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 48、获取店铺食品种类
#### 请求URL:
```
https://elm.cangdu.org/shopping/getcategory/:restaurant_id
```
#### 示例:
[https://elm.cangdu.org/shopping/getcategory/2](https://elm.cangdu.org/shopping/getcategory/2)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆id |
#### 返回示例:
```javascript
{
status: 1,
category_list: [
{
name: "热销榜",
description: "大家喜欢吃,才叫真好吃。",
id: 1,
restaurant_id: 2,
__v: 3,
foods: []
}
...
]
}
```
### 49、获取餐馆数量
#### 请求URL:
```
https://elm.cangdu.org/shopping/restaurants/count
```
#### 示例:
[https://elm.cangdu.org/shopping/restaurants/count](https://elm.cangdu.org/shopping/restaurants/count)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 50、更新餐馆
#### 请求URL:
```
https://elm.cangdu.org/shopping/updateshop
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|id |Y |int | 餐馆id |
|name |Y |string | 餐馆名称 |
|address |Y |string | 餐馆地址 |
|description |N |string | 餐馆介绍 |
|phone |Y |int |联系电话 |
|image_path |Y |string |店铺图片地址 |
|category |Y |string |店铺分类 |
#### 返回示例:
```javascript
{
status: 1,
success: '修改商铺信息成功',
}
```
### 51、删除餐馆
#### 请求URL:
```
https://elm.cangdu.org/shopping/restaurant/:restaurant_id
```
#### 示例:
#### 请求方式:
```
DELETE
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|restaurant_id |Y |int | 餐馆id |
#### 返回示例:
```javascript
{
status: 1,
success: '删除餐馆成功'
}
```
### 52、获取食品列表
#### 请求URL:
```
https://elm.cangdu.org/shopping/v2/foods
```
#### 示例:
[https://elm.cangdu.org/shopping/v2/foods?offset=0&limit=20&restaurant_id=2](https://elm.cangdu.org/shopping/v2/foods?offset=0&limit=20&restaurant_id=2)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|limit |Y |int | 获取数据数量,默认 20 |
|offset |Y |int | 跳过数据条数 默认 0 |
|restaurant_id |Y |int | 餐馆id |
#### 返回示例:
```javascript
[
{
name: "fdsf",
image_path: "15c545e4a705.png",
activity: {
image_text_color: "f1884f",
icon_color: "f07373",
image_text: "dsf"
},
restaurant_id: 2,
category_id: 1,
item_id: 2,
tips: "880评价 月售123份",
specfoods: [
{
specs_name: "默认",
name: "fdsf",
item_id: 2,
sku_id: 2,
food_id: 2,
restaurant_id: 2,
_id: "592c2063153b1136968e3393",
specs: [ ],
stock: 1000,
checkout_mode: 1,
is_essential: false,
recent_popularity: 254,
sold_out: false,
price: 20,
promotion_stock: -1,
recent_rating: 2.8,
packing_fee: 0,
pinyin_name: "",
original_price: 0
}
],
satisfy_rate: 87,
satisfy_count: 803,
attributes: [
{
icon_color: "5ec452",
icon_name: "新"
}
],
is_essential: false,
server_utc: "2017-05-29T05:53:51.103Z",
specifications: [ ],
rating_count: 880,
month_sales: 123,
description: "dfs",
attrs: [ ],
display_times: [ ],
pinyin_name: "",
is_featured: 0,
rating: 3.4,
__v: 0
},
]
```
### 53、获取食品数量
#### 请求URL:
```
https://elm.cangdu.org/shopping/v2/foods/count
```
#### 示例:
[https://elm.cangdu.org/shopping/v2/foods/count](https://elm.cangdu.org/shopping/v2/foods/count)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
### 54、获取食品种类详情
#### 请求URL:
```
https://elm.cangdu.org/shopping/v2/menu/:category_id
```
#### 示例:
[https://elm.cangdu.org/shopping/v2/menu/1](https://elm.cangdu.org/shopping/v2/menu/1)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|category_id |Y |int | 食品种类id |
#### 返回示例:
```javascript
{
name: "热销榜",
description: "大家喜欢吃,才叫真好吃。",
id: 1,
restaurant_id: 2,
type: 1,
icon_url: "5da3872d782f707b4c82ce4607c73d1ajpeg",
is_selected: true,
__v: 3
}
```
### 55、更新食品
#### 请求URL:
```
https://elm.cangdu.org/shopping/v2/updatefood
```
#### 示例:
#### 请求方式:
```
POST
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|item_id |Y |int | 食品id |
|name |Y |string | 食品名称 |
|description |N |string | 食品介绍 |
|image_path |Y |string |店铺图片地址 |
|restaurant_id |Y |int | 餐馆id |
|category_id |Y |int | 食品分类id |
|specfoods |Y |array | 规格: [{specs: '默认',packing_fee: 0,price: 20,}]|
#### 返回示例:
```javascript
{
status: 1,
success: '修改食品信息成功',
}
```
### 56、删除食品
#### 请求URL:
```
https://elm.cangdu.org/shopping/v2/food/:food_id
```
#### 示例:
#### 请求方式:
```
DELETE
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|food_id |Y |int | 食品id |
#### 返回示例:
```javascript
{
status: 1,
success: '删除食品成功'
}
```
### 57、获取用户列表
#### 请求URL:
```
https://elm.cangdu.org/v1/users/list
```
#### 示例:
[https://elm.cangdu.org/v1/users/list?offset=0&limit=20](https://elm.cangdu.org/v1/users/list?offset=0&limit=20)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|limit |Y |int | 获取数据数量,默认 20 |
|offset |Y |int | 跳过数据条数 默认 0 |
#### 返回示例:
```javascript
[
{
username: "ddfdsf",
user_id: 2,
id: 2,
city: "北京",
registe_time: "2017-05-29 21:46",
column_desc: {
gift_mall_desc: "0元好物在这里",
game_link: "https://gamecenter.faas.ele.me",
game_is_show: 1,
game_image_hash: "05f108ca4e0c543488799f0c7c708cb1jpeg",
game_desc: "玩游戏领红包"
},
point: 0,
mobile: "",
is_mobile_valid: true,
is_email_valid: false,
is_active: 1,
gift_amount: 3,
email: "",
delivery_card_expire_days: 0,
current_invoice_id: 0,
current_address_id: 0,
brand_member_new: 0,
balance: 0,
avatar: "default.jpg",
__v: 0
},
...
]
```
### 58、获取订单列表
#### 请求URL:
```
https://elm.cangdu.org/bos/orders
```
#### 示例:
[https://elm.cangdu.org/bos/orders?offset=0&limit=20](https://elm.cangdu.org/bos/orders?offset=0&limit=20)
#### 请求方式:
```
GET
```
#### 参数类型:query
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|limit |Y |int | 获取数据数量,默认 20 |
|offset |Y |int | 跳过数据条数 默认 0 |
#### 返回示例:
```javascript
[
]
```
### 59、获取地址信息
#### 请求URL:
```
https://elm.cangdu.org/v1/addresse/:address_id
```
#### 示例:
[https://elm.cangdu.org/v1/addresse/1](https://elm.cangdu.org/v1/addresse/1)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|address_id |Y |int | 地址id |
#### 返回示例:
```javascript
[
]
```
### 60、获取用户分布信息
#### 请求URL:
```
https://elm.cangdu.org/v1/user/city/count
```
#### 示例:
[https://elm.cangdu.org/v1/user/city/count](https://elm.cangdu.org/v1/user/city/count)
#### 请求方式:
```
GET
```
#### 参数类型:
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
#### 返回示例:
```javascript
{
status: 1,
user_city: {
beijing: 1,
shanghai: 0,
shenzhen: 1,
hangzhou: 0,
qita: 0
}
}
```
### 61、获取某天管理员注册量
#### 请求URL:
```
https://elm.cangdu.org/statis/admin/:date/count
```
#### 示例:
[https://elm.cangdu.org/statis/admin/2017-05-30/count](https://elm.cangdu.org/statis/admin/2017-05-30/count)
#### 请求方式:
```
GET
```
#### 参数类型:param
|参数|是否必选|类型|说明|
|:-----|:-------:|:-----|:-----|
|date |Y |string | 日期:格式 2017-05-29 |
#### 返回示例:
```javascript
{
status: 1,
count: 1
}
```
================================================
FILE: COPYING
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
================================================
FILE: InitData/activity.js
================================================
export default [
{
description: "",
icon_color: "3FBDE6",
icon_name: "品",
id: 8,
name: "品牌商家",
ranking_weight: 7
},
{
description: "已加入“外卖保”计划,食品安全有保障",
icon_color: "999999",
icon_name: "保",
id: 7,
name: "外卖保",
ranking_weight: 6
},
{
description: "新店",
icon_color: "E8842D",
icon_name: "新",
id: 5,
name: "新店",
ranking_weight: 4
},
{
description: "该商家支持开发票,请在下单时填写好发票抬头",
icon_color: "999999",
icon_name: "票",
id: 4,
name: "开发票",
ranking_weight: 3
},
{
description: "可使用支付宝、微信、手机QQ进行在线支付",
icon_color: "FF4E00",
icon_name: "付",
id: 3,
name: "在线支付",
ranking_weight: 2
},
{
description: "准时必达,超时秒赔",
icon_color: "57A9FF",
icon_name: "准",
id: 9,
name: "准时达",
ranking_weight: 1
}
]
================================================
FILE: InitData/category.js
================================================
export default [
{
count: 0,
ids: [
207,
220,
260,
233,
239,
244,
248,
252
],
image_url: "",
level: 1,
name: "全部商家"
},
{
count: 0,
id: 207,
ids: [
207
],
image_url: "bff533cf9617bd57fe1dfb05603bebcfpng",
level: 1,
name: "快餐便当",
sub_categories: [
{
count: 0,
id: 207,
image_url: "44545a0518aab93817cfe611e88bb702png",
level: 1,
name: "全部快餐便当"
},
{
count: 0,
id: 265,
image_url: "be84bc4d7cf12deee9115b16eb099302png",
level: 2,
name: "简餐"
},
{
count: 0,
id: 209,
image_url: "66b78c0e7099c278977298d7c6042c80png",
level: 2,
name: "盖浇饭"
},
{
count: 0,
id: 213,
image_url: "02e6c9e3bf338ec0ba0d923717b9f8acpng",
level: 2,
name: "米粉面馆"
},
{
count: 0,
id: 215,
image_url: "af6ab89041b3e77fe115d1e4b72d69f0png",
level: 2,
name: "包子粥店"
},
{
count: 0,
id: 219,
image_url: "eddd9dc7e5d21debe2fb278ae01fefe9png",
level: 2,
name: "香锅砂锅"
},
{
count: 0,
id: 214,
image_url: "4d347d0dc65dd75fb2911256aabf2327png",
level: 2,
name: "麻辣烫"
},
{
count: 0,
id: 217,
image_url: "65b575c2278a3f6e5c70af45b578cbeepng",
level: 2,
name: "饺子馄饨"
},
{
count: 0,
id: 212,
image_url: "7d47af01fccc46fc3621865a9cc07c93png",
level: 2,
name: "汉堡"
},
{
count: 0,
id: 216,
image_url: "4c6af48f68284ad91c6d95d2bd3f4aa6png",
level: 2,
name: "生煎锅贴"
},
{
count: 0,
id: 267,
image_url: "79637dc36d67de4fe48d121ea77b3eddpng",
level: 2,
name: "黄焖鸡米饭"
},
{
count: 0,
id: 266,
image_url: "c09d1ff71384e2e1664f72e0a928810dpng",
level: 2,
name: "烧腊饭"
},
{
count: 0,
id: 269,
image_url: "180cb951c2d4eb2e220debf4571bf83apng",
level: 2,
name: "煲仔饭"
},
{
count: 0,
id: 268,
image_url: "cdf208b399b854e456f23d28b1972e97png",
level: 2,
name: "咖喱饭"
}
]
},
{
count: 0,
id: 220,
ids: [
220
],
image_url: "655ac1bfd1e818013a9f099e964f1e9djpeg",
level: 1,
name: "特色菜系",
sub_categories: [
{
count: 0,
id: 220,
image_url: "ef32dabbcd88fbed5a336383e74c733dpng",
level: 1,
name: "全部特色菜系"
},
{
count: 0,
id: 221,
image_url: "43b0e4694f8ebc393cce6723d5df5222png",
level: 2,
name: "川湘菜"
},
{
count: 0,
id: 263,
image_url: "94ac841e2c3e27f8eeeaa917574ed574png",
level: 2,
name: "其他菜系"
},
{
count: 0,
id: 225,
image_url: "2d098842683548f9626cf0a8c879257dpng",
level: 2,
name: "江浙菜"
},
{
count: 0,
id: 222,
image_url: "e320bf1ab9762cb1faad27d79f51219cpng",
level: 2,
name: "粤菜"
},
{
count: 0,
id: 232,
image_url: "a33f1ec0044ddd4d282fbc8b1f0a946fpng",
level: 2,
name: "海鲜"
},
{
count: 0,
id: 231,
image_url: "c03d81f550eb849ed2d4d0290ced9099png",
level: 2,
name: "火锅烤鱼"
},
{
count: 0,
id: 223,
image_url: "aa4de1e9b54170cf495d8052407658c5png",
level: 2,
name: "东北菜"
},
{
count: 0,
id: 226,
image_url: "741d15270496d7699dd2e7804fccc7a1png",
level: 2,
name: "西北菜"
},
{
count: 0,
id: 224,
image_url: "54dabf93116f4a336fcc91431be43828png",
level: 2,
name: "云南菜"
},
{
count: 0,
id: 228,
image_url: "a7e6d9cf1993fa4fe0bd02d74d40c9c2png",
level: 2,
name: "新疆菜"
},
{
count: 0,
id: 227,
image_url: "e19bf59188a157dfc372b3d254fc986dpng",
level: 2,
name: "鲁菜"
}
]
},
{
count: 0,
id: 260,
ids: [
260
],
image_url: "1babf6efbfdb0ef701f19689a5529e5fjpeg",
level: 1,
name: "异国料理",
sub_categories: [
{
count: 0,
id: 260,
image_url: "754c5c2ad1b01668a7186ec5f0fb0e59png",
level: 1,
name: "全部异国料理"
},
{
count: 0,
id: 229,
image_url: "cf8c84a2fe5ecf27b21bcbddc1724d36png",
level: 2,
name: "日韩料理"
},
{
count: 0,
id: 230,
image_url: "78c45200d58e5c02cb70fb8287df732dpng",
level: 2,
name: "西餐"
},
{
count: 0,
id: 211,
image_url: "bb7eb2afe778ba9afbe54f9d282818d1png",
level: 2,
name: "披萨意面"
},
{
count: 0,
id: 264,
image_url: "614053401fddc171eed0436f3cd1f7dcpng",
level: 2,
name: "东南亚菜"
}
]
},
{
count: 0,
id: 233,
ids: [
233
],
image_url: "435a7eda7659bac613e524ca7c1ae12epng",
level: 1,
name: "小吃夜宵",
sub_categories: [
{
count: 0,
id: 233,
image_url: "7d714540b1590552d991fd731e8772a3png",
level: 1,
name: "全部小吃夜宵"
},
{
count: 0,
id: 236,
image_url: "d049fb617edcea921185258d1675db83png",
level: 2,
name: "小龙虾"
},
{
count: 0,
id: 237,
image_url: "90483b16d9598aec798263220eb3a821png",
level: 2,
name: "地方小吃"
},
{
count: 0,
id: 218,
image_url: "3c6e2763cf4ee56f18fd1b7360585fb3png",
level: 2,
name: "烧烤"
},
{
count: 0,
id: 234,
image_url: "71164ef684e8a13b5e66a20a1c55671cpng",
level: 2,
name: "炸鸡炸串"
},
{
count: 0,
id: 235,
image_url: "efdba78945f83ed1e8e6e838718b4c65png",
level: 2,
name: "鸭脖卤味"
},
{
count: 0,
id: 238,
image_url: "d7e0be7e5420e213ea42e4fa3efa762bpng",
level: 2,
name: "零食"
}
]
},
{
count: 0,
id: 239,
ids: [
239
],
image_url: "48243703799592368585b23589cf3ba8png",
level: 1,
name: "甜品饮品",
sub_categories: [
{
count: 0,
id: 239,
image_url: "3233a4cac2e5e02cade80cce22992796png",
level: 1,
name: "全部甜品饮品"
},
{
count: 0,
id: 240,
image_url: "3a40add809b4405e677c4cab574e56c4png",
level: 2,
name: "奶茶果汁"
},
{
count: 0,
id: 241,
image_url: "213cbac0242d4845d1d28af0fa5fe35epng",
level: 2,
name: "甜品"
},
{
count: 0,
id: 242,
image_url: "c2f05ef82a7ee44b7848b7fb598d42e3png",
level: 2,
name: "咖啡"
}
]
},
{
count: 0,
id: 244,
ids: [
244
],
image_url: "6235a6fce94bed63a21508f68a72c158png",
level: 1,
name: "果蔬生鲜",
sub_categories: [
{
count: 0,
id: 244,
image_url: "1ce198f37a81285f4afa2aaf826a558fpng",
level: 1,
name: "全部果蔬生鲜"
},
{
count: 0,
id: 245,
image_url: "a831a37ec670ca93cd35a8a6b5a20e62png",
level: 2,
name: "水果"
},
{
count: 0,
id: 247,
image_url: "6d3cef77e055d03598cba821ebcf1f06png",
level: 2,
name: "生鲜"
},
{
count: 0,
id: 246,
image_url: "1729548b88614c1b3a6e71ef7f89f294png",
level: 2,
name: "蔬菜"
},
{
count: 0,
id: 270,
image_url: "a2ab438ee4ac09e6e53b3f96694bac81png",
level: 2,
name: "海鲜水产"
}
]
},
{
count: 0,
id: 248,
ids: [
248
],
image_url: "0e07558e305abfb2618ae760142222f9png",
level: 1,
name: "鲜花蛋糕",
sub_categories: [
{
count: 0,
id: 248,
image_url: "3edf3f4ef8ed1d300896c5b9178685ebpng",
level: 1,
name: "全部鲜花蛋糕"
},
{
count: 0,
id: 251,
image_url: "cf598de7338b4bf9dd2924736c4ec9d2png",
level: 2,
name: "鲜花"
},
{
count: 0,
id: 249,
image_url: "ac94b005c97ef158282326cb49389893png",
level: 2,
name: "蛋糕"
},
{
count: 0,
id: 250,
image_url: "512232422a83e25a2c0a5588b7b6e730png",
level: 2,
name: "面包"
}
]
},
{
count: 0,
id: 252,
ids: [
252
],
image_url: "ac15c5dd59b641bdfdeb822362547fb4png",
level: 1,
name: "商店超市",
sub_categories: [
{
count: 0,
id: 252,
image_url: "df21b511f287ccb402e68285d2653caepng",
level: 1,
name: "全部商店超市"
},
{
count: 0,
id: 254,
image_url: "92ae70438be9a3adfc5a560c1e6ae818png",
level: 2,
name: "超市"
},
{
count: 0,
id: 271,
image_url: "841d136b17fa4cb871a296c9e4997cfapng",
level: 2,
name: "便利店"
},
{
count: 0,
id: 274,
image_url: "7df84232aebbb5ffb53e564c9e328d31png",
level: 2,
name: "名酒坊"
},
{
count: 0,
id: 273,
image_url: "c2b0e2b27ea55a9a7211f14ad95dcd0apng",
level: 2,
name: "零食饮料"
},
{
count: 0,
id: 255,
image_url: "825031dc99e1f99c26feb7186b6cf3a6png",
level: 2,
name: "水站"
},
{
count: 0,
id: 258,
image_url: "54b7ce87994d6770f1ead57b0038c569png",
level: 2,
name: "茶"
},
{
count: 0,
id: 256,
image_url: "f6460e330d25dabd4fd8db07cf53f039png",
level: 2,
name: "奶站"
},
{
count: 0,
id: 257,
image_url: "b435af6662fd0b3e9fb6537474753f72png",
level: 2,
name: "粮油"
},
{
count: 0,
id: 272,
image_url: "f7e32a289deca477c286362e3a1bc2bcpng",
level: 2,
name: "美妆母婴"
}
]
}
]
================================================
FILE: InitData/cities.js
================================================
export default {
S: [
{
id: 1,
name: "上海",
abbr: "SH",
area_code: "021",
sort: 1,
latitude: 31.23037,
longitude: 121.473701,
is_map: true,
pinyin: "shanghai"
},
{
id: 31,
name: "石家庄",
abbr: "SJZ",
area_code: "0311",
sort: 17,
latitude: 38.042759,
longitude: 114.514297,
is_map: true,
pinyin: "shijiazhuang"
},
{
id: 401,
name: "三门峡",
abbr: "SMX",
area_code: "0398",
sort: 1900,
latitude: 34.77261,
longitude: 111.200302,
is_map: true,
pinyin: "sanmenxia"
},
{
id: 8,
name: "苏州",
abbr: "SZ",
area_code: "0512",
sort: 2000,
latitude: 31.29834,
longitude: 120.583191,
is_map: true,
pinyin: "suzhou"
},
{
id: 11,
name: "深圳",
abbr: "SZ",
area_code: "0755",
sort: 2000,
latitude: 22.54286,
longitude: 114.059563,
is_map: true,
pinyin: "shenzhen"
},
{
id: 16,
name: "沈阳",
abbr: "SY",
area_code: "024",
sort: 2000,
latitude: 41.80563,
longitude: 123.432358,
is_map: true,
pinyin: "shenyang"
},
{
id: 69,
name: "绍兴",
abbr: "SX",
area_code: "0575",
sort: 2000,
latitude: 30.030331,
longitude: 120.5802,
is_map: true,
pinyin: "shaoxing"
},
{
id: 72,
name: "韶关",
abbr: "SG",
area_code: "0751",
sort: 2000,
latitude: 24.81039,
longitude: 113.597229,
is_map: true,
pinyin: "shaoguan"
},
{
id: 97,
name: "上饶",
abbr: "SR",
area_code: "0793",
sort: 2000,
latitude: 28.45463,
longitude: 117.943573,
is_map: true,
pinyin: "shangrao"
},
{
id: 135,
name: "宿州",
abbr: "SZ",
area_code: "0557",
sort: 2000,
latitude: 33.646141,
longitude: 116.963913,
is_map: true,
pinyin: "suzhou"
},
{
id: 165,
name: "三亚",
abbr: "SY",
area_code: "460200",
sort: 2000,
latitude: 18.25248,
longitude: 109.512093,
is_map: true,
pinyin: "sanya"
},
{
id: 171,
name: "四平",
abbr: "SP",
area_code: "0434",
sort: 2000,
latitude: 43.166458,
longitude: 124.350357,
is_map: true,
pinyin: "siping"
},
{
id: 173,
name: "邵阳",
abbr: "SY",
area_code: "0739",
sort: 2000,
latitude: 27.238899,
longitude: 111.467697,
is_map: true,
pinyin: "shaoyang"
},
{
id: 196,
name: "十堰",
abbr: "SY",
area_code: "0719",
sort: 2000,
latitude: 32.615768,
longitude: 110.18734,
is_map: true,
pinyin: "shiyan"
},
{
id: 200,
name: "汕头",
abbr: "ST",
area_code: "0754",
sort: 2000,
latitude: 23.3535,
longitude: 116.682213,
is_map: true,
pinyin: "shantou"
},
{
id: 206,
name: "宿迁",
abbr: "SQ",
area_code: "0527",
sort: 2000,
latitude: 33.961929,
longitude: 118.27549,
is_map: true,
pinyin: "suqian"
},
{
id: 228,
name: "绥化",
abbr: "SH",
area_code: "0455",
sort: 2000,
latitude: 46.652458,
longitude: 126.969322,
is_map: true,
pinyin: "suihua"
},
{
id: 253,
name: "商丘",
abbr: "SQ",
area_code: "0370",
sort: 2000,
latitude: 34.414268,
longitude: 115.656349,
is_map: true,
pinyin: "shangqiu"
},
{
id: 258,
name: "石河子",
abbr: "SHZ",
area_code: "0993",
sort: 2000,
latitude: 44.30653,
longitude: 86.078934,
is_map: true,
pinyin: "shihezi"
},
{
id: 270,
name: "三明",
abbr: "SM",
area_code: "0598",
sort: 2000,
latitude: 26.263849,
longitude: 117.639221,
is_map: true,
pinyin: "sanming"
},
{
id: 291,
name: "遂宁",
abbr: "SNS",
area_code: "0825",
sort: 2000,
latitude: 30.53286,
longitude: 105.592728,
is_map: true,
pinyin: "suiningshi"
},
{
id: 329,
name: "石狮",
abbr: "SS",
area_code: "05951",
sort: 2000,
latitude: 24.73172,
longitude: 118.648048,
is_map: true,
pinyin: "shishi"
},
{
id: 392,
name: "朔州",
abbr: "SZ",
area_code: "0349",
sort: 2000,
latitude: 39.331589,
longitude: 112.431808,
is_map: true,
pinyin: "shuozhou"
},
{
id: 447,
name: "沙坪坝",
abbr: "SPB",
area_code: "10025",
sort: 2000,
latitude: 29.540979,
longitude: 106.457733,
is_map: true,
pinyin: "shapingba"
},
{
id: 458,
name: "寿县",
abbr: "SX",
area_code: "200004",
sort: 2000,
latitude: 32.573318,
longitude: 116.787079,
is_map: true,
pinyin: "shouxian"
},
{
id: 467,
name: "舒城",
abbr: "SC",
area_code: "200013",
sort: 2000,
latitude: 31.46209,
longitude: 116.9487,
is_map: true,
pinyin: "shucheng"
},
{
id: 473,
name: "濉溪",
abbr: "SX",
area_code: "200019",
sort: 2000,
latitude: 33.915371,
longitude: 116.766197,
is_map: true,
pinyin: "suixi"
},
{
id: 513,
name: "邵武",
abbr: "SW",
area_code: "200059",
sort: 2000,
latitude: 27.340361,
longitude: 117.492531,
is_map: true,
pinyin: "shaowu"
},
{
id: 542,
name: "四会",
abbr: "SH",
area_code: "200088",
sort: 2000,
latitude: 23.327431,
longitude: 112.734039,
is_map: true,
pinyin: "sihui"
},
{
id: 544,
name: "汕尾",
abbr: "SW",
area_code: "200090",
sort: 2000,
latitude: 22.78566,
longitude: 115.375137,
is_map: true,
pinyin: "shanwei"
},
{
id: 560,
name: "遂溪",
abbr: "SX",
area_code: "200106",
sort: 2000,
latitude: 21.377081,
longitude: 110.250061,
is_map: true,
pinyin: "suixi"
},
{
id: 604,
name: "沙河",
abbr: "SH",
area_code: "200150",
sort: 2000,
latitude: 36.85516,
longitude: 114.503319,
is_map: true,
pinyin: "shahe"
},
{
id: 605,
name: "涉县",
abbr: "SX",
area_code: "200151",
sort: 2000,
latitude: 36.584949,
longitude: 113.691422,
is_map: true,
pinyin: "shexian"
},
{
id: 609,
name: "深州",
abbr: "SZ",
area_code: "200155",
sort: 2000,
latitude: 38.000221,
longitude: 115.560013,
is_map: true,
pinyin: "shenzhou"
},
{
id: 631,
name: "上蔡",
abbr: "SC",
area_code: "200177",
sort: 2000,
latitude: 33.26255,
longitude: 114.264351,
is_map: true,
pinyin: "shangcai"
},
{
id: 646,
name: "沈丘",
abbr: "SQ",
area_code: "200192",
sort: 2000,
latitude: 33.409401,
longitude: 115.098557,
is_map: true,
pinyin: "shenqiu"
},
{
id: 656,
name: "商水",
abbr: "SS",
area_code: "200202",
sort: 2000,
latitude: 33.542561,
longitude: 114.611649,
is_map: true,
pinyin: "shangshui"
},
{
id: 658,
name: "社旗",
abbr: "SQ",
area_code: "200204",
sort: 2000,
latitude: 33.056141,
longitude: 112.947929,
is_map: true,
pinyin: "sheqi"
},
{
id: 699,
name: "双鸭山",
abbr: "SYS",
area_code: "200245",
sort: 2000,
latitude: 46.64658,
longitude: 131.159103,
is_map: true,
pinyin: "shuangyashan"
},
{
id: 702,
name: "尚志",
abbr: "SZ",
area_code: "200248",
sort: 2000,
latitude: 45.211021,
longitude: 127.960274,
is_map: true,
pinyin: "shangzhi"
},
{
id: 704,
name: "双城",
abbr: "SC",
area_code: "200250",
sort: 2000,
latitude: 45.383549,
longitude: 126.312271,
is_map: true,
pinyin: "shuangcheng"
},
{
id: 721,
name: "松滋",
abbr: "SZ",
area_code: "200267",
sort: 2000,
latitude: 30.1696,
longitude: 111.767433,
is_map: true,
pinyin: "songzi"
},
{
id: 733,
name: "石首",
abbr: "SS",
area_code: "200279",
sort: 2000,
latitude: 29.72085,
longitude: 112.425499,
is_map: true,
pinyin: "shishou"
},
{
id: 747,
name: "随县",
abbr: "SX",
area_code: "200293",
sort: 2000,
latitude: 31.8538,
longitude: 113.29995,
is_map: true,
pinyin: "suixian"
},
{
id: 748,
name: "沙洋",
abbr: "SY",
area_code: "200294",
sort: 2000,
latitude: 30.709181,
longitude: 112.588539,
is_map: true,
pinyin: "shayang"
},
{
id: 754,
name: "邵东",
abbr: "SD",
area_code: "200300",
sort: 2000,
latitude: 27.25844,
longitude: 111.744461,
is_map: true,
pinyin: "shaodong"
},
{
id: 790,
name: "石门",
abbr: "SM",
area_code: "200336",
sort: 2000,
latitude: 29.584129,
longitude: 111.379822,
is_map: true,
pinyin: "shimen"
},
{
id: 791,
name: "双峰",
abbr: "SF",
area_code: "200337",
sort: 2000,
latitude: 27.45702,
longitude: 112.193916,
is_map: true,
pinyin: "shuangfeng"
},
{
id: 808,
name: "舒兰",
abbr: "SL",
area_code: "200354",
sort: 2000,
latitude: 44.405861,
longitude: 126.965317,
is_map: true,
pinyin: "shulan"
},
{
id: 819,
name: "双辽",
abbr: "SL",
area_code: "200365",
sort: 2000,
latitude: 43.518452,
longitude: 123.50296,
is_map: true,
pinyin: "shuangliao"
},
{
id: 826,
name: "沭阳",
abbr: "SY",
area_code: "200372",
sort: 2000,
latitude: 34.112148,
longitude: 118.804062,
is_map: true,
pinyin: "shuyang"
},
{
id: 845,
name: "射阳",
abbr: "SY",
area_code: "200391",
sort: 2000,
latitude: 33.77496,
longitude: 120.258148,
is_map: true,
pinyin: "sheyang"
},
{
id: 847,
name: "泗洪",
abbr: "SH",
area_code: "200393",
sort: 2000,
latitude: 33.459,
longitude: 118.21624,
is_map: true,
pinyin: "sihong"
},
{
id: 849,
name: "泗阳",
abbr: "SY",
area_code: "200395",
sort: 2000,
latitude: 33.721008,
longitude: 118.703346,
is_map: true,
pinyin: "siyang"
},
{
id: 889,
name: "上栗",
abbr: "SL",
area_code: "200435",
sort: 2000,
latitude: 27.880421,
longitude: 113.795372,
is_map: true,
pinyin: "shangli"
},
{
id: 910,
name: "绥中",
abbr: "SZ",
area_code: "200456",
sort: 2000,
latitude: 40.325649,
longitude: 120.344307,
is_map: true,
pinyin: "suizhong"
},
{
id: 921,
name: "石嘴山",
abbr: "SZS",
area_code: "200467",
sort: 2000,
latitude: 38.9841,
longitude: 106.384178,
is_map: true,
pinyin: "shizuishan"
},
{
id: 932,
name: "寿光",
abbr: "SG",
area_code: "200478",
sort: 2000,
latitude: 36.855412,
longitude: 118.790977,
is_map: true,
pinyin: "shouguang"
},
{
id: 947,
name: "莘县",
abbr: "SX",
area_code: "200493",
sort: 2000,
latitude: 36.233608,
longitude: 115.670723,
is_map: true,
pinyin: "shenxian"
},
{
id: 1009,
name: "神木",
abbr: "SM",
area_code: "200555",
sort: 2000,
latitude: 38.842388,
longitude: 110.498962,
is_map: true,
pinyin: "shenmu"
},
{
id: 1011,
name: "双流",
abbr: "SL",
area_code: "200557",
sort: 2000,
latitude: 30.574471,
longitude: 103.923767,
is_map: true,
pinyin: "shuangliu"
},
{
id: 1016,
name: "射洪",
abbr: "SH",
area_code: "200562",
sort: 2000,
latitude: 30.87113,
longitude: 105.388359,
is_map: true,
pinyin: "shehong"
},
{
id: 1040,
name: "三台",
abbr: "ST",
area_code: "200586",
sort: 2000,
latitude: 31.095631,
longitude: 105.094589,
is_map: true,
pinyin: "santai"
},
{
id: 1048,
name: "什邡",
abbr: "SF",
area_code: "200594",
sort: 2000,
latitude: 31.127359,
longitude: 104.166939,
is_map: true,
pinyin: "shifang"
},
{
id: 1089,
name: "上虞",
abbr: "SY",
area_code: "200635",
sort: 2000,
latitude: 30.03227,
longitude: 120.868584,
is_map: true,
pinyin: "shangyu"
},
{
id: 1094,
name: "嵊州",
abbr: "SZ",
area_code: "200640",
sort: 2000,
latitude: 29.58849,
longitude: 120.821701,
is_map: true,
pinyin: "shengzhou"
},
{
id: 1113,
name: "三门",
abbr: "SM",
area_code: "200659",
sort: 2000,
latitude: 29.10467,
longitude: 121.395683,
is_map: true,
pinyin: "sanmen"
},
{
id: 1140,
name: "顺平",
abbr: "SP",
area_code: "130636",
sort: 2000,
latitude: 38.837589,
longitude: 115.135429,
is_map: false,
pinyin: "shunping"
},
{
id: 347,
name: "三河",
abbr: "SH",
area_code: "03161",
sort: 9999,
latitude: 39.98246,
longitude: 117.078217,
is_map: true,
pinyin: "sanhe"
},
{
id: 361,
name: "松原",
abbr: "SY",
area_code: "04381",
sort: 9999,
latitude: 45.141102,
longitude: 124.82515,
is_map: true,
pinyin: "songyuan"
},
{
id: 383,
name: "随州",
abbr: "SZ",
area_code: "0722",
sort: 9999,
latitude: 31.69013,
longitude: 113.382622,
is_map: true,
pinyin: "suizhou"
},
{
id: 1160,
name: "沙县",
abbr: "SX",
area_code: "350427",
sort: 9999,
latitude: 26.39617,
longitude: 117.792679,
is_map: true,
pinyin: "shaxian"
},
{
id: 1163,
name: "绥棱",
abbr: "SL",
area_code: "231226",
sort: 9999,
latitude: 47.236092,
longitude: 127.114777,
is_map: true,
pinyin: "suiling"
},
{
id: 1221,
name: "尚义",
abbr: "SY",
area_code: "130725",
sort: 9999,
latitude: 41.08009,
longitude: 113.977715,
is_map: true,
pinyin: "shangyi"
},
{
id: 1241,
name: "肃宁",
abbr: "SN",
area_code: "130926",
sort: 9999,
latitude: 38.427101,
longitude: 115.835854,
is_map: true,
pinyin: "suning"
},
{
id: 1389,
name: "商都",
abbr: "SD",
area_code: "150923",
sort: 9999,
latitude: 41.560162,
longitude: 113.560646,
is_map: true,
pinyin: "shangdu"
},
{
id: 1395,
name: "四子王旗",
abbr: "SZWQ",
area_code: "150929",
sort: 9999,
latitude: 41.528114,
longitude: 111.701233,
is_map: true,
pinyin: "siziwangqi"
},
{
id: 1406,
name: "苏尼特左旗",
abbr: "SNTZQ",
area_code: "152523",
sort: 9999,
latitude: 43.854107,
longitude: 113.653412,
is_map: true,
pinyin: "sunitezuoqi"
},
{
id: 1407,
name: "苏尼特右旗",
abbr: "SNTYQ",
area_code: "152524",
sort: 9999,
latitude: 42.746662,
longitude: 112.655388,
is_map: true,
pinyin: "suniteyouqi"
},
{
id: 1481,
name: "绥滨",
abbr: "SB",
area_code: "230422",
sort: 9999,
latitude: 47.28989,
longitude: 131.860519,
is_map: true,
pinyin: "suibin"
},
{
id: 1499,
name: "绥芬河",
abbr: "SFH",
area_code: "231080",
sort: 9999,
latitude: 44.396866,
longitude: 131.164856,
is_map: true,
pinyin: "suifenhe"
},
{
id: 1504,
name: "孙吴",
abbr: "SW",
area_code: "231124",
sort: 9999,
latitude: 49.423943,
longitude: 127.327316,
is_map: true,
pinyin: "sunwu"
},
{
id: 1521,
name: "嵊泗",
abbr: "SS",
area_code: "330922",
sort: 9999,
latitude: 30.727165,
longitude: 122.457809,
is_map: true,
pinyin: "shengsi"
},
{
id: 1522,
name: "遂昌",
abbr: "SC",
area_code: "331123",
sort: 9999,
latitude: 28.5924,
longitude: 119.275887,
is_map: true,
pinyin: "suichang"
},
{
id: 1523,
name: "松阳",
abbr: "SY",
area_code: "331124",
sort: 9999,
latitude: 28.449938,
longitude: 119.485291,
is_map: true,
pinyin: "songyang"
},
{
id: 1533,
name: "宿松",
abbr: "SS",
area_code: "340826",
sort: 9999,
latitude: 30.158327,
longitude: 116.120201,
is_map: true,
pinyin: "susong"
},
{
id: 1561,
name: "顺昌",
abbr: "SC",
area_code: "350721",
sort: 9999,
latitude: 26.79285,
longitude: 117.807709,
is_map: true,
pinyin: "shunchang"
},
{
id: 1563,
name: "松溪",
abbr: "SX",
area_code: "350724",
sort: 9999,
latitude: 27.525785,
longitude: 118.783493,
is_map: true,
pinyin: "songxi"
},
{
id: 1565,
name: "上杭县",
abbr: "SHX",
area_code: "350823",
sort: 9999,
latitude: 25.049431,
longitude: 116.420258,
is_map: true,
pinyin: "shanghangxian"
},
{
id: 1570,
name: "寿宁",
abbr: "SN",
area_code: "350924",
sort: 9999,
latitude: 27.457798,
longitude: 119.506737,
is_map: true,
pinyin: "shouning"
},
{
id: 1582,
name: "深泽县",
abbr: "SZX",
area_code: "130128",
sort: 9999,
latitude: 38.18454,
longitude: 115.200211,
is_map: true,
pinyin: "shenze"
},
{
id: 1587,
name: "上犹",
abbr: "SY",
area_code: "360724",
sort: 9999,
latitude: 25.794285,
longitude: 114.540535,
is_map: true,
pinyin: "shangyou"
},
{
id: 1593,
name: "石城县",
abbr: "SCX",
area_code: "360735",
sort: 9999,
latitude: 26.326582,
longitude: 116.342247,
is_map: true,
pinyin: "shicheng"
},
{
id: 1598,
name: "遂川县",
abbr: "SCX",
area_code: "360827",
sort: 9999,
latitude: 26.323706,
longitude: 114.516891,
is_map: true,
pinyin: "suichuan"
},
{
id: 1604,
name: "上高",
abbr: "SG",
area_code: "360923",
sort: 9999,
latitude: 28.234789,
longitude: 114.932655,
is_map: true,
pinyin: "shanggao"
},
{
id: 1625,
name: "商河",
abbr: "SH",
area_code: "370126",
sort: 9999,
latitude: 37.310543,
longitude: 117.156372,
is_map: true,
pinyin: "shanghe"
},
{
id: 1632,
name: "泗水",
abbr: "SS",
area_code: "370831",
sort: 9999,
latitude: 35.653217,
longitude: 117.273605,
is_map: true,
pinyin: "sishui"
},
{
id: 1643,
name: "嵩县",
abbr: "SX",
area_code: "410325",
sort: 9999,
latitude: 34.131561,
longitude: 112.087769,
is_map: true,
pinyin: "songxian"
},
{
id: 1664,
name: "陕县",
abbr: "SX",
area_code: "411222",
sort: 9999,
latitude: 34.701946,
longitude: 111.090828,
is_map: true,
pinyin: "shanxian"
},
{
id: 1671,
name: "商城",
abbr: "SC",
area_code: "411524",
sort: 9999,
latitude: 31.799982,
longitude: 115.406296,
is_map: true,
pinyin: "shangcheng"
},
{
id: 1703,
name: "韶山",
abbr: "SS",
area_code: "430382",
sort: 9999,
latitude: 27.922682,
longitude: 112.528481,
is_map: true,
pinyin: "shaoshan"
},
{
id: 1706,
name: "邵阳县",
abbr: "SYX",
area_code: "430523",
sort: 9999,
latitude: 26.989714,
longitude: 111.275703,
is_map: true,
pinyin: "shaoyang"
},
{
id: 1715,
name: "双牌",
abbr: "SP",
area_code: "431123",
sort: 9999,
latitude: 25.959396,
longitude: 111.662148,
is_map: true,
pinyin: "shuangpai"
},
{
id: 1769,
name: "上林",
abbr: "SL",
area_code: "450125",
sort: 9999,
latitude: 23.431768,
longitude: 108.603935,
is_map: true,
pinyin: "shanglin"
},
{
id: 1777,
name: "三江侗族自治县",
abbr: "SJDZZZX",
area_code: "450226",
sort: 9999,
latitude: 25.78553,
longitude: 109.614845,
is_map: true,
pinyin: "sanjiangdongzuzizhixian"
},
{
id: 1795,
name: "上思",
abbr: "SS",
area_code: "450621",
sort: 9999,
latitude: 22.151423,
longitude: 107.98214,
is_map: true,
pinyin: "shangsi"
},
{
id: 1959,
name: "水城",
abbr: "SC",
area_code: "520221",
sort: 9999,
latitude: 26.540478,
longitude: 104.956848,
is_map: true,
pinyin: "shuicheng"
},
{
id: 1962,
name: "绥阳",
abbr: "SY",
area_code: "520323",
sort: 9999,
latitude: 27.951342,
longitude: 107.191025,
is_map: true,
pinyin: "suiyang"
},
{
id: 1980,
name: "石阡",
abbr: "SQ",
area_code: "520623",
sort: 9999,
latitude: 27.519386,
longitude: 108.229851,
is_map: true,
pinyin: "shiqian"
},
{
id: 1981,
name: "思南",
abbr: "SN",
area_code: "520624",
sort: 9999,
latitude: 27.941332,
longitude: 108.255829,
is_map: true,
pinyin: "sinan"
},
{
id: 1985,
name: "松桃苗族自治县",
abbr: "STMZZZX",
area_code: "520628",
sort: 9999,
latitude: 28.165419,
longitude: 109.202629,
is_map: true,
pinyin: "songtaomiaozuzizhixian"
},
{
id: 1996,
name: "施秉",
abbr: "SB",
area_code: "522623",
sort: 9999,
latitude: 27.034657,
longitude: 108.126778,
is_map: true,
pinyin: "shibing"
},
{
id: 1997,
name: "三穗",
abbr: "SS",
area_code: "522624",
sort: 9999,
latitude: 26.959885,
longitude: 108.681122,
is_map: true,
pinyin: "sansui"
},
{
id: 2021,
name: "三都水族自治县",
abbr: "SDSZZZX",
area_code: "522732",
sort: 9999,
latitude: 25.985184,
longitude: 107.877472,
is_map: true,
pinyin: "sandushuizuzizhixian"
},
{
id: 2024,
name: "石林彝族自治县",
abbr: "SLYZZZX",
area_code: "530126",
sort: 9999,
latitude: 24.754545,
longitude: 103.271965,
is_map: true,
pinyin: "shilinyizuzizhixian"
},
{
id: 2025,
name: "嵩明",
abbr: "SM",
area_code: "530127",
sort: 9999,
latitude: 25.335087,
longitude: 103.03878,
is_map: true,
pinyin: "songming"
},
{
id: 2029,
name: "师宗",
abbr: "SZ",
area_code: "530323",
sort: 9999,
latitude: 24.825682,
longitude: 103.993805,
is_map: true,
pinyin: "shizong"
},
{
id: 2038,
name: "施甸",
abbr: "SD",
area_code: "530521",
sort: 9999,
latitude: 24.730846,
longitude: 99.183762,
is_map: true,
pinyin: "shidian"
},
{
id: 2046,
name: "绥江",
abbr: "SJ",
area_code: "530626",
sort: 9999,
latitude: 28.599953,
longitude: 103.961098,
is_map: true,
pinyin: "suijiang"
},
{
id: 2049,
name: "水富",
abbr: "SF",
area_code: "530630",
sort: 9999,
latitude: 28.629688,
longitude: 104.415375,
is_map: true,
pinyin: "shuifu"
},
{
id: 2068,
name: "双江拉祜族佤族布朗族傣族自治县",
abbr: "SJLHZWZBLZDZZZX",
area_code: "530925",
sort: 9999,
latitude: 23.477476,
longitude: 99.824417,
is_map: true,
pinyin: "shuangjianglahuzuwazubulangzudaizuzizhixian"
},
{
id: 2072,
name: "双柏",
abbr: "SB",
area_code: "532322",
sort: 9999,
latitude: 24.685095,
longitude: 101.638237,
is_map: true,
pinyin: "shuangbai"
},
{
id: 2083,
name: "石屏",
abbr: "SP",
area_code: "532525",
sort: 9999,
latitude: 23.712568,
longitude: 102.484467,
is_map: true,
pinyin: "shiping"
},
{
id: 2217,
name: "三原",
abbr: "SY",
area_code: "610422",
sort: 9999,
latitude: 34.613995,
longitude: 108.943481,
is_map: true,
pinyin: "sanyuan"
},
{
id: 2269,
name: "石泉",
abbr: "SQ",
area_code: "610922",
sort: 9999,
latitude: 33.038513,
longitude: 108.250511,
is_map: true,
pinyin: "shiquan"
},
{
id: 2277,
name: "商洛",
abbr: "SL",
area_code: "611000",
sort: 9999,
latitude: 33.86832,
longitude: 109.939774,
is_map: true,
pinyin: "shangluo"
},
{
id: 2280,
name: "商南",
abbr: "SN",
area_code: "611023",
sort: 9999,
latitude: 33.526367,
longitude: 110.885437,
is_map: true,
pinyin: "shangnan"
},
{
id: 2281,
name: "山阳",
abbr: "SY",
area_code: "611024",
sort: 9999,
latitude: 33.530411,
longitude: 109.880432,
is_map: true,
pinyin: "shanyang"
},
{
id: 2299,
name: "肃南裕固族自治县",
abbr: "SNYGZZZX",
area_code: "620721",
sort: 9999,
latitude: 38.837269,
longitude: 99.617088,
is_map: true,
pinyin: "sunanyuguzuzizhixian"
},
{
id: 2303,
name: "山丹",
abbr: "SD",
area_code: "620725",
sort: 9999,
latitude: 38.78484,
longitude: 101.08844,
is_map: true,
pinyin: "shandan"
},
{
id: 5819,
name: "思茅区",
abbr: "SMQ",
area_code: "530802",
sort: 9999,
latitude: 22.776594,
longitude: 100.973228,
is_map: true,
pinyin: "simaoqu"
}
],
H: [
{
id: 10,
name: "哈尔滨",
abbr: "HEB",
area_code: "0451",
sort: 4,
latitude: 45.802158,
longitude: 126.535797,
is_map: true,
pinyin: "haerbin"
},
{
id: 2,
name: "杭州",
abbr: "HZ",
area_code: "0571",
sort: 8,
latitude: 30.274151,
longitude: 120.155151,
is_map: true,
pinyin: "hangzhou"
},
{
id: 385,
name: "黄骅",
abbr: "HH",
area_code: "03172",
sort: 1900,
latitude: 38.371391,
longitude: 117.330116,
is_map: true,
pinyin: "huanghua"
},
{
id: 406,
name: "鹤壁",
abbr: "HB",
area_code: "0392",
sort: 1900,
latitude: 35.747002,
longitude: 114.297447,
is_map: true,
pinyin: "hebi"
},
{
id: 17,
name: "合肥",
abbr: "HF",
area_code: "0551",
sort: 2000,
latitude: 31.82057,
longitude: 117.229012,
is_map: true,
pinyin: "hefei"
},
{
id: 53,
name: "淮南",
abbr: "HN",
area_code: "0554",
sort: 2000,
latitude: 32.625488,
longitude: 116.999802,
is_map: true,
pinyin: "huainan"
},
{
id: 57,
name: "惠州",
abbr: "HZ",
area_code: "0752",
sort: 2000,
latitude: 23.11075,
longitude: 114.416786,
is_map: true,
pinyin: "huizhou"
},
{
id: 61,
name: "湖州",
abbr: "HZ",
area_code: "0572",
sort: 2000,
latitude: 30.893049,
longitude: 120.088051,
is_map: true,
pinyin: "huzhou"
},
{
id: 62,
name: "海口",
abbr: "HK",
area_code: "0898",
sort: 2000,
latitude: 20.04422,
longitude: 110.19989,
is_map: true,
pinyin: "haikou"
},
{
id: 92,
name: "呼和浩特",
abbr: "HHHT",
area_code: "0471",
sort: 2000,
latitude: 40.841492,
longitude: 111.751991,
is_map: true,
pinyin: "huhehaote"
},
{
id: 114,
name: "淮安",
abbr: "HA",
area_code: "0517",
sort: 2000,
latitude: 33.610161,
longitude: 119.015953,
is_map: true,
pinyin: "huaian"
},
{
id: 116,
name: "衡阳",
abbr: "HY",
area_code: "0734",
sort: 2000,
latitude: 26.89324,
longitude: 112.571953,
is_map: true,
pinyin: "hengyang"
},
{
id: 133,
name: "怀化",
abbr: "HH",
area_code: "0745",
sort: 2000,
latitude: 27.56974,
longitude: 110.001602,
is_map: true,
pinyin: "huaihua"
},
{
id: 152,
name: "黄石",
abbr: "HS",
area_code: "0714",
sort: 2000,
latitude: 30.19953,
longitude: 115.038902,
is_map: true,
pinyin: "huangshi"
},
{
id: 170,
name: "邯郸",
abbr: "HD",
area_code: "0310",
sort: 2000,
latitude: 36.625561,
longitude: 114.539177,
is_map: true,
pinyin: "handan"
},
{
id: 177,
name: "菏泽",
abbr: "HZ",
area_code: "0530",
sort: 2000,
latitude: 35.233631,
longitude: 115.481148,
is_map: true,
pinyin: "heze"
},
{
id: 199,
name: "黄山",
abbr: "HS",
area_code: "0559",
sort: 2000,
latitude: 29.71517,
longitude: 118.338661,
is_map: true,
pinyin: "huangshan"
},
{
id: 214,
name: "淮北",
abbr: "HB",
area_code: "0561",
sort: 2000,
latitude: 33.67078,
longitude: 116.926224,
is_map: true,
pinyin: "huaibei"
},
{
id: 217,
name: "黄冈",
abbr: "HG",
area_code: "0713",
sort: 2000,
latitude: 30.45347,
longitude: 114.872383,
is_map: true,
pinyin: "huanggang"
},
{
id: 218,
name: "葫芦岛",
abbr: "HLD",
area_code: "0429",
sort: 2000,
latitude: 40.710999,
longitude: 120.83699,
is_map: true,
pinyin: "huludao"
},
{
id: 245,
name: "红河",
abbr: "HHZZZ",
area_code: "0873",
sort: 2000,
latitude: 23.36907,
longitude: 102.420792,
is_map: true,
pinyin: "honghezizhizhou"
},
{
id: 252,
name: "贺州",
abbr: "HZ",
area_code: "4401002",
sort: 2000,
latitude: 24.40346,
longitude: 111.566551,
is_map: true,
pinyin: "hezhou"
},
{
id: 259,
name: "汉中",
abbr: "HZ",
area_code: "0916",
sort: 2000,
latitude: 33.067612,
longitude: 107.023773,
is_map: true,
pinyin: "hanzhong"
},
{
id: 266,
name: "衡水",
abbr: "HS",
area_code: "0318",
sort: 2000,
latitude: 37.738861,
longitude: 115.67054,
is_map: true,
pinyin: "hengshui"
},
{
id: 398,
name: "呼伦贝尔",
abbr: "HLBE",
area_code: "0470",
sort: 2000,
latitude: 49.211632,
longitude: 119.765839,
is_map: true,
pinyin: "hulunbeier"
},
{
id: 432,
name: "合川",
abbr: "HC",
area_code: "10010",
sort: 2000,
latitude: 29.972879,
longitude: 106.276787,
is_map: true,
pinyin: "hechuan"
},
{
id: 433,
name: "河西",
abbr: "HX",
area_code: "10011",
sort: 2000,
latitude: 39.109539,
longitude: 117.223358,
is_map: true,
pinyin: "hexi"
},
{
id: 466,
name: "霍邱",
abbr: "HQ",
area_code: "200012",
sort: 2000,
latitude: 32.353199,
longitude: 116.278229,
is_map: true,
pinyin: "huoqiu"
},
{
id: 471,
name: "怀远",
abbr: "HY",
area_code: "200017",
sort: 2000,
latitude: 32.9701,
longitude: 117.205139,
is_map: true,
pinyin: "huaiyuan"
},
{
id: 478,
name: "和县",
abbr: "HX",
area_code: "200024",
sort: 2000,
latitude: 31.74423,
longitude: 118.351448,
is_map: true,
pinyin: "hexian"
},
{
id: 481,
name: "怀宁",
abbr: "HN",
area_code: "200027",
sort: 2000,
latitude: 30.73381,
longitude: 116.829742,
is_map: true,
pinyin: "huaining"
},
{
id: 488,
name: "霍山",
abbr: "HS",
area_code: "200034",
sort: 2000,
latitude: 31.39279,
longitude: 116.332687,
is_map: true,
pinyin: "huoshan"
},
{
id: 496,
name: "惠安",
abbr: "HA",
area_code: "200042",
sort: 2000,
latitude: 25.030649,
longitude: 118.796951,
is_map: true,
pinyin: "huian"
},
{
id: 535,
name: "海丰",
abbr: "HF",
area_code: "200081",
sort: 2000,
latitude: 22.96657,
longitude: 115.32341,
is_map: true,
pinyin: "haifeng"
},
{
id: 536,
name: "惠来",
abbr: "HL",
area_code: "200082",
sort: 2000,
latitude: 23.033211,
longitude: 116.295113,
is_map: true,
pinyin: "huilai"
},
{
id: 537,
name: "惠东",
abbr: "HD",
area_code: "200083",
sort: 2000,
latitude: 22.984859,
longitude: 114.719994,
is_map: true,
pinyin: "huidong"
},
{
id: 550,
name: "鹤山",
abbr: "HS",
area_code: "200096",
sort: 2000,
latitude: 22.765301,
longitude: 112.964363,
is_map: true,
pinyin: "heshan"
},
{
id: 554,
name: "化州",
abbr: "HZ",
area_code: "200100",
sort: 2000,
latitude: 21.663971,
longitude: 110.639542,
is_map: true,
pinyin: "huazhou"
},
{
id: 633,
name: "淮阳",
abbr: "HY",
area_code: "200179",
sort: 2000,
latitude: 33.731499,
longitude: 114.886139,
is_map: true,
pinyin: "huaiyang"
},
{
id: 648,
name: "潢川",
abbr: "HC",
area_code: "200194",
sort: 2000,
latitude: 32.131561,
longitude: 115.051292,
is_map: true,
pinyin: "huangchuan"
},
{
id: 653,
name: "辉县",
abbr: "HX",
area_code: "200199",
sort: 2000,
latitude: 35.46212,
longitude: 113.805397,
is_map: true,
pinyin: "huixian"
},
{
id: 660,
name: "滑县",
abbr: "HX",
area_code: "200206",
sort: 2000,
latitude: 35.57534,
longitude: 114.519302,
is_map: true,
pinyin: "huaxian"
},
{
id: 672,
name: "睢县",
abbr: "HX",
area_code: "200218",
sort: 2000,
latitude: 34.445259,
longitude: 115.071533,
is_map: true,
pinyin: "huixian"
},
{
id: 682,
name: "淮滨",
abbr: "HB",
area_code: "200228",
sort: 2000,
latitude: 32.473389,
longitude: 115.419868,
is_map: true,
pinyin: "huaibin"
},
{
id: 697,
name: "鹤岗",
abbr: "HG",
area_code: "200243",
sort: 2000,
latitude: 47.349892,
longitude: 130.297852,
is_map: true,
pinyin: "hegang"
},
{
id: 711,
name: "汉川",
abbr: "HC",
area_code: "200257",
sort: 2000,
latitude: 30.661221,
longitude: 113.839073,
is_map: true,
pinyin: "hanchuan"
},
{
id: 717,
name: "黄梅",
abbr: "HM",
area_code: "200263",
sort: 2000,
latitude: 30.07037,
longitude: 115.944321,
is_map: true,
pinyin: "huangmei"
},
{
id: 720,
name: "洪湖",
abbr: "HH",
area_code: "200266",
sort: 2000,
latitude: 29.82756,
longitude: 113.477753,
is_map: true,
pinyin: "honghu"
},
{
id: 738,
name: "红安",
abbr: "HA",
area_code: "200284",
sort: 2000,
latitude: 31.288099,
longitude: 114.618134,
is_map: true,
pinyin: "hongan"
},
{
id: 759,
name: "衡南",
abbr: "HN",
area_code: "200305",
sort: 2000,
latitude: 26.73831,
longitude: 112.677917,
is_map: true,
pinyin: "hengnan"
},
{
id: 775,
name: "汉寿",
abbr: "HS",
area_code: "200321",
sort: 2000,
latitude: 28.905491,
longitude: 111.970428,
is_map: true,
pinyin: "hanshou"
},
{
id: 778,
name: "华容",
abbr: "HR",
area_code: "200324",
sort: 2000,
latitude: 29.53023,
longitude: 112.540947,
is_map: true,
pinyin: "huarong"
},
{
id: 787,
name: "衡东",
abbr: "HD",
area_code: "200333",
sort: 2000,
latitude: 27.08116,
longitude: 112.953247,
is_map: true,
pinyin: "hengdong"
},
{
id: 793,
name: "洪江",
abbr: "HJ",
area_code: "200339",
sort: 2000,
latitude: 27.209249,
longitude: 109.836548,
is_map: true,
pinyin: "hongjiang"
},
{
id: 816,
name: "桦甸",
abbr: "HD",
area_code: "200362",
sort: 2000,
latitude: 42.97208,
longitude: 126.746269,
is_map: true,
pinyin: "huadian"
},
{
id: 820,
name: "珲春",
abbr: "HC",
area_code: "200366",
sort: 2000,
latitude: 42.862492,
longitude: 130.365768,
is_map: true,
pinyin: "hunchun"
},
{
id: 822,
name: "辉南",
abbr: "HN",
area_code: "200368",
sort: 2000,
latitude: 42.68499,
longitude: 126.046867,
is_map: true,
pinyin: "huinan"
},
{
id: 835,
name: "睢宁",
abbr: "HN",
area_code: "200381",
sort: 2000,
latitude: 33.912739,
longitude: 117.941078,
is_map: true,
pinyin: "huining"
},
{
id: 837,
name: "海门",
abbr: "HM",
area_code: "200383",
sort: 2000,
latitude: 31.871651,
longitude: 121.181793,
is_map: true,
pinyin: "haimen"
},
{
id: 838,
name: "海安",
abbr: "HA",
area_code: "200384",
sort: 2000,
latitude: 32.533081,
longitude: 120.46759,
is_map: true,
pinyin: "haian"
},
{
id: 882,
name: "会昌",
abbr: "HC",
area_code: "200428",
sort: 2000,
latitude: 25.600389,
longitude: 115.786003,
is_map: true,
pinyin: "huichang"
},
{
id: 908,
name: "黑山",
abbr: "HS",
area_code: "200454",
sort: 2000,
latitude: 41.693909,
longitude: 122.120659,
is_map: true,
pinyin: "heishan"
},
{
id: 961,
name: "桓台",
abbr: "HT",
area_code: "200507",
sort: 2000,
latitude: 36.959332,
longitude: 118.097969,
is_map: true,
pinyin: "huantai"
},
{
id: 975,
name: "海阳",
abbr: "HY",
area_code: "200521",
sort: 2000,
latitude: 36.776451,
longitude: 121.158463,
is_map: true,
pinyin: "haiyang"
},
{
id: 978,
name: "惠民",
abbr: "HM",
area_code: "200524",
sort: 2000,
latitude: 37.489819,
longitude: 117.509201,
is_map: true,
pinyin: "huimin"
},
{
id: 998,
name: "洪洞",
abbr: "HD",
area_code: "200544",
sort: 2000,
latitude: 36.253738,
longitude: 111.674957,
is_map: true,
pinyin: "hongdong"
},
{
id: 1006,
name: "河津",
abbr: "HJ",
area_code: "200552",
sort: 2000,
latitude: 35.596432,
longitude: 110.711861,
is_map: true,
pinyin: "hejin"
},
{
id: 1038,
name: "合江",
abbr: "HJ",
area_code: "200584",
sort: 2000,
latitude: 28.81147,
longitude: 105.831352,
is_map: true,
pinyin: "hejiang"
},
{
id: 1061,
name: "会泽",
abbr: "HZ",
area_code: "200607",
sort: 2000,
latitude: 26.41791,
longitude: 103.297371,
is_map: true,
pinyin: "huize"
},
{
id: 1085,
name: "海宁",
abbr: "HN",
area_code: "200631",
sort: 2000,
latitude: 30.50938,
longitude: 120.681023,
is_map: true,
pinyin: "haining"
},
{
id: 1101,
name: "海盐",
abbr: "HY",
area_code: "200647",
sort: 2000,
latitude: 30.52553,
longitude: 120.945793,
is_map: true,
pinyin: "haiyan"
},
{
id: 365,
name: "河源",
abbr: "HY",
area_code: "0762",
sort: 9999,
latitude: 23.74365,
longitude: 114.700653,
is_map: true,
pinyin: "heyuan"
},
{
id: 366,
name: "河间",
abbr: "HJ",
area_code: "03173",
sort: 9999,
latitude: 38.44548,
longitude: 116.098999,
is_map: true,
pinyin: "hejian"
},
{
id: 368,
name: "海城",
abbr: "HC",
area_code: "04121",
sort: 9999,
latitude: 40.881451,
longitude: 122.684631,
is_map: true,
pinyin: "haicheng"
},
{
id: 1149,
name: "黑河",
abbr: "HH",
area_code: "231100",
sort: 9999,
latitude: 50.245232,
longitude: 127.528519,
is_map: true,
pinyin: "heihe"
},
{
id: 1156,
name: "海伦",
abbr: "HL",
area_code: "231283",
sort: 9999,
latitude: 47.462101,
longitude: 126.973381,
is_map: true,
pinyin: "hailun"
},
{
id: 1167,
name: "河池",
abbr: "HC",
area_code: "451200",
sort: 9999,
latitude: 24.692909,
longitude: 108.085403,
is_map: true,
pinyin: "hechi"
},
{
id: 1173,
name: "怀柔",
abbr: "HY",
area_code: "110116",
sort: 9999,
latitude: 40.316002,
longitude: 116.631767,
is_map: true,
pinyin: "huairou"
},
{
id: 1224,
name: "怀安",
abbr: "HA",
area_code: "130728",
sort: 9999,
latitude: 40.678555,
longitude: 114.718155,
is_map: true,
pinyin: "huaian"
},
{
id: 1226,
name: "怀来",
abbr: "HL",
area_code: "130730",
sort: 9999,
latitude: 40.405403,
longitude: 115.520844,
is_map: true,
pinyin: "huailai"
},
{
id: 1240,
name: "海兴",
abbr: "HX",
area_code: "130924",
sort: 9999,
latitude: 38.141582,
longitude: 117.496605,
is_map: true,
pinyin: "haixing"
},
{
id: 1289,
name: "怀仁县",
abbr: "HRX",
area_code: "140624",
sort: 9999,
latitude: 39.820789,
longitude: 113.10051,
is_map: true,
pinyin: "huairen"
},
{
id: 1330,
name: "侯马",
abbr: "HM",
area_code: "141081",
sort: 9999,
latitude: 35.6203,
longitude: 111.371269,
is_map: true,
pinyin: "houma"
},
{
id: 1345,
name: "和林格尔",
abbr: "HLGE",
area_code: "150123",
sort: 9999,
latitude: 40.380287,
longitude: 111.824142,
is_map: true,
pinyin: "helingeer"
},
{
id: 1365,
name: "霍林郭勒",
abbr: "HLGL",
area_code: "150581",
sort: 9999,
latitude: 45.53236,
longitude: 119.65786,
is_map: true,
pinyin: "huolinguole"
},
{
id: 1368,
name: "杭锦旗",
abbr: "HJQ",
area_code: "150625",
sort: 9999,
latitude: 39.831787,
longitude: 108.73632,
is_map: true,
pinyin: "hangjinqi"
},
{
id: 1386,
name: "杭锦后旗",
abbr: "HJHQ",
area_code: "150826",
sort: 9999,
latitude: 40.888798,
longitude: 107.147682,
is_map: true,
pinyin: "hangjinhouqi"
},
{
id: 1388,
name: "化德",
abbr: "HD",
area_code: "150922",
sort: 9999,
latitude: 41.899334,
longitude: 114.010078,
is_map: true,
pinyin: "huade"
},
{
id: 1428,
name: "桓仁满族自治县",
abbr: "HRMZZZX",
area_code: "210522",
sort: 9999,
latitude: 41.268997,
longitude: 125.359192,
is_map: true,
pinyin: "huanrenmanzuzizhixian"
},
{
id: 1462,
name: "和龙",
abbr: "HL",
area_code: "222406",
sort: 9999,
latitude: 42.547005,
longitude: 129.008743,
is_map: true,
pinyin: "helong"
},
{
id: 1478,
name: "虎林",
abbr: "HL",
area_code: "230381",
sort: 9999,
latitude: 45.767986,
longitude: 132.973877,
is_map: true,
pinyin: "hulin"
},
{
id: 1491,
name: "桦南",
abbr: "HN",
area_code: "230822",
sort: 9999,
latitude: 46.240116,
longitude: 130.570114,
is_map: true,
pinyin: "huanan"
},
{
id: 1492,
name: "桦川",
abbr: "HC",
area_code: "230826",
sort: 9999,
latitude: 47.023041,
longitude: 130.723709,
is_map: true,
pinyin: "huachuan"
},
{
id: 1500,
name: "海林",
abbr: "HL",
area_code: "231082",
sort: 9999,
latitude: 44.57415,
longitude: 129.387909,
is_map: true,
pinyin: "hailin"
},
{
id: 1512,
name: "呼玛",
abbr: "HM",
area_code: "232721",
sort: 9999,
latitude: 51.726997,
longitude: 126.662102,
is_map: true,
pinyin: "huma"
},
{
id: 1514,
name: "洪泽",
abbr: "HZ",
area_code: "320829",
sort: 9999,
latitude: 33.294975,
longitude: 118.867874,
is_map: true,
pinyin: "hongze"
},
{
id: 1560,
name: "华安",
abbr: "HA",
area_code: "350629",
sort: 9999,
latitude: 25.001415,
longitude: 117.536308,
is_map: true,
pinyin: "huaan"
},
{
id: 1580,
name: "湖口",
abbr: "HK",
area_code: "360429",
sort: 9999,
latitude: 29.726299,
longitude: 116.244316,
is_map: true,
pinyin: "hukou"
},
{
id: 1618,
name: "横峰",
abbr: "HF",
area_code: "361125",
sort: 9999,
latitude: 28.415104,
longitude: 117.608246,
is_map: true,
pinyin: "hengfeng"
},
{
id: 1653,
name: "获嘉",
abbr: "HJ",
area_code: "410724",
sort: 9999,
latitude: 35.261684,
longitude: 113.657249,
is_map: true,
pinyin: "huojia"
},
{
id: 1705,
name: "衡山",
abbr: "HS",
area_code: "430423",
sort: 9999,
latitude: 27.234808,
longitude: 112.869713,
is_map: true,
pinyin: "hengshan"
},
{
id: 1754,
name: "和平",
abbr: "HP",
area_code: "441624",
sort: 9999,
latitude: 24.44318,
longitude: 114.941475,
is_map: true,
pinyin: "heping"
},
{
id: 1771,
name: "横县",
abbr: "HX",
area_code: "450127",
sort: 9999,
latitude: 22.687429,
longitude: 109.270988,
is_map: true,
pinyin: "hengxian"
},
{
id: 1793,
name: "合浦",
abbr: "HP",
area_code: "450521",
sort: 9999,
latitude: 21.663553,
longitude: 109.200691,
is_map: true,
pinyin: "hepu"
},
{
id: 1823,
name: "环江毛南族自治县",
abbr: "HJMNZZZX",
area_code: "451226",
sort: 9999,
latitude: 24.827627,
longitude: 108.258667,
is_map: true,
pinyin: "huanjiangmaonanzuzizhixian"
},
{
id: 1832,
name: "合山",
abbr: "HS",
area_code: "451381",
sort: 9999,
latitude: 23.81311,
longitude: 108.88858,
is_map: true,
pinyin: "heshan"
},
{
id: 1893,
name: "华蓥",
abbr: "HY",
area_code: "511681",
sort: 9999,
latitude: 30.380573,
longitude: 106.777885,
is_map: true,
pinyin: "huaying"
},
{
id: 1977,
name: "赫章",
abbr: "HZ",
area_code: "520527",
sort: 9999,
latitude: 27.119244,
longitude: 104.72644,
is_map: true,
pinyin: "hezhang"
},
{
id: 1995,
name: "黄平",
abbr: "HP",
area_code: "522622",
sort: 9999,
latitude: 26.896973,
longitude: 107.901337,
is_map: true,
pinyin: "huangping"
},
{
id: 2020,
name: "惠水",
abbr: "HS",
area_code: "522731",
sort: 9999,
latitude: 26.128637,
longitude: 106.657845,
is_map: true,
pinyin: "huishui"
},
{
id: 2033,
name: "华宁",
abbr: "HN",
area_code: "530424",
sort: 9999,
latitude: 24.189808,
longitude: 102.928986,
is_map: true,
pinyin: "huaning"
},
{
id: 2052,
name: "华坪",
abbr: "HP",
area_code: "530723",
sort: 9999,
latitude: 26.628834,
longitude: 101.267799,
is_map: true,
pinyin: "huaping"
},
{
id: 2081,
name: "红河哈尼族彝族自治州",
abbr: "HHHNZYZZZZ",
area_code: "532500",
sort: 9999,
latitude: 23.366776,
longitude: 103.384186,
is_map: true,
pinyin: "honghehanizuyizuzizhizhou"
},
{
id: 2088,
name: "河口瑶族自治县",
abbr: "HKYZZZX",
area_code: "532532",
sort: 9999,
latitude: 22.507563,
longitude: 103.961594,
is_map: true,
pinyin: "hekouyaozuzizhixian"
},
{
id: 2110,
name: "鹤庆",
abbr: "HQ",
area_code: "532932",
sort: 9999,
latitude: 26.55839,
longitude: 100.173378,
is_map: true,
pinyin: "heqing"
},
{
id: 2231,
name: "合阳",
abbr: "HY",
area_code: "610524",
sort: 9999,
latitude: 35.237099,
longitude: 110.14798,
is_map: true,
pinyin: "heyang"
},
{
id: 2236,
name: "韩城",
abbr: "HC",
area_code: "610581",
sort: 9999,
latitude: 35.475239,
longitude: 110.452393,
is_map: true,
pinyin: "hancheng"
},
{
id: 2237,
name: "华阴",
abbr: "HY",
area_code: "610582",
sort: 9999,
latitude: 34.565357,
longitude: 110.089523,
is_map: true,
pinyin: "huayin"
},
{
id: 2261,
name: "横山",
abbr: "HS",
area_code: "610823",
sort: 9999,
latitude: 37.964046,
longitude: 109.292595,
is_map: true,
pinyin: "hengshan"
},
{
id: 2268,
name: "汉阴",
abbr: "HY",
area_code: "610921",
sort: 9999,
latitude: 32.891121,
longitude: 108.510948,
is_map: true,
pinyin: "hanyin"
},
{
id: 2348,
name: "合作",
abbr: "HZ",
area_code: "623001",
sort: 9999,
latitude: 34.985973,
longitude: 102.911491,
is_map: true,
pinyin: "hezuo"
},
{
id: 2359,
name: "海东",
abbr: "HD",
area_code: "630200",
sort: 9999,
latitude: 36.502914,
longitude: 102.103271,
is_map: true,
pinyin: "haidong"
},
{
id: 2422,
name: "哈密",
abbr: "HM",
area_code: "650500",
sort: 9999,
latitude: 42.833248,
longitude: 93.513161,
is_map: true,
pinyin: "hami"
},
{
id: 5106,
name: "海拉尔区",
abbr: "HLEQ",
area_code: "150702",
sort: 9999,
latitude: 49.215385,
longitude: 119.758965,
is_map: true,
pinyin: "hailaerqu"
}
],
N: [
{
id: 6,
name: "南京",
abbr: "NJ",
area_code: "025",
sort: 5,
latitude: 31.84178,
longitude: 118.504669,
is_map: true,
pinyin: "nanjing"
},
{
id: 18,
name: "宁波",
abbr: "NB",
area_code: "0574",
sort: 18,
latitude: 29.873859,
longitude: 121.55027,
is_map: true,
pinyin: "ningbo"
},
{
id: 25,
name: "南昌",
abbr: "NC",
area_code: "0791",
sort: 2000,
latitude: 28.68202,
longitude: 115.857941,
is_map: true,
pinyin: "nanchang"
},
{
id: 39,
name: "南通",
abbr: "NT",
area_code: "0513",
sort: 2000,
latitude: 31.97958,
longitude: 120.893707,
is_map: true,
pinyin: "nantong"
},
{
id: 45,
name: "南宁",
abbr: "NN",
area_code: "0771",
sort: 2000,
latitude: 22.81673,
longitude: 108.366898,
is_map: true,
pinyin: "nanning"
},
{
id: 99,
name: "南充",
abbr: "NC",
area_code: "0817",
sort: 2000,
latitude: 30.837311,
longitude: 106.110733,
is_map: true,
pinyin: "nanchong"
},
{
id: 104,
name: "内江",
abbr: "NJ",
area_code: "0832",
sort: 2000,
latitude: 29.580151,
longitude: 105.058441,
is_map: true,
pinyin: "neijiang"
},
{
id: 117,
name: "南平",
abbr: "NP",
area_code: "0599",
sort: 2000,
latitude: 26.64152,
longitude: 118.177834,
is_map: true,
pinyin: "nanping"
},
{
id: 260,
name: "南阳",
abbr: "NY",
area_code: "0377",
sort: 2000,
latitude: 32.99073,
longitude: 112.528511,
is_map: true,
pinyin: "nanyang"
},
{
id: 271,
name: "宁德",
abbr: "ND",
area_code: "0593",
sort: 2000,
latitude: 26.66571,
longitude: 119.548187,
is_map: true,
pinyin: "ningde"
},
{
id: 442,
name: "南岸",
abbr: "NA",
area_code: "10020",
sort: 2000,
latitude: 29.521681,
longitude: 106.562561,
is_map: true,
pinyin: "nanan"
},
{
id: 443,
name: "南川",
abbr: "NC",
area_code: "10021",
sort: 2000,
latitude: 29.157881,
longitude: 107.098961,
is_map: true,
pinyin: "nanchuan"
},
{
id: 480,
name: "宁国",
abbr: "NG",
area_code: "200026",
sort: 2000,
latitude: 30.63364,
longitude: 118.98336,
is_map: true,
pinyin: "ningguo"
},
{
id: 495,
name: "南安",
abbr: "NA",
area_code: "200041",
sort: 2000,
latitude: 24.9604,
longitude: 118.386269,
is_map: true,
pinyin: "nanan"
},
{
id: 579,
name: "纳雍",
abbr: "NY",
area_code: "200125",
sort: 2000,
latitude: 26.7777,
longitude: 105.38269,
is_map: true,
pinyin: "nayong"
},
{
id: 590,
name: "宁晋",
abbr: "NJ",
area_code: "200136",
sort: 2000,
latitude: 37.619801,
longitude: 114.919319,
is_map: true,
pinyin: "ningjin"
},
{
id: 616,
name: "南宫",
abbr: "NG",
area_code: "200162",
sort: 2000,
latitude: 37.357948,
longitude: 115.408661,
is_map: true,
pinyin: "nangong"
},
{
id: 687,
name: "南召",
abbr: "NZ",
area_code: "200233",
sort: 2000,
latitude: 33.489792,
longitude: 112.429138,
is_map: true,
pinyin: "nanzhao"
},
{
id: 691,
name: "内乡",
abbr: "NX",
area_code: "200237",
sort: 2000,
latitude: 33.04483,
longitude: 111.849258,
is_map: true,
pinyin: "neixiang"
},
{
id: 703,
name: "嫩江",
abbr: "NJ",
area_code: "200249",
sort: 2000,
latitude: 49.185719,
longitude: 125.22094,
is_map: true,
pinyin: "nenjiang"
},
{
id: 706,
name: "讷河",
abbr: "NH",
area_code: "200252",
sort: 2000,
latitude: 48.484192,
longitude: 124.883972,
is_map: true,
pinyin: "nehe"
},
{
id: 742,
name: "南漳",
abbr: "NZ",
area_code: "200288",
sort: 2000,
latitude: 31.77471,
longitude: 111.83902,
is_map: true,
pinyin: "nanzhang"
},
{
id: 751,
name: "宁乡",
abbr: "NX",
area_code: "200297",
sort: 2000,
latitude: 28.277411,
longitude: 112.551826,
is_map: true,
pinyin: "ningxiang"
},
{
id: 765,
name: "南县",
abbr: "NX",
area_code: "200311",
sort: 2000,
latitude: 29.36162,
longitude: 112.396362,
is_map: true,
pinyin: "nanxian"
},
{
id: 771,
name: "宁远",
abbr: "NY",
area_code: "200317",
sort: 2000,
latitude: 25.569189,
longitude: 111.94445,
is_map: true,
pinyin: "ningyuan"
},
{
id: 815,
name: "农安",
abbr: "NA",
area_code: "200361",
sort: 2000,
latitude: 44.43195,
longitude: 125.18512,
is_map: true,
pinyin: "nongan"
},
{
id: 872,
name: "南康",
abbr: "NK",
area_code: "200418",
sort: 2000,
latitude: 25.66144,
longitude: 114.76535,
is_map: true,
pinyin: "nankang"
},
{
id: 881,
name: "宁都",
abbr: "ND",
area_code: "200427",
sort: 2000,
latitude: 26.47019,
longitude: 116.009407,
is_map: true,
pinyin: "ningdu"
},
{
id: 967,
name: "宁阳",
abbr: "NY",
area_code: "200513",
sort: 2000,
latitude: 35.759609,
longitude: 116.807266,
is_map: true,
pinyin: "ningyang"
},
{
id: 1033,
name: "南部",
abbr: "NB",
area_code: "200579",
sort: 2000,
latitude: 31.353161,
longitude: 106.067337,
is_map: true,
pinyin: "nanbu"
},
{
id: 1051,
name: "宁河",
abbr: "NH",
area_code: "200597",
sort: 2000,
latitude: 39.330761,
longitude: 117.824738,
is_map: true,
pinyin: "ninghe"
},
{
id: 1090,
name: "宁海",
abbr: "NH",
area_code: "200636",
sort: 2000,
latitude: 29.288071,
longitude: 121.429611,
is_map: true,
pinyin: "ninghai"
},
{
id: 1172,
name: "宁化",
abbr: "NH",
area_code: "350424",
sort: 9999,
latitude: 26.26178,
longitude: 116.654427,
is_map: true,
pinyin: "ninghua"
},
{
id: 1192,
name: "内丘",
abbr: "NQ",
area_code: "130523",
sort: 9999,
latitude: 37.287663,
longitude: 114.51152,
is_map: true,
pinyin: "neiqiu"
},
{
id: 1195,
name: "南和",
abbr: "NH",
area_code: "130527",
sort: 9999,
latitude: 37.003811,
longitude: 114.691376,
is_map: true,
pinyin: "nanhe"
},
{
id: 1242,
name: "南皮",
abbr: "NP",
area_code: "130927",
sort: 9999,
latitude: 38.042439,
longitude: 116.709167,
is_map: true,
pinyin: "nanpi"
},
{
id: 1357,
name: "宁城",
abbr: "NC",
area_code: "150429",
sort: 9999,
latitude: 41.598694,
longitude: 119.339241,
is_map: true,
pinyin: "ningcheng"
},
{
id: 1363,
name: "奈曼旗",
abbr: "NMQ",
area_code: "150525",
sort: 9999,
latitude: 42.846851,
longitude: 120.662544,
is_map: true,
pinyin: "naimanqi"
},
{
id: 1501,
name: "宁安",
abbr: "NA",
area_code: "231084",
sort: 9999,
latitude: 44.346836,
longitude: 129.470016,
is_map: true,
pinyin: "ningan"
},
{
id: 1528,
name: "南陵",
abbr: "NL",
area_code: "340223",
sort: 9999,
latitude: 30.919638,
longitude: 118.337105,
is_map: true,
pinyin: "nanling"
},
{
id: 1559,
name: "南靖",
abbr: "NJ",
area_code: "350627",
sort: 9999,
latitude: 24.516424,
longitude: 117.365463,
is_map: true,
pinyin: "nanjing"
},
{
id: 1608,
name: "南城",
abbr: "NC",
area_code: "361021",
sort: 9999,
latitude: 27.555309,
longitude: 116.63945,
is_map: true,
pinyin: "nancheng"
},
{
id: 1610,
name: "南丰",
abbr: "NF",
area_code: "361023",
sort: 9999,
latitude: 27.210133,
longitude: 116.532997,
is_map: true,
pinyin: "nanfeng"
},
{
id: 1634,
name: "宁津",
abbr: "NJ",
area_code: "371422",
sort: 9999,
latitude: 37.64962,
longitude: 116.793716,
is_map: true,
pinyin: "ningjin"
},
{
id: 1650,
name: "内黄",
abbr: "NH",
area_code: "410527",
sort: 9999,
latitude: 35.953701,
longitude: 114.904579,
is_map: true,
pinyin: "neihuang"
},
{
id: 1658,
name: "南乐",
abbr: "NL",
area_code: "410923",
sort: 9999,
latitude: 36.075203,
longitude: 115.204338,
is_map: true,
pinyin: "nanle"
},
{
id: 1668,
name: "宁陵",
abbr: "NL",
area_code: "411423",
sort: 9999,
latitude: 34.449299,
longitude: 115.320053,
is_map: true,
pinyin: "ningling"
},
{
id: 1740,
name: "南雄市",
abbr: "NXS",
area_code: "440282",
sort: 9999,
latitude: 25.115328,
longitude: 114.311234,
is_map: true,
pinyin: "nanxiongshi"
},
{
id: 1808,
name: "那坡",
abbr: "NP",
area_code: "451026",
sort: 9999,
latitude: 23.400785,
longitude: 105.833549,
is_map: true,
pinyin: "napo"
},
{
id: 1818,
name: "南丹",
abbr: "ND",
area_code: "451221",
sort: 9999,
latitude: 24.983192,
longitude: 107.546608,
is_map: true,
pinyin: "nandan"
},
{
id: 2053,
name: "宁蒗彝族自治县",
abbr: "NLYZZZX",
area_code: "530724",
sort: 9999,
latitude: 27.281109,
longitude: 100.852425,
is_map: true,
pinyin: "ninglangyizuzizhixian"
},
{
id: 2054,
name: "宁洱哈尼族彝族自治县",
abbr: "NEHNZYZZZX",
area_code: "530821",
sort: 9999,
latitude: 23.062508,
longitude: 101.045242,
is_map: true,
pinyin: "ningerhanizuyizuzizhixian"
},
{
id: 2074,
name: "南华",
abbr: "NH",
area_code: "532324",
sort: 9999,
latitude: 25.192408,
longitude: 101.274994,
is_map: true,
pinyin: "nanhua"
},
{
id: 2104,
name: "南涧彝族自治县",
abbr: "NJYZZZX",
area_code: "532926",
sort: 9999,
latitude: 25.041279,
longitude: 100.518684,
is_map: true,
pinyin: "nanjianyizuzizhixian"
},
{
id: 2176,
name: "那曲地区",
abbr: "NQDQ",
area_code: "542400",
sort: 9999,
latitude: 31.47694,
longitude: 92.058083,
is_map: true,
pinyin: "naqudiqu"
},
{
id: 5224,
name: "南岔区",
abbr: "NCQ",
area_code: "230703",
sort: 9999,
latitude: 47.137314,
longitude: 129.282455,
is_map: true,
pinyin: "nanchaqu"
}
],
G: [
{
id: 4,
name: "广州",
abbr: "GZ",
area_code: "020",
sort: 6,
latitude: 23.12908,
longitude: 113.264359,
is_map: true,
pinyin: "guangzhou"
},
{
id: 417,
name: "巩义",
abbr: "GY",
area_code: "03712",
sort: 1900,
latitude: 34.747978,
longitude: 113.022057,
is_map: true,
pinyin: "gongyi"
},
{
id: 98,
name: "桂林",
abbr: "GL",
area_code: "0773",
sort: 2000,
latitude: 25.273609,
longitude: 110.290024,
is_map: true,
pinyin: "guilin"
},
{
id: 129,
name: "赣州",
abbr: "GZ",
area_code: "0797",
sort: 2000,
latitude: 25.831091,
longitude: 114.934761,
is_map: true,
pinyin: "ganzhou"
},
{
id: 137,
name: "贵阳",
abbr: "GY",
area_code: "0851",
sort: 2000,
latitude: 26.64702,
longitude: 106.630241,
is_map: true,
pinyin: "guiyang"
},
{
id: 197,
name: "广汉",
abbr: "GHS",
area_code: "510600",
sort: 2000,
latitude: 30.97706,
longitude: 104.282494,
is_map: true,
pinyin: "guanghanshi"
},
{
id: 262,
name: "广元",
abbr: "GY",
area_code: "0839",
sort: 2000,
latitude: 32.43549,
longitude: 105.843567,
is_map: true,
pinyin: "guangyuan"
},
{
id: 316,
name: "广安",
abbr: "GA",
area_code: "0826",
sort: 2000,
latitude: 30.455959,
longitude: 106.633217,
is_map: true,
pinyin: "guangan"
},
{
id: 431,
name: "贵港",
abbr: "GG",
area_code: "10009",
sort: 2000,
latitude: 23.11306,
longitude: 109.597641,
is_map: true,
pinyin: "guigang"
},
{
id: 477,
name: "广德",
abbr: "GD",
area_code: "200023",
sort: 2000,
latitude: 30.893801,
longitude: 119.417053,
is_map: true,
pinyin: "guangde"
},
{
id: 551,
name: "高州",
abbr: "GZ",
area_code: "200097",
sort: 2000,
latitude: 21.918119,
longitude: 110.853378,
is_map: true,
pinyin: "gaozhou"
},
{
id: 561,
name: "高要",
abbr: "GY",
area_code: "200107",
sort: 2000,
latitude: 23.02581,
longitude: 112.458389,
is_map: true,
pinyin: "gaoyao"
},
{
id: 568,
name: "桂平",
abbr: "GP",
area_code: "200114",
sort: 2000,
latitude: 23.3941,
longitude: 110.07901,
is_map: true,
pinyin: "guiping"
},
{
id: 593,
name: "藁城",
abbr: "GC",
area_code: "200139",
sort: 2000,
latitude: 38.02166,
longitude: 114.846764,
is_map: true,
pinyin: "gaocheng"
},
{
id: 594,
name: "高碑店",
abbr: "GBD",
area_code: "200140",
sort: 2000,
latitude: 39.32658,
longitude: 115.873734,
is_map: true,
pinyin: "gaobeidian"
},
{
id: 619,
name: "固安",
abbr: "GA",
area_code: "200165",
sort: 2000,
latitude: 39.438251,
longitude: 116.298523,
is_map: true,
pinyin: "guan"
},
{
id: 632,
name: "固始",
abbr: "GS",
area_code: "200178",
sort: 2000,
latitude: 32.168388,
longitude: 115.654808,
is_map: true,
pinyin: "gushi"
},
{
id: 683,
name: "光山",
abbr: "GS",
area_code: "200229",
sort: 2000,
latitude: 32.009972,
longitude: 114.918777,
is_map: true,
pinyin: "guangshan"
},
{
id: 718,
name: "公安",
abbr: "GA",
area_code: "200264",
sort: 2000,
latitude: 30.0583,
longitude: 112.229477,
is_map: true,
pinyin: "gongan"
},
{
id: 724,
name: "广水",
abbr: "GS",
area_code: "200270",
sort: 2000,
latitude: 31.616859,
longitude: 113.825996,
is_map: true,
pinyin: "guangshui"
},
{
id: 741,
name: "谷城",
abbr: "GC",
area_code: "200287",
sort: 2000,
latitude: 32.263378,
longitude: 111.653038,
is_map: true,
pinyin: "gucheng"
},
{
id: 773,
name: "桂阳",
abbr: "GY",
area_code: "200319",
sort: 2000,
latitude: 25.754101,
longitude: 112.733681,
is_map: true,
pinyin: "guiyang"
},
{
id: 804,
name: "公主岭",
abbr: "GZL",
area_code: "200350",
sort: 2000,
latitude: 43.504681,
longitude: 124.8228,
is_map: true,
pinyin: "gongzhuling"
},
{
id: 841,
name: "赣榆",
abbr: "GY",
area_code: "200387",
sort: 2000,
latitude: 34.840649,
longitude: 119.177299,
is_map: true,
pinyin: "ganyu"
},
{
id: 854,
name: "高邮",
abbr: "GY",
area_code: "200400",
sort: 2000,
latitude: 32.78112,
longitude: 119.455582,
is_map: true,
pinyin: "gaoyou"
},
{
id: 857,
name: "灌云",
abbr: "GY",
area_code: "200403",
sort: 2000,
latitude: 34.284069,
longitude: 119.240959,
is_map: true,
pinyin: "guanyun"
},
{
id: 861,
name: "灌南",
abbr: "GN",
area_code: "200407",
sort: 2000,
latitude: 34.086731,
longitude: 119.315628,
is_map: true,
pinyin: "guannan"
},
{
id: 864,
name: "高淳",
abbr: "GC",
area_code: "200410",
sort: 2000,
latitude: 31.327511,
longitude: 118.892097,
is_map: true,
pinyin: "gaochun"
},
{
id: 869,
name: "广丰",
abbr: "GF",
area_code: "200415",
sort: 2000,
latitude: 28.43631,
longitude: 118.19133,
is_map: true,
pinyin: "guangfeng"
},
{
id: 874,
name: "高安",
abbr: "GA",
area_code: "200420",
sort: 2000,
latitude: 28.41729,
longitude: 115.375618,
is_map: true,
pinyin: "gaoan"
},
{
id: 885,
name: "贵溪",
abbr: "GX",
area_code: "200431",
sort: 2000,
latitude: 28.292521,
longitude: 117.245247,
is_map: true,
pinyin: "guixi"
},
{
id: 892,
name: "赣县",
abbr: "GX",
area_code: "200438",
sort: 2000,
latitude: 25.86062,
longitude: 115.011749,
is_map: true,
pinyin: "ganxian"
},
{
id: 906,
name: "盖州",
abbr: "GZ",
area_code: "200452",
sort: 2000,
latitude: 40.400532,
longitude: 122.348801,
is_map: true,
pinyin: "gaizhou"
},
{
id: 922,
name: "格尔木",
abbr: "GEM",
area_code: "200468",
sort: 2000,
latitude: 33.660332,
longitude: 90,
is_map: true,
pinyin: "geermu"
},
{
id: 929,
name: "高密",
abbr: "GM",
area_code: "200475",
sort: 2000,
latitude: 36.382568,
longitude: 119.755676,
is_map: true,
pinyin: "gaomi"
},
{
id: 981,
name: "冠县",
abbr: "GX",
area_code: "200527",
sort: 2000,
latitude: 36.483349,
longitude: 115.442627,
is_map: true,
pinyin: "guanxian"
},
{
id: 985,
name: "高唐",
abbr: "GT",
area_code: "200531",
sort: 2000,
latitude: 36.86602,
longitude: 116.23111,
is_map: true,
pinyin: "gaotang"
},
{
id: 987,
name: "广饶",
abbr: "GR",
area_code: "200533",
sort: 2000,
latitude: 37.053589,
longitude: 118.407021,
is_map: true,
pinyin: "guangrao"
},
{
id: 999,
name: "高平",
abbr: "GP",
area_code: "200545",
sort: 2000,
latitude: 35.798069,
longitude: 112.923576,
is_map: true,
pinyin: "gaoping"
},
{
id: 1071,
name: "个旧",
abbr: "GJ",
area_code: "200617",
sort: 2000,
latitude: 23.35899,
longitude: 103.160042,
is_map: true,
pinyin: "gejiu"
},
{
id: 1161,
name: "古田",
abbr: "GT",
area_code: "350922",
sort: 9999,
latitude: 26.57762,
longitude: 118.746063,
is_map: true,
pinyin: "gutian"
},
{
id: 1165,
name: "高陵",
abbr: "GL",
area_code: "610126",
sort: 9999,
latitude: 34.53487,
longitude: 109.088219,
is_map: true,
pinyin: "gaoling"
},
{
id: 1187,
name: "广平",
abbr: "GP",
area_code: "130432",
sort: 9999,
latitude: 36.483604,
longitude: 114.950859,
is_map: true,
pinyin: "guangping"
},
{
id: 1188,
name: "馆陶",
abbr: "GT",
area_code: "130433",
sort: 9999,
latitude: 36.539459,
longitude: 115.289055,
is_map: true,
pinyin: "guantao"
},
{
id: 1198,
name: "广宗县",
abbr: "GZX",
area_code: "130531",
sort: 9999,
latitude: 37.075546,
longitude: 115.142799,
is_map: true,
pinyin: "guangzong"
},
{
id: 1207,
name: "高阳县",
abbr: "GYX",
area_code: "130628",
sort: 9999,
latitude: 38.700069,
longitude: 115.778839,
is_map: true,
pinyin: "gaoyangxian"
},
{
id: 1220,
name: "沽源",
abbr: "GY",
area_code: "130724",
sort: 9999,
latitude: 41.667419,
longitude: 115.684837,
is_map: true,
pinyin: "guyuan"
},
{
id: 1253,
name: "故城",
abbr: "GC",
area_code: "131126",
sort: 9999,
latitude: 37.350983,
longitude: 115.966743,
is_map: true,
pinyin: "gucheng"
},
{
id: 1380,
name: "根河",
abbr: "GH",
area_code: "150785",
sort: 9999,
latitude: 50.780453,
longitude: 121.532722,
is_map: true,
pinyin: "genhe"
},
{
id: 1472,
name: "甘南",
abbr: "GN",
area_code: "230225",
sort: 9999,
latitude: 47.917839,
longitude: 123.506035,
is_map: true,
pinyin: "gannan"
},
{
id: 1529,
name: "固镇县",
abbr: "GZX",
area_code: "340323",
sort: 9999,
latitude: 33.31868,
longitude: 117.315964,
is_map: true,
pinyin: "guzhen"
},
{
id: 1562,
name: "光泽",
abbr: "GZ",
area_code: "350723",
sort: 9999,
latitude: 27.542803,
longitude: 117.337898,
is_map: true,
pinyin: "guangze"
},
{
id: 1583,
name: "共青城",
abbr: "GQC",
area_code: "360482",
sort: 9999,
latitude: 29.2484,
longitude: 115.79406,
is_map: true,
pinyin: "gongqingcheng"
},
{
id: 1592,
name: "高邑",
abbr: "GY",
area_code: "130127",
sort: 9999,
latitude: 37.605713,
longitude: 114.610703,
is_map: true,
pinyin: "gaoyi"
},
{
id: 1616,
name: "广昌县",
abbr: "GCX",
area_code: "361030",
sort: 9999,
latitude: 26.838427,
longitude: 116.327293,
is_map: true,
pinyin: "guangchang"
},
{
id: 1626,
name: "高青",
abbr: "GQ",
area_code: "370322",
sort: 9999,
latitude: 37.169582,
longitude: 117.829842,
is_map: true,
pinyin: "gaoqing"
},
{
id: 1714,
name: "桂东",
abbr: "GD",
area_code: "431027",
sort: 9999,
latitude: 26.073917,
longitude: 113.945877,
is_map: true,
pinyin: "guidong"
},
{
id: 1783,
name: "灌阳",
abbr: "GY",
area_code: "450327",
sort: 9999,
latitude: 25.489098,
longitude: 111.160248,
is_map: true,
pinyin: "guanyang"
},
{
id: 1788,
name: "恭城瑶族自治县",
abbr: "GCYZZZX",
area_code: "450332",
sort: 9999,
latitude: 24.833612,
longitude: 110.829521,
is_map: true,
pinyin: "gongchengyaozuzizhixian"
},
{
id: 1919,
name: "甘孜藏族自治州",
abbr: "GZZZZZZ",
area_code: "513300",
sort: 9999,
latitude: 31.618486,
longitude: 99.991486,
is_map: true,
pinyin: "ganzizangzuzizhizhou"
},
{
id: 1974,
name: "关岭布依族苗族自治县",
abbr: "GLBYZMZZZX",
area_code: "520424",
sort: 9999,
latitude: 25.980713,
longitude: 105.666855,
is_map: true,
pinyin: "guanlingbuyizumiaozuzizhixian"
},
{
id: 2013,
name: "贵定",
abbr: "GD",
area_code: "522723",
sort: 9999,
latitude: 26.580807,
longitude: 107.233589,
is_map: true,
pinyin: "guiding"
},
{
id: 2069,
name: "耿马傣族佤族自治县",
abbr: "GMDZWZZZX",
area_code: "530926",
sort: 9999,
latitude: 23.534578,
longitude: 99.402496,
is_map: true,
pinyin: "gengmadaizuwazuzizhixian"
},
{
id: 2095,
name: "广南",
abbr: "GN",
area_code: "532627",
sort: 9999,
latitude: 24.050699,
longitude: 105.049263,
is_map: true,
pinyin: "guangnan"
},
{
id: 2120,
name: "贡山独龙族怒族自治县",
abbr: "GSDLZNZZZX",
area_code: "533324",
sort: 9999,
latitude: 27.738054,
longitude: 98.666138,
is_map: true,
pinyin: "gongshandulongzunuzuzizhixian"
},
{
id: 2302,
name: "高台",
abbr: "GT",
area_code: "620724",
sort: 9999,
latitude: 39.376308,
longitude: 99.81665,
is_map: true,
pinyin: "gaotai"
},
{
id: 2381,
name: "果洛藏族自治州",
abbr: "GLZZZZZ",
area_code: "632600",
sort: 9999,
latitude: 34.468685,
longitude: 100.247078,
is_map: true,
pinyin: "guoluozangzuzizhizhou"
},
{
id: 2384,
name: "甘德县",
abbr: "GDX",
area_code: "632623",
sort: 9999,
latitude: 33.966988,
longitude: 99.902588,
is_map: true,
pinyin: "gande"
},
{
id: 2410,
name: "固原",
abbr: "GY",
area_code: "640400",
sort: 9999,
latitude: 36.004562,
longitude: 106.28524,
is_map: true,
pinyin: "guyuan"
},
{
id: 5038,
name: "古冶区",
abbr: "GYQ",
area_code: "130204",
sort: 9999,
latitude: 39.715736,
longitude: 118.454292,
is_map: true,
pinyin: "guyequ"
}
],
X: [
{
id: 13,
name: "厦门",
abbr: "XM",
area_code: "0592",
sort: 7,
latitude: 24.479509,
longitude: 118.089478,
is_map: true,
pinyin: "xiamen"
},
{
id: 15,
name: "西安",
abbr: "XA",
area_code: "029",
sort: 24,
latitude: 34.34127,
longitude: 108.939842,
is_map: true,
pinyin: "xian"
},
{
id: 42,
name: "湘潭",
abbr: "XT",
area_code: "0732",
sort: 80,
latitude: 27.82975,
longitude: 112.944107,
is_map: true,
pinyin: "xiangtan"
},
{
id: 29,
name: "徐州",
abbr: "XZ",
area_code: "0516",
sort: 2000,
latitude: 34.204399,
longitude: 117.285767,
is_map: true,
pinyin: "xuzhou"
},
{
id: 76,
name: "新乡",
abbr: "XX",
area_code: "0373",
sort: 2000,
latitude: 35.30323,
longitude: 113.92675,
is_map: true,
pinyin: "xinxiang"
},
{
id: 115,
name: "咸阳",
abbr: "XY",
area_code: "0910",
sort: 2000,
latitude: 34.329319,
longitude: 108.70929,
is_map: true,
pinyin: "xianyang"
},
{
id: 127,
name: "新余",
abbr: "XY",
area_code: "0790",
sort: 2000,
latitude: 27.81776,
longitude: 114.91713,
is_map: true,
pinyin: "xinyu"
},
{
id: 179,
name: "邢台",
abbr: "XT",
area_code: "0319",
sort: 2000,
latitude: 37.070549,
longitude: 114.504433,
is_map: true,
pinyin: "xingtai"
},
{
id: 198,
name: "许昌",
abbr: "XC",
area_code: "0374",
sort: 2000,
latitude: 34.035702,
longitude: 113.852333,
is_map: true,
pinyin: "xuchang"
},
{
id: 205,
name: "孝感",
abbr: "XG",
area_code: "0712",
sort: 2000,
latitude: 30.924829,
longitude: 113.916451,
is_map: true,
pinyin: "xiaogan"
},
{
id: 215,
name: "香港",
abbr: "XG",
area_code: "00852",
sort: 2000,
latitude: 22.276283,
longitude: 114.163826,
is_map: true,
pinyin: "xianggang"
},
{
id: 230,
name: "咸宁",
abbr: "XN",
area_code: "0715",
sort: 2000,
latitude: 29.841261,
longitude: 114.322449,
is_map: true,
pinyin: "xianning"
},
{
id: 233,
name: "西宁",
abbr: "XN",
area_code: "0971",
sort: 2000,
latitude: 36.61729,
longitude: 101.777817,
is_map: true,
pinyin: "xining"
},
{
id: 234,
name: "信阳",
abbr: "XY",
area_code: "0376",
sort: 2000,
latitude: 32.147141,
longitude: 114.092789,
is_map: true,
pinyin: "xinyang"
},
{
id: 241,
name: "襄阳",
abbr: "XY",
area_code: "0710",
sort: 2000,
latitude: 32.008999,
longitude: 112.122551,
is_map: true,
pinyin: "xiangyang"
},
{
id: 263,
name: "忻州",
abbr: "XZ",
area_code: "0350",
sort: 2000,
latitude: 38.416698,
longitude: 112.734177,
is_map: true,
pinyin: "xinzhou"
},
{
id: 296,
name: "西昌",
abbr: "XC",
area_code: "0843",
sort: 2000,
latitude: 27.894489,
longitude: 102.263046,
is_map: true,
pinyin: "xichang"
},
{
id: 314,
name: "宣城",
abbr: "XC",
area_code: "0563",
sort: 2000,
latitude: 30.940781,
longitude: 118.758659,
is_map: true,
pinyin: "xuancheng"
},
{
id: 476,
name: "萧县",
abbr: "XX",
area_code: "200022",
sort: 2000,
latitude: 34.188759,
longitude: 116.947243,
is_map: true,
pinyin: "xiaoxian"
},
{
id: 501,
name: "仙游",
abbr: "XY",
area_code: "200047",
sort: 2000,
latitude: 25.36215,
longitude: 118.691811,
is_map: true,
pinyin: "xianyou"
},
{
id: 512,
name: "霞浦",
abbr: "XP",
area_code: "200058",
sort: 2000,
latitude: 26.88517,
longitude: 120.005562,
is_map: true,
pinyin: "xiapu"
},
{
id: 543,
name: "兴宁",
abbr: "XN",
area_code: "200089",
sort: 2000,
latitude: 24.136499,
longitude: 115.731194,
is_map: true,
pinyin: "xingning"
},
{
id: 553,
name: "信宜",
abbr: "XY",
area_code: "200099",
sort: 2000,
latitude: 22.35429,
longitude: 110.947098,
is_map: true,
pinyin: "xinyi"
},
{
id: 558,
name: "徐闻",
abbr: "XW",
area_code: "200104",
sort: 2000,
latitude: 20.326521,
longitude: 110.175018,
is_map: true,
pinyin: "xuwen"
},
{
id: 571,
name: "兴义",
abbr: "XY",
area_code: "200117",
sort: 2000,
latitude: 25.091921,
longitude: 104.895531,
is_map: true,
pinyin: "xingyi"
},
{
id: 598,
name: "辛集",
abbr: "XJ",
area_code: "200144",
sort: 2000,
latitude: 37.943161,
longitude: 115.217918,
is_map: true,
pinyin: "xinji"
},
{
id: 601,
name: "徐水",
abbr: "XS",
area_code: "200147",
sort: 2000,
latitude: 39.01865,
longitude: 115.655861,
is_map: true,
pinyin: "xushui"
},
{
id: 613,
name: "香河",
abbr: "XH",
area_code: "200159",
sort: 2000,
latitude: 39.761421,
longitude: 117.006447,
is_map: true,
pinyin: "xianghe"
},
{
id: 614,
name: "新乐",
abbr: "XL",
area_code: "200160",
sort: 2000,
latitude: 38.34338,
longitude: 114.683838,
is_map: true,
pinyin: "xinle"
},
{
id: 625,
name: "新密",
abbr: "XM",
area_code: "200171",
sort: 2000,
latitude: 34.53952,
longitude: 113.390442,
is_map: true,
pinyin: "xinmi"
},
{
id: 627,
name: "项城",
abbr: "XC",
area_code: "200173",
sort: 2000,
latitude: 33.467232,
longitude: 114.875618,
is_map: true,
pinyin: "xiangcheng"
},
{
id: 628,
name: "新郑",
abbr: "XZ",
area_code: "200174",
sort: 2000,
latitude: 34.396049,
longitude: 113.741608,
is_map: true,
pinyin: "xinzheng"
},
{
id: 644,
name: "荥阳",
abbr: "XY",
area_code: "200190",
sort: 2000,
latitude: 34.787621,
longitude: 113.383492,
is_map: true,
pinyin: "xingyang"
},
{
id: 647,
name: "夏邑",
abbr: "XY",
area_code: "200193",
sort: 2000,
latitude: 34.239288,
longitude: 116.129692,
is_map: true,
pinyin: "xiayi"
},
{
id: 650,
name: "息县",
abbr: "XX",
area_code: "200196",
sort: 2000,
latitude: 32.342819,
longitude: 114.740242,
is_map: true,
pinyin: "xixian"
},
{
id: 655,
name: "淅川",
abbr: "XC",
area_code: "200201",
sort: 2000,
latitude: 33.138149,
longitude: 111.490784,
is_map: true,
pinyin: "xichuan"
},
{
id: 661,
name: "西华",
abbr: "XH",
area_code: "200207",
sort: 2000,
latitude: 33.76754,
longitude: 114.529739,
is_map: true,
pinyin: "xihua"
},
{
id: 668,
name: "新野",
abbr: "XY",
area_code: "200214",
sort: 2000,
latitude: 32.520931,
longitude: 112.360062,
is_map: true,
pinyin: "xinye"
},
{
id: 669,
name: "新蔡",
abbr: "XC",
area_code: "200215",
sort: 2000,
latitude: 32.74926,
longitude: 114.98571,
is_map: true,
pinyin: "xincai"
},
{
id: 671,
name: "襄城",
abbr: "XC",
area_code: "200217",
sort: 2000,
latitude: 33.850719,
longitude: 113.506691,
is_map: true,
pinyin: "xiangcheng"
},
{
id: 675,
name: "西峡",
abbr: "XX",
area_code: "200221",
sort: 2000,
latitude: 33.305599,
longitude: 111.472443,
is_map: true,
pinyin: "xixia"
},
{
id: 676,
name: "西平",
abbr: "XP",
area_code: "200222",
sort: 2000,
latitude: 33.387798,
longitude: 114.021584,
is_map: true,
pinyin: "xiping"
},
{
id: 686,
name: "新安",
abbr: "XA",
area_code: "200232",
sort: 2000,
latitude: 34.72818,
longitude: 112.132423,
is_map: true,
pinyin: "xinan"
},
{
id: 725,
name: "浠水",
abbr: "XS",
area_code: "200271",
sort: 2000,
latitude: 30.451839,
longitude: 115.265511,
is_map: true,
pinyin: "xishui"
},
{
id: 739,
name: "孝昌",
abbr: "XC",
area_code: "200285",
sort: 2000,
latitude: 31.25803,
longitude: 113.998016,
is_map: true,
pinyin: "xiaochang"
},
{
id: 761,
name: "湘阴",
abbr: "XY",
area_code: "200307",
sort: 2000,
latitude: 28.689251,
longitude: 112.909172,
is_map: true,
pinyin: "xiangyin"
},
{
id: 772,
name: "新化",
abbr: "XH",
area_code: "200318",
sort: 2000,
latitude: 27.726629,
longitude: 111.327431,
is_map: true,
pinyin: "xinhua"
},
{
id: 780,
name: "湘乡",
abbr: "XX",
area_code: "200326",
sort: 2000,
latitude: 27.7341,
longitude: 112.535042,
is_map: true,
pinyin: "xiangxiang"
},
{
id: 781,
name: "新邵",
abbr: "XS",
area_code: "200327",
sort: 2000,
latitude: 27.32091,
longitude: 111.459,
is_map: true,
pinyin: "xinshao"
},
{
id: 783,
name: "溆浦",
abbr: "XP",
area_code: "200329",
sort: 2000,
latitude: 27.90834,
longitude: 110.594856,
is_map: true,
pinyin: "xupu"
},
{
id: 795,
name: "新宁",
abbr: "XN",
area_code: "200341",
sort: 2000,
latitude: 26.43346,
longitude: 110.856743,
is_map: true,
pinyin: "xinning"
},
{
id: 829,
name: "兴化",
abbr: "XH",
area_code: "200375",
sort: 2000,
latitude: 32.910412,
longitude: 119.852722,
is_map: true,
pinyin: "xinghua"
},
{
id: 843,
name: "新沂",
abbr: "XY",
area_code: "200389",
sort: 2000,
latitude: 34.36927,
longitude: 118.355476,
is_map: true,
pinyin: "xinyi"
},
{
id: 859,
name: "盱眙",
abbr: "XY",
area_code: "200405",
sort: 2000,
latitude: 33.010891,
longitude: 118.544991,
is_map: true,
pinyin: "xuyi"
},
{
id: 863,
name: "响水",
abbr: "XS",
area_code: "200409",
sort: 2000,
latitude: 34.199188,
longitude: 119.578392,
is_map: true,
pinyin: "xiangshui"
},
{
id: 868,
name: "新建",
abbr: "XJ",
area_code: "200414",
sort: 2000,
latitude: 28.333691,
longitude: 115.651123,
is_map: true,
pinyin: "xinjian"
},
{
id: 876,
name: "信丰",
abbr: "XF",
area_code: "200422",
sort: 2000,
latitude: 25.386169,
longitude: 114.922852,
is_map: true,
pinyin: "xinfeng"
},
{
id: 883,
name: "修水",
abbr: "XS",
area_code: "200429",
sort: 2000,
latitude: 29.02533,
longitude: 114.546883,
is_map: true,
pinyin: "xiushui"
},
{
id: 890,
name: "兴国",
abbr: "XG",
area_code: "200436",
sort: 2000,
latitude: 26.33779,
longitude: 115.363136,
is_map: true,
pinyin: "xingguo"
},
{
id: 907,
name: "新民",
abbr: "XM",
area_code: "200453",
sort: 2000,
latitude: 41.997669,
longitude: 122.828003,
is_map: true,
pinyin: "xinmin"
},
{
id: 912,
name: "兴城",
abbr: "XC",
area_code: "200458",
sort: 2000,
latitude: 40.610191,
longitude: 120.756187,
is_map: true,
pinyin: "xingcheng"
},
{
id: 920,
name: "锡林浩特",
abbr: "XLHT",
area_code: "200466",
sort: 2000,
latitude: 43.933392,
longitude: 116.086082,
is_map: true,
pinyin: "xilinhaote"
},
{
id: 924,
name: "新泰",
abbr: "XT",
area_code: "200470",
sort: 2000,
latitude: 35.908779,
longitude: 117.767998,
is_map: true,
pinyin: "xintai"
},
{
id: 984,
name: "夏津",
abbr: "XJ",
area_code: "200530",
sort: 2000,
latitude: 36.948559,
longitude: 116.001747,
is_map: true,
pinyin: "xiajin"
},
{
id: 997,
name: "孝义",
abbr: "XY",
area_code: "200543",
sort: 2000,
latitude: 37.14534,
longitude: 111.77903,
is_map: true,
pinyin: "xiaoyi"
},
{
id: 1019,
name: "宣汉",
abbr: "XH",
area_code: "200565",
sort: 2000,
latitude: 31.353861,
longitude: 107.727097,
is_map: true,
pinyin: "xuanhan"
},
{
id: 1059,
name: "宣威",
abbr: "XW",
area_code: "200605",
sort: 2000,
latitude: 26.219891,
longitude: 104.104477,
is_map: true,
pinyin: "xuanwei"
},
{
id: 1072,
name: "祥云",
abbr: "XY",
area_code: "200618",
sort: 2000,
latitude: 25.48381,
longitude: 100.550591,
is_map: true,
pinyin: "xiangyun"
},
{
id: 1098,
name: "象山",
abbr: "XS",
area_code: "200644",
sort: 2000,
latitude: 29.47665,
longitude: 121.869324,
is_map: true,
pinyin: "xiangshan"
},
{
id: 1109,
name: "新昌",
abbr: "XC",
area_code: "200655",
sort: 2000,
latitude: 29.49983,
longitude: 120.903847,
is_map: true,
pinyin: "xinchang"
},
{
id: 1110,
name: "仙居",
abbr: "XJ",
area_code: "200656",
sort: 2000,
latitude: 28.84683,
longitude: 120.728813,
is_map: true,
pinyin: "xianju"
},
{
id: 350,
name: "仙桃",
abbr: "XT",
area_code: "0728",
sort: 9999,
latitude: 30.362511,
longitude: 113.454498,
is_map: true,
pinyin: "xiantao"
},
{
id: 1170,
name: "寻乌",
abbr: "XW",
area_code: "360734",
sort: 9999,
latitude: 24.963511,
longitude: 115.646729,
is_map: true,
pinyin: "xunwu"
},
{
id: 1197,
name: "新河",
abbr: "XH",
area_code: "130530",
sort: 9999,
latitude: 37.526215,
longitude: 115.247536,
is_map: true,
pinyin: "xinhe"
},
{
id: 1215,
name: "雄县",
abbr: "XX",
area_code: "130638",
sort: 9999,
latitude: 38.990818,
longitude: 116.107475,
is_map: true,
pinyin: "xiongxian"
},
{
id: 1231,
name: "兴隆",
abbr: "XL",
area_code: "130822",
sort: 9999,
latitude: 40.418526,
longitude: 117.507095,
is_map: true,
pinyin: "xinglong"
},
{
id: 1244,
name: "献县",
abbr: "XX",
area_code: "130929",
sort: 9999,
latitude: 38.189659,
longitude: 116.12384,
is_map: true,
pinyin: "xianxian"
},
{
id: 1273,
name: "襄垣县",
abbr: "XYX",
area_code: "140423",
sort: 9999,
latitude: 36.532852,
longitude: 113.050095,
is_map: true,
pinyin: "xiangyuan"
},
{
id: 1300,
name: "新绛",
abbr: "XJ",
area_code: "140825",
sort: 9999,
latitude: 35.613697,
longitude: 111.225204,
is_map: true,
pinyin: "xinjiang"
},
{
id: 1319,
name: "襄汾",
abbr: "XF",
area_code: "141023",
sort: 9999,
latitude: 35.876141,
longitude: 111.442932,
is_map: true,
pinyin: "xiangfen"
},
{
id: 1376,
name: "新巴尔虎左旗",
abbr: "XBEHZQ",
area_code: "150726",
sort: 9999,
latitude: 48.216572,
longitude: 118.267456,
is_map: true,
pinyin: "xinbaerhuzuoqi"
},
{
id: 1377,
name: "新巴尔虎右旗",
abbr: "XBEHYQ",
area_code: "150727",
sort: 9999,
latitude: 48.669132,
longitude: 116.825989,
is_map: true,
pinyin: "xinbaerhuyouqi"
},
{
id: 1390,
name: "兴和",
abbr: "XH",
area_code: "150924",
sort: 9999,
latitude: 40.872437,
longitude: 113.834007,
is_map: true,
pinyin: "xinghe"
},
{
id: 1397,
name: "兴安盟",
abbr: "XAM",
area_code: "152200",
sort: 9999,
latitude: 46.076267,
longitude: 122.07032,
is_map: true,
pinyin: "xinganmeng"
},
{
id: 1409,
name: "西乌珠穆沁旗",
abbr: "XWZMQQ",
area_code: "152526",
sort: 9999,
latitude: 44.586147,
longitude: 117.61525,
is_map: true,
pinyin: "xiwuzhumuqinqi"
},
{
id: 1411,
name: "镶黄旗",
abbr: "XHQ",
area_code: "152528",
sort: 9999,
latitude: 42.239227,
longitude: 113.843872,
is_map: true,
pinyin: "xianghuangqi"
},
{
id: 1423,
name: "岫岩满族自治县",
abbr: "XYMZZZX",
area_code: "210323",
sort: 9999,
latitude: 40.281509,
longitude: 123.28833,
is_map: true,
pinyin: "xiuyanmanzuzizhixian"
},
{
id: 1425,
name: "新宾满族自治县",
abbr: "XBMZZZX",
area_code: "210422",
sort: 9999,
latitude: 41.732456,
longitude: 125.037544,
is_map: true,
pinyin: "xinbinmanzuzizhixian"
},
{
id: 1439,
name: "西丰",
abbr: "XF",
area_code: "211223",
sort: 9999,
latitude: 42.738091,
longitude: 124.72332,
is_map: true,
pinyin: "xifeng"
},
{
id: 1503,
name: "逊克",
abbr: "XK",
area_code: "231123",
sort: 9999,
latitude: 49.582973,
longitude: 128.476151,
is_map: true,
pinyin: "xunke"
},
{
id: 1519,
name: "行唐",
abbr: "XT",
area_code: "130125",
sort: 9999,
latitude: 38.437424,
longitude: 114.552734,
is_map: true,
pinyin: "xingtang"
},
{
id: 1579,
name: "星子",
abbr: "XZ",
area_code: "360427",
sort: 9999,
latitude: 29.456169,
longitude: 116.043739,
is_map: true,
pinyin: "xingzi"
},
{
id: 1595,
name: "峡江",
abbr: "XJ",
area_code: "360823",
sort: 9999,
latitude: 27.580862,
longitude: 115.319328,
is_map: true,
pinyin: "xiajiang"
},
{
id: 1596,
name: "新干",
abbr: "XG",
area_code: "360824",
sort: 9999,
latitude: 27.755758,
longitude: 115.399292,
is_map: true,
pinyin: "xingan"
},
{
id: 1652,
name: "新乡",
abbr: "XX",
area_code: "410721",
sort: 9999,
latitude: 35.187477,
longitude: 113.780563,
is_map: true,
pinyin: "xinxiang"
},
{
id: 1655,
name: "修武",
abbr: "XW",
area_code: "410821",
sort: 9999,
latitude: 35.229923,
longitude: 113.447464,
is_map: true,
pinyin: "xiuwu"
},
{
id: 1662,
name: "许昌县",
abbr: "XCX",
area_code: "411023",
sort: 9999,
latitude: 33.995064,
longitude: 113.800606,
is_map: true,
pinyin: "xuchangxian"
},
{
id: 1670,
name: "新县",
abbr: "XX",
area_code: "411523",
sort: 9999,
latitude: 31.635151,
longitude: 114.877052,
is_map: true,
pinyin: "xinxian"
},
{
id: 1680,
name: "兴山县",
abbr: "XSX",
area_code: "420526",
sort: 9999,
latitude: 31.34795,
longitude: 110.754501,
is_map: true,
pinyin: "xingshan"
},
{
id: 1702,
name: "湘潭县",
abbr: "XT",
area_code: "430320",
sort: 9999,
latitude: 27.778601,
longitude: 112.952827,
is_map: true,
pinyin: "xiangtanxian"
},
{
id: 1718,
name: "新田",
abbr: "XT",
area_code: "431128",
sort: 9999,
latitude: 25.906927,
longitude: 112.220345,
is_map: true,
pinyin: "xintian"
},
{
id: 1764,
name: "新兴",
abbr: "XX",
area_code: "445321",
sort: 9999,
latitude: 22.703203,
longitude: 112.230827,
is_map: true,
pinyin: "xinxing"
},
{
id: 1781,
name: "兴安",
abbr: "XA",
area_code: "450325",
sort: 9999,
latitude: 25.609554,
longitude: 110.670784,
is_map: true,
pinyin: "xingan"
},
{
id: 1802,
name: "兴业",
abbr: "XY",
area_code: "450924",
sort: 9999,
latitude: 22.741871,
longitude: 109.877769,
is_map: true,
pinyin: "xingye"
},
{
id: 1812,
name: "西林",
abbr: "XL",
area_code: "451030",
sort: 9999,
latitude: 24.492041,
longitude: 105.095024,
is_map: true,
pinyin: "xilin"
},
{
id: 1828,
name: "忻城",
abbr: "XC",
area_code: "451321",
sort: 9999,
latitude: 24.064779,
longitude: 108.667358,
is_map: true,
pinyin: "xincheng"
},
{
id: 1829,
name: "象州",
abbr: "XZ",
area_code: "451322",
sort: 9999,
latitude: 23.959824,
longitude: 109.684555,
is_map: true,
pinyin: "xiangzhou"
},
{
id: 1852,
name: "秀山土家族苗族自治县",
abbr: "XSTJZMZZZX",
area_code: "500241",
sort: 9999,
latitude: 28.444773,
longitude: 108.99604,
is_map: true,
pinyin: "xiushantujiazumiaozuzizhixian"
},
{
id: 1856,
name: "新津",
abbr: "XJ",
area_code: "510132",
sort: 9999,
latitude: 30.414284,
longitude: 103.812447,
is_map: true,
pinyin: "xinjin"
},
{
id: 1859,
name: "叙永",
abbr: "XY",
area_code: "510524",
sort: 9999,
latitude: 28.167919,
longitude: 105.437775,
is_map: true,
pinyin: "xuyong"
},
{
id: 1879,
name: "西充",
abbr: "XC",
area_code: "511325",
sort: 9999,
latitude: 30.994616,
longitude: 105.893021,
is_map: true,
pinyin: "xichong"
},
{
id: 1956,
name: "息烽",
abbr: "XF",
area_code: "520122",
sort: 9999,
latitude: 27.092665,
longitude: 106.737694,
is_map: true,
pinyin: "xifeng"
},
{
id: 1957,
name: "修文",
abbr: "XW",
area_code: "520123",
sort: 9999,
latitude: 26.840672,
longitude: 106.59922,
is_map: true,
pinyin: "xiuwen"
},
{
id: 1969,
name: "习水",
abbr: "XS",
area_code: "520330",
sort: 9999,
latitude: 28.327826,
longitude: 106.200951,
is_map: true,
pinyin: "xishui"
},
{
id: 1987,
name: "兴仁",
abbr: "XR",
area_code: "522322",
sort: 9999,
latitude: 25.431377,
longitude: 105.19278,
is_map: true,
pinyin: "xingren"
},
{
id: 2027,
name: "寻甸回族彝族自治县",
abbr: "XDHZYZZZX",
area_code: "530129",
sort: 9999,
latitude: 25.559475,
longitude: 103.257591,
is_map: true,
pinyin: "xundianhuizuyizuzizhixian"
},
{
id: 2036,
name: "新平彝族傣族自治县",
abbr: "XPYZDZZZX",
area_code: "530427",
sort: 9999,
latitude: 24.066401,
longitude: 101.990906,
is_map: true,
pinyin: "xinpingyizudaizuzizhixian"
},
{
id: 2062,
name: "西盟佤族自治县",
abbr: "XMWZZZX",
area_code: "530829",
sort: 9999,
latitude: 22.644423,
longitude: 99.594376,
is_map: true,
pinyin: "ximengwazuzizhixian"
},
{
id: 2091,
name: "西畴",
abbr: "XC",
area_code: "532623",
sort: 9999,
latitude: 23.437439,
longitude: 104.675713,
is_map: true,
pinyin: "xichou"
},
{
id: 2097,
name: "西双版纳傣族自治州",
abbr: "XSBNDZZZZ",
area_code: "532800",
sort: 9999,
latitude: 22.001724,
longitude: 100.797943,
is_map: true,
pinyin: "xishuangbannadaizuzizhizhou"
},
{
id: 2123,
name: "香格里拉",
abbr: "XGLL",
area_code: "533421",
sort: 9999,
latitude: 27.825804,
longitude: 99.708664,
is_map: true,
pinyin: "xianggelila"
},
{
id: 2227,
name: "兴平",
abbr: "XP",
area_code: "610481",
sort: 9999,
latitude: 34.297134,
longitude: 108.488495,
is_map: true,
pinyin: "xingping"
},
{
id: 5557,
name: "新洲区",
abbr: "XZQ",
area_code: "420117",
sort: 9999,
latitude: 30.84215,
longitude: 114.802109,
is_map: true,
pinyin: "xinzhouqu"
}
],
T: [
{
id: 5,
name: "天津",
abbr: "TJ",
area_code: "022",
sort: 14,
latitude: 39.085098,
longitude: 117.199371,
is_map: true,
pinyin: "tianjin"
},
{
id: 43,
name: "太原",
abbr: "TY",
area_code: "0351",
sort: 2000,
latitude: 37.87059,
longitude: 112.550667,
is_map: true,
pinyin: "taiyuan"
},
{
id: 52,
name: "台州",
abbr: "TZ",
area_code: "0576",
sort: 2000,
latitude: 28.656111,
longitude: 121.420563,
is_map: true,
pinyin: "taizhou"
},
{
id: 65,
name: "铜陵",
abbr: "TL",
area_code: "0562",
sort: 2000,
latitude: 30.908871,
longitude: 117.742203,
is_map: true,
pinyin: "tongling"
},
{
id: 74,
name: "泰安",
abbr: "TA",
area_code: "0538",
sort: 2000,
latitude: 36.19994,
longitude: 117.088402,
is_map: true,
pinyin: "taian"
},
{
id: 87,
name: "唐山",
abbr: "TS",
area_code: "0315",
sort: 2000,
latitude: 39.630482,
longitude: 118.18058,
is_map: true,
pinyin: "tangshan"
},
{
id: 93,
name: "泰州",
abbr: "TZ",
area_code: "0523",
sort: 2000,
latitude: 32.45546,
longitude: 119.925537,
is_map: true,
pinyin: "taizhou"
},
{
id: 113,
name: "泰兴",
abbr: "TX",
area_code: "321200",
sort: 2000,
latitude: 32.171909,
longitude: 120.052002,
is_map: true,
pinyin: "taixing"
},
{
id: 226,
name: "铜仁",
abbr: "TR",
area_code: "0856",
sort: 2000,
latitude: 27.69066,
longitude: 109.180992,
is_map: true,
pinyin: "tongren"
},
{
id: 239,
name: "通化",
abbr: "TH",
area_code: "0435",
sort: 2000,
latitude: 41.728291,
longitude: 125.939903,
is_map: true,
pinyin: "tonghua"
},
{
id: 268,
name: "通辽",
abbr: "TL",
area_code: "0475",
sort: 2000,
latitude: 43.65247,
longitude: 122.24469,
is_map: true,
pinyin: "tongliao"
},
{
id: 298,
name: "天水",
abbr: "TS",
area_code: "0938",
sort: 2000,
latitude: 34.580849,
longitude: 105.724861,
is_map: true,
pinyin: "tianshui"
},
{
id: 382,
name: "铁岭",
abbr: "TL",
area_code: "0241",
sort: 2000,
latitude: 42.286201,
longitude: 123.842407,
is_map: true,
pinyin: "tieling"
},
{
id: 454,
name: "太和",
abbr: "TH",
area_code: "200000",
sort: 2000,
latitude: 33.160259,
longitude: 115.622032,
is_map: true,
pinyin: "taihe"
},
{
id: 461,
name: "天长",
abbr: "TC",
area_code: "200007",
sort: 2000,
latitude: 32.689449,
longitude: 119.003548,
is_map: true,
pinyin: "tianchang"
},
{
id: 474,
name: "桐城",
abbr: "TC",
area_code: "200020",
sort: 2000,
latitude: 31.035851,
longitude: 116.974159,
is_map: true,
pinyin: "tongcheng"
},
{
id: 539,
name: "台山",
abbr: "TS",
area_code: "200085",
sort: 2000,
latitude: 22.25156,
longitude: 112.7939,
is_map: true,
pinyin: "taishan"
},
{
id: 585,
name: "屯昌",
abbr: "TC",
area_code: "200131",
sort: 2000,
latitude: 19.35182,
longitude: 110.10347,
is_map: true,
pinyin: "tunchang"
},
{
id: 622,
name: "唐河",
abbr: "TH",
area_code: "200168",
sort: 2000,
latitude: 32.681171,
longitude: 112.807449,
is_map: true,
pinyin: "tanghe"
},
{
id: 638,
name: "太康",
abbr: "TK",
area_code: "200184",
sort: 2000,
latitude: 34.063789,
longitude: 114.837791,
is_map: true,
pinyin: "taikang"
},
{
id: 694,
name: "通许",
abbr: "TX",
area_code: "200240",
sort: 2000,
latitude: 34.480438,
longitude: 114.467407,
is_map: true,
pinyin: "tongxu"
},
{
id: 707,
name: "铁力",
abbr: "TL",
area_code: "200253",
sort: 2000,
latitude: 46.986641,
longitude: 128.032425,
is_map: true,
pinyin: "tieli"
},
{
id: 710,
name: "天门",
abbr: "TM",
area_code: "200256",
sort: 2000,
latitude: 30.663389,
longitude: 113.166138,
is_map: true,
pinyin: "tianmen"
},
{
id: 766,
name: "桃江",
abbr: "TJ",
area_code: "200312",
sort: 2000,
latitude: 28.51819,
longitude: 112.155708,
is_map: true,
pinyin: "taojiang"
},
{
id: 776,
name: "桃源",
abbr: "TY",
area_code: "200322",
sort: 2000,
latitude: 28.90259,
longitude: 111.48893,
is_map: true,
pinyin: "taoyuan"
},
{
id: 823,
name: "洮南",
abbr: "TN",
area_code: "200369",
sort: 2000,
latitude: 45.33559,
longitude: 122.786346,
is_map: true,
pinyin: "taonan"
},
{
id: 842,
name: "太仓",
abbr: "TC",
area_code: "200388",
sort: 2000,
latitude: 31.45911,
longitude: 121.129753,
is_map: true,
pinyin: "taicang"
},
{
id: 894,
name: "泰和",
abbr: "TH",
area_code: "200440",
sort: 2000,
latitude: 26.78993,
longitude: 114.908867,
is_map: true,
pinyin: "taihe"
},
{
id: 913,
name: "调兵山",
abbr: "TBS",
area_code: "200459",
sort: 2000,
latitude: 42.467548,
longitude: 123.566902,
is_map: true,
pinyin: "tiaobingshan"
},
{
id: 923,
name: "滕州",
abbr: "TZ",
area_code: "200469",
sort: 2000,
latitude: 35.11338,
longitude: 117.165962,
is_map: true,
pinyin: "tengzhou"
},
{
id: 942,
name: "郯城",
abbr: "TC",
area_code: "200488",
sort: 2000,
latitude: 34.613571,
longitude: 118.367172,
is_map: true,
pinyin: "tancheng"
},
{
id: 1008,
name: "铜川",
abbr: "TC",
area_code: "200554",
sort: 2000,
latitude: 34.896729,
longitude: 108.945152,
is_map: true,
pinyin: "tongchuan"
},
{
id: 1074,
name: "腾冲",
abbr: "TC",
area_code: "200620",
sort: 2000,
latitude: 25.020531,
longitude: 98.490967,
is_map: true,
pinyin: "tengchong"
},
{
id: 1084,
name: "桐乡",
abbr: "TX",
area_code: "200630",
sort: 2000,
latitude: 30.630739,
longitude: 120.564323,
is_map: true,
pinyin: "tongxiang"
},
{
id: 1104,
name: "桐庐",
abbr: "TL",
area_code: "200650",
sort: 2000,
latitude: 29.793171,
longitude: 119.691498,
is_map: true,
pinyin: "tonglu"
},
{
id: 1108,
name: "天台",
abbr: "TT",
area_code: "200654",
sort: 2000,
latitude: 29.14304,
longitude: 121.007278,
is_map: true,
pinyin: "tiantai"
},
{
id: 1126,
name: "铜梁",
abbr: "TL",
area_code: "200672",
sort: 2000,
latitude: 29.844749,
longitude: 106.056381,
is_map: true,
pinyin: "tongliang"
},
{
id: 1127,
name: "潼南",
abbr: "TN",
area_code: "200673",
sort: 2000,
latitude: 30.19054,
longitude: 105.839523,
is_map: true,
pinyin: "tongnan"
},
{
id: 1164,
name: "土默特右旗",
abbr: "TMTYQ",
area_code: "150221",
sort: 9999,
latitude: 40.568829,
longitude: 110.524208,
is_map: true,
pinyin: "tumoteyouqi"
},
{
id: 1206,
name: "唐县",
abbr: "TX",
area_code: "130627",
sort: 9999,
latitude: 38.759914,
longitude: 115.003204,
is_map: true,
pinyin: "tangxian"
},
{
id: 1295,
name: "太谷县",
abbr: "TGX",
area_code: "140726",
sort: 9999,
latitude: 37.424595,
longitude: 112.5541,
is_map: true,
pinyin: "taigu"
},
{
id: 1343,
name: "土默特左旗",
abbr: "TMTZQ",
area_code: "150121",
sort: 9999,
latitude: 40.720417,
longitude: 111.133614,
is_map: true,
pinyin: "tumotezuoqi"
},
{
id: 1402,
name: "突泉",
abbr: "TQ",
area_code: "152224",
sort: 9999,
latitude: 45.380985,
longitude: 121.564857,
is_map: true,
pinyin: "tuquan"
},
{
id: 1410,
name: "太仆寺旗",
abbr: "TPSQ",
area_code: "152527",
sort: 9999,
latitude: 41.895199,
longitude: 115.287277,
is_map: true,
pinyin: "taipusiqi"
},
{
id: 1422,
name: "台安",
abbr: "TA",
area_code: "210320",
sort: 9999,
latitude: 41.38686,
longitude: 122.429733,
is_map: true,
pinyin: "taian"
},
{
id: 1449,
name: "通化",
abbr: "TH",
area_code: "220521",
sort: 9999,
latitude: 41.677917,
longitude: 125.75312,
is_map: true,
pinyin: "tonghua"
},
{
id: 1459,
name: "通榆",
abbr: "TY",
area_code: "220822",
sort: 9999,
latitude: 44.809151,
longitude: 123.088547,
is_map: true,
pinyin: "tongyu"
},
{
id: 1460,
name: "图们",
abbr: "TM",
area_code: "222402",
sort: 9999,
latitude: 42.966621,
longitude: 129.846695,
is_map: true,
pinyin: "tumen"
},
{
id: 1469,
name: "通河县",
abbr: "THX",
area_code: "230128",
sort: 9999,
latitude: 45.455647,
longitude: 128.331879,
is_map: true,
pinyin: "tonghe"
},
{
id: 1471,
name: "泰来",
abbr: "TL",
area_code: "230224",
sort: 9999,
latitude: 46.39233,
longitude: 123.419533,
is_map: true,
pinyin: "tailai"
},
{
id: 1493,
name: "汤原",
abbr: "TY",
area_code: "230828",
sort: 9999,
latitude: 46.730049,
longitude: 129.904465,
is_map: true,
pinyin: "tangyuan"
},
{
id: 1495,
name: "同江",
abbr: "TJ",
area_code: "230881",
sort: 9999,
latitude: 47.651131,
longitude: 132.510117,
is_map: true,
pinyin: "tongjiang"
},
{
id: 1513,
name: "塔河",
abbr: "TH",
area_code: "232722",
sort: 9999,
latitude: 52.335228,
longitude: 124.710518,
is_map: true,
pinyin: "tahe"
},
{
id: 1517,
name: "泰顺县",
abbr: "TSX",
area_code: "330329",
sort: 9999,
latitude: 27.557308,
longitude: 119.71624,
is_map: true,
pinyin: "taishun"
},
{
id: 1532,
name: "太湖县",
abbr: "THX",
area_code: "340825",
sort: 9999,
latitude: 30.451868,
longitude: 116.305222,
is_map: true,
pinyin: "taihu"
},
{
id: 1555,
name: "泰宁",
abbr: "TN",
area_code: "350429",
sort: 9999,
latitude: 26.897995,
longitude: 117.177521,
is_map: true,
pinyin: "taining"
},
{
id: 1607,
name: "铜鼓",
abbr: "TG",
area_code: "360926",
sort: 9999,
latitude: 28.520956,
longitude: 114.37014,
is_map: true,
pinyin: "tonggu"
},
{
id: 1649,
name: "汤阴",
abbr: "TY",
area_code: "410523",
sort: 9999,
latitude: 35.922348,
longitude: 114.362358,
is_map: true,
pinyin: "tangyin"
},
{
id: 1660,
name: "台前",
abbr: "TQ",
area_code: "410927",
sort: 9999,
latitude: 35.996475,
longitude: 115.855682,
is_map: true,
pinyin: "taiqian"
},
{
id: 1686,
name: "团风",
abbr: "TF",
area_code: "421121",
sort: 9999,
latitude: 30.635691,
longitude: 114.872032,
is_map: true,
pinyin: "tuanfeng"
},
{
id: 1689,
name: "通城县",
abbr: "TCX",
area_code: "421222",
sort: 9999,
latitude: 29.246077,
longitude: 113.814133,
is_map: true,
pinyin: "tongcheng"
},
{
id: 1790,
name: "藤县",
abbr: "TX",
area_code: "450422",
sort: 9999,
latitude: 23.373962,
longitude: 110.931824,
is_map: true,
pinyin: "tengxian"
},
{
id: 1803,
name: "田阳",
abbr: "TY",
area_code: "451021",
sort: 9999,
latitude: 23.736078,
longitude: 106.904312,
is_map: true,
pinyin: "tianyang"
},
{
id: 1804,
name: "田东",
abbr: "TD",
area_code: "451022",
sort: 9999,
latitude: 23.600445,
longitude: 107.12426,
is_map: true,
pinyin: "tiandong"
},
{
id: 1811,
name: "田林",
abbr: "TL",
area_code: "451029",
sort: 9999,
latitude: 24.290262,
longitude: 106.235046,
is_map: true,
pinyin: "tianlin"
},
{
id: 1819,
name: "天峨",
abbr: "TE",
area_code: "451222",
sort: 9999,
latitude: 24.985964,
longitude: 107.174942,
is_map: true,
pinyin: "tiane"
},
{
id: 1961,
name: "桐梓",
abbr: "TZ",
area_code: "520322",
sort: 9999,
latitude: 28.131559,
longitude: 106.826591,
is_map: true,
pinyin: "tongzi"
},
{
id: 2000,
name: "天柱",
abbr: "TZ",
area_code: "522627",
sort: 9999,
latitude: 26.909683,
longitude: 109.212799,
is_map: true,
pinyin: "tianzhu"
},
{
id: 2003,
name: "台江",
abbr: "TJ",
area_code: "522630",
sort: 9999,
latitude: 26.669138,
longitude: 108.314636,
is_map: true,
pinyin: "taijiang"
},
{
id: 2032,
name: "通海",
abbr: "TH",
area_code: "530423",
sort: 9999,
latitude: 24.112206,
longitude: 102.76004,
is_map: true,
pinyin: "tonghai"
},
{
id: 2229,
name: "潼关",
abbr: "TG",
area_code: "610522",
sort: 9999,
latitude: 34.544514,
longitude: 110.247261,
is_map: true,
pinyin: "tongguan"
},
{
id: 2371,
name: "同仁县",
abbr: "TRX",
area_code: "632321",
sort: 9999,
latitude: 35.516338,
longitude: 102.017601,
is_map: true,
pinyin: "tongren"
}
],
Q: [
{
id: 28,
name: "青岛",
abbr: "QD",
area_code: "0532",
sort: 15,
latitude: 36.066231,
longitude: 120.382988,
is_map: true,
pinyin: "qingdao"
},
{
id: 341,
name: "庆阳",
abbr: "QY",
area_code: "0934",
sort: 1900,
latitude: 35.709782,
longitude: 107.642921,
is_map: true,
pinyin: "qingyang"
},
{
id: 63,
name: "秦皇岛",
abbr: "QHD",
area_code: "0335",
sort: 2000,
latitude: 39.935452,
longitude: 119.59964,
is_map: true,
pinyin: "qinhuangdao"
},
{
id: 91,
name: "齐齐哈尔",
abbr: "QQHE",
area_code: "0452",
sort: 2000,
latitude: 47.354309,
longitude: 123.917961,
is_map: true,
pinyin: "qiqihaer"
},
{
id: 102,
name: "泉州",
abbr: "QZ",
area_code: "0595",
sort: 2000,
latitude: 24.87389,
longitude: 118.675873,
is_map: true,
pinyin: "quanzhou"
},
{
id: 157,
name: "钦州",
abbr: "QZ",
area_code: "0777",
sort: 2000,
latitude: 21.9797,
longitude: 108.654312,
is_map: true,
pinyin: "qinzhou"
},
{
id: 182,
name: "衢州",
abbr: "QZ",
area_code: "0570",
sort: 2000,
latitude: 28.935921,
longitude: 118.874191,
is_map: true,
pinyin: "quzhou"
},
{
id: 265,
name: "曲靖",
abbr: "QJS",
area_code: "0874",
sort: 2000,
latitude: 25.490021,
longitude: 103.796249,
is_map: true,
pinyin: "qujingshi"
},
{
id: 278,
name: "琼海",
abbr: "QH",
area_code: "469002",
sort: 2000,
latitude: 19.258381,
longitude: 110.47464,
is_map: true,
pinyin: "qionghai"
},
{
id: 444,
name: "綦江",
abbr: "QJ",
area_code: "10022",
sort: 2000,
latitude: 28.96463,
longitude: 106.92852,
is_map: true,
pinyin: "qijiang"
},
{
id: 445,
name: "潜江",
abbr: "QJ",
area_code: "10023",
sort: 2000,
latitude: 30.40147,
longitude: 112.8993,
is_map: true,
pinyin: "qianjiang"
},
{
id: 491,
name: "全椒",
abbr: "QJ",
area_code: "200037",
sort: 2000,
latitude: 32.0853,
longitude: 118.273033,
is_map: true,
pinyin: "quanjiao"
},
{
id: 492,
name: "潜山",
abbr: "QS",
area_code: "200038",
sort: 2000,
latitude: 30.631069,
longitude: 116.581329,
is_map: true,
pinyin: "qianshan"
},
{
id: 549,
name: "清新",
abbr: "QX",
area_code: "200095",
sort: 2000,
latitude: 23.734739,
longitude: 113.016579,
is_map: true,
pinyin: "qingxin"
},
{
id: 573,
name: "黔西",
abbr: "QX",
area_code: "200119",
sort: 2000,
latitude: 27.008659,
longitude: 106.032303,
is_map: true,
pinyin: "qianxi"
},
{
id: 597,
name: "清苑",
abbr: "QY",
area_code: "200143",
sort: 2000,
latitude: 38.765259,
longitude: 115.489891,
is_map: true,
pinyin: "qingyuan"
},
{
id: 611,
name: "青县",
abbr: "QX",
area_code: "200157",
sort: 2000,
latitude: 38.583481,
longitude: 116.803177,
is_map: true,
pinyin: "qingxian"
},
{
id: 615,
name: "清河",
abbr: "QH",
area_code: "200161",
sort: 2000,
latitude: 37.039928,
longitude: 115.667183,
is_map: true,
pinyin: "qinghe"
},
{
id: 651,
name: "杞县",
abbr: "QX",
area_code: "200197",
sort: 2000,
latitude: 34.550339,
longitude: 114.782829,
is_map: true,
pinyin: "qixian"
},
{
id: 666,
name: "沁阳",
abbr: "QY",
area_code: "200212",
sort: 2000,
latitude: 35.087601,
longitude: 112.9506,
is_map: true,
pinyin: "qinyang"
},
{
id: 698,
name: "七台河",
abbr: "QTH",
area_code: "200244",
sort: 2000,
latitude: 45.770649,
longitude: 131.003067,
is_map: true,
pinyin: "qitaihe"
},
{
id: 730,
name: "蕲春",
abbr: "QC",
area_code: "200276",
sort: 2000,
latitude: 30.22617,
longitude: 115.436211,
is_map: true,
pinyin: "qichun"
},
{
id: 755,
name: "祁东",
abbr: "QD",
area_code: "200301",
sort: 2000,
latitude: 26.79965,
longitude: 112.090431,
is_map: true,
pinyin: "qidong"
},
{
id: 764,
name: "祁阳",
abbr: "QY",
area_code: "200310",
sort: 2000,
latitude: 26.58012,
longitude: 111.840149,
is_map: true,
pinyin: "qiyang"
},
{
id: 836,
name: "启东",
abbr: "QD",
area_code: "200382",
sort: 2000,
latitude: 31.80805,
longitude: 121.657867,
is_map: true,
pinyin: "qidong"
},
{
id: 943,
name: "青州",
abbr: "QZ",
area_code: "200489",
sort: 2000,
latitude: 36.684559,
longitude: 118.47966,
is_map: true,
pinyin: "qingzhou"
},
{
id: 956,
name: "齐河",
abbr: "QH",
area_code: "200502",
sort: 2000,
latitude: 36.794922,
longitude: 116.760017,
is_map: true,
pinyin: "qihe"
},
{
id: 957,
name: "曲阜",
abbr: "QF",
area_code: "200503",
sort: 2000,
latitude: 35.580818,
longitude: 116.986481,
is_map: true,
pinyin: "qufu"
},
{
id: 989,
name: "栖霞",
abbr: "QX",
area_code: "200535",
sort: 2000,
latitude: 37.335049,
longitude: 120.84977,
is_map: true,
pinyin: "qixia"
},
{
id: 1020,
name: "渠县",
abbr: "QX",
area_code: "200566",
sort: 2000,
latitude: 30.836639,
longitude: 106.972992,
is_map: true,
pinyin: "quxian"
},
{
id: 1042,
name: "邛崃",
abbr: "QL",
area_code: "200588",
sort: 2000,
latitude: 30.41032,
longitude: 103.464363,
is_map: true,
pinyin: "qionglai"
},
{
id: 1114,
name: "青田",
abbr: "QT",
area_code: "200660",
sort: 2000,
latitude: 28.13987,
longitude: 120.289551,
is_map: true,
pinyin: "qingtian"
},
{
id: 371,
name: "清远",
abbr: "QY",
area_code: "0763",
sort: 9999,
latitude: 23.682011,
longitude: 113.056152,
is_map: true,
pinyin: "qingyuan"
},
{
id: 378,
name: "迁安",
abbr: "QA",
area_code: "03152",
sort: 9999,
latitude: 39.99836,
longitude: 118.700729,
is_map: true,
pinyin: "qianan"
},
{
id: 1150,
name: "青阳",
abbr: "QY",
area_code: "341723",
sort: 9999,
latitude: 30.639351,
longitude: 117.847488,
is_map: true,
pinyin: "qingyang"
},
{
id: 1175,
name: "黔南",
abbr: "QN",
area_code: "522700",
sort: 9999,
latitude: 26.254271,
longitude: 107.522263,
is_map: true,
pinyin: "qiannan"
},
{
id: 1176,
name: "黔东南",
abbr: "QDN",
area_code: "522600",
sort: 9999,
latitude: 26.583639,
longitude: 107.984161,
is_map: true,
pinyin: "qiandongnan"
},
{
id: 1177,
name: "黔西南",
abbr: "QXN",
area_code: "522300",
sort: 9999,
latitude: 25.08988,
longitude: 104.904373,
is_map: true,
pinyin: "qianxinan"
},
{
id: 1185,
name: "邱县",
abbr: "QX",
area_code: "130430",
sort: 9999,
latitude: 36.813251,
longitude: 115.168587,
is_map: true,
pinyin: "qiuxian"
},
{
id: 1189,
name: "曲周",
abbr: "QZ",
area_code: "130435",
sort: 9999,
latitude: 36.773399,
longitude: 114.957588,
is_map: true,
pinyin: "quzhou"
},
{
id: 1212,
name: "曲阳",
abbr: "QY",
area_code: "130634",
sort: 9999,
latitude: 38.619991,
longitude: 114.704056,
is_map: true,
pinyin: "quyang"
},
{
id: 1296,
name: "祁县",
abbr: "QX",
area_code: "140727",
sort: 9999,
latitude: 37.358738,
longitude: 112.330528,
is_map: true,
pinyin: "qixian"
},
{
id: 1317,
name: "曲沃",
abbr: "QW",
area_code: "141021",
sort: 9999,
latitude: 35.641388,
longitude: 111.475533,
is_map: true,
pinyin: "quwo"
},
{
id: 1426,
name: "清原满族自治县",
abbr: "QYMZZZX",
area_code: "210423",
sort: 9999,
latitude: 42.101349,
longitude: 124.927193,
is_map: true,
pinyin: "qingyuanmanzuzizhixian"
},
{
id: 1456,
name: "乾安",
abbr: "QA",
area_code: "220723",
sort: 9999,
latitude: 45.006847,
longitude: 124.024361,
is_map: true,
pinyin: "qianan"
},
{
id: 1507,
name: "青冈",
abbr: "QG",
area_code: "231223",
sort: 9999,
latitude: 46.686596,
longitude: 126.112267,
is_map: true,
pinyin: "qinggang"
},
{
id: 1508,
name: "庆安",
abbr: "QA",
area_code: "231224",
sort: 9999,
latitude: 46.879204,
longitude: 127.510025,
is_map: true,
pinyin: "qingan"
},
{
id: 1525,
name: "庆元",
abbr: "QY",
area_code: "331126",
sort: 9999,
latitude: 27.618231,
longitude: 119.06723,
is_map: true,
pinyin: "qingyuan"
},
{
id: 1552,
name: "清流",
abbr: "QL",
area_code: "350423",
sort: 9999,
latitude: 26.17761,
longitude: 116.815819,
is_map: true,
pinyin: "qingliu"
},
{
id: 1591,
name: "全南",
abbr: "QN",
area_code: "360729",
sort: 9999,
latitude: 24.742651,
longitude: 114.531586,
is_map: true,
pinyin: "quannan"
},
{
id: 1635,
name: "庆云",
abbr: "QY",
area_code: "371423",
sort: 9999,
latitude: 37.777725,
longitude: 117.390511,
is_map: true,
pinyin: "qingyun"
},
{
id: 1651,
name: "淇县",
abbr: "QX",
area_code: "410622",
sort: 9999,
latitude: 35.609478,
longitude: 114.200378,
is_map: true,
pinyin: "qixian"
},
{
id: 1657,
name: "清丰",
abbr: "QF",
area_code: "410922",
sort: 9999,
latitude: 35.902412,
longitude: 115.107285,
is_map: true,
pinyin: "qingfeng"
},
{
id: 1780,
name: "全州",
abbr: "QZ",
area_code: "450324",
sort: 9999,
latitude: 25.929897,
longitude: 111.07299,
is_map: true,
pinyin: "quanzhou"
},
{
id: 1849,
name: "琼中黎族苗族自治县",
abbr: "QZLZMZZZX",
area_code: "469030",
sort: 9999,
latitude: 19.03557,
longitude: 109.839996,
is_map: true,
pinyin: "qiongzhonglizumiaozuzizhixian"
},
{
id: 1958,
name: "清镇",
abbr: "QZ",
area_code: "520181",
sort: 9999,
latitude: 26.551289,
longitude: 106.470276,
is_map: true,
pinyin: "qingzhen"
},
{
id: 1986,
name: "迁西",
abbr: "QX",
area_code: "130227",
sort: 9999,
latitude: 40.146236,
longitude: 118.305138,
is_map: true,
pinyin: "qianxi"
},
{
id: 1989,
name: "晴隆",
abbr: "QL",
area_code: "522324",
sort: 9999,
latitude: 25.832882,
longitude: 105.218773,
is_map: true,
pinyin: "qinglong"
},
{
id: 2042,
name: "巧家",
abbr: "QJ",
area_code: "530622",
sort: 9999,
latitude: 26.911699,
longitude: 102.929283,
is_map: true,
pinyin: "qiaojia"
},
{
id: 2094,
name: "丘北",
abbr: "QB",
area_code: "532626",
sort: 9999,
latitude: 24.040981,
longitude: 104.194366,
is_map: true,
pinyin: "qiubei"
},
{
id: 2409,
name: "青铜峡",
abbr: "QTX",
area_code: "640381",
sort: 9999,
latitude: 38.021507,
longitude: 106.075394,
is_map: true,
pinyin: "qingtongxia"
},
{
id: 5419,
name: "泉港区",
abbr: "QGX",
area_code: "350505",
sort: 9999,
latitude: 25.12686,
longitude: 118.912285,
is_map: true,
pinyin: "quangangqu"
},
{
id: 5738,
name: "黔江区",
abbr: "QJQ",
area_code: "500114",
sort: 9999,
latitude: 29.527548,
longitude: 108.782578,
is_map: true,
pinyin: "qianjiangqu"
}
],
W: [
{
id: 7,
name: "武汉",
abbr: "WH",
area_code: "027",
sort: 20,
latitude: 30.59276,
longitude: 114.305252,
is_map: true,
pinyin: "wuhan"
},
{
id: 30,
name: "温州",
abbr: "WZ",
area_code: "0577",
sort: 2000,
latitude: 27.994921,
longitude: 120.699387,
is_map: true,
pinyin: "wenzhou"
},
{
id: 34,
name: "威海",
abbr: "WH",
area_code: "0631",
sort: 2000,
latitude: 37.513481,
longitude: 122.121712,
is_map: true,
pinyin: "weihai"
},
{
id: 35,
name: "无锡",
abbr: "WX",
area_code: "0510",
sort: 2000,
latitude: 31.49099,
longitude: 120.31237,
is_map: true,
pinyin: "wuxi"
},
{
id: 38,
name: "芜湖",
abbr: "WH",
area_code: "0553",
sort: 2000,
latitude: 31.352461,
longitude: 118.433128,
is_map: true,
pinyin: "wuhu"
},
{
id: 48,
name: "潍坊",
abbr: "WF",
area_code: "0536",
sort: 2000,
latitude: 36.70686,
longitude: 119.161758,
is_map: true,
pinyin: "weifang"
},
{
id: 236,
name: "乌鲁木齐",
abbr: "WLMQ",
area_code: "0991",
sort: 2000,
latitude: 43.82663,
longitude: 87.616882,
is_map: true,
pinyin: "wulumuqi"
},
{
id: 243,
name: "梧州",
abbr: "WZ",
area_code: "0774",
sort: 2000,
latitude: 23.47703,
longitude: 111.279129,
is_map: true,
pinyin: "wuzhou"
},
{
id: 282,
name: "文昌",
abbr: "WC",
area_code: "0989",
sort: 2000,
latitude: 19.543289,
longitude: 110.797737,
is_map: true,
pinyin: "wenchang"
},
{
id: 293,
name: "文山",
abbr: "WS",
area_code: "0876",
sort: 2000,
latitude: 23.38678,
longitude: 104.233002,
is_map: true,
pinyin: "wenshan"
},
{
id: 306,
name: "渭南",
abbr: "WN",
area_code: "0913",
sort: 2000,
latitude: 34.499969,
longitude: 109.510147,
is_map: true,
pinyin: "weinan"
},
{
id: 393,
name: "乌海",
abbr: "WH",
area_code: "0473",
sort: 2000,
latitude: 39.653839,
longitude: 106.795464,
is_map: true,
pinyin: "wuhai"
},
{
id: 394,
name: "乌兰察布",
abbr: "WLCB",
area_code: "0474",
sort: 2000,
latitude: 40.993912,
longitude: 113.133759,
is_map: true,
pinyin: "wulanchabu"
},
{
id: 396,
name: "吴忠",
abbr: "WZ",
area_code: "0953",
sort: 2000,
latitude: 37.997551,
longitude: 106.198792,
is_map: true,
pinyin: "wuzhong"
},
{
id: 449,
name: "万州",
abbr: "WZ",
area_code: "10027",
sort: 2000,
latitude: 30.807899,
longitude: 108.40873,
is_map: true,
pinyin: "wanzhou"
},
{
id: 455,
name: "无为",
abbr: "WW",
area_code: "200001",
sort: 2000,
latitude: 31.303169,
longitude: 117.902237,
is_map: true,
pinyin: "wuwei"
},
{
id: 463,
name: "涡阳",
abbr: "WY",
area_code: "200009",
sort: 2000,
latitude: 33.492851,
longitude: 116.215813,
is_map: true,
pinyin: "woyang"
},
{
id: 483,
name: "五河",
abbr: "WH",
area_code: "200029",
sort: 2000,
latitude: 33.145069,
longitude: 117.885292,
is_map: true,
pinyin: "wuhe"
},
{
id: 489,
name: "望江",
abbr: "WJ",
area_code: "200035",
sort: 2000,
latitude: 30.12442,
longitude: 116.694229,
is_map: true,
pinyin: "wangjiang"
},
{
id: 523,
name: "武威",
abbr: "WW",
area_code: "200069",
sort: 2000,
latitude: 37.9282,
longitude: 102.63797,
is_map: true,
pinyin: "wuwei"
},
{
id: 546,
name: "吴川",
abbr: "WC",
area_code: "200092",
sort: 2000,
latitude: 21.44182,
longitude: 110.778236,
is_map: true,
pinyin: "wuchuan"
},
{
id: 557,
name: "五华",
abbr: "WH",
area_code: "200103",
sort: 2000,
latitude: 23.932541,
longitude: 115.776093,
is_map: true,
pinyin: "wuhua"
},
{
id: 581,
name: "万宁",
abbr: "WN",
area_code: "200127",
sort: 2000,
latitude: 18.795321,
longitude: 110.389748,
is_map: true,
pinyin: "wanning"
},
{
id: 588,
name: "魏县",
abbr: "WX",
area_code: "200134",
sort: 2000,
latitude: 36.359909,
longitude: 114.93882,
is_map: true,
pinyin: "weixian"
},
{
id: 602,
name: "文安",
abbr: "WA",
area_code: "200148",
sort: 2000,
latitude: 38.87328,
longitude: 116.458481,
is_map: true,
pinyin: "wenan"
},
{
id: 654,
name: "尉氏",
abbr: "WS",
area_code: "200200",
sort: 2000,
latitude: 34.41161,
longitude: 114.19297,
is_map: true,
pinyin: "weishi"
},
{
id: 673,
name: "武陟",
abbr: "WZ",
area_code: "200219",
sort: 2000,
latitude: 35.099522,
longitude: 113.40184,
is_map: true,
pinyin: "wuzhi"
},
{
id: 677,
name: "舞阳",
abbr: "WY",
area_code: "200223",
sort: 2000,
latitude: 33.437649,
longitude: 113.609306,
is_map: true,
pinyin: "wuyang"
},
{
id: 688,
name: "卫辉",
abbr: "WH",
area_code: "200234",
sort: 2000,
latitude: 35.398472,
longitude: 114.06459,
is_map: true,
pinyin: "weihui"
},
{
id: 693,
name: "温县",
abbr: "WX",
area_code: "200239",
sort: 2000,
latitude: 34.940231,
longitude: 113.080566,
is_map: true,
pinyin: "wenxian"
},
{
id: 701,
name: "五常",
abbr: "WC",
area_code: "200247",
sort: 2000,
latitude: 44.931911,
longitude: 127.167458,
is_map: true,
pinyin: "wuchang"
},
{
id: 726,
name: "武穴",
abbr: "WX",
area_code: "200272",
sort: 2000,
latitude: 29.84433,
longitude: 115.561302,
is_map: true,
pinyin: "wuxue"
},
{
id: 774,
name: "望城",
abbr: "WC",
area_code: "200320",
sort: 2000,
latitude: 28.36121,
longitude: 112.817902,
is_map: true,
pinyin: "wangcheng"
},
{
id: 788,
name: "武冈",
abbr: "WG",
area_code: "200334",
sort: 2000,
latitude: 26.726589,
longitude: 110.631378,
is_map: true,
pinyin: "wugang"
},
{
id: 824,
name: "汪清",
abbr: "WQ",
area_code: "200370",
sort: 2000,
latitude: 43.312809,
longitude: 129.771255,
is_map: true,
pinyin: "wangqing"
},
{
id: 825,
name: "吴江",
abbr: "WJ",
area_code: "200371",
sort: 2000,
latitude: 31.137621,
longitude: 120.645042,
is_map: true,
pinyin: "wujiang"
},
{
id: 916,
name: "乌兰浩特",
abbr: "WLHT",
area_code: "200462",
sort: 2000,
latitude: 46.072819,
longitude: 122.093163,
is_map: true,
pinyin: "wulanhaote"
},
{
id: 960,
name: "文登",
abbr: "WD",
area_code: "200506",
sort: 2000,
latitude: 37.19397,
longitude: 122.058098,
is_map: true,
pinyin: "wendeng"
},
{
id: 964,
name: "微山",
abbr: "WS",
area_code: "200510",
sort: 2000,
latitude: 34.807178,
longitude: 117.12886,
is_map: true,
pinyin: "weishan"
},
{
id: 983,
name: "汶上",
abbr: "WS",
area_code: "200529",
sort: 2000,
latitude: 35.732811,
longitude: 116.489166,
is_map: true,
pinyin: "wenshang"
},
{
id: 990,
name: "无棣",
abbr: "WD",
area_code: "200536",
sort: 2000,
latitude: 37.769932,
longitude: 117.625771,
is_map: true,
pinyin: "wudi"
},
{
id: 991,
name: "武城",
abbr: "WC",
area_code: "200537",
sort: 2000,
latitude: 37.213169,
longitude: 116.069229,
is_map: true,
pinyin: "wucheng"
},
{
id: 1007,
name: "闻喜",
abbr: "WX",
area_code: "200553",
sort: 2000,
latitude: 35.356628,
longitude: 111.224716,
is_map: true,
pinyin: "wenxi"
},
{
id: 1031,
name: "威远",
abbr: "WY",
area_code: "200577",
sort: 2000,
latitude: 29.52742,
longitude: 104.668854,
is_map: true,
pinyin: "weiyuan"
},
{
id: 1077,
name: "温岭",
abbr: "WL",
area_code: "200623",
sort: 2000,
latitude: 28.371799,
longitude: 121.385986,
is_map: true,
pinyin: "wenling"
},
{
id: 1103,
name: "武义",
abbr: "WY",
area_code: "200649",
sort: 2000,
latitude: 28.892599,
longitude: 119.816513,
is_map: true,
pinyin: "wuyi"
},
{
id: 1132,
name: "巫山",
abbr: "WS",
area_code: "200678",
sort: 2000,
latitude: 31.074619,
longitude: 109.878799,
is_map: true,
pinyin: "wushan"
},
{
id: 1133,
name: "武隆",
abbr: "WL",
area_code: "200679",
sort: 2000,
latitude: 29.32543,
longitude: 107.759933,
is_map: true,
pinyin: "wulong"
},
{
id: 1134,
name: "巫溪",
abbr: "WX",
area_code: "200680",
sort: 2000,
latitude: 31.3986,
longitude: 109.57016,
is_map: true,
pinyin: "wuxi"
},
{
id: 363,
name: "武安",
abbr: "WA",
area_code: "03101",
sort: 9999,
latitude: 36.696709,
longitude: 114.203758,
is_map: true,
pinyin: "wuan"
},
{
id: 375,
name: "瓦房店",
abbr: "WFD",
area_code: "04111",
sort: 9999,
latitude: 39.626438,
longitude: 121.97995,
is_map: true,
pinyin: "wafangdian"
},
{
id: 1200,
name: "威县",
abbr: "WX",
area_code: "130533",
sort: 9999,
latitude: 36.983273,
longitude: 115.272751,
is_map: true,
pinyin: "weixian"
},
{
id: 1210,
name: "望都",
abbr: "WD",
area_code: "130631",
sort: 9999,
latitude: 38.707447,
longitude: 115.154007,
is_map: true,
pinyin: "wangdu"
},
{
id: 1225,
name: "万全",
abbr: "WQ",
area_code: "130729",
sort: 9999,
latitude: 40.765137,
longitude: 114.73613,
is_map: true,
pinyin: "wanquan"
},
{
id: 1237,
name: "围场满族蒙古族自治县",
abbr: "WCMZMGZZZX",
area_code: "130828",
sort: 9999,
latitude: 41.949406,
longitude: 117.764084,
is_map: true,
pinyin: "weichangmanzumengguzuzizhixian"
},
{
id: 1243,
name: "吴桥",
abbr: "WQ",
area_code: "130928",
sort: 9999,
latitude: 37.628181,
longitude: 116.39151,
is_map: true,
pinyin: "wuqiao"
},
{
id: 1249,
name: "武邑",
abbr: "WY",
area_code: "131122",
sort: 9999,
latitude: 37.803776,
longitude: 115.892418,
is_map: true,
pinyin: "wuyi"
},
{
id: 1250,
name: "武强",
abbr: "WQ",
area_code: "131123",
sort: 9999,
latitude: 38.03698,
longitude: 115.970238,
is_map: true,
pinyin: "wuqiang"
},
{
id: 1298,
name: "万荣",
abbr: "WR",
area_code: "140822",
sort: 9999,
latitude: 35.417042,
longitude: 110.843559,
is_map: true,
pinyin: "wanrong"
},
{
id: 1355,
name: "翁牛特旗",
abbr: "WNTQ",
area_code: "150426",
sort: 9999,
latitude: 42.937126,
longitude: 119.022621,
is_map: true,
pinyin: "wengniuteqi"
},
{
id: 1369,
name: "乌审旗",
abbr: "WSQ",
area_code: "150626",
sort: 9999,
latitude: 38.603703,
longitude: 108.840927,
is_map: true,
pinyin: "wushenqi"
},
{
id: 1381,
name: "五原",
abbr: "WY",
area_code: "150821",
sort: 9999,
latitude: 41.097637,
longitude: 108.27066,
is_map: true,
pinyin: "wuyuan"
},
{
id: 1383,
name: "乌拉特前旗",
abbr: "WLTQQ",
area_code: "150823",
sort: 9999,
latitude: 40.725208,
longitude: 108.656815,
is_map: true,
pinyin: "wulateqianqi"
},
{
id: 1384,
name: "乌拉特中旗",
abbr: "WLTZQ",
area_code: "150824",
sort: 9999,
latitude: 41.57254,
longitude: 108.515259,
is_map: true,
pinyin: "wulatezhongqi"
},
{
id: 1385,
name: "乌拉特后旗",
abbr: "WLTHQ",
area_code: "150825",
sort: 9999,
latitude: 41.084309,
longitude: 107.074944,
is_map: true,
pinyin: "wulatehouqi"
},
{
id: 1505,
name: "五大连池市",
abbr: "WDLC",
area_code: "231182",
sort: 9999,
latitude: 48.512688,
longitude: 126.197693,
is_map: true,
pinyin: "wudalianchi"
},
{
id: 1506,
name: "望奎",
abbr: "WK",
area_code: "231221",
sort: 9999,
latitude: 46.833519,
longitude: 126.484192,
is_map: true,
pinyin: "wangkui"
},
{
id: 1516,
name: "文成县",
abbr: "WCX",
area_code: "330328",
sort: 9999,
latitude: 27.789133,
longitude: 120.092453,
is_map: true,
pinyin: "wencheng"
},
{
id: 1527,
name: "芜湖县",
abbr: "WH",
area_code: "340220",
sort: 9999,
latitude: 31.145262,
longitude: 118.572304,
is_map: true,
pinyin: "wuhuxian"
},
{
id: 1564,
name: "武夷山",
abbr: "WYS",
area_code: "350782",
sort: 9999,
latitude: 27.751734,
longitude: 118.032799,
is_map: true,
pinyin: "wuyishan"
},
{
id: 1566,
name: "武平",
abbr: "WP",
area_code: "350824",
sort: 9999,
latitude: 25.08865,
longitude: 116.100929,
is_map: true,
pinyin: "wuping"
},
{
id: 1577,
name: "武宁",
abbr: "WN",
area_code: "360423",
sort: 9999,
latitude: 29.260181,
longitude: 115.105644,
is_map: true,
pinyin: "wuning"
},
{
id: 1599,
name: "万安",
abbr: "WA",
area_code: "360828",
sort: 9999,
latitude: 26.462086,
longitude: 114.784691,
is_map: true,
pinyin: "wanan"
},
{
id: 1603,
name: "万载",
abbr: "WZ",
area_code: "360922",
sort: 9999,
latitude: 28.104528,
longitude: 114.449013,
is_map: true,
pinyin: "wanzai"
},
{
id: 1620,
name: "万年",
abbr: "WN",
area_code: "361129",
sort: 9999,
latitude: 28.692589,
longitude: 117.070152,
is_map: true,
pinyin: "wannian"
},
{
id: 1621,
name: "婺源",
abbr: "WY",
area_code: "361130",
sort: 9999,
latitude: 29.254015,
longitude: 117.86219,
is_map: true,
pinyin: "wuyuan"
},
{
id: 1633,
name: "五莲县",
abbr: "WLX",
area_code: "371121",
sort: 9999,
latitude: 35.751938,
longitude: 119.206741,
is_map: true,
pinyin: "wulian"
},
{
id: 1647,
name: "舞钢",
abbr: "WG",
area_code: "410481",
sort: 9999,
latitude: 33.302082,
longitude: 113.526253,
is_map: true,
pinyin: "wugang"
},
{
id: 1766,
name: "武鸣",
abbr: "WM",
area_code: "450122",
sort: 9999,
latitude: 23.157164,
longitude: 108.280716,
is_map: true,
pinyin: "wuming"
},
{
id: 1830,
name: "武宣",
abbr: "WX",
area_code: "451323",
sort: 9999,
latitude: 23.604162,
longitude: 109.662872,
is_map: true,
pinyin: "wuxuan"
},
{
id: 1892,
name: "武胜",
abbr: "WS",
area_code: "511622",
sort: 9999,
latitude: 30.344292,
longitude: 106.292473,
is_map: true,
pinyin: "wusheng"
},
{
id: 1965,
name: "务川仡佬族苗族自治县",
abbr: "WCGLZMZZZX",
area_code: "520326",
sort: 9999,
latitude: 28.521566,
longitude: 107.887856,
is_map: true,
pinyin: "wuchuangelaozumiaozuzizhixian"
},
{
id: 1976,
name: "威宁彝族回族苗族自治县",
abbr: "WNYZHZMZZZX",
area_code: "520526",
sort: 9999,
latitude: 26.859098,
longitude: 104.286522,
is_map: true,
pinyin: "weiningyizuhuizumiaozuzizhixian"
},
{
id: 1991,
name: "望谟",
abbr: "WM",
area_code: "522326",
sort: 9999,
latitude: 25.166668,
longitude: 106.09156,
is_map: true,
pinyin: "wangmo"
},
{
id: 2014,
name: "瓮安",
abbr: "WA",
area_code: "522725",
sort: 9999,
latitude: 27.066339,
longitude: 107.478416,
is_map: true,
pinyin: "wengan"
},
{
id: 2048,
name: "威信",
abbr: "WX",
area_code: "530629",
sort: 9999,
latitude: 27.843382,
longitude: 105.048691,
is_map: true,
pinyin: "weixin"
},
{
id: 2079,
name: "武定",
abbr: "WD",
area_code: "532329",
sort: 9999,
latitude: 25.5301,
longitude: 102.406784,
is_map: true,
pinyin: "wuding"
},
{
id: 2105,
name: "巍山彝族回族自治县",
abbr: "WSYZHZZZX",
area_code: "532927",
sort: 9999,
latitude: 25.230909,
longitude: 100.30793,
is_map: true,
pinyin: "weishanyizuhuizuzizhixian"
},
{
id: 2125,
name: "维西傈僳族自治县",
abbr: "WXLSZZZX",
area_code: "533423",
sort: 9999,
latitude: 27.180948,
longitude: 99.286354,
is_map: true,
pinyin: "weixilisuzuzizhixian"
},
{
id: 2243,
name: "吴起",
abbr: "WQ",
area_code: "610626",
sort: 9999,
latitude: 36.92485,
longitude: 108.176979,
is_map: true,
pinyin: "wuqi"
},
{
id: 5013,
name: "无极",
abbr: "WJ",
area_code: "130130",
sort: 9999,
latitude: 38.176376,
longitude: 114.977844,
is_map: true,
pinyin: "wuji"
},
{
id: 5231,
name: "五营区",
abbr: "WYQ",
area_code: "230710",
sort: 9999,
latitude: 48.108204,
longitude: 129.245026,
is_map: true,
pinyin: "wuyingqu"
},
{
id: 5235,
name: "乌伊岭区",
abbr: "WYLQ",
area_code: "230714",
sort: 9999,
latitude: 48.591122,
longitude: 129.437851,
is_map: true,
pinyin: "wuyilingqu"
},
{
id: 5428,
name: "湾里区",
abbr: "WLQ",
area_code: "360105",
sort: 9999,
latitude: 28.676081,
longitude: 115.746628,
is_map: true,
pinyin: "wanliqu"
}
],
C: [
{
id: 14,
name: "成都",
abbr: "CD",
area_code: "028",
sort: 21,
latitude: 30.5702,
longitude: 104.064758,
is_map: true,
pinyin: "chengdu"
},
{
id: 337,
name: "赤峰",
abbr: "CF",
area_code: "476",
sort: 1500,
latitude: 42.258598,
longitude: 118.888939,
is_map: true,
pinyin: "chifeng"
},
{
id: 360,
name: "朝阳",
abbr: "CY",
area_code: "04211",
sort: 1900,
latitude: 41.573471,
longitude: 120.450798,
is_map: true,
pinyin: "chaoyang"
},
{
id: 12,
name: "长春",
abbr: "CC",
area_code: "0431",
sort: 2000,
latitude: 43.816021,
longitude: 125.32357,
is_map: true,
pinyin: "changchun"
},
{
id: 21,
name: "长沙",
abbr: "CS",
area_code: "0731",
sort: 2000,
latitude: 28.227779,
longitude: 112.938858,
is_map: true,
pinyin: "changsha"
},
{
id: 44,
name: "重庆",
abbr: "CQ",
area_code: "023",
sort: 2000,
latitude: 29.564711,
longitude: 106.550728,
is_map: true,
pinyin: "chongqing"
},
{
id: 59,
name: "常州",
abbr: "CZ",
area_code: "0519",
sort: 2000,
latitude: 31.81072,
longitude: 119.973648,
is_map: true,
pinyin: "changzhou"
},
{
id: 83,
name: "滁州",
abbr: "CZ",
area_code: "0550",
sort: 2000,
latitude: 32.301811,
longitude: 118.316833,
is_map: true,
pinyin: "chuzhou"
},
{
id: 120,
name: "常德",
abbr: "CD",
area_code: "0736",
sort: 2000,
latitude: 29.03158,
longitude: 111.69854,
is_map: true,
pinyin: "changde"
},
{
id: 172,
name: "承德",
abbr: "CD",
area_code: "0314",
sort: 2000,
latitude: 40.9515,
longitude: 117.963402,
is_map: true,
pinyin: "chengde"
},
{
id: 175,
name: "沧州",
abbr: "CZ",
area_code: "0317",
sort: 2000,
latitude: 38.304409,
longitude: 116.838692,
is_map: true,
pinyin: "cangzhou"
},
{
id: 178,
name: "郴州",
abbr: "CZ",
area_code: "0735",
sort: 2000,
latitude: 25.77063,
longitude: 113.014847,
is_map: false,
pinyin: "chenzhou"
},
{
id: 235,
name: "潮州",
abbr: "CZ",
area_code: "0768",
sort: 2000,
latitude: 23.6567,
longitude: 116.622963,
is_map: true,
pinyin: "chaozhou"
},
{
id: 237,
name: "长治",
abbr: "CZ",
area_code: "0355",
sort: 2000,
latitude: 36.195808,
longitude: 113.116493,
is_map: true,
pinyin: "changzhi"
},
{
id: 238,
name: "巢湖",
abbr: "CH",
area_code: "0565",
sort: 2000,
latitude: 31.623289,
longitude: 117.889374,
is_map: true,
pinyin: "chaohu"
},
{
id: 246,
name: "池州",
abbr: "CZ",
area_code: "0566",
sort: 2000,
latitude: 30.66469,
longitude: 117.491417,
is_map: true,
pinyin: "chizhou"
},
{
id: 267,
name: "昌吉",
abbr: "CJ",
area_code: "0994",
sort: 2000,
latitude: 44.01437,
longitude: 87.267487,
is_map: true,
pinyin: "changji"
},
{
id: 279,
name: "楚雄",
abbr: "CX",
area_code: "0878",
sort: 2000,
latitude: 25.032881,
longitude: 101.545822,
is_map: true,
pinyin: "chuxiong"
},
{
id: 289,
name: "崇左",
abbr: "CZ",
area_code: "4401004",
sort: 2000,
latitude: 22.37895,
longitude: 107.364853,
is_map: true,
pinyin: "chongzuo"
},
{
id: 482,
name: "长丰",
abbr: "CF",
area_code: "200028",
sort: 2000,
latitude: 32.477959,
longitude: 117.167664,
is_map: true,
pinyin: "changfeng"
},
{
id: 505,
name: "长乐",
abbr: "CL",
area_code: "200051",
sort: 2000,
latitude: 25.96283,
longitude: 119.523239,
is_map: true,
pinyin: "changle"
},
{
id: 514,
name: "长汀",
abbr: "CT",
area_code: "200060",
sort: 2000,
latitude: 25.833481,
longitude: 116.357651,
is_map: true,
pinyin: "changting"
},
{
id: 530,
name: "潮安",
abbr: "CA",
area_code: "200076",
sort: 2000,
latitude: 23.46244,
longitude: 116.678093,
is_map: true,
pinyin: "chaoan"
},
{
id: 563,
name: "从化",
abbr: "CH",
area_code: "200109",
sort: 2000,
latitude: 23.548349,
longitude: 113.586456,
is_map: true,
pinyin: "conghua"
},
{
id: 582,
name: "澄迈",
abbr: "CM",
area_code: "200128",
sort: 2000,
latitude: 19.738489,
longitude: 110.004868,
is_map: true,
pinyin: "chengmai"
},
{
id: 592,
name: "磁县",
abbr: "CX",
area_code: "200138",
sort: 2000,
latitude: 36.373959,
longitude: 114.373917,
is_map: true,
pinyin: "cixian"
},
{
id: 636,
name: "长垣",
abbr: "CY",
area_code: "200182",
sort: 2000,
latitude: 35.200489,
longitude: 114.668861,
is_map: true,
pinyin: "changyuan"
},
{
id: 641,
name: "长葛",
abbr: "CG",
area_code: "200187",
sort: 2000,
latitude: 34.216721,
longitude: 113.768272,
is_map: true,
pinyin: "changge"
},
{
id: 740,
name: "赤壁",
abbr: "CB",
area_code: "200286",
sort: 2000,
latitude: 29.72476,
longitude: 113.900543,
is_map: true,
pinyin: "chibi"
},
{
id: 749,
name: "崇阳",
abbr: "CY",
area_code: "200295",
sort: 2000,
latitude: 29.55537,
longitude: 114.038918,
is_map: true,
pinyin: "chongyang"
},
{
id: 758,
name: "常宁",
abbr: "CN",
area_code: "200304",
sort: 2000,
latitude: 26.420931,
longitude: 112.399918,
is_map: true,
pinyin: "changning"
},
{
id: 760,
name: "茶陵",
abbr: "CL",
area_code: "200306",
sort: 2000,
latitude: 26.777451,
longitude: 113.539268,
is_map: true,
pinyin: "chaling"
},
{
id: 797,
name: "慈利",
abbr: "CL",
area_code: "200343",
sort: 2000,
latitude: 29.429701,
longitude: 111.139214,
is_map: true,
pinyin: "cili"
},
{
id: 812,
name: "长岭",
abbr: "CL",
area_code: "200358",
sort: 2000,
latitude: 44.275909,
longitude: 123.9673,
is_map: true,
pinyin: "changling"
},
{
id: 911,
name: "昌图",
abbr: "CT",
area_code: "200457",
sort: 2000,
latitude: 42.786129,
longitude: 124.110924,
is_map: true,
pinyin: "changtu"
},
{
id: 931,
name: "曹县",
abbr: "CX",
area_code: "200477",
sort: 2000,
latitude: 34.825531,
longitude: 115.542137,
is_map: true,
pinyin: "caoxian"
},
{
id: 959,
name: "昌邑",
abbr: "CY",
area_code: "200505",
sort: 2000,
latitude: 36.858841,
longitude: 119.398621,
is_map: true,
pinyin: "changyi"
},
{
id: 962,
name: "昌乐",
abbr: "CL",
area_code: "200508",
sort: 2000,
latitude: 36.70702,
longitude: 118.829842,
is_map: true,
pinyin: "changle"
},
{
id: 979,
name: "茌平",
abbr: "CP",
area_code: "200525",
sort: 2000,
latitude: 36.580681,
longitude: 116.255219,
is_map: true,
pinyin: "chiping"
},
{
id: 982,
name: "成武",
abbr: "CW",
area_code: "200528",
sort: 2000,
latitude: 34.95245,
longitude: 115.889641,
is_map: true,
pinyin: "chengwu"
},
{
id: 1010,
name: "崇明",
abbr: "CM",
area_code: "200556",
sort: 2000,
latitude: 31.6229,
longitude: 121.397301,
is_map: true,
pinyin: "chongming"
},
{
id: 1037,
name: "崇州",
abbr: "CZ",
area_code: "200583",
sort: 2000,
latitude: 30.630211,
longitude: 103.67289,
is_map: true,
pinyin: "chongzhou"
},
{
id: 1075,
name: "慈溪",
abbr: "CX",
area_code: "200621",
sort: 2000,
latitude: 30.16964,
longitude: 121.266472,
is_map: true,
pinyin: "cixi"
},
{
id: 1080,
name: "苍南",
abbr: "CN",
area_code: "200626",
sort: 2000,
latitude: 27.517429,
longitude: 120.426308,
is_map: true,
pinyin: "cangnan"
},
{
id: 1096,
name: "长兴",
abbr: "CX",
area_code: "200642",
sort: 2000,
latitude: 31.02663,
longitude: 119.91011,
is_map: true,
pinyin: "changxing"
},
{
id: 1118,
name: "淳安",
abbr: "CA",
area_code: "200664",
sort: 2000,
latitude: 29.608521,
longitude: 119.041878,
is_map: true,
pinyin: "chunan"
},
{
id: 355,
name: "常熟",
abbr: "CS",
area_code: "05121",
sort: 9999,
latitude: 31.65382,
longitude: 120.752373,
is_map: true,
pinyin: "changshu"
},
{
id: 373,
name: "澄海",
abbr: "CH",
area_code: "07541",
sort: 9999,
latitude: 23.466129,
longitude: 116.756081,
is_map: true,
pinyin: "chenghai"
},
{
id: 1158,
name: "长泰",
abbr: "CT",
area_code: "350625",
sort: 9999,
latitude: 24.625799,
longitude: 117.759483,
is_map: true,
pinyin: "changtai"
},
{
id: 1168,
name: "常山县",
abbr: "CS",
area_code: "330822",
sort: 9999,
latitude: 28.901409,
longitude: 118.511162,
is_map: true,
pinyin: "changshan"
},
{
id: 1174,
name: "潮南",
abbr: "CN",
area_code: "440514",
sort: 9999,
latitude: 23.25029,
longitude: 116.433098,
is_map: true,
pinyin: "chaonan"
},
{
id: 1179,
name: "昌黎",
abbr: "CL",
area_code: "130321",
sort: 9999,
latitude: 39.709728,
longitude: 119.164543,
is_map: true,
pinyin: "changli"
},
{
id: 1183,
name: "成安",
abbr: "CA",
area_code: "130424",
sort: 9999,
latitude: 36.442997,
longitude: 114.691841,
is_map: true,
pinyin: "chengan"
},
{
id: 1228,
name: "赤城",
abbr: "CC",
area_code: "130732",
sort: 9999,
latitude: 40.912083,
longitude: 115.83271,
is_map: true,
pinyin: "chicheng"
},
{
id: 1375,
name: "陈巴尔虎旗",
abbr: "CBEHQ",
area_code: "150725",
sort: 9999,
latitude: 49.328423,
longitude: 119.437607,
is_map: true,
pinyin: "chenbaerhuqi"
},
{
id: 1392,
name: "察哈尔右翼前旗",
abbr: "CHEYYQQ",
area_code: "150926",
sort: 9999,
latitude: 40.786858,
longitude: 113.21196,
is_map: true,
pinyin: "chahaeryouyiqianqi"
},
{
id: 1393,
name: "察哈尔右翼中旗",
abbr: "CHEYYZQ",
area_code: "150927",
sort: 9999,
latitude: 41.274212,
longitude: 112.63356,
is_map: true,
pinyin: "chahaeryouyizhongqi"
},
{
id: 1394,
name: "察哈尔右翼后旗",
abbr: "CHEYYHQ",
area_code: "150928",
sort: 9999,
latitude: 41.447212,
longitude: 113.190598,
is_map: true,
pinyin: "chahaeryouyihouqi"
},
{
id: 1421,
name: "长海县",
abbr: "CHX",
area_code: "210224",
sort: 9999,
latitude: 39.2724,
longitude: 122.587822,
is_map: true,
pinyin: "changhai"
},
{
id: 1453,
name: "长白朝鲜族自治县",
abbr: "CZBCXZZZX",
area_code: "220623",
sort: 9999,
latitude: 41.419361,
longitude: 128.203384,
is_map: true,
pinyin: "changbaichaoxianzuzizhixian"
},
{
id: 1588,
name: "崇义",
abbr: "CY",
area_code: "360725",
sort: 9999,
latitude: 25.68791,
longitude: 114.30735,
is_map: true,
pinyin: "chongyi"
},
{
id: 1611,
name: "崇仁县",
abbr: "CRX",
area_code: "361024",
sort: 9999,
latitude: 27.760906,
longitude: 116.059113,
is_map: true,
pinyin: "chongren"
},
{
id: 1721,
name: "辰溪县",
abbr: "CXX",
area_code: "431223",
sort: 9999,
latitude: 28.005474,
longitude: 110.196953,
is_map: true,
pinyin: "chenxi"
},
{
id: 1789,
name: "苍梧",
abbr: "CW",
area_code: "450421",
sort: 9999,
latitude: 23.40996,
longitude: 111.246033,
is_map: true,
pinyin: "cangwu"
},
{
id: 1792,
name: "岑溪",
abbr: "CX",
area_code: "450481",
sort: 9999,
latitude: 22.918406,
longitude: 110.998116,
is_map: true,
pinyin: "cenxi"
},
{
id: 1970,
name: "赤水",
abbr: "CS",
area_code: "520381",
sort: 9999,
latitude: 28.587057,
longitude: 105.698112,
is_map: true,
pinyin: "chishui"
},
{
id: 1992,
name: "册亨",
abbr: "CH",
area_code: "522327",
sort: 9999,
latitude: 24.983337,
longitude: 105.812408,
is_map: true,
pinyin: "ceheng"
},
{
id: 1999,
name: "岑巩",
abbr: "CG",
area_code: "522626",
sort: 9999,
latitude: 27.173244,
longitude: 108.81646,
is_map: true,
pinyin: "cengong"
},
{
id: 2006,
name: "从江",
abbr: "CJ",
area_code: "522633",
sort: 9999,
latitude: 25.747059,
longitude: 108.912651,
is_map: true,
pinyin: "congjiang"
},
{
id: 2018,
name: "长顺",
abbr: "CS",
area_code: "522729",
sort: 9999,
latitude: 26.022116,
longitude: 106.447372,
is_map: true,
pinyin: "changshun"
},
{
id: 2031,
name: "澄江",
abbr: "CJ",
area_code: "530422",
sort: 9999,
latitude: 24.66968,
longitude: 102.916649,
is_map: true,
pinyin: "chengjiang"
},
{
id: 2040,
name: "昌宁",
abbr: "CN",
area_code: "530524",
sort: 9999,
latitude: 24.823662,
longitude: 99.612343,
is_map: true,
pinyin: "changning"
},
{
id: 2070,
name: "沧源佤族自治县",
abbr: "CYWZZZX",
area_code: "530927",
sort: 9999,
latitude: 23.146887,
longitude: 99.247398,
is_map: true,
pinyin: "cangyuanwazuzizhixian"
},
{
id: 2151,
name: "昌都地区",
abbr: "CDDQ",
area_code: "542100",
sort: 9999,
latitude: 31.136875,
longitude: 97.178452,
is_map: true,
pinyin: "changdudiqu"
},
{
id: 2232,
name: "澄城",
abbr: "CC",
area_code: "610525",
sort: 9999,
latitude: 35.183998,
longitude: 109.937607,
is_map: true,
pinyin: "chengcheng"
},
{
id: 2425,
name: "昌吉回族自治州",
abbr: "CJHZZZZ",
area_code: "652300",
sort: 9999,
latitude: 44.014576,
longitude: 87.304008,
is_map: true,
pinyin: "changjihuizuzizhizhou"
},
{
id: 5042,
name: "曹妃甸区",
abbr: "CFD",
area_code: "130209",
sort: 9999,
latitude: 39.273129,
longitude: 118.460228,
is_map: true,
pinyin: "caofeidianqu"
},
{
id: 5647,
name: "潮阳区",
abbr: "CYQ",
area_code: "440513",
sort: 9999,
latitude: 23.262337,
longitude: 116.6026,
is_map: true,
pinyin: "chaoyangqu"
},
{
id: 5687,
name: "城中区",
abbr: "CZQ",
area_code: "450202",
sort: 9999,
latitude: 0,
longitude: 0,
is_map: true,
pinyin: "chengzhongqu"
},
{
id: 5813,
name: "呈贡区",
abbr: "CGQ",
area_code: "530114",
sort: 9999,
latitude: 24.889275,
longitude: 102.801384,
is_map: true,
pinyin: "chenggongqu"
}
],
F: [
{
id: 24,
name: "佛山",
abbr: "FS",
area_code: "0757",
sort: 23,
latitude: 23.021851,
longitude: 113.121918,
is_map: true,
pinyin: "foshan"
},
{
id: 9,
name: "福州",
abbr: "FZ",
area_code: "0591",
sort: 2000,
latitude: 26.074209,
longitude: 119.296471,
is_map: true,
pinyin: "fuzhou"
},
{
id: 108,
name: "抚顺",
abbr: "FS",
area_code: "0413",
sort: 2000,
latitude: 41.879711,
longitude: 123.957222,
is_map: true,
pinyin: "fushun"
},
{
id: 118,
name: "阜新",
abbr: "FX",
area_code: "0418",
sort: 2000,
latitude: 42.02166,
longitude: 121.670113,
is_map: true,
pinyin: "fuxin"
},
{
id: 195,
name: "阜阳",
abbr: "FY",
area_code: "0558",
sort: 2000,
latitude: 32.889629,
longitude: 115.814949,
is_map: true,
pinyin: "fuyang"
},
{
id: 219,
name: "抚州",
abbr: "FZ",
area_code: "0794",
sort: 2000,
latitude: 27.947809,
longitude: 116.358093,
is_map: true,
pinyin: "fuzhou"
},
{
id: 429,
name: "涪陵",
abbr: "FL",
area_code: "10007",
sort: 2000,
latitude: 29.70315,
longitude: 107.389816,
is_map: true,
pinyin: "fuling"
},
{
id: 459,
name: "肥东",
abbr: "FD",
area_code: "200005",
sort: 2000,
latitude: 31.887699,
longitude: 117.469276,
is_map: true,
pinyin: "feidong"
},
{
id: 460,
name: "肥西",
abbr: "FX",
area_code: "200006",
sort: 2000,
latitude: 31.70653,
longitude: 117.158401,
is_map: true,
pinyin: "feixi"
},
{
id: 468,
name: "阜南",
abbr: "FN",
area_code: "200014",
sort: 2000,
latitude: 32.658871,
longitude: 115.593193,
is_map: true,
pinyin: "funan"
},
{
id: 475,
name: "凤台",
abbr: "FT",
area_code: "200021",
sort: 2000,
latitude: 32.709461,
longitude: 116.71077,
is_map: true,
pinyin: "fengtai"
},
{
id: 490,
name: "凤阳",
abbr: "FY",
area_code: "200036",
sort: 2000,
latitude: 32.866001,
longitude: 117.561241,
is_map: true,
pinyin: "fengyang"
},
{
id: 497,
name: "福清",
abbr: "FQ",
area_code: "200043",
sort: 2000,
latitude: 25.72024,
longitude: 119.384109,
is_map: true,
pinyin: "fuqing"
},
{
id: 500,
name: "福安",
abbr: "FA",
area_code: "200046",
sort: 2000,
latitude: 27.087971,
longitude: 119.647682,
is_map: true,
pinyin: "fuan"
},
{
id: 504,
name: "福鼎",
abbr: "FD",
area_code: "200050",
sort: 2000,
latitude: 27.32436,
longitude: 120.216713,
is_map: true,
pinyin: "fuding"
},
{
id: 635,
name: "方城",
abbr: "FC",
area_code: "200181",
sort: 2000,
latitude: 33.254391,
longitude: 113.01255,
is_map: true,
pinyin: "fangcheng"
},
{
id: 667,
name: "封丘",
abbr: "FQ",
area_code: "200213",
sort: 2000,
latitude: 35.041191,
longitude: 114.41861,
is_map: true,
pinyin: "fengqiu"
},
{
id: 680,
name: "扶沟",
abbr: "FG",
area_code: "200226",
sort: 2000,
latitude: 34.060001,
longitude: 114.394821,
is_map: true,
pinyin: "fugou"
},
{
id: 708,
name: "富锦",
abbr: "FJ",
area_code: "200254",
sort: 2000,
latitude: 47.250221,
longitude: 132.037277,
is_map: true,
pinyin: "fujin"
},
{
id: 811,
name: "抚松",
abbr: "FS",
area_code: "200357",
sort: 2000,
latitude: 42.342018,
longitude: 127.280357,
is_map: true,
pinyin: "fusong"
},
{
id: 821,
name: "扶余",
abbr: "FY",
area_code: "200367",
sort: 2000,
latitude: 44.990139,
longitude: 126.049721,
is_map: true,
pinyin: "fuyu"
},
{
id: 840,
name: "丰县",
abbr: "FX",
area_code: "200386",
sort: 2000,
latitude: 34.693958,
longitude: 116.595322,
is_map: true,
pinyin: "fengxian"
},
{
id: 848,
name: "阜宁",
abbr: "FN",
area_code: "200394",
sort: 2000,
latitude: 33.759312,
longitude: 119.802582,
is_map: true,
pinyin: "funing"
},
{
id: 871,
name: "丰城",
abbr: "FC",
area_code: "200417",
sort: 2000,
latitude: 28.159201,
longitude: 115.77121,
is_map: true,
pinyin: "fengcheng"
},
{
id: 884,
name: "浮梁",
abbr: "FL",
area_code: "200430",
sort: 2000,
latitude: 29.351589,
longitude: 117.215233,
is_map: true,
pinyin: "fuliang"
},
{
id: 904,
name: "凤城",
abbr: "FC",
area_code: "200450",
sort: 2000,
latitude: 40.452789,
longitude: 124.066048,
is_map: true,
pinyin: "fengcheng"
},
{
id: 934,
name: "费县",
abbr: "FX",
area_code: "200480",
sort: 2000,
latitude: 35.26659,
longitude: 117.977112,
is_map: true,
pinyin: "feixian"
},
{
id: 935,
name: "肥城",
abbr: "FC",
area_code: "200481",
sort: 2000,
latitude: 36.182449,
longitude: 116.769173,
is_map: true,
pinyin: "feicheng"
},
{
id: 1030,
name: "富顺",
abbr: "FS",
area_code: "200576",
sort: 2000,
latitude: 29.181271,
longitude: 104.974953,
is_map: true,
pinyin: "fushun"
},
{
id: 1060,
name: "富源",
abbr: "FY",
area_code: "200606",
sort: 2000,
latitude: 25.674219,
longitude: 104.254852,
is_map: true,
pinyin: "fuyuan"
},
{
id: 1087,
name: "富阳",
abbr: "FY",
area_code: "200633",
sort: 2000,
latitude: 30.048849,
longitude: 119.960426,
is_map: true,
pinyin: "fuyang"
},
{
id: 1102,
name: "奉化",
abbr: "FH",
area_code: "200648",
sort: 2000,
latitude: 29.655029,
longitude: 121.40686,
is_map: true,
pinyin: "fenghua"
},
{
id: 1122,
name: "奉节",
abbr: "FJ",
area_code: "200668",
sort: 2000,
latitude: 31.018459,
longitude: 109.464058,
is_map: true,
pinyin: "fengjie"
},
{
id: 1131,
name: "丰都",
abbr: "FD",
area_code: "200677",
sort: 2000,
latitude: 29.86352,
longitude: 107.73085,
is_map: true,
pinyin: "fengdu"
},
{
id: 1151,
name: "繁昌",
abbr: "FC",
area_code: "340222",
sort: 9999,
latitude: 31.082911,
longitude: 118.199341,
is_map: true,
pinyin: "fanchang"
},
{
id: 1180,
name: "抚宁",
abbr: "FN",
area_code: "130323",
sort: 9999,
latitude: 39.887054,
longitude: 119.240654,
is_map: true,
pinyin: "funing"
},
{
id: 1184,
name: "肥乡",
abbr: "FX",
area_code: "130428",
sort: 9999,
latitude: 36.555779,
longitude: 114.805153,
is_map: true,
pinyin: "feixiang"
},
{
id: 1204,
name: "阜平",
abbr: "FP",
area_code: "130624",
sort: 9999,
latitude: 38.847275,
longitude: 114.198799,
is_map: true,
pinyin: "fuping"
},
{
id: 1235,
name: "丰宁满族自治县",
abbr: "FNMZZZX",
area_code: "130826",
sort: 9999,
latitude: 41.209904,
longitude: 116.651207,
is_map: true,
pinyin: "fengningmanzuzizhixian"
},
{
id: 1254,
name: "阜城",
abbr: "FC",
area_code: "131128",
sort: 9999,
latitude: 37.869946,
longitude: 116.164726,
is_map: true,
pinyin: "fucheng"
},
{
id: 1308,
name: "繁峙县",
abbr: "FZX",
area_code: "140924",
sort: 9999,
latitude: 39.2663,
longitude: 113.559258,
is_map: true,
pinyin: "fanzhi"
},
{
id: 1342,
name: "汾阳",
abbr: "FY",
area_code: "141182",
sort: 9999,
latitude: 37.267742,
longitude: 111.785271,
is_map: true,
pinyin: "fenyang"
},
{
id: 1396,
name: "丰镇",
abbr: "FZ",
area_code: "150981",
sort: 9999,
latitude: 40.437534,
longitude: 113.16346,
is_map: true,
pinyin: "fengzhen"
},
{
id: 1420,
name: "法库县",
abbr: "FKX",
area_code: "210124",
sort: 9999,
latitude: 42.507046,
longitude: 123.416725,
is_map: true,
pinyin: "faku"
},
{
id: 1433,
name: "阜新蒙古族自治县",
abbr: "FXMGZZZX",
area_code: "210921",
sort: 9999,
latitude: 42.058605,
longitude: 121.743126,
is_map: true,
pinyin: "fuxinmengguzuzizhixian"
},
{
id: 1465,
name: "方正",
abbr: "FZ",
area_code: "230124",
sort: 9999,
latitude: 45.839535,
longitude: 128.836136,
is_map: true,
pinyin: "fangzheng"
},
{
id: 1473,
name: "富裕",
abbr: "FY",
area_code: "230227",
sort: 9999,
latitude: 47.797173,
longitude: 124.469109,
is_map: true,
pinyin: "fuyu"
},
{
id: 1494,
name: "抚远",
abbr: "FY",
area_code: "230833",
sort: 9999,
latitude: 48.364708,
longitude: 134.294495,
is_map: true,
pinyin: "fuyuan"
},
{
id: 1584,
name: "分宜",
abbr: "FY",
area_code: "360521",
sort: 9999,
latitude: 27.8113,
longitude: 114.675262,
is_map: true,
pinyin: "fenyi"
},
{
id: 1602,
name: "奉新",
abbr: "FX",
area_code: "360921",
sort: 9999,
latitude: 28.700672,
longitude: 115.3899,
is_map: true,
pinyin: "fengxin"
},
{
id: 1659,
name: "范县",
abbr: "FX",
area_code: "410926",
sort: 9999,
latitude: 35.851955,
longitude: 115.504204,
is_map: true,
pinyin: "fanxian"
},
{
id: 1748,
name: "丰顺",
abbr: "FS",
area_code: "441423",
sort: 9999,
latitude: 23.752771,
longitude: 116.184418,
is_map: true,
pinyin: "fengshun"
},
{
id: 1757,
name: "佛冈县",
abbr: "FG",
area_code: "441821",
sort: 9999,
latitude: 23.866739,
longitude: 113.534096,
is_map: true,
pinyin: "fogang"
},
{
id: 1794,
name: "防城港",
abbr: "FCG",
area_code: "450600",
sort: 9999,
latitude: 21.6138,
longitude: 108.33799,
is_map: true,
pinyin: "fangchenggang"
},
{
id: 1816,
name: "富川瑶族自治县",
abbr: "FCYZZZX",
area_code: "451123",
sort: 9999,
latitude: 24.81896,
longitude: 111.277229,
is_map: true,
pinyin: "fuchuanyaozuzizhixian"
},
{
id: 1820,
name: "凤山",
abbr: "FS",
area_code: "451223",
sort: 9999,
latitude: 24.544561,
longitude: 107.044594,
is_map: true,
pinyin: "fengshan"
},
{
id: 1833,
name: "扶绥",
abbr: "FS",
area_code: "451421",
sort: 9999,
latitude: 22.63582,
longitude: 107.91153,
is_map: true,
pinyin: "fusui"
},
{
id: 1966,
name: "凤冈",
abbr: "FG",
area_code: "520327",
sort: 9999,
latitude: 27.960857,
longitude: 107.722023,
is_map: true,
pinyin: "fenggang"
},
{
id: 2011,
name: "福泉",
abbr: "FQ",
area_code: "522702",
sort: 9999,
latitude: 26.702509,
longitude: 107.513512,
is_map: true,
pinyin: "fuquan"
},
{
id: 2023,
name: "富民",
abbr: "FM",
area_code: "530124",
sort: 9999,
latitude: 25.219667,
longitude: 102.497887,
is_map: true,
pinyin: "fumin"
},
{
id: 2064,
name: "凤庆",
abbr: "FQ",
area_code: "530921",
sort: 9999,
latitude: 24.592737,
longitude: 99.918709,
is_map: true,
pinyin: "fengqing"
},
{
id: 2096,
name: "富宁",
abbr: "FN",
area_code: "532628",
sort: 9999,
latitude: 23.626493,
longitude: 105.628563,
is_map: true,
pinyin: "funing"
},
{
id: 2119,
name: "福贡",
abbr: "FG",
area_code: "533323",
sort: 9999,
latitude: 26.902739,
longitude: 98.867416,
is_map: true,
pinyin: "fugong"
},
{
id: 2235,
name: "富平",
abbr: "FP",
area_code: "610528",
sort: 9999,
latitude: 34.746677,
longitude: 109.187172,
is_map: true,
pinyin: "fuping"
},
{
id: 2260,
name: "府谷",
abbr: "FG",
area_code: "610822",
sort: 9999,
latitude: 39.029243,
longitude: 111.069649,
is_map: true,
pinyin: "fugu"
},
{
id: 5199,
name: "富拉尔基区",
abbr: "FLEJQ",
area_code: "230206",
sort: 9999,
latitude: 47.20697,
longitude: 123.63887,
is_map: true,
pinyin: "fulaerjiqu"
}
],
Y: [
{
id: 339,
name: "营口",
abbr: "YK",
area_code: "04171",
sort: 80,
latitude: 40.666828,
longitude: 122.234901,
is_map: true,
pinyin: "yingkou"
},
{
id: 421,
name: "云浮",
abbr: "YF",
area_code: "07662",
sort: 1900,
latitude: 22.915251,
longitude: 112.044533,
is_map: true,
pinyin: "yunfu"
},
{
id: 22,
name: "扬州",
abbr: "YZ",
area_code: "0514",
sort: 2000,
latitude: 32.393581,
longitude: 119.412689,
is_map: true,
pinyin: "yangzhou"
},
{
id: 71,
name: "盐城",
abbr: "YC",
area_code: "0515",
sort: 2000,
latitude: 33.34951,
longitude: 120.161636,
is_map: true,
pinyin: "yancheng"
},
{
id: 77,
name: "烟台",
abbr: "YT",
area_code: "0535",
sort: 2000,
latitude: 37.463531,
longitude: 121.448013,
is_map: true,
pinyin: "yantai"
},
{
id: 80,
name: "宜昌",
abbr: "YC",
area_code: "0717",
sort: 2000,
latitude: 30.69186,
longitude: 111.286423,
is_map: true,
pinyin: "yichang"
},
{
id: 103,
name: "宜宾",
abbr: "YB",
area_code: "0831",
sort: 2000,
latitude: 28.751301,
longitude: 104.641701,
is_map: true,
pinyin: "yibin"
},
{
id: 119,
name: "益阳",
abbr: "YY",
area_code: "0737",
sort: 2000,
latitude: 28.553909,
longitude: 112.355164,
is_map: true,
pinyin: "yiyang"
},
{
id: 124,
name: "岳阳",
abbr: "YY",
area_code: "0730",
sort: 2000,
latitude: 29.357281,
longitude: 113.129189,
is_map: true,
pinyin: "yueyang"
},
{
id: 128,
name: "宜春",
abbr: "YC",
area_code: "0795",
sort: 2000,
latitude: 27.81443,
longitude: 114.416122,
is_map: true,
pinyin: "yichun"
},
{
id: 166,
name: "运城",
abbr: "YC",
area_code: "0359",
sort: 2000,
latitude: 35.026279,
longitude: 111.006989,
is_map: true,
pinyin: "yuncheng"
},
{
id: 167,
name: "延边",
abbr: "YBZXZZZZ",
area_code: "0433",
sort: 2000,
latitude: 42.89119,
longitude: 129.509094,
is_map: true,
pinyin: "yan bian"
},
{
id: 176,
name: "永州",
abbr: "YZ",
area_code: "0746",
sort: 2000,
latitude: 26.42034,
longitude: 111.612251,
is_map: true,
pinyin: "yongzhou"
},
{
id: 191,
name: "义乌",
abbr: "YW",
area_code: "579",
sort: 2000,
latitude: 29.30558,
longitude: 120.074677,
is_map: true,
pinyin: "yiwu"
},
{
id: 194,
name: "银川",
abbr: "YC",
area_code: "0951",
sort: 2000,
latitude: 38.486439,
longitude: 106.232483,
is_map: true,
pinyin: "yinchuan"
},
{
id: 202,
name: "阳江",
abbr: "YJ",
area_code: "0662",
sort: 2000,
latitude: 21.85829,
longitude: 111.982559,
is_map: true,
pinyin: "yangjiang"
},
{
id: 240,
name: "雅安",
abbr: "YA",
area_code: "0835",
sort: 2000,
latitude: 30.01543,
longitude: 103.039803,
is_map: true,
pinyin: "yaan"
},
{
id: 242,
name: "延安",
abbr: "YA",
area_code: "0911",
sort: 2000,
latitude: 36.585289,
longitude: 109.489777,
is_map: true,
pinyin: "yanan"
},
{
id: 254,
name: "玉林",
abbr: "YL",
area_code: "0775",
sort: 2000,
latitude: 22.65451,
longitude: 110.180977,
is_map: true,
pinyin: "yulin"
},
{
id: 292,
name: "玉溪",
abbr: "YX",
area_code: "0877",
sort: 2000,
latitude: 24.351931,
longitude: 102.5466,
is_map: true,
pinyin: "yuxi"
},
{
id: 297,
name: "宜州",
abbr: "YZ",
area_code: "0778",
sort: 2000,
latitude: 24.48513,
longitude: 108.636559,
is_map: true,
pinyin: "yizhou"
},
{
id: 307,
name: "榆林",
abbr: "YL",
area_code: "0912",
sort: 2000,
latitude: 38.285198,
longitude: 109.734581,
is_map: true,
pinyin: "yulin"
},
{
id: 335,
name: "伊宁市",
abbr: "YNS",
area_code: "0999",
sort: 2000,
latitude: 43.9095,
longitude: 81.277252,
is_map: true,
pinyin: "yiningshi"
},
{
id: 450,
name: "永川",
abbr: "YC",
area_code: "10028",
sort: 2000,
latitude: 29.356001,
longitude: 105.927094,
is_map: true,
pinyin: "yongchuan"
},
{
id: 451,
name: "渝北",
abbr: "YB",
area_code: "10029",
sort: 2000,
latitude: 29.717979,
longitude: 106.630432,
is_map: true,
pinyin: "yubei"
},
{
id: 452,
name: "渝中",
abbr: "YZ",
area_code: "10030",
sort: 2000,
latitude: 29.553141,
longitude: 106.568604,
is_map: true,
pinyin: "yuzhong"
},
{
id: 457,
name: "颍上",
abbr: "YS",
area_code: "200003",
sort: 2000,
latitude: 32.628929,
longitude: 116.264549,
is_map: true,
pinyin: "yingshang"
},
{
id: 494,
name: "延庆",
abbr: "YQ",
area_code: "200040",
sort: 2000,
latitude: 40.456779,
longitude: 115.975029,
is_map: true,
pinyin: "yanqing"
},
{
id: 506,
name: "永春",
abbr: "YC",
area_code: "200052",
sort: 2000,
latitude: 25.32188,
longitude: 118.294243,
is_map: true,
pinyin: "yongchun"
},
{
id: 507,
name: "永安",
abbr: "YA",
area_code: "200053",
sort: 2000,
latitude: 25.94138,
longitude: 117.365181,
is_map: true,
pinyin: "yongan"
},
{
id: 515,
name: "云霄",
abbr: "YX",
area_code: "200061",
sort: 2000,
latitude: 23.958059,
longitude: 117.339653,
is_map: true,
pinyin: "yunxiao"
},
{
id: 521,
name: "尤溪",
abbr: "YX",
area_code: "200067",
sort: 2000,
latitude: 26.17004,
longitude: 118.190491,
is_map: true,
pinyin: "youxi"
},
{
id: 548,
name: "英德",
abbr: "YD",
area_code: "200094",
sort: 2000,
latitude: 24.18572,
longitude: 113.415047,
is_map: true,
pinyin: "yingde"
},
{
id: 556,
name: "阳春",
abbr: "YC",
area_code: "200102",
sort: 2000,
latitude: 22.1703,
longitude: 111.791527,
is_map: true,
pinyin: "yangchun"
},
{
id: 565,
name: "阳东",
abbr: "YD",
area_code: "200111",
sort: 2000,
latitude: 21.86829,
longitude: 112.006699,
is_map: true,
pinyin: "yangdong"
},
{
id: 589,
name: "永年",
abbr: "YN",
area_code: "200135",
sort: 2000,
latitude: 36.77771,
longitude: 114.490952,
is_map: true,
pinyin: "yongnian"
},
{
id: 591,
name: "玉田",
abbr: "YT",
area_code: "200137",
sort: 2000,
latitude: 39.900501,
longitude: 117.738808,
is_map: true,
pinyin: "yutian"
},
{
id: 617,
name: "盐山",
abbr: "YS",
area_code: "200163",
sort: 2000,
latitude: 38.0583,
longitude: 117.230247,
is_map: true,
pinyin: "yanshan"
},
{
id: 623,
name: "永城",
abbr: "YC",
area_code: "200169",
sort: 2000,
latitude: 33.92915,
longitude: 116.449463,
is_map: true,
pinyin: "yongcheng"
},
{
id: 624,
name: "禹州",
abbr: "YZ",
area_code: "200170",
sort: 2000,
latitude: 34.14048,
longitude: 113.487938,
is_map: true,
pinyin: "yuzhou"
},
{
id: 640,
name: "偃师",
abbr: "YS",
area_code: "200186",
sort: 2000,
latitude: 34.727631,
longitude: 112.78965,
is_map: true,
pinyin: "yanshi"
},
{
id: 645,
name: "虞城",
abbr: "YC",
area_code: "200191",
sort: 2000,
latitude: 34.397369,
longitude: 115.865189,
is_map: true,
pinyin: "yucheng"
},
{
id: 657,
name: "叶县",
abbr: "YX",
area_code: "200203",
sort: 2000,
latitude: 33.626831,
longitude: 113.357368,
is_map: true,
pinyin: "yexian"
},
{
id: 678,
name: "伊川",
abbr: "YC",
area_code: "200224",
sort: 2000,
latitude: 34.421349,
longitude: 112.425682,
is_map: true,
pinyin: "yichuan"
},
{
id: 685,
name: "鄢陵",
abbr: "YL",
area_code: "200231",
sort: 2000,
latitude: 34.102329,
longitude: 114.177391,
is_map: true,
pinyin: "yanling"
},
{
id: 692,
name: "原阳",
abbr: "YY",
area_code: "200238",
sort: 2000,
latitude: 35.065689,
longitude: 113.939972,
is_map: true,
pinyin: "yuanyang"
},
{
id: 696,
name: "伊春",
abbr: "YC",
area_code: "200242",
sort: 2000,
latitude: 47.72752,
longitude: 128.840485,
is_map: true,
pinyin: "yichun"
},
{
id: 722,
name: "应城",
abbr: "YC",
area_code: "200268",
sort: 2000,
latitude: 30.928379,
longitude: 113.572922,
is_map: true,
pinyin: "yingcheng"
},
{
id: 727,
name: "阳新",
abbr: "YX",
area_code: "200273",
sort: 2000,
latitude: 29.830391,
longitude: 115.215302,
is_map: true,
pinyin: "yangxin"
},
{
id: 732,
name: "云梦",
abbr: "YM",
area_code: "200278",
sort: 2000,
latitude: 31.02103,
longitude: 113.753311,
is_map: true,
pinyin: "yunmeng"
},
{
id: 736,
name: "宜城",
abbr: "YC",
area_code: "200282",
sort: 2000,
latitude: 31.719761,
longitude: 112.257759,
is_map: true,
pinyin: "yicheng"
},
{
id: 743,
name: "郧县",
abbr: "YX",
area_code: "200289",
sort: 2000,
latitude: 32.834881,
longitude: 110.811974,
is_map: true,
pinyin: "yunxian"
},
{
id: 745,
name: "宜都",
abbr: "YD",
area_code: "200291",
sort: 2000,
latitude: 30.37846,
longitude: 111.450104,
is_map: true,
pinyin: "yidu"
},
{
id: 763,
name: "攸县",
abbr: "YX",
area_code: "200309",
sort: 2000,
latitude: 27.000231,
longitude: 113.345688,
is_map: true,
pinyin: "youxian"
},
{
id: 768,
name: "沅江",
abbr: "YJ",
area_code: "200314",
sort: 2000,
latitude: 28.844021,
longitude: 112.354683,
is_map: true,
pinyin: "yuanjiang"
},
{
id: 777,
name: "宜章",
abbr: "YZ",
area_code: "200323",
sort: 2000,
latitude: 25.39957,
longitude: 112.948868,
is_map: true,
pinyin: "yizhang"
},
{
id: 786,
name: "永兴",
abbr: "YX",
area_code: "200332",
sort: 2000,
latitude: 26.127199,
longitude: 113.116592,
is_map: true,
pinyin: "yongxing"
},
{
id: 794,
name: "沅陵",
abbr: "YL",
area_code: "200340",
sort: 2000,
latitude: 28.45277,
longitude: 110.393883,
is_map: true,
pinyin: "yuanling"
},
{
id: 802,
name: "永顺",
abbr: "YS",
area_code: "200348",
sort: 2000,
latitude: 29.00515,
longitude: 109.848068,
is_map: true,
pinyin: "yongshun"
},
{
id: 805,
name: "榆树",
abbr: "YS",
area_code: "200351",
sort: 2000,
latitude: 44.83989,
longitude: 126.532997,
is_map: true,
pinyin: "yushu"
},
{
id: 862,
name: "仪征",
abbr: "YZ",
area_code: "200408",
sort: 2000,
latitude: 32.27203,
longitude: 119.184441,
is_map: true,
pinyin: "yizheng"
},
{
id: 866,
name: "扬中",
abbr: "YZ",
area_code: "200412",
sort: 2000,
latitude: 32.237019,
longitude: 119.796822,
is_map: true,
pinyin: "yangzhong"
},
{
id: 875,
name: "余干",
abbr: "YG",
area_code: "200421",
sort: 2000,
latitude: 28.70211,
longitude: 116.695602,
is_map: true,
pinyin: "yugan"
},
{
id: 877,
name: "于都",
abbr: "YD",
area_code: "200423",
sort: 2000,
latitude: 25.951839,
longitude: 115.415443,
is_map: true,
pinyin: "yudu"
},
{
id: 878,
name: "玉山",
abbr: "YS",
area_code: "200424",
sort: 2000,
latitude: 28.68194,
longitude: 118.244812,
is_map: true,
pinyin: "yushan"
},
{
id: 879,
name: "铅山",
abbr: "YS",
area_code: "200425",
sort: 2000,
latitude: 28.31535,
longitude: 117.709419,
is_map: true,
pinyin: "yanshan"
},
{
id: 886,
name: "永新",
abbr: "YX",
area_code: "200432",
sort: 2000,
latitude: 26.944981,
longitude: 114.243073,
is_map: true,
pinyin: "yongxin"
},
{
id: 891,
name: "永修",
abbr: "YX",
area_code: "200437",
sort: 2000,
latitude: 29.020969,
longitude: 115.809158,
is_map: true,
pinyin: "yongxiu"
},
{
id: 915,
name: "牙克石",
abbr: "YKS",
area_code: "200461",
sort: 2000,
latitude: 49.285629,
longitude: 120.711739,
is_map: true,
pinyin: "yakeshi"
},
{
id: 930,
name: "沂水",
abbr: "YS",
area_code: "200476",
sort: 2000,
latitude: 35.79034,
longitude: 118.627823,
is_map: true,
pinyin: "yishui"
},
{
id: 936,
name: "郓城",
abbr: "YC",
area_code: "200482",
sort: 2000,
latitude: 35.599838,
longitude: 115.943642,
is_map: true,
pinyin: "yuncheng"
},
{
id: 941,
name: "沂南",
abbr: "YN",
area_code: "200487",
sort: 2000,
latitude: 35.550011,
longitude: 118.46566,
is_map: true,
pinyin: "yinan"
},
{
id: 946,
name: "兖州",
abbr: "YZ",
area_code: "200492",
sort: 2000,
latitude: 35.552601,
longitude: 116.785698,
is_map: true,
pinyin: "yanzhou"
},
{
id: 958,
name: "阳谷",
abbr: "YG",
area_code: "200504",
sort: 2000,
latitude: 36.114471,
longitude: 115.791313,
is_map: true,
pinyin: "yanggu"
},
{
id: 977,
name: "沂源",
abbr: "YY",
area_code: "200523",
sort: 2000,
latitude: 36.184879,
longitude: 118.170769,
is_map: true,
pinyin: "yiyuan"
},
{
id: 992,
name: "禹城",
abbr: "YC",
area_code: "200538",
sort: 2000,
latitude: 36.933941,
longitude: 116.63813,
is_map: true,
pinyin: "yucheng"
},
{
id: 995,
name: "阳泉",
abbr: "YQ",
area_code: "200541",
sort: 2000,
latitude: 37.856682,
longitude: 113.580467,
is_map: true,
pinyin: "yangquan"
},
{
id: 1002,
name: "原平",
abbr: "YP",
area_code: "200548",
sort: 2000,
latitude: 38.730511,
longitude: 112.710922,
is_map: true,
pinyin: "yuanping"
},
{
id: 1004,
name: "永济",
abbr: "YJ",
area_code: "200550",
sort: 2000,
latitude: 34.867161,
longitude: 110.447731,
is_map: true,
pinyin: "yongji"
},
{
id: 1013,
name: "仪陇",
abbr: "YL",
area_code: "200559",
sort: 2000,
latitude: 31.269979,
longitude: 106.303299,
is_map: true,
pinyin: "yilong"
},
{
id: 1039,
name: "营山",
abbr: "YS",
area_code: "200585",
sort: 2000,
latitude: 31.0767,
longitude: 106.565529,
is_map: true,
pinyin: "yingshan"
},
{
id: 1044,
name: "岳池",
abbr: "YC",
area_code: "200590",
sort: 2000,
latitude: 30.537951,
longitude: 106.43988,
is_map: true,
pinyin: "yuechi"
},
{
id: 1054,
name: "伊宁县",
abbr: "YN",
area_code: "200600",
sort: 2000,
latitude: 43.9095,
longitude: 81.277252,
is_map: true,
pinyin: "yining"
},
{
id: 1068,
name: "宜良",
abbr: "YL",
area_code: "200614",
sort: 2000,
latitude: 24.92005,
longitude: 103.14119,
is_map: true,
pinyin: "yiliang"
},
{
id: 1073,
name: "砚山",
abbr: "YS",
area_code: "200619",
sort: 2000,
latitude: 23.60586,
longitude: 104.33709,
is_map: true,
pinyin: "yanshan"
},
{
id: 1079,
name: "余姚",
abbr: "YY",
area_code: "200625",
sort: 2000,
latitude: 30.037109,
longitude: 121.15435,
is_map: true,
pinyin: "yuyao"
},
{
id: 1086,
name: "永嘉",
abbr: "YJ",
area_code: "200632",
sort: 2000,
latitude: 28.15336,
longitude: 120.691711,
is_map: true,
pinyin: "yongjia"
},
{
id: 1091,
name: "玉环",
abbr: "YH",
area_code: "200637",
sort: 2000,
latitude: 28.135889,
longitude: 121.231644,
is_map: true,
pinyin: "yuhuan"
},
{
id: 1092,
name: "永康",
abbr: "YK",
area_code: "200638",
sort: 2000,
latitude: 28.88851,
longitude: 120.04731,
is_map: true,
pinyin: "yongkang"
},
{
id: 1121,
name: "云阳",
abbr: "YY",
area_code: "200667",
sort: 2000,
latitude: 30.93063,
longitude: 108.696983,
is_map: true,
pinyin: "yunyang"
},
{
id: 354,
name: "宜兴",
abbr: "YX",
area_code: "05102",
sort: 9999,
latitude: 31.34042,
longitude: 119.823463,
is_map: true,
pinyin: "yixin"
},
{
id: 356,
name: "延吉",
abbr: "YJ",
area_code: "04331",
sort: 9999,
latitude: 42.891071,
longitude: 129.509094,
is_map: true,
pinyin: "yanji"
},
{
id: 384,
name: "鹰潭",
abbr: "YT",
area_code: "0701",
sort: 9999,
latitude: 28.260189,
longitude: 117.069191,
is_map: true,
pinyin: "yingtan"
},
{
id: 1211,
name: "易县",
abbr: "YX",
area_code: "130633",
sort: 9999,
latitude: 39.35297,
longitude: 115.501144,
is_map: true,
pinyin: "yixian"
},
{
id: 1222,
name: "蔚县",
abbr: "YX",
area_code: "130726",
sort: 9999,
latitude: 39.837181,
longitude: 114.582695,
is_map: true,
pinyin: "yuxian"
},
{
id: 1223,
name: "阳原",
abbr: "YY",
area_code: "130727",
sort: 9999,
latitude: 40.113419,
longitude: 114.167343,
is_map: true,
pinyin: "yangyuan"
},
{
id: 1246,
name: "永清",
abbr: "YQ",
area_code: "131023",
sort: 9999,
latitude: 39.319717,
longitude: 116.498093,
is_map: true,
pinyin: "yongqing"
},
{
id: 1271,
name: "盂县",
abbr: "YX",
area_code: "140322",
sort: 9999,
latitude: 38.086132,
longitude: 113.412231,
is_map: true,
pinyin: "yuxian"
},
{
id: 1370,
name: "伊金霍洛旗",
abbr: "YJHLQ",
area_code: "150627",
sort: 9999,
latitude: 39.604313,
longitude: 109.787399,
is_map: true,
pinyin: "yijinhuoluoqi"
},
{
id: 1430,
name: "义县",
abbr: "YX",
area_code: "210727",
sort: 9999,
latitude: 41.537224,
longitude: 121.242828,
is_map: true,
pinyin: "yixian"
},
{
id: 1445,
name: "永吉县",
abbr: "YJX",
area_code: "220221",
sort: 9999,
latitude: 43.667416,
longitude: 126.501625,
is_map: true,
pinyin: "yongji"
},
{
id: 1446,
name: "伊通满族自治县",
abbr: "YTMZZZX",
area_code: "220323",
sort: 9999,
latitude: 43.345463,
longitude: 125.303123,
is_map: true,
pinyin: "yitongmanzuzizhixian"
},
{
id: 1464,
name: "依兰",
abbr: "YL",
area_code: "230123",
sort: 9999,
latitude: 46.315105,
longitude: 129.565598,
is_map: true,
pinyin: "yilan"
},
{
id: 1470,
name: "依安",
abbr: "YA",
area_code: "230223",
sort: 9999,
latitude: 47.890099,
longitude: 125.307564,
is_map: true,
pinyin: "yian"
},
{
id: 1524,
name: "云和",
abbr: "YH",
area_code: "331125",
sort: 9999,
latitude: 28.111076,
longitude: 119.569458,
is_map: true,
pinyin: "yunhe"
},
{
id: 1585,
name: "余江县",
abbr: "YJX",
area_code: "360622",
sort: 9999,
latitude: 28.206177,
longitude: 116.822762,
is_map: true,
pinyin: "yujiang"
},
{
id: 1597,
name: "永丰",
abbr: "YF",
area_code: "360825",
sort: 9999,
latitude: 27.321087,
longitude: 115.435562,
is_map: true,
pinyin: "yongfeng"
},
{
id: 1605,
name: "宜丰",
abbr: "YF",
area_code: "360924",
sort: 9999,
latitude: 28.388288,
longitude: 114.787384,
is_map: true,
pinyin: "yifeng"
},
{
id: 1613,
name: "宜黄",
abbr: "YH",
area_code: "361026",
sort: 9999,
latitude: 27.546513,
longitude: 116.223022,
is_map: true,
pinyin: "yihuang"
},
{
id: 1619,
name: "弋阳",
abbr: "YY",
area_code: "361126",
sort: 9999,
latitude: 28.402391,
longitude: 117.435005,
is_map: true,
pinyin: "yiyang"
},
{
id: 1631,
name: "鱼台",
abbr: "YT",
area_code: "370827",
sort: 9999,
latitude: 34.997707,
longitude: 116.650024,
is_map: true,
pinyin: "yutai"
},
{
id: 1638,
name: "阳信县",
abbr: "YXX",
area_code: "371622",
sort: 9999,
latitude: 37.640491,
longitude: 117.581329,
is_map: true,
pinyin: "yangxin"
},
{
id: 1645,
name: "宜阳",
abbr: "YY",
area_code: "410327",
sort: 9999,
latitude: 34.516479,
longitude: 112.179993,
is_map: true,
pinyin: "yiyang"
},
{
id: 1654,
name: "延津",
abbr: "YJ",
area_code: "410726",
sort: 9999,
latitude: 35.149513,
longitude: 114.200981,
is_map: true,
pinyin: "yanjin"
},
{
id: 1666,
name: "义马",
abbr: "YM",
area_code: "411281",
sort: 9999,
latitude: 34.746868,
longitude: 111.869415,
is_map: true,
pinyin: "yima"
},
{
id: 1679,
name: "远安",
abbr: "YA",
area_code: "420525",
sort: 9999,
latitude: 31.059626,
longitude: 111.643311,
is_map: true,
pinyin: "yuanan"
},
{
id: 1701,
name: "炎陵县",
abbr: "YLX",
area_code: "430225",
sort: 9999,
latitude: 26.489458,
longitude: 113.776886,
is_map: true,
pinyin: "yanling"
},
{
id: 1709,
name: "岳阳",
abbr: "YY",
area_code: "430621",
sort: 9999,
latitude: 29.144842,
longitude: 113.116074,
is_map: true,
pinyin: "yueyang"
},
{
id: 1756,
name: "阳西",
abbr: "YX",
area_code: "441721",
sort: 9999,
latitude: 21.75367,
longitude: 111.617554,
is_map: true,
pinyin: "yangxi"
},
{
id: 1765,
name: "郁南",
abbr: "YN",
area_code: "445322",
sort: 9999,
latitude: 23.237709,
longitude: 111.535919,
is_map: true,
pinyin: "yunan"
},
{
id: 1778,
name: "阳朔",
abbr: "YS",
area_code: "450321",
sort: 9999,
latitude: 24.775339,
longitude: 110.494698,
is_map: true,
pinyin: "yangshuo"
},
{
id: 1782,
name: "永福",
abbr: "YF",
area_code: "450326",
sort: 9999,
latitude: 24.986692,
longitude: 109.989204,
is_map: true,
pinyin: "yongfu"
},
{
id: 1968,
name: "余庆",
abbr: "YQ",
area_code: "520329",
sort: 9999,
latitude: 27.221552,
longitude: 107.892563,
is_map: true,
pinyin: "yuqing"
},
{
id: 1979,
name: "玉屏侗族自治县",
abbr: "YPDZZZX",
area_code: "520622",
sort: 9999,
latitude: 27.238024,
longitude: 108.917885,
is_map: true,
pinyin: "yupingdongzuzizhixian"
},
{
id: 1982,
name: "印江土家族苗族自治县",
abbr: "YJTJZMZZZX",
area_code: "520625",
sort: 9999,
latitude: 27.997976,
longitude: 108.405518,
is_map: true,
pinyin: "yinjiangtujiazumiaozuzizhixian"
},
{
id: 1984,
name: "沿河土家族自治县",
abbr: "YHTJZZZX",
area_code: "520627",
sort: 9999,
latitude: 28.560488,
longitude: 108.495743,
is_map: true,
pinyin: "yanhetujiazuzizhixian"
},
{
id: 2010,
name: "元氏",
abbr: "YS",
area_code: "130132",
sort: 9999,
latitude: 37.762512,
longitude: 114.526176,
is_map: true,
pinyin: "yuanshi"
},
{
id: 2034,
name: "易门",
abbr: "YM",
area_code: "530425",
sort: 9999,
latitude: 24.669598,
longitude: 102.162109,
is_map: true,
pinyin: "yimen"
},
{
id: 2037,
name: "元江哈尼族彝族傣族自治县",
abbr: "YJHNZYZDZZZX",
area_code: "530428",
sort: 9999,
latitude: 23.597618,
longitude: 101.999657,
is_map: true,
pinyin: "yuanjianghanizuyizudaizuzizhixian"
},
{
id: 2043,
name: "盐津",
abbr: "YJ",
area_code: "530623",
sort: 9999,
latitude: 28.106922,
longitude: 104.235062,
is_map: true,
pinyin: "yanjin"
},
{
id: 2045,
name: "永善",
abbr: "YS",
area_code: "530625",
sort: 9999,
latitude: 28.231525,
longitude: 103.637321,
is_map: true,
pinyin: "yongshan"
},
{
id: 2047,
name: "彝良",
abbr: "YL",
area_code: "530628",
sort: 9999,
latitude: 27.627424,
longitude: 104.048492,
is_map: true,
pinyin: "yiliang"
},
{
id: 2050,
name: "玉龙纳西族自治县",
abbr: "YLNXZZZX",
area_code: "530721",
sort: 9999,
latitude: 26.830593,
longitude: 100.238312,
is_map: true,
pinyin: "yulongnaxizuzizhixian"
},
{
id: 2051,
name: "永胜",
abbr: "YS",
area_code: "530722",
sort: 9999,
latitude: 26.685623,
longitude: 100.7509,
is_map: true,
pinyin: "yongsheng"
},
{
id: 2065,
name: "云县",
abbr: "YX",
area_code: "530922",
sort: 9999,
latitude: 24.439026,
longitude: 100.125633,
is_map: true,
pinyin: "yunxian"
},
{
id: 2066,
name: "永德",
abbr: "YD",
area_code: "530923",
sort: 9999,
latitude: 24.028158,
longitude: 99.253677,
is_map: true,
pinyin: "yongde"
},
{
id: 2075,
name: "姚安",
abbr: "YA",
area_code: "532325",
sort: 9999,
latitude: 25.505404,
longitude: 101.238396,
is_map: true,
pinyin: "yaoan"
},
{
id: 2077,
name: "永仁",
abbr: "YR",
area_code: "532327",
sort: 9999,
latitude: 26.056316,
longitude: 101.671173,
is_map: true,
pinyin: "yongren"
},
{
id: 2078,
name: "元谋",
abbr: "YM",
area_code: "532328",
sort: 9999,
latitude: 25.703314,
longitude: 101.870834,
is_map: true,
pinyin: "yuanmou"
},
{
id: 2085,
name: "元阳",
abbr: "YY",
area_code: "532528",
sort: 9999,
latitude: 23.219772,
longitude: 102.837059,
is_map: true,
pinyin: "yuanyang"
},
{
id: 2101,
name: "漾濞彝族自治县",
abbr: "YBYZZZX",
area_code: "532922",
sort: 9999,
latitude: 25.669542,
longitude: 99.95797,
is_map: true,
pinyin: "yangbiyizuzizhixian"
},
{
id: 2106,
name: "永平",
abbr: "YP",
area_code: "532928",
sort: 9999,
latitude: 25.461281,
longitude: 99.533539,
is_map: true,
pinyin: "yongping"
},
{
id: 2107,
name: "云龙",
abbr: "YL",
area_code: "532929",
sort: 9999,
latitude: 25.884954,
longitude: 99.3694,
is_map: true,
pinyin: "yunlong"
},
{
id: 2115,
name: "盈江",
abbr: "YJ",
area_code: "533123",
sort: 9999,
latitude: 24.709541,
longitude: 97.933929,
is_map: true,
pinyin: "yingjiang"
},
{
id: 2389,
name: "玉树",
abbr: "YS",
area_code: "632701",
sort: 9999,
latitude: 33.004047,
longitude: 97.008522,
is_map: true,
pinyin: "yushu"
},
{
id: 2407,
name: "盐池",
abbr: "YC",
area_code: "640323",
sort: 9999,
latitude: 37.784222,
longitude: 107.405411,
is_map: true,
pinyin: "yanchi"
},
{
id: 5829,
name: "阎良区",
abbr: "YLQ",
area_code: "610114",
sort: 9999,
latitude: 34.66214,
longitude: 109.22802,
is_map: true,
pinyin: "yanliangqu"
}
],
P: [
{
id: 340,
name: "盘锦",
abbr: "PJ",
area_code: "0427",
sort: 80,
latitude: 41.119961,
longitude: 122.070778,
is_map: true,
pinyin: "panjin"
},
{
id: 150,
name: "萍乡",
abbr: "PX",
area_code: "0799",
sort: 2000,
latitude: 27.62289,
longitude: 113.854271,
is_map: true,
pinyin: "pingxiang"
},
{
id: 180,
name: "莆田",
abbr: "PT",
area_code: "0594",
sort: 2000,
latitude: 25.454,
longitude: 119.007713,
is_map: true,
pinyin: "putian"
},
{
id: 269,
name: "平顶山",
abbr: "PDS",
area_code: "0375",
sort: 2000,
latitude: 33.76609,
longitude: 113.192413,
is_map: true,
pinyin: "pingdingshan"
},
{
id: 294,
name: "普洱",
abbr: "PE",
area_code: "0879",
sort: 2000,
latitude: 22.825211,
longitude: 100.96624,
is_map: true,
pinyin: "puer"
},
{
id: 315,
name: "攀枝花",
abbr: "PZH",
area_code: "0812",
sort: 2000,
latitude: 26.582279,
longitude: 101.718719,
is_map: true,
pinyin: "panzhihua"
},
{
id: 516,
name: "平和",
abbr: "PH",
area_code: "200062",
sort: 2000,
latitude: 24.36344,
longitude: 117.315872,
is_map: true,
pinyin: "pinghe"
},
{
id: 520,
name: "浦城",
abbr: "PC",
area_code: "200066",
sort: 2000,
latitude: 27.91721,
longitude: 118.541382,
is_map: true,
pinyin: "pucheng"
},
{
id: 524,
name: "平凉",
abbr: "PL",
area_code: "200070",
sort: 2000,
latitude: 35.54303,
longitude: 106.665298,
is_map: true,
pinyin: "pingliang"
},
{
id: 529,
name: "普宁",
abbr: "PN",
area_code: "200075",
sort: 2000,
latitude: 23.297359,
longitude: 116.165688,
is_map: true,
pinyin: "puning"
},
{
id: 569,
name: "平南",
abbr: "PN",
area_code: "200115",
sort: 2000,
latitude: 23.53919,
longitude: 110.392151,
is_map: true,
pinyin: "pingnan"
},
{
id: 578,
name: "盘县",
abbr: "PX",
area_code: "200124",
sort: 2000,
latitude: 25.70993,
longitude: 104.471581,
is_map: true,
pinyin: "panxian"
},
{
id: 664,
name: "平舆",
abbr: "PY",
area_code: "200210",
sort: 2000,
latitude: 32.96183,
longitude: 114.619408,
is_map: true,
pinyin: "pingyu"
},
{
id: 757,
name: "平江",
abbr: "PJ",
area_code: "200303",
sort: 2000,
latitude: 28.70203,
longitude: 113.581337,
is_map: true,
pinyin: "pingjiang"
},
{
id: 810,
name: "磐石",
abbr: "PS",
area_code: "200356",
sort: 2000,
latitude: 42.946621,
longitude: 126.060463,
is_map: true,
pinyin: "panshi"
},
{
id: 827,
name: "邳州",
abbr: "PZ",
area_code: "200373",
sort: 2000,
latitude: 34.335201,
longitude: 118.012459,
is_map: true,
pinyin: "pizhou"
},
{
id: 830,
name: "沛县",
abbr: "PX",
area_code: "200376",
sort: 2000,
latitude: 34.721661,
longitude: 116.9375,
is_map: true,
pinyin: "peixian"
},
{
id: 870,
name: "鄱阳",
abbr: "PY",
area_code: "200416",
sort: 2000,
latitude: 29.00563,
longitude: 116.70343,
is_map: true,
pinyin: "poyang"
},
{
id: 900,
name: "普兰店",
abbr: "PLD",
area_code: "200446",
sort: 2000,
latitude: 39.394428,
longitude: 121.963226,
is_map: true,
pinyin: "pulandian"
},
{
id: 933,
name: "平度",
abbr: "PD",
area_code: "200479",
sort: 2000,
latitude: 36.786701,
longitude: 119.959938,
is_map: true,
pinyin: "pingdu"
},
{
id: 951,
name: "平邑",
abbr: "PY",
area_code: "200497",
sort: 2000,
latitude: 35.505871,
longitude: 117.64048,
is_map: true,
pinyin: "pingyi"
},
{
id: 1005,
name: "平遥",
abbr: "PY",
area_code: "200551",
sort: 2000,
latitude: 37.189339,
longitude: 112.175568,
is_map: true,
pinyin: "pingyao"
},
{
id: 1012,
name: "郫县",
abbr: "PX",
area_code: "200558",
sort: 2000,
latitude: 30.795891,
longitude: 103.902557,
is_map: true,
pinyin: "pixian"
},
{
id: 1029,
name: "彭州",
abbr: "PZ",
area_code: "200575",
sort: 2000,
latitude: 30.990179,
longitude: 103.958107,
is_map: true,
pinyin: "pengzhou"
},
{
id: 1034,
name: "平昌",
abbr: "PC",
area_code: "200580",
sort: 2000,
latitude: 31.560539,
longitude: 107.103577,
is_map: true,
pinyin: "pingchang"
},
{
id: 1041,
name: "蓬安",
abbr: "PA",
area_code: "200587",
sort: 2000,
latitude: 31.028601,
longitude: 106.4123,
is_map: true,
pinyin: "pengan"
},
{
id: 1088,
name: "平湖",
abbr: "PH",
area_code: "200634",
sort: 2000,
latitude: 30.67585,
longitude: 121.01606,
is_map: true,
pinyin: "pinghu"
},
{
id: 1093,
name: "平阳",
abbr: "PY",
area_code: "200639",
sort: 2000,
latitude: 27.6621,
longitude: 120.565948,
is_map: true,
pinyin: "pingyang"
},
{
id: 1099,
name: "浦江",
abbr: "PJ",
area_code: "200645",
sort: 2000,
latitude: 29.452511,
longitude: 119.892059,
is_map: true,
pinyin: "pujiang"
},
{
id: 374,
name: "濮阳市",
abbr: "PA",
area_code: "03931",
sort: 9999,
latitude: 35.895161,
longitude: 115.498688,
is_map: true,
pinyin: "puyang"
},
{
id: 1159,
name: "平谷",
abbr: "PG",
area_code: "110117",
sort: 9999,
latitude: 40.140621,
longitude: 117.121407,
is_map: true,
pinyin: "pinggu"
},
{
id: 1178,
name: "濮阳县",
abbr: "PY",
area_code: "410928",
sort: 9999,
latitude: 35.712212,
longitude: 115.02903,
is_map: true,
pinyin: "puyangxian"
},
{
id: 1199,
name: "平乡",
abbr: "PX",
area_code: "130532",
sort: 9999,
latitude: 37.069405,
longitude: 115.029221,
is_map: true,
pinyin: "pingxiang"
},
{
id: 1232,
name: "平泉",
abbr: "PQ",
area_code: "130823",
sort: 9999,
latitude: 41.005611,
longitude: 118.690239,
is_map: true,
pinyin: "pingquan"
},
{
id: 1518,
name: "磐安",
abbr: "PA",
area_code: "330727",
sort: 9999,
latitude: 29.052628,
longitude: 120.445129,
is_map: true,
pinyin: "panan"
},
{
id: 1550,
name: "平潭",
abbr: "PT",
area_code: "350128",
sort: 9999,
latitude: 25.503672,
longitude: 119.791199,
is_map: true,
pinyin: "pingtan"
},
{
id: 1569,
name: "屏南",
abbr: "PN",
area_code: "350923",
sort: 9999,
latitude: 26.910826,
longitude: 118.987541,
is_map: true,
pinyin: "pingnan"
},
{
id: 1581,
name: "彭泽县",
abbr: "PZX",
area_code: "360430",
sort: 9999,
latitude: 29.898865,
longitude: 116.55584,
is_map: true,
pinyin: "pengze"
},
{
id: 1623,
name: "平阴",
abbr: "PY",
area_code: "370124",
sort: 9999,
latitude: 36.286922,
longitude: 116.455055,
is_map: true,
pinyin: "pingyin"
},
{
id: 1630,
name: "蓬莱",
abbr: "PL",
area_code: "370684",
sort: 9999,
latitude: 37.811169,
longitude: 120.762688,
is_map: true,
pinyin: "penglai"
},
{
id: 1749,
name: "平远",
abbr: "PY",
area_code: "441426",
sort: 9999,
latitude: 24.569651,
longitude: 115.891731,
is_map: true,
pinyin: "pingyuan"
},
{
id: 1786,
name: "平乐",
abbr: "PL",
area_code: "450330",
sort: 9999,
latitude: 24.632215,
longitude: 110.642822,
is_map: true,
pinyin: "pingle"
},
{
id: 1798,
name: "浦北",
abbr: "PB",
area_code: "450722",
sort: 9999,
latitude: 22.268335,
longitude: 109.556343,
is_map: true,
pinyin: "pubei"
},
{
id: 1805,
name: "平果",
abbr: "PG",
area_code: "451023",
sort: 9999,
latitude: 23.320478,
longitude: 107.580406,
is_map: true,
pinyin: "pingguo"
},
{
id: 1838,
name: "凭祥",
abbr: "PX",
area_code: "451481",
sort: 9999,
latitude: 22.108883,
longitude: 106.759041,
is_map: true,
pinyin: "pingxiang"
},
{
id: 1855,
name: "蒲江",
abbr: "PJ",
area_code: "510131",
sort: 9999,
latitude: 30.194359,
longitude: 103.511543,
is_map: true,
pinyin: "pujiang"
},
{
id: 1880,
name: "彭山区",
abbr: "PSQ",
area_code: "511403",
sort: 9999,
latitude: 30.192299,
longitude: 103.870102,
is_map: true,
pinyin: "pengshanqu"
},
{
id: 1971,
name: "平坝",
abbr: "PB",
area_code: "520421",
sort: 9999,
latitude: 26.40608,
longitude: 106.259941,
is_map: true,
pinyin: "pingba"
},
{
id: 1972,
name: "普定",
abbr: "PD",
area_code: "520422",
sort: 9999,
latitude: 26.305794,
longitude: 105.745605,
is_map: true,
pinyin: "puding"
},
{
id: 1988,
name: "普安",
abbr: "PA",
area_code: "522323",
sort: 9999,
latitude: 25.786404,
longitude: 104.955345,
is_map: true,
pinyin: "puan"
},
{
id: 2016,
name: "平塘",
abbr: "PT",
area_code: "522727",
sort: 9999,
latitude: 25.831802,
longitude: 107.324051,
is_map: true,
pinyin: "pingtang"
},
{
id: 2082,
name: "屏边苗族自治县",
abbr: "PBMZZZX",
area_code: "532523",
sort: 9999,
latitude: 22.987013,
longitude: 103.687225,
is_map: true,
pinyin: "pingbianmiaozuzizhixian"
},
{
id: 2233,
name: "蒲城",
abbr: "PC",
area_code: "610526",
sort: 9999,
latitude: 34.956036,
longitude: 109.589653,
is_map: true,
pinyin: "pucheng"
},
{
id: 2406,
name: "平罗",
abbr: "PL",
area_code: "640221",
sort: 9999,
latitude: 38.906738,
longitude: 106.544891,
is_map: true,
pinyin: "pingluo"
},
{
id: 5648,
name: "平山",
abbr: "PS",
area_code: "130131",
sort: 9999,
latitude: 38.25449,
longitude: 114.20929,
is_map: true,
pinyin: "pingshan"
}
],
J: [
{
id: 415,
name: "济源",
abbr: "JY",
area_code: "03912",
sort: 1867,
latitude: 35.06707,
longitude: 112.60273,
is_map: true,
pinyin: "jiyuan"
},
{
id: 19,
name: "济南",
abbr: "JN",
area_code: "0531",
sort: 2000,
latitude: 36.665291,
longitude: 116.994926,
is_map: true,
pinyin: "jinan"
},
{
id: 47,
name: "济宁",
abbr: "JN",
area_code: "0537",
sort: 2000,
latitude: 35.414589,
longitude: 116.587242,
is_map: true,
pinyin: "jining"
},
{
id: 49,
name: "景德镇",
abbr: "JDZ",
area_code: "0798",
sort: 2000,
latitude: 29.26869,
longitude: 117.178391,
is_map: true,
pinyin: "jingdezhen"
},
{
id: 55,
name: "嘉兴",
abbr: "JX",
area_code: "0573",
sort: 2000,
latitude: 30.74501,
longitude: 120.755501,
is_map: true,
pinyin: "jiaxing"
},
{
id: 66,
name: "九江市",
abbr: "JJ",
area_code: "0792",
sort: 2000,
latitude: 29.705481,
longitude: 116.001457,
is_map: true,
pinyin: "jiujiang"
},
{
id: 67,
name: "金华",
abbr: "JH",
area_code: "0579",
sort: 2000,
latitude: 29.078119,
longitude: 119.647591,
is_map: true,
pinyin: "jinhua"
},
{
id: 88,
name: "佳木斯",
abbr: "JMS",
area_code: "0454",
sort: 2000,
latitude: 46.80019,
longitude: 130.320602,
is_map: true,
pinyin: "jiamusi"
},
{
id: 100,
name: "荆州",
abbr: "JZ",
area_code: "0716",
sort: 2000,
latitude: 30.334789,
longitude: 112.240692,
is_map: true,
pinyin: "jingzhou"
},
{
id: 101,
name: "吉林",
abbr: "JL",
area_code: "0432",
sort: 2000,
latitude: 43.837841,
longitude: 126.549438,
is_map: true,
pinyin: "jilin"
},
{
id: 110,
name: "锦州",
abbr: "JZ",
area_code: "0416",
sort: 2000,
latitude: 41.09515,
longitude: 121.127029,
is_map: true,
pinyin: "jinzhou"
},
{
id: 130,
name: "江门",
abbr: "JM",
area_code: "0750",
sort: 2000,
latitude: 22.57865,
longitude: 113.081612,
is_map: true,
pinyin: "jiangmen"
},
{
id: 144,
name: "焦作",
abbr: "JZ",
area_code: "03911",
sort: 2000,
latitude: 35.21563,
longitude: 113.242012,
is_map: true,
pinyin: "jiaozuo"
},
{
id: 151,
name: "荆门",
abbr: "JM",
area_code: "0724",
sort: 2000,
latitude: 31.03546,
longitude: 112.199448,
is_map: true,
pinyin: "jingmen"
},
{
id: 153,
name: "晋中",
abbr: "JZ",
area_code: "0354",
sort: 2000,
latitude: 37.687019,
longitude: 112.752777,
is_map: true,
pinyin: "jinzhong"
},
{
id: 220,
name: "吉安",
abbr: "JA",
area_code: "0796",
sort: 2000,
latitude: 27.113819,
longitude: 114.993759,
is_map: true,
pinyin: "jian"
},
{
id: 221,
name: "鸡西",
abbr: "JX",
area_code: "0467",
sort: 2000,
latitude: 45.295238,
longitude: 130.969543,
is_map: true,
pinyin: "jixi"
},
{
id: 231,
name: "揭阳",
abbr: "JY",
area_code: "0663",
sort: 2000,
latitude: 23.549721,
longitude: 116.372711,
is_map: true,
pinyin: "jieyang"
},
{
id: 274,
name: "吉首",
abbr: "JS",
area_code: "0743",
sort: 2000,
latitude: 28.26244,
longitude: 109.698112,
is_map: true,
pinyin: "jishou"
},
{
id: 319,
name: "江油",
abbr: "JY",
area_code: "08161",
sort: 2000,
latitude: 31.75691,
longitude: 104.724579,
is_map: true,
pinyin: "jiangyou"
},
{
id: 334,
name: "晋江",
abbr: "JJ",
area_code: "0595111",
sort: 2000,
latitude: 24.781441,
longitude: 118.551987,
is_map: true,
pinyin: "jinjiang"
},
{
id: 434,
name: "简阳",
abbr: "JY",
area_code: "10012",
sort: 2000,
latitude: 30.411329,
longitude: 104.547333,
is_map: true,
pinyin: "jianyang"
},
{
id: 435,
name: "江北",
abbr: "JB",
area_code: "10013",
sort: 2000,
latitude: 29.606609,
longitude: 106.574387,
is_map: true,
pinyin: "jiangbei"
},
{
id: 436,
name: "江津",
abbr: "JJ",
area_code: "10014",
sort: 2000,
latitude: 29.29014,
longitude: 106.259361,
is_map: true,
pinyin: "jiangjin"
},
{
id: 437,
name: "晋城",
abbr: "JC",
area_code: "10015",
sort: 2000,
latitude: 35.490391,
longitude: 112.851128,
is_map: true,
pinyin: "jincheng"
},
{
id: 438,
name: "九龙坡",
abbr: "JLP",
area_code: "10016",
sort: 2000,
latitude: 29.502069,
longitude: 106.511398,
is_map: true,
pinyin: "jiulongpo"
},
{
id: 487,
name: "界首",
abbr: "JS",
area_code: "200033",
sort: 2000,
latitude: 33.257179,
longitude: 115.374512,
is_map: true,
pinyin: "jieshou"
},
{
id: 509,
name: "建瓯",
abbr: "JO",
area_code: "200055",
sort: 2000,
latitude: 27.022659,
longitude: 118.304977,
is_map: true,
pinyin: "jianou"
},
{
id: 517,
name: "建阳",
abbr: "JY",
area_code: "200063",
sort: 2000,
latitude: 27.331751,
longitude: 118.12043,
is_map: true,
pinyin: "jianyang"
},
{
id: 526,
name: "酒泉",
abbr: "JQ",
area_code: "200072",
sort: 2000,
latitude: 39.732552,
longitude: 98.493942,
is_map: true,
pinyin: "jiuquan"
},
{
id: 527,
name: "嘉峪关",
abbr: "JYG",
area_code: "200073",
sort: 2000,
latitude: 39.772011,
longitude: 98.290108,
is_map: true,
pinyin: "jiayuguan"
},
{
id: 528,
name: "金昌",
abbr: "JC",
area_code: "200074",
sort: 2000,
latitude: 38.520061,
longitude: 102.187592,
is_map: true,
pinyin: "jinchang"
},
{
id: 533,
name: "揭东",
abbr: "JD",
area_code: "200079",
sort: 2000,
latitude: 23.566059,
longitude: 116.412109,
is_map: true,
pinyin: "jiedong"
},
{
id: 552,
name: "揭西",
abbr: "JX",
area_code: "200098",
sort: 2000,
latitude: 23.43141,
longitude: 115.841888,
is_map: true,
pinyin: "jiexi"
},
{
id: 580,
name: "金沙",
abbr: "JS",
area_code: "200126",
sort: 2000,
latitude: 27.459221,
longitude: 106.220139,
is_map: true,
pinyin: "jinsha"
},
{
id: 610,
name: "景县",
abbr: "JX",
area_code: "200156",
sort: 2000,
latitude: 37.692341,
longitude: 116.270599,
is_map: true,
pinyin: "jingxian"
},
{
id: 674,
name: "郏县",
abbr: "JX",
area_code: "200220",
sort: 2000,
latitude: 33.971802,
longitude: 113.212624,
is_map: true,
pinyin: "jiaxian"
},
{
id: 689,
name: "浚县",
abbr: "JX",
area_code: "200235",
sort: 2000,
latitude: 35.67617,
longitude: 114.550781,
is_map: true,
pinyin: "junxian"
},
{
id: 716,
name: "监利",
abbr: "JL",
area_code: "200262",
sort: 2000,
latitude: 29.839279,
longitude: 112.904922,
is_map: true,
pinyin: "jianli"
},
{
id: 723,
name: "京山",
abbr: "JS",
area_code: "200269",
sort: 2000,
latitude: 31.01848,
longitude: 113.11953,
is_map: true,
pinyin: "jingshan"
},
{
id: 800,
name: "津市",
abbr: "JS",
area_code: "200346",
sort: 2000,
latitude: 29.605431,
longitude: 111.877411,
is_map: true,
pinyin: "jinshi"
},
{
id: 814,
name: "蛟河",
abbr: "JH",
area_code: "200360",
sort: 2000,
latitude: 43.72393,
longitude: 127.344772,
is_map: true,
pinyin: "jiaohe"
},
{
id: 817,
name: "九台",
abbr: "JT",
area_code: "200363",
sort: 2000,
latitude: 44.151741,
longitude: 125.839493,
is_map: true,
pinyin: "jiutai"
},
{
id: 833,
name: "江都",
abbr: "JD",
area_code: "200379",
sort: 2000,
latitude: 32.434582,
longitude: 119.570061,
is_map: true,
pinyin: "jiangdu"
},
{
id: 846,
name: "靖江",
abbr: "JJ",
area_code: "200392",
sort: 2000,
latitude: 32.014938,
longitude: 120.274544,
is_map: true,
pinyin: "jingjiang"
},
{
id: 850,
name: "姜堰",
abbr: "JY",
area_code: "200396",
sort: 2000,
latitude: 32.50882,
longitude: 120.127007,
is_map: true,
pinyin: "jiangyan"
},
{
id: 851,
name: "建湖",
abbr: "JH",
area_code: "200397",
sort: 2000,
latitude: 33.464062,
longitude: 119.798576,
is_map: true,
pinyin: "jianhu"
},
{
id: 858,
name: "句容",
abbr: "JR",
area_code: "200404",
sort: 2000,
latitude: 31.94482,
longitude: 119.16864,
is_map: true,
pinyin: "jurong"
},
{
id: 860,
name: "金坛",
abbr: "JT",
area_code: "200406",
sort: 2000,
latitude: 31.723221,
longitude: 119.597939,
is_map: true,
pinyin: "jintan"
},
{
id: 867,
name: "金湖",
abbr: "JH",
area_code: "200413",
sort: 2000,
latitude: 33.02359,
longitude: 119.020432,
is_map: true,
pinyin: "jinhu"
},
{
id: 887,
name: "进贤",
abbr: "JX",
area_code: "200433",
sort: 2000,
latitude: 28.376789,
longitude: 116.242493,
is_map: true,
pinyin: "jinxian"
},
{
id: 888,
name: "吉水",
abbr: "JS",
area_code: "200434",
sort: 2000,
latitude: 27.229759,
longitude: 115.135498,
is_map: true,
pinyin: "jishui"
},
{
id: 940,
name: "胶州",
abbr: "JZ",
area_code: "200486",
sort: 2000,
latitude: 36.26445,
longitude: 120.033539,
is_map: true,
pinyin: "jiaozhou"
},
{
id: 945,
name: "巨野",
abbr: "JY",
area_code: "200491",
sort: 2000,
latitude: 35.396332,
longitude: 116.094948,
is_map: true,
pinyin: "juye"
},
{
id: 950,
name: "莒南",
abbr: "JN",
area_code: "200496",
sort: 2000,
latitude: 35.174858,
longitude: 118.835426,
is_map: true,
pinyin: "junan"
},
{
id: 968,
name: "莒县",
abbr: "JX",
area_code: "200514",
sort: 2000,
latitude: 35.579971,
longitude: 118.836868,
is_map: true,
pinyin: "juxian"
},
{
id: 969,
name: "鄄城",
abbr: "JC",
area_code: "200515",
sort: 2000,
latitude: 35.563499,
longitude: 115.510048,
is_map: true,
pinyin: "juancheng"
},
{
id: 976,
name: "金乡",
abbr: "JX",
area_code: "200522",
sort: 2000,
latitude: 35.066608,
longitude: 116.311478,
is_map: true,
pinyin: "jinxiang"
},
{
id: 988,
name: "嘉祥",
abbr: "JX",
area_code: "200534",
sort: 2000,
latitude: 35.407501,
longitude: 116.342491,
is_map: true,
pinyin: "jiaxiang"
},
{
id: 1000,
name: "介休",
abbr: "JX",
area_code: "200546",
sort: 2000,
latitude: 37.0271,
longitude: 111.916718,
is_map: true,
pinyin: "jiexiu"
},
{
id: 1043,
name: "金堂",
abbr: "JT",
area_code: "200589",
sort: 2000,
latitude: 30.86203,
longitude: 104.412048,
is_map: true,
pinyin: "jintang"
},
{
id: 1049,
name: "静海",
abbr: "JH",
area_code: "200595",
sort: 2000,
latitude: 38.947369,
longitude: 116.974281,
is_map: true,
pinyin: "jinghai"
},
{
id: 1050,
name: "蓟县",
abbr: "JX",
area_code: "200596",
sort: 2000,
latitude: 40.045769,
longitude: 117.408287,
is_map: true,
pinyin: "jixian"
},
{
id: 1069,
name: "建水",
abbr: "JS",
area_code: "200615",
sort: 2000,
latitude: 23.634991,
longitude: 102.826988,
is_map: true,
pinyin: "jianshui"
},
{
id: 1095,
name: "嘉善",
abbr: "JS",
area_code: "200641",
sort: 2000,
latitude: 30.83075,
longitude: 120.927162,
is_map: true,
pinyin: "jiashan"
},
{
id: 1107,
name: "江山",
abbr: "JS",
area_code: "200653",
sort: 2000,
latitude: 28.737249,
longitude: 118.6269,
is_map: true,
pinyin: "jiangshan"
},
{
id: 1111,
name: "建德",
abbr: "JD",
area_code: "200657",
sort: 2000,
latitude: 29.474751,
longitude: 119.281212,
is_map: true,
pinyin: "jiande"
},
{
id: 1112,
name: "缙云",
abbr: "JY",
area_code: "200658",
sort: 2000,
latitude: 28.659281,
longitude: 120.091583,
is_map: true,
pinyin: "jinyun"
},
{
id: 353,
name: "即墨",
abbr: "JM",
area_code: "05321",
sort: 9999,
latitude: 36.38932,
longitude: 120.447151,
is_map: true,
pinyin: "jimo"
},
{
id: 359,
name: "景洪",
abbr: "JH",
area_code: "0691",
sort: 9999,
latitude: 22.00008,
longitude: 100.771629,
is_map: true,
pinyin: "jinghong"
},
{
id: 364,
name: "江阴",
abbr: "JY",
area_code: "05101",
sort: 9999,
latitude: 31.92005,
longitude: 120.2854,
is_map: true,
pinyin: "jiangyin"
},
{
id: 1154,
name: "靖边县",
abbr: "JBX",
area_code: "610824",
sort: 9999,
latitude: 37.599312,
longitude: 108.795677,
is_map: true,
pinyin: "jingbian"
},
{
id: 1155,
name: "晋州",
abbr: "JZ",
area_code: "130183",
sort: 9999,
latitude: 38.033562,
longitude: 115.044098,
is_map: true,
pinyin: "jinzhou"
},
{
id: 1186,
name: "鸡泽",
abbr: "JZ",
area_code: "130431",
sort: 9999,
latitude: 36.914909,
longitude: 114.878517,
is_map: true,
pinyin: "jize"
},
{
id: 1196,
name: "巨鹿",
abbr: "JL",
area_code: "130529",
sort: 9999,
latitude: 37.217682,
longitude: 115.03878,
is_map: true,
pinyin: "julu"
},
{
id: 1255,
name: "冀州",
abbr: "JZ",
area_code: "131181",
sort: 9999,
latitude: 37.542789,
longitude: 115.57917,
is_map: true,
pinyin: "jizhou"
},
{
id: 1299,
name: "稷山",
abbr: "JS",
area_code: "140824",
sort: 9999,
latitude: 35.60041,
longitude: 110.978996,
is_map: true,
pinyin: "jishan"
},
{
id: 1444,
name: "建昌",
abbr: "JC",
area_code: "211422",
sort: 9999,
latitude: 40.81308,
longitude: 119.804108,
is_map: true,
pinyin: "jianchang"
},
{
id: 1451,
name: "集安",
abbr: "JA",
area_code: "220582",
sort: 9999,
latitude: 41.126274,
longitude: 126.186203,
is_map: true,
pinyin: "jian"
},
{
id: 1452,
name: "靖宇",
abbr: "JY",
area_code: "220622",
sort: 9999,
latitude: 42.38969,
longitude: 126.808388,
is_map: true,
pinyin: "jingyu"
},
{
id: 1477,
name: "鸡东",
abbr: "JD",
area_code: "230321",
sort: 9999,
latitude: 45.252918,
longitude: 131.146378,
is_map: true,
pinyin: "jidong"
},
{
id: 1482,
name: "集贤",
abbr: "JX",
area_code: "230521",
sort: 9999,
latitude: 46.728981,
longitude: 131.139328,
is_map: true,
pinyin: "jixian"
},
{
id: 1490,
name: "嘉荫",
abbr: "JY",
area_code: "230722",
sort: 9999,
latitude: 48.891376,
longitude: 130.39769,
is_map: true,
pinyin: "jiayin"
},
{
id: 1526,
name: "景宁畲族自治县",
abbr: "JNSZZZX",
area_code: "331127",
sort: 9999,
latitude: 27.977247,
longitude: 119.634666,
is_map: true,
pinyin: "jingningshezuzizhixian"
},
{
id: 1541,
name: "金寨",
abbr: "JZ",
area_code: "341524",
sort: 9999,
latitude: 31.681623,
longitude: 115.878517,
is_map: true,
pinyin: "jinzhai"
},
{
id: 1554,
name: "将乐",
abbr: "JL",
area_code: "350428",
sort: 9999,
latitude: 26.728666,
longitude: 117.473557,
is_map: true,
pinyin: "jiangle"
},
{
id: 1556,
name: "建宁",
abbr: "JN",
area_code: "350430",
sort: 9999,
latitude: 26.831398,
longitude: 116.845833,
is_map: true,
pinyin: "jianning"
},
{
id: 1576,
name: "九江县",
abbr: "JJ",
area_code: "360421",
sort: 9999,
latitude: 29.610264,
longitude: 115.892975,
is_map: true,
pinyin: "jiujiang"
},
{
id: 1594,
name: "吉安县",
abbr: "JAX",
area_code: "360821",
sort: 9999,
latitude: 27.040043,
longitude: 114.905113,
is_map: true,
pinyin: "jianxian"
},
{
id: 1601,
name: "井冈山",
abbr: "JGS",
area_code: "360881",
sort: 9999,
latitude: 26.57053,
longitude: 114.166115,
is_map: true,
pinyin: "jinggangshan"
},
{
id: 1606,
name: "靖安",
abbr: "JA",
area_code: "360925",
sort: 9999,
latitude: 28.86054,
longitude: 115.361748,
is_map: true,
pinyin: "jingan"
},
{
id: 1614,
name: "金溪",
abbr: "JX",
area_code: "361027",
sort: 9999,
latitude: 27.907387,
longitude: 116.778748,
is_map: true,
pinyin: "jinxi"
},
{
id: 1624,
name: "济阳",
abbr: "JY",
area_code: "370125",
sort: 9999,
latitude: 36.976772,
longitude: 117.176033,
is_map: true,
pinyin: "jiyang"
},
{
id: 1685,
name: "江陵",
abbr: "JL",
area_code: "421024",
sort: 9999,
latitude: 30.033918,
longitude: 112.417351,
is_map: true,
pinyin: "jiangling"
},
{
id: 1692,
name: "建始",
abbr: "JS",
area_code: "422822",
sort: 9999,
latitude: 30.601631,
longitude: 109.723824,
is_map: true,
pinyin: "jianshi"
},
{
id: 1711,
name: "嘉禾",
abbr: "JH",
area_code: "431024",
sort: 9999,
latitude: 25.587309,
longitude: 112.370621,
is_map: true,
pinyin: "jiahe"
},
{
id: 1716,
name: "江永",
abbr: "JY",
area_code: "431125",
sort: 9999,
latitude: 25.268154,
longitude: 111.346802,
is_map: true,
pinyin: "jiangyong"
},
{
id: 1719,
name: "江华瑶族自治县",
abbr: "JHYZZZX",
area_code: "431129",
sort: 9999,
latitude: 25.182596,
longitude: 111.577278,
is_map: true,
pinyin: "jianghuayaozuzizhixian"
},
{
id: 1750,
name: "蕉岭县",
abbr: "JLX",
area_code: "441427",
sort: 9999,
latitude: 24.653313,
longitude: 116.170532,
is_map: true,
pinyin: "jiaoling"
},
{
id: 1807,
name: "靖西",
abbr: "JX",
area_code: "451025",
sort: 9999,
latitude: 23.134766,
longitude: 106.417549,
is_map: true,
pinyin: "jingxi"
},
{
id: 1817,
name: "井陉",
abbr: "JX",
area_code: "130121",
sort: 9999,
latitude: 38.033615,
longitude: 114.144485,
is_map: true,
pinyin: "jingxing"
},
{
id: 1831,
name: "金秀瑶族自治县",
abbr: "JXYZZZX",
area_code: "451324",
sort: 9999,
latitude: 24.134941,
longitude: 110.188553,
is_map: true,
pinyin: "jinxiuyaozuzizhixian"
},
{
id: 1978,
name: "江口",
abbr: "JK",
area_code: "520621",
sort: 9999,
latitude: 27.691904,
longitude: 108.848427,
is_map: true,
pinyin: "jiangkou"
},
{
id: 2001,
name: "锦屏",
abbr: "JP",
area_code: "522628",
sort: 9999,
latitude: 26.680626,
longitude: 109.202522,
is_map: true,
pinyin: "jinping"
},
{
id: 2002,
name: "剑河",
abbr: "JH",
area_code: "522629",
sort: 9999,
latitude: 26.652386,
longitude: 108.589508,
is_map: true,
pinyin: "jianhe"
},
{
id: 2022,
name: "晋宁",
abbr: "JN",
area_code: "530122",
sort: 9999,
latitude: 24.666945,
longitude: 102.594986,
is_map: true,
pinyin: "jinning"
},
{
id: 2030,
name: "江川",
abbr: "JC",
area_code: "530421",
sort: 9999,
latitude: 24.291006,
longitude: 102.74984,
is_map: true,
pinyin: "jiangchuan"
},
{
id: 2056,
name: "景东彝族自治县",
abbr: "JDYZZZX",
area_code: "530823",
sort: 9999,
latitude: 24.448523,
longitude: 100.840012,
is_map: true,
pinyin: "jingdongyizuzizhixian"
},
{
id: 2057,
name: "景谷傣族彝族自治县",
abbr: "JGDZYZZZX",
area_code: "530824",
sort: 9999,
latitude: 23.500278,
longitude: 100.701424,
is_map: true,
pinyin: "jinggudaizuyizuzizhixian"
},
{
id: 2059,
name: "江城哈尼族彝族自治县",
abbr: "JCHNZYZZZX",
area_code: "530826",
sort: 9999,
latitude: 22.583361,
longitude: 101.859146,
is_map: true,
pinyin: "jiangchenghanizuyizuzizhixian"
},
{
id: 2086,
name: "金平苗族瑶族傣族自治县",
abbr: "JPMZYZDZZZX",
area_code: "532530",
sort: 9999,
latitude: 22.779982,
longitude: 103.228355,
is_map: true,
pinyin: "jinpingmiaozuyaozudaizuzizhixian"
},
{
id: 2109,
name: "剑川",
abbr: "JC",
area_code: "532931",
sort: 9999,
latitude: 26.530066,
longitude: 99.905884,
is_map: true,
pinyin: "jianchuan"
},
{
id: 2218,
name: "泾阳",
abbr: "JY",
area_code: "610423",
sort: 9999,
latitude: 34.528492,
longitude: 108.837837,
is_map: true,
pinyin: "jingyang"
},
{
id: 2386,
name: "久治县",
abbr: "JZX",
area_code: "632625",
sort: 9999,
latitude: 33.430218,
longitude: 101.484886,
is_map: true,
pinyin: "jiuzhi"
},
{
id: 5904,
name: "加格达奇区",
abbr: "JGDQQ",
area_code: "232701",
sort: 9999,
latitude: 50.424652,
longitude: 124.126717,
is_map: true,
pinyin: "jiagedaqiqu"
}
],
L: [
{
id: 400,
name: "漯河",
abbr: "LH",
area_code: "0395",
sort: 1868,
latitude: 33.58149,
longitude: 114.016808,
is_map: true,
pinyin: "luohe"
},
{
id: 40,
name: "廊坊",
abbr: "LF",
area_code: "0316",
sort: 2000,
latitude: 39.02177,
longitude: 116.756378,
is_map: true,
pinyin: "langfang"
},
{
id: 41,
name: "兰州",
abbr: "LZ",
area_code: "0931",
sort: 2000,
latitude: 36.19622,
longitude: 103.125,
is_map: true,
pinyin: "lanzhou"
},
{
id: 60,
name: "临沂",
abbr: "LY",
area_code: "0539",
sort: 2000,
latitude: 35.104649,
longitude: 118.356461,
is_map: true,
pinyin: "linyi"
},
{
id: 73,
name: "丽水",
abbr: "LS",
area_code: "0578",
sort: 2000,
latitude: 28.467199,
longitude: 119.922928,
is_map: true,
pinyin: "lishui"
},
{
id: 81,
name: "柳州",
abbr: "LZ",
area_code: "0772",
sort: 2000,
latitude: 24.32543,
longitude: 109.41552,
is_map: true,
pinyin: "liuzhou"
},
{
id: 84,
name: "聊城",
abbr: "LC",
area_code: "0635",
sort: 2000,
latitude: 36.45702,
longitude: 115.985489,
is_map: true,
pinyin: "liaocheng"
},
{
id: 85,
name: "六安",
abbr: "LA",
area_code: "0564",
sort: 2000,
latitude: 31.73488,
longitude: 116.523239,
is_map: true,
pinyin: "luan"
},
{
id: 89,
name: "连云港",
abbr: "LYG",
area_code: "0518",
sort: 2000,
latitude: 34.596691,
longitude: 119.222954,
is_map: true,
pinyin: "lianyungang"
},
{
id: 94,
name: "洛阳",
abbr: "LY",
area_code: "0379",
sort: 2000,
latitude: 34.618118,
longitude: 112.453613,
is_map: true,
pinyin: "luoyang"
},
{
id: 106,
name: "泸州",
abbr: "LZ",
area_code: "0830",
sort: 2000,
latitude: 28.8717,
longitude: 105.442574,
is_map: true,
pinyin: "luzhou"
},
{
id: 139,
name: "乐山",
abbr: "LS",
area_code: "0833",
sort: 2000,
latitude: 29.55221,
longitude: 103.765388,
is_map: true,
pinyin: "leshan"
},
{
id: 143,
name: "娄底",
abbr: "LD",
area_code: "0738",
sort: 2000,
latitude: 27.697281,
longitude: 111.994583,
is_map: true,
pinyin: "loudi"
},
{
id: 155,
name: "丽江",
abbr: "LJ",
area_code: "0888",
sort: 2000,
latitude: 26.85648,
longitude: 100.227097,
is_map: true,
pinyin: "lijiang"
},
{
id: 168,
name: "临汾",
abbr: "LF",
area_code: "0357",
sort: 2000,
latitude: 36.088219,
longitude: 111.519623,
is_map: true,
pinyin: "linfen"
},
{
id: 181,
name: "龙岩",
abbr: "LY",
area_code: "0597",
sort: 2000,
latitude: 25.075041,
longitude: 117.01722,
is_map: true,
pinyin: "longyan"
},
{
id: 201,
name: "罗定",
abbr: "LD",
area_code: "0766",
sort: 2000,
latitude: 22.768299,
longitude: 111.570038,
is_map: true,
pinyin: "luoding"
},
{
id: 222,
name: "辽阳市",
abbr: "LYS",
area_code: "0419",
sort: 2000,
latitude: 41.268089,
longitude: 123.237358,
is_map: true,
pinyin: "liaoyangshi"
},
{
id: 227,
name: "辽源",
abbr: "LY",
area_code: "0437",
sort: 2000,
latitude: 42.88805,
longitude: 125.143677,
is_map: true,
pinyin: "liaoyuan"
},
{
id: 232,
name: "拉萨",
abbr: "LS",
area_code: "0891",
sort: 2000,
latitude: 29.64415,
longitude: 91.114502,
is_map: true,
pinyin: "lasa"
},
{
id: 281,
name: "吕梁",
abbr: "LL",
area_code: "0358",
sort: 2000,
latitude: 37.519341,
longitude: 111.141647,
is_map: true,
pinyin: "lvliang"
},
{
id: 391,
name: "莱芜",
abbr: "LW",
area_code: "0634",
sort: 2000,
latitude: 36.213589,
longitude: 117.676666,
is_map: true,
pinyin: "laiwu"
},
{
id: 441,
name: "六盘水",
abbr: "LPS",
area_code: "10019",
sort: 2000,
latitude: 26.68469,
longitude: 104.746681,
is_map: true,
pinyin: "liupanshui"
},
{
id: 456,
name: "庐江",
abbr: "LJ",
area_code: "200002",
sort: 2000,
latitude: 31.255671,
longitude: 117.287361,
is_map: true,
pinyin: "lujiang"
},
{
id: 462,
name: "临泉",
abbr: "LQ",
area_code: "200008",
sort: 2000,
latitude: 33.064571,
longitude: 115.25811,
is_map: true,
pinyin: "linquan"
},
{
id: 470,
name: "利辛",
abbr: "LX",
area_code: "200016",
sort: 2000,
latitude: 33.14484,
longitude: 116.208389,
is_map: true,
pinyin: "lixin"
},
{
id: 472,
name: "灵璧",
abbr: "LB",
area_code: "200018",
sort: 2000,
latitude: 33.54232,
longitude: 117.558548,
is_map: true,
pinyin: "lingbi"
},
{
id: 498,
name: "龙海",
abbr: "LH",
area_code: "200044",
sort: 2000,
latitude: 24.446581,
longitude: 117.81813,
is_map: true,
pinyin: "longhai"
},
{
id: 510,
name: "连江",
abbr: "LJ",
area_code: "200056",
sort: 2000,
latitude: 26.197531,
longitude: 119.539574,
is_map: true,
pinyin: "lianjiang"
},
{
id: 525,
name: "临夏",
abbr: "LX",
area_code: "200071",
sort: 2000,
latitude: 35.6045,
longitude: 103.243172,
is_map: true,
pinyin: "linxia"
},
{
id: 532,
name: "陆丰",
abbr: "LF",
area_code: "200078",
sort: 2000,
latitude: 22.94511,
longitude: 115.644623,
is_map: true,
pinyin: "lufeng"
},
{
id: 538,
name: "廉江",
abbr: "LJ",
area_code: "200084",
sort: 2000,
latitude: 21.609619,
longitude: 110.286247,
is_map: true,
pinyin: "lianjiang"
},
{
id: 541,
name: "雷州",
abbr: "LZ",
area_code: "200087",
sort: 2000,
latitude: 20.91444,
longitude: 110.096512,
is_map: true,
pinyin: "leizhou"
},
{
id: 584,
name: "临高",
abbr: "LG",
area_code: "200130",
sort: 2000,
latitude: 19.91243,
longitude: 109.690773,
is_map: true,
pinyin: "lingao"
},
{
id: 599,
name: "临漳",
abbr: "LZ",
area_code: "200145",
sort: 2000,
latitude: 36.334641,
longitude: 114.619553,
is_map: true,
pinyin: "linzhang"
},
{
id: 600,
name: "滦县",
abbr: "LX",
area_code: "200146",
sort: 2000,
latitude: 39.740582,
longitude: 118.703506,
is_map: true,
pinyin: "luanxian"
},
{
id: 603,
name: "滦南",
abbr: "LN",
area_code: "200149",
sort: 2000,
latitude: 39.166672,
longitude: 118.068031,
is_map: true,
pinyin: "luannan"
},
{
id: 607,
name: "隆尧",
abbr: "LY",
area_code: "200153",
sort: 2000,
latitude: 37.35025,
longitude: 114.770309,
is_map: true,
pinyin: "longyao"
},
{
id: 639,
name: "林州",
abbr: "LZ",
area_code: "200185",
sort: 2000,
latitude: 36.08308,
longitude: 113.819077,
is_map: true,
pinyin: "linzhou"
},
{
id: 643,
name: "鹿邑",
abbr: "LY",
area_code: "200189",
sort: 2000,
latitude: 33.860088,
longitude: 115.484428,
is_map: true,
pinyin: "luyi"
},
{
id: 649,
name: "临颍",
abbr: "LY",
area_code: "200195",
sort: 2000,
latitude: 33.809582,
longitude: 113.934433,
is_map: true,
pinyin: "linying"
},
{
id: 659,
name: "灵宝",
abbr: "LB",
area_code: "200205",
sort: 2000,
latitude: 34.51685,
longitude: 110.894562,
is_map: true,
pinyin: "lingbao"
},
{
id: 662,
name: "鲁山",
abbr: "LS",
area_code: "200208",
sort: 2000,
latitude: 33.738541,
longitude: 112.90802,
is_map: true,
pinyin: "lushan"
},
{
id: 681,
name: "兰考",
abbr: "LK",
area_code: "200227",
sort: 2000,
latitude: 34.8223,
longitude: 114.821152,
is_map: true,
pinyin: "lankao"
},
{
id: 695,
name: "罗山",
abbr: "LS",
area_code: "200241",
sort: 2000,
latitude: 32.20314,
longitude: 114.513069,
is_map: true,
pinyin: "luoshan"
},
{
id: 734,
name: "利川",
abbr: "LC",
area_code: "200280",
sort: 2000,
latitude: 30.29121,
longitude: 108.935951,
is_map: true,
pinyin: "lichuan"
},
{
id: 735,
name: "老河口",
abbr: "LHK",
area_code: "200281",
sort: 2000,
latitude: 32.386711,
longitude: 111.675072,
is_map: true,
pinyin: "laohekou"
},
{
id: 737,
name: "罗田",
abbr: "LT",
area_code: "200283",
sort: 2000,
latitude: 30.78397,
longitude: 115.399429,
is_map: true,
pinyin: "luotian"
},
{
id: 750,
name: "浏阳",
abbr: "LY",
area_code: "200296",
sort: 2000,
latitude: 28.16378,
longitude: 113.643173,
is_map: true,
pinyin: "liuyang"
},
{
id: 752,
name: "耒阳",
abbr: "LY",
area_code: "200298",
sort: 2000,
latitude: 26.42243,
longitude: 112.859879,
is_map: true,
pinyin: "leiyang"
},
{
id: 753,
name: "醴陵",
abbr: "LL",
area_code: "200299",
sort: 2000,
latitude: 27.64617,
longitude: 113.497032,
is_map: true,
pinyin: "liling"
},
{
id: 762,
name: "隆回",
abbr: "LH",
area_code: "200308",
sort: 2000,
latitude: 27.114019,
longitude: 111.032494,
is_map: true,
pinyin: "longhui"
},
{
id: 767,
name: "澧县",
abbr: "LX",
area_code: "200313",
sort: 2000,
latitude: 29.633181,
longitude: 111.758682,
is_map: true,
pinyin: "lixian"
},
{
id: 769,
name: "涟源",
abbr: "LY",
area_code: "200315",
sort: 2000,
latitude: 27.692711,
longitude: 111.664459,
is_map: true,
pinyin: "lianyuan"
},
{
id: 779,
name: "冷水江",
abbr: "LSJ",
area_code: "200325",
sort: 2000,
latitude: 27.68615,
longitude: 111.435249,
is_map: true,
pinyin: "lengshuijiang"
},
{
id: 782,
name: "临湘",
abbr: "LX",
area_code: "200328",
sort: 2000,
latitude: 29.476839,
longitude: 113.450577,
is_map: true,
pinyin: "linxiang"
},
{
id: 798,
name: "临澧",
abbr: "LL",
area_code: "200344",
sort: 2000,
latitude: 29.440981,
longitude: 111.647346,
is_map: true,
pinyin: "linli"
},
{
id: 799,
name: "龙山",
abbr: "LS",
area_code: "200345",
sort: 2000,
latitude: 29.457899,
longitude: 109.443871,
is_map: true,
pinyin: "longshan"
},
{
id: 809,
name: "梨树",
abbr: "LS",
area_code: "200355",
sort: 2000,
latitude: 43.307171,
longitude: 124.33564,
is_map: true,
pinyin: "lishu"
},
{
id: 852,
name: "溧阳",
abbr: "LY",
area_code: "200398",
sort: 2000,
latitude: 31.415859,
longitude: 119.484596,
is_map: true,
pinyin: "liyang"
},
{
id: 853,
name: "涟水",
abbr: "LS",
area_code: "200399",
sort: 2000,
latitude: 33.780979,
longitude: 119.260887,
is_map: true,
pinyin: "lianshui"
},
{
id: 865,
name: "溧水",
abbr: "LS",
area_code: "200411",
sort: 2000,
latitude: 31.381029,
longitude: 118.969948,
is_map: true,
pinyin: "lishui"
},
{
id: 873,
name: "乐平",
abbr: "LP",
area_code: "200419",
sort: 2000,
latitude: 28.961729,
longitude: 117.128998,
is_map: true,
pinyin: "leping"
},
{
id: 897,
name: "龙南",
abbr: "LN",
area_code: "200443",
sort: 2000,
latitude: 24.911051,
longitude: 114.789932,
is_map: true,
pinyin: "longnan"
},
{
id: 909,
name: "凌源",
abbr: "LY",
area_code: "200455",
sort: 2000,
latitude: 41.24548,
longitude: 119.401337,
is_map: true,
pinyin: "lingyuan"
},
{
id: 938,
name: "兰陵",
abbr: "LL",
area_code: "200484",
sort: 2000,
latitude: 34.857288,
longitude: 118.070717,
is_map: true,
pinyin: "lanling"
},
{
id: 944,
name: "龙口",
abbr: "LK",
area_code: "200490",
sort: 2000,
latitude: 37.643452,
longitude: 120.478722,
is_map: true,
pinyin: "longkou"
},
{
id: 948,
name: "莱西",
abbr: "LX",
area_code: "200494",
sort: 2000,
latitude: 36.888081,
longitude: 120.517769,
is_map: true,
pinyin: "laixi"
},
{
id: 949,
name: "莱州",
abbr: "LZ",
area_code: "200495",
sort: 2000,
latitude: 37.177021,
longitude: 119.942169,
is_map: true,
pinyin: "laizhou"
},
{
id: 952,
name: "莱阳",
abbr: "LY",
area_code: "200498",
sort: 2000,
latitude: 36.978779,
longitude: 120.711807,
is_map: true,
pinyin: "laiyang"
},
{
id: 954,
name: "临清",
abbr: "LQ",
area_code: "200500",
sort: 2000,
latitude: 36.838341,
longitude: 115.70504,
is_map: true,
pinyin: "linqing"
},
{
id: 955,
name: "临沭",
abbr: "LS",
area_code: "200501",
sort: 2000,
latitude: 34.919849,
longitude: 118.650627,
is_map: true,
pinyin: "linshu"
},
{
id: 973,
name: "临朐",
abbr: "LQ",
area_code: "200519",
sort: 2000,
latitude: 36.51231,
longitude: 118.542999,
is_map: true,
pinyin: "linqu"
},
{
id: 974,
name: "梁山",
abbr: "LS",
area_code: "200520",
sort: 2000,
latitude: 35.802399,
longitude: 116.09584,
is_map: true,
pinyin: "liangshan"
},
{
id: 980,
name: "乐陵",
abbr: "LL",
area_code: "200526",
sort: 2000,
latitude: 37.72979,
longitude: 117.231712,
is_map: true,
pinyin: "leling"
},
{
id: 986,
name: "临邑",
abbr: "LY",
area_code: "200532",
sort: 2000,
latitude: 37.18998,
longitude: 116.8666,
is_map: true,
pinyin: "linyi"
},
{
id: 993,
name: "陵县",
abbr: "LX",
area_code: "200539",
sort: 2000,
latitude: 37.335659,
longitude: 116.57634,
is_map: true,
pinyin: "lingxian"
},
{
id: 1001,
name: "临猗",
abbr: "LY",
area_code: "200547",
sort: 2000,
latitude: 35.144711,
longitude: 110.774078,
is_map: true,
pinyin: "linyi"
},
{
id: 1023,
name: "隆昌",
abbr: "LC",
area_code: "200569",
sort: 2000,
latitude: 29.339479,
longitude: 105.287727,
is_map: true,
pinyin: "longchang"
},
{
id: 1026,
name: "泸县",
abbr: "LX",
area_code: "200572",
sort: 2000,
latitude: 29.1516,
longitude: 105.381851,
is_map: true,
pinyin: "luxian"
},
{
id: 1035,
name: "阆中",
abbr: "LZ",
area_code: "200581",
sort: 2000,
latitude: 31.558371,
longitude: 106.00499,
is_map: true,
pinyin: "langzhong"
},
{
id: 1036,
name: "邻水",
abbr: "LS",
area_code: "200582",
sort: 2000,
latitude: 30.334579,
longitude: 106.930481,
is_map: true,
pinyin: "linshui"
},
{
id: 1063,
name: "陆良",
abbr: "LL",
area_code: "200609",
sort: 2000,
latitude: 25.029409,
longitude: 103.666832,
is_map: true,
pinyin: "luliang"
},
{
id: 1064,
name: "罗平",
abbr: "LP",
area_code: "200610",
sort: 2000,
latitude: 24.88468,
longitude: 104.308701,
is_map: true,
pinyin: "luoping"
},
{
id: 1078,
name: "乐清",
abbr: "LQ",
area_code: "200624",
sort: 2000,
latitude: 28.11289,
longitude: 120.983383,
is_map: true,
pinyin: "leqing"
},
{
id: 1082,
name: "临海",
abbr: "LH",
area_code: "200628",
sort: 2000,
latitude: 28.8584,
longitude: 121.144951,
is_map: true,
pinyin: "linhai"
},
{
id: 1097,
name: "临安",
abbr: "LA",
area_code: "200643",
sort: 2000,
latitude: 30.233829,
longitude: 119.7248,
is_map: true,
pinyin: "linan"
},
{
id: 1106,
name: "兰溪",
abbr: "LX",
area_code: "200652",
sort: 2000,
latitude: 29.20838,
longitude: 119.46051,
is_map: true,
pinyin: "lanxi"
},
{
id: 1115,
name: "龙游",
abbr: "LY",
area_code: "200661",
sort: 2000,
latitude: 29.028271,
longitude: 119.172249,
is_map: true,
pinyin: "longyou"
},
{
id: 1117,
name: "龙泉",
abbr: "LQ",
area_code: "200663",
sort: 2000,
latitude: 28.074341,
longitude: 119.141678,
is_map: true,
pinyin: "longquan"
},
{
id: 1130,
name: "梁平",
abbr: "LP",
area_code: "200676",
sort: 2000,
latitude: 30.673731,
longitude: 107.802353,
is_map: true,
pinyin: "liangping"
},
{
id: 1146,
name: "陵水黎族自治县",
abbr: "LSLZZZX",
area_code: "469028",
sort: 9999,
latitude: 18.50596,
longitude: 110.037201,
is_map: true,
pinyin: "lingshuilizuzizhixian"
},
{
id: 1147,
name: "兰西",
abbr: "LX",
area_code: "231222",
sort: 9999,
latitude: 46.252411,
longitude: 126.28788,
is_map: true,
pinyin: "lanxi"
},
{
id: 1148,
name: "龙江",
abbr: "LJ",
area_code: "230221",
sort: 9999,
latitude: 47.337372,
longitude: 123.204826,
is_map: true,
pinyin: "longjiang"
},
{
id: 1153,
name: "辽中区",
abbr: "LZQ",
area_code: "210122",
sort: 9999,
latitude: 41.511799,
longitude: 122.731613,
is_map: true,
pinyin: "liaozhongqu"
},
{
id: 1181,
name: "卢龙",
abbr: "LL",
area_code: "130324",
sort: 9999,
latitude: 39.883953,
longitude: 118.872932,
is_map: true,
pinyin: "lulong"
},
{
id: 1191,
name: "临城",
abbr: "LC",
area_code: "130522",
sort: 9999,
latitude: 37.444008,
longitude: 114.506874,
is_map: true,
pinyin: "lincheng"
},
{
id: 1201,
name: "临西",
abbr: "LX",
area_code: "130535",
sort: 9999,
latitude: 36.864201,
longitude: 115.498688,
is_map: true,
pinyin: "linxi"
},
{
id: 1203,
name: "涞水",
abbr: "LS",
area_code: "130623",
sort: 9999,
latitude: 39.393147,
longitude: 115.711983,
is_map: true,
pinyin: "laishui"
},
{
id: 1209,
name: "涞源",
abbr: "LY",
area_code: "130630",
sort: 9999,
latitude: 39.357552,
longitude: 114.692566,
is_map: true,
pinyin: "laiyuan"
},
{
id: 1213,
name: "蠡县",
abbr: "LX",
area_code: "130635",
sort: 9999,
latitude: 38.496429,
longitude: 115.583633,
is_map: true,
pinyin: "lixian"
},
{
id: 1233,
name: "滦平",
abbr: "LP",
area_code: "130824",
sort: 9999,
latitude: 40.936646,
longitude: 117.337128,
is_map: true,
pinyin: "luanping"
},
{
id: 1234,
name: "隆化",
abbr: "LH",
area_code: "130825",
sort: 9999,
latitude: 41.316666,
longitude: 117.736343,
is_map: true,
pinyin: "longhua"
},
{
id: 1297,
name: "灵石",
abbr: "LS",
area_code: "140729",
sort: 9999,
latitude: 36.847469,
longitude: 111.772758,
is_map: true,
pinyin: "lingshi"
},
{
id: 1353,
name: "林西",
abbr: "LX",
area_code: "150424",
sort: 9999,
latitude: 43.605328,
longitude: 118.057747,
is_map: true,
pinyin: "linxi"
},
{
id: 1371,
name: "灵寿",
abbr: "LS",
area_code: "130126",
sort: 9999,
latitude: 38.306545,
longitude: 114.379463,
is_map: true,
pinyin: "lingshou"
},
{
id: 1391,
name: "凉城",
abbr: "LC",
area_code: "150925",
sort: 9999,
latitude: 40.531628,
longitude: 112.500908,
is_map: true,
pinyin: "liangcheng"
},
{
id: 1431,
name: "凌海",
abbr: "LH",
area_code: "210781",
sort: 9999,
latitude: 41.171738,
longitude: 121.364235,
is_map: true,
pinyin: "linghai"
},
{
id: 1435,
name: "辽阳县",
abbr: "LYX",
area_code: "211021",
sort: 9999,
latitude: 41.21648,
longitude: 123.079674,
is_map: true,
pinyin: "liaoyangxian"
},
{
id: 1450,
name: "柳河",
abbr: "LH",
area_code: "220524",
sort: 9999,
latitude: 42.281483,
longitude: 125.74054,
is_map: true,
pinyin: "liuhe"
},
{
id: 1454,
name: "临江",
abbr: "LJ",
area_code: "220681",
sort: 9999,
latitude: 41.810688,
longitude: 126.919296,
is_map: true,
pinyin: "linjiang"
},
{
id: 1461,
name: "龙井",
abbr: "LJ",
area_code: "222405",
sort: 9999,
latitude: 42.77103,
longitude: 129.425751,
is_map: true,
pinyin: "longjing"
},
{
id: 1480,
name: "萝北",
abbr: "LB",
area_code: "230421",
sort: 9999,
latitude: 47.429726,
longitude: 130.544571,
is_map: true,
pinyin: "luobei"
},
{
id: 1488,
name: "林甸",
abbr: "LD",
area_code: "230623",
sort: 9999,
latitude: 47.186413,
longitude: 124.877739,
is_map: true,
pinyin: "lindian"
},
{
id: 1498,
name: "林口",
abbr: "LK",
area_code: "231025",
sort: 9999,
latitude: 45.286644,
longitude: 130.268402,
is_map: true,
pinyin: "linkou"
},
{
id: 1547,
name: "罗源",
abbr: "LY",
area_code: "350123",
sort: 9999,
latitude: 26.487234,
longitude: 119.552643,
is_map: true,
pinyin: "luoyuan"
},
{
id: 1567,
name: "连城",
abbr: "LC",
area_code: "350825",
sort: 9999,
latitude: 25.708506,
longitude: 116.756683,
is_map: true,
pinyin: "liancheng"
},
{
id: 1574,
name: "莲花",
abbr: "LH",
area_code: "360321",
sort: 9999,
latitude: 27.127808,
longitude: 113.955582,
is_map: true,
pinyin: "lianhua"
},
{
id: 1575,
name: "芦溪",
abbr: "LX",
area_code: "360323",
sort: 9999,
latitude: 27.633633,
longitude: 114.041206,
is_map: true,
pinyin: "luxi"
},
{
id: 1609,
name: "黎川",
abbr: "LC",
area_code: "361022",
sort: 9999,
latitude: 27.292561,
longitude: 116.914574,
is_map: true,
pinyin: "lichuan"
},
{
id: 1612,
name: "乐安",
abbr: "LA",
area_code: "361025",
sort: 9999,
latitude: 27.420101,
longitude: 115.838432,
is_map: true,
pinyin: "lean"
},
{
id: 1628,
name: "利津县",
abbr: "LJX",
area_code: "370522",
sort: 9999,
latitude: 37.493366,
longitude: 118.248856,
is_map: true,
pinyin: "lijin"
},
{
id: 1642,
name: "栾川",
abbr: "LC",
area_code: "410324",
sort: 9999,
latitude: 33.783195,
longitude: 111.618385,
is_map: true,
pinyin: "luanchuan"
},
{
id: 1646,
name: "洛宁",
abbr: "LN",
area_code: "410328",
sort: 9999,
latitude: 34.38718,
longitude: 111.655396,
is_map: true,
pinyin: "luoning"
},
{
id: 1665,
name: "卢氏",
abbr: "LS",
area_code: "411224",
sort: 9999,
latitude: 34.053993,
longitude: 111.05265,
is_map: true,
pinyin: "lushi"
},
{
id: 1712,
name: "临武",
abbr: "LW",
area_code: "431025",
sort: 9999,
latitude: 25.279119,
longitude: 112.56459,
is_map: true,
pinyin: "linwu"
},
{
id: 1717,
name: "蓝山",
abbr: "LS",
area_code: "431127",
sort: 9999,
latitude: 25.375256,
longitude: 112.194199,
is_map: true,
pinyin: "lanshan"
},
{
id: 1739,
name: "乐昌",
abbr: "LC",
area_code: "440281",
sort: 9999,
latitude: 25.128445,
longitude: 113.352409,
is_map: true,
pinyin: "lechang"
},
{
id: 1746,
name: "龙门",
abbr: "LM",
area_code: "441324",
sort: 9999,
latitude: 23.723894,
longitude: 114.259987,
is_map: true,
pinyin: "longmen"
},
{
id: 1751,
name: "陆河",
abbr: "LH",
area_code: "441523",
sort: 9999,
latitude: 23.302683,
longitude: 115.657562,
is_map: true,
pinyin: "luhe"
},
{
id: 1752,
name: "龙川",
abbr: "LC",
area_code: "441622",
sort: 9999,
latitude: 24.101173,
longitude: 115.256416,
is_map: true,
pinyin: "longchuan"
},
{
id: 1753,
name: "连平",
abbr: "LP",
area_code: "441623",
sort: 9999,
latitude: 24.364227,
longitude: 114.495949,
is_map: true,
pinyin: "lianping"
},
{
id: 1767,
name: "隆安",
abbr: "LA",
area_code: "450123",
sort: 9999,
latitude: 23.174763,
longitude: 107.68866,
is_map: true,
pinyin: "longan"
},
{
id: 1772,
name: "柳江",
abbr: "LJ",
area_code: "450221",
sort: 9999,
latitude: 24.257511,
longitude: 109.334503,
is_map: true,
pinyin: "liujiang"
},
{
id: 1773,
name: "柳城",
abbr: "LC",
area_code: "450222",
sort: 9999,
latitude: 24.655121,
longitude: 109.245811,
is_map: true,
pinyin: "liucheng"
},
{
id: 1774,
name: "鹿寨",
abbr: "LZ",
area_code: "450223",
sort: 9999,
latitude: 24.483404,
longitude: 109.740807,
is_map: true,
pinyin: "luzhai"
},
{
id: 1779,
name: "灵川",
abbr: "LC",
area_code: "450323",
sort: 9999,
latitude: 25.408541,
longitude: 110.325714,
is_map: true,
pinyin: "lingchuan"
},
{
id: 1784,
name: "龙胜各族自治县",
abbr: "LSGZZZX",
area_code: "450328",
sort: 9999,
latitude: 25.796429,
longitude: 110.009422,
is_map: true,
pinyin: "longshenggezuzizhixian"
},
{
id: 1787,
name: "荔浦",
abbr: "LP",
area_code: "450331",
sort: 9999,
latitude: 24.497786,
longitude: 110.400146,
is_map: true,
pinyin: "lipu"
},
{
id: 1797,
name: "灵山县",
abbr: "LSX",
area_code: "450721",
sort: 9999,
latitude: 22.418041,
longitude: 109.293465,
is_map: true,
pinyin: "lingshan"
},
{
id: 1800,
name: "陆川",
abbr: "LC",
area_code: "450922",
sort: 9999,
latitude: 22.321054,
longitude: 110.264839,
is_map: true,
pinyin: "luchuan"
},
{
id: 1809,
name: "凌云",
abbr: "LY",
area_code: "451027",
sort: 9999,
latitude: 24.345642,
longitude: 106.564873,
is_map: true,
pinyin: "lingyun"
},
{
id: 1810,
name: "乐业",
abbr: "LY",
area_code: "451028",
sort: 9999,
latitude: 24.782204,
longitude: 106.559639,
is_map: true,
pinyin: "leye"
},
{
id: 1813,
name: "隆林各族自治县",
abbr: "LLGZZZX",
area_code: "451031",
sort: 9999,
latitude: 24.774319,
longitude: 105.342361,
is_map: true,
pinyin: "longlingezuzizhixian"
},
{
id: 1822,
name: "罗城仫佬族自治县",
abbr: "LCMLZZZX",
area_code: "451225",
sort: 9999,
latitude: 24.779327,
longitude: 108.902451,
is_map: true,
pinyin: "luochengmulaozuzizhixian"
},
{
id: 1827,
name: "来宾",
abbr: "LB",
area_code: "451300",
sort: 9999,
latitude: 23.733767,
longitude: 109.229774,
is_map: true,
pinyin: "laibin"
},
{
id: 1904,
name: "乐至",
abbr: "LZ",
area_code: "512022",
sort: 9999,
latitude: 30.27562,
longitude: 105.031143,
is_map: true,
pinyin: "lezhi"
},
{
id: 1938,
name: "凉山彝族自治州",
abbr: "LSYZZZZ",
area_code: "513400",
sort: 9999,
latitude: 27.886763,
longitude: 102.258743,
is_map: true,
pinyin: "liangshanyizuzizhizhou"
},
{
id: 1994,
name: "乐亭",
abbr: "LT",
area_code: "130225",
sort: 9999,
latitude: 39.428131,
longitude: 118.905342,
is_map: true,
pinyin: "laoting"
},
{
id: 2004,
name: "黎平",
abbr: "LP",
area_code: "522631",
sort: 9999,
latitude: 26.230637,
longitude: 109.136505,
is_map: true,
pinyin: "liping"
},
{
id: 2007,
name: "雷山",
abbr: "LS",
area_code: "522634",
sort: 9999,
latitude: 26.381027,
longitude: 108.079613,
is_map: true,
pinyin: "leishan"
},
{
id: 2012,
name: "荔波",
abbr: "LB",
area_code: "522722",
sort: 9999,
latitude: 25.412239,
longitude: 107.883797,
is_map: true,
pinyin: "libo"
},
{
id: 2017,
name: "罗甸",
abbr: "LD",
area_code: "522728",
sort: 9999,
latitude: 25.429893,
longitude: 106.750008,
is_map: true,
pinyin: "luodian"
},
{
id: 2019,
name: "龙里",
abbr: "LL",
area_code: "522730",
sort: 9999,
latitude: 26.448809,
longitude: 106.97773,
is_map: true,
pinyin: "longli"
},
{
id: 2026,
name: "禄劝彝族苗族自治县",
abbr: "LQYZMZZZX",
area_code: "530128",
sort: 9999,
latitude: 25.556534,
longitude: 102.469048,
is_map: true,
pinyin: "luquanyizumiaozuzizhixian"
},
{
id: 2039,
name: "龙陵",
abbr: "LL",
area_code: "530523",
sort: 9999,
latitude: 24.591911,
longitude: 98.693565,
is_map: true,
pinyin: "longling"
},
{
id: 2041,
name: "鲁甸",
abbr: "LD",
area_code: "530621",
sort: 9999,
latitude: 27.191637,
longitude: 103.549332,
is_map: true,
pinyin: "ludian"
},
{
id: 2061,
name: "澜沧拉祜族自治县",
abbr: "LCLHZZZX",
area_code: "530828",
sort: 9999,
latitude: 22.553083,
longitude: 99.931198,
is_map: true,
pinyin: "lancanglahuzuzizhixian"
},
{
id: 2063,
name: "临沧",
abbr: "LC",
area_code: "530900",
sort: 9999,
latitude: 23.886566,
longitude: 100.086967,
is_map: true,
pinyin: "lincang"
},
{
id: 2080,
name: "禄丰",
abbr: "LF",
area_code: "532331",
sort: 9999,
latitude: 25.14327,
longitude: 102.075691,
is_map: true,
pinyin: "lufeng"
},
{
id: 2084,
name: "泸西",
abbr: "LX",
area_code: "532527",
sort: 9999,
latitude: 24.532368,
longitude: 103.759621,
is_map: true,
pinyin: "luxi"
},
{
id: 2087,
name: "绿春",
abbr: "LC",
area_code: "532531",
sort: 9999,
latitude: 22.993521,
longitude: 102.39286,
is_map: true,
pinyin: "lvchun"
},
{
id: 2114,
name: "梁河",
abbr: "LH",
area_code: "533122",
sort: 9999,
latitude: 24.807421,
longitude: 98.298195,
is_map: true,
pinyin: "lianghe"
},
{
id: 2116,
name: "陇川",
abbr: "LC",
area_code: "533124",
sort: 9999,
latitude: 24.184065,
longitude: 97.794441,
is_map: true,
pinyin: "longchuan"
},
{
id: 2118,
name: "泸水",
abbr: "LS",
area_code: "533321",
sort: 9999,
latitude: 25.851143,
longitude: 98.854065,
is_map: true,
pinyin: "lushui"
},
{
id: 2121,
name: "兰坪白族普米族自治县",
abbr: "LPBZPMZZZX",
area_code: "533325",
sort: 9999,
latitude: 26.453838,
longitude: 99.421379,
is_map: true,
pinyin: "lanpingbaizupumizuzizhixian"
},
{
id: 2196,
name: "林芝地区",
abbr: "LZDQ",
area_code: "542600",
sort: 9999,
latitude: 29.654694,
longitude: 94.36235,
is_map: true,
pinyin: "linzhidiqu"
},
{
id: 2204,
name: "蓝田县",
abbr: "LTX",
area_code: "610122",
sort: 9999,
latitude: 34.156189,
longitude: 109.317635,
is_map: true,
pinyin: "lantian"
},
{
id: 2278,
name: "洛南",
abbr: "LN",
area_code: "611021",
sort: 9999,
latitude: 34.088501,
longitude: 110.145714,
is_map: true,
pinyin: "luonan"
},
{
id: 2301,
name: "临泽",
abbr: "LZ",
area_code: "620723",
sort: 9999,
latitude: 39.152149,
longitude: 100.166336,
is_map: true,
pinyin: "linze"
},
{
id: 2330,
name: "陇南",
abbr: "LN",
area_code: "621200",
sort: 9999,
latitude: 33.388599,
longitude: 104.929382,
is_map: true,
pinyin: "longnan"
},
{
id: 2405,
name: "灵武",
abbr: "LW",
area_code: "640181",
sort: 9999,
latitude: 38.094059,
longitude: 106.334702,
is_map: true,
pinyin: "lingwu"
},
{
id: 5034,
name: "鹿泉区",
abbr: "LQQ",
area_code: "130110",
sort: 9999,
latitude: 38.085869,
longitude: 114.313438,
is_map: true,
pinyin: "luquanqu"
},
{
id: 5035,
name: "栾城区",
abbr: "LCQ",
area_code: "130111",
sort: 9999,
latitude: 37.900249,
longitude: 114.648392,
is_map: true,
pinyin: "luanchengqu"
},
{
id: 5696,
name: "临桂区",
abbr: "LGQ",
area_code: "450312",
sort: 9999,
latitude: 25.24774,
longitude: 110.201714,
is_map: true,
pinyin: "linguiqu"
},
{
id: 5820,
name: "临翔区",
abbr: "LXQ",
area_code: "530902",
sort: 9999,
latitude: 23.886562,
longitude: 100.086487,
is_map: true,
pinyin: "linxiangqu"
},
{
id: 5830,
name: "临潼区",
abbr: "LTQ",
area_code: "610115",
sort: 9999,
latitude: 34.372066,
longitude: 109.213989,
is_map: true,
pinyin: "lintongqu"
}
],
Z: [
{
id: 342,
name: "张掖",
abbr: "ZY",
area_code: "0936",
sort: 1900,
latitude: 38.925919,
longitude: 100.449806,
is_map: true,
pinyin: "zhangye"
},
{
id: 399,
name: "驻马店",
abbr: "ZMD",
area_code: "0396",
sort: 1900,
latitude: 33.011421,
longitude: 114.022987,
is_map: true,
pinyin: "zhumadian"
},
{
id: 26,
name: "珠海",
abbr: "ZH",
area_code: "0756",
sort: 2000,
latitude: 22.270729,
longitude: 113.576683,
is_map: true,
pinyin: "zhuhai"
},
{
id: 27,
name: "镇江",
abbr: "ZJ",
area_code: "0511",
sort: 2000,
latitude: 32.18959,
longitude: 119.425003,
is_map: true,
pinyin: "zhenjiang"
},
{
id: 32,
name: "郑州",
abbr: "ZZ",
area_code: "0371",
sort: 2000,
latitude: 34.74725,
longitude: 113.624931,
is_map: true,
pinyin: "zhengzhou"
},
{
id: 50,
name: "淄博",
abbr: "ZB",
area_code: "0533",
sort: 2000,
latitude: 36.813099,
longitude: 118.054802,
is_map: true,
pinyin: "zibo"
},
{
id: 54,
name: "枣庄",
abbr: "ZZ",
area_code: "0632",
sort: 2000,
latitude: 34.810711,
longitude: 117.32196,
is_map: true,
pinyin: "zaozhuang"
},
{
id: 64,
name: "肇庆",
abbr: "ZQ",
area_code: "0758",
sort: 2000,
latitude: 23.0469,
longitude: 112.465279,
is_map: true,
pinyin: "zhaoqing"
},
{
id: 79,
name: "湛江",
abbr: "ZJ",
area_code: "0759",
sort: 2000,
latitude: 21.271339,
longitude: 110.35894,
is_map: true,
pinyin: "zhanjiang"
},
{
id: 105,
name: "自贡",
abbr: "ZG",
area_code: "0813",
sort: 2000,
latitude: 29.339199,
longitude: 104.778442,
is_map: true,
pinyin: "zigong"
},
{
id: 111,
name: "漳州",
abbr: "ZZ",
area_code: "0596",
sort: 2000,
latitude: 24.51347,
longitude: 117.647247,
is_map: true,
pinyin: "zhangzhou"
},
{
id: 126,
name: "株洲",
abbr: "ZZ",
area_code: "430200",
sort: 2000,
latitude: 27.827669,
longitude: 113.133957,
is_map: true,
pinyin: "zhuzhou"
},
{
id: 154,
name: "张家口",
abbr: "ZJK",
area_code: "0313",
sort: 2000,
latitude: 40.82444,
longitude: 114.88755,
is_map: true,
pinyin: "zhangjiakou"
},
{
id: 203,
name: "中山",
abbr: "ZS",
area_code: "0760",
sort: 2000,
latitude: 22.515949,
longitude: 113.392601,
is_map: true,
pinyin: "zhongshan"
},
{
id: 204,
name: "周口",
abbr: "ZK",
area_code: "0394",
sort: 2000,
latitude: 33.625832,
longitude: 114.696953,
is_map: true,
pinyin: "zhoukou"
},
{
id: 280,
name: "张家界",
abbr: "ZJJ",
area_code: "0744",
sort: 2000,
latitude: 29.116671,
longitude: 110.478394,
is_map: true,
pinyin: "zhangjiajie"
},
{
id: 295,
name: "昭通",
abbr: "ZTS",
area_code: "88888888888",
sort: 2000,
latitude: 27.338169,
longitude: 103.716797,
is_map: true,
pinyin: "zhaotongshi"
},
{
id: 299,
name: "舟山",
abbr: "ZS",
area_code: "0580",
sort: 2000,
latitude: 29.98539,
longitude: 122.207779,
is_map: true,
pinyin: "zhoushan"
},
{
id: 323,
name: "资阳",
abbr: "ZY",
area_code: "02811",
sort: 2000,
latitude: 30.12859,
longitude: 104.627983,
is_map: true,
pinyin: "ziyang"
},
{
id: 453,
name: "长寿",
abbr: "ZS",
area_code: "10031",
sort: 2000,
latitude: 29.857809,
longitude: 107.081047,
is_map: true,
pinyin: "zhangshou"
},
{
id: 485,
name: "枞阳",
abbr: "ZY",
area_code: "200031",
sort: 2000,
latitude: 30.69961,
longitude: 117.220192,
is_map: true,
pinyin: "zongyang"
},
{
id: 503,
name: "漳浦",
abbr: "ZP",
area_code: "200049",
sort: 2000,
latitude: 24.1171,
longitude: 117.613724,
is_map: true,
pinyin: "zhangpu"
},
{
id: 508,
name: "诏安",
abbr: "ZA",
area_code: "200054",
sort: 2000,
latitude: 23.711519,
longitude: 117.175079,
is_map: true,
pinyin: "zhaoan"
},
{
id: 531,
name: "增城",
abbr: "ZC",
area_code: "200077",
sort: 2000,
latitude: 23.260929,
longitude: 113.810898,
is_map: true,
pinyin: "zengcheng"
},
{
id: 564,
name: "紫金",
abbr: "ZJ",
area_code: "200110",
sort: 2000,
latitude: 23.635321,
longitude: 115.183983,
is_map: true,
pinyin: "zijin"
},
{
id: 574,
name: "织金",
abbr: "ZJ",
area_code: "200120",
sort: 2000,
latitude: 26.66301,
longitude: 105.774879,
is_map: true,
pinyin: "zhijin"
},
{
id: 606,
name: "正定",
abbr: "ZD",
area_code: "200152",
sort: 2000,
latitude: 38.146179,
longitude: 114.570961,
is_map: true,
pinyin: "zhengding"
},
{
id: 612,
name: "赵县",
abbr: "ZX",
area_code: "200158",
sort: 2000,
latitude: 37.75631,
longitude: 114.776161,
is_map: true,
pinyin: "zhaoxian"
},
{
id: 637,
name: "镇平",
abbr: "ZP",
area_code: "200183",
sort: 2000,
latitude: 33.033909,
longitude: 112.234482,
is_map: true,
pinyin: "zhenping"
},
{
id: 663,
name: "柘城",
abbr: "ZC",
area_code: "200209",
sort: 2000,
latitude: 34.091141,
longitude: 115.305443,
is_map: true,
pinyin: "zhecheng"
},
{
id: 670,
name: "中牟",
abbr: "ZM",
area_code: "200216",
sort: 2000,
latitude: 34.719028,
longitude: 113.976242,
is_map: true,
pinyin: "zhongmou"
},
{
id: 700,
name: "肇东",
abbr: "ZD",
area_code: "200246",
sort: 2000,
latitude: 46.051208,
longitude: 125.962502,
is_map: true,
pinyin: "zhaodong"
},
{
id: 713,
name: "枣阳",
abbr: "ZY",
area_code: "200259",
sort: 2000,
latitude: 32.128361,
longitude: 112.773979,
is_map: true,
pinyin: "zaoyang"
},
{
id: 715,
name: "钟祥",
abbr: "ZX",
area_code: "200261",
sort: 2000,
latitude: 31.167971,
longitude: 112.588173,
is_map: true,
pinyin: "zhongxiang"
},
{
id: 731,
name: "枝江",
abbr: "ZJ",
area_code: "200277",
sort: 2000,
latitude: 30.425831,
longitude: 111.760437,
is_map: true,
pinyin: "zhijiang"
},
{
id: 785,
name: "资兴",
abbr: "ZX",
area_code: "200331",
sort: 2000,
latitude: 25.976191,
longitude: 113.236008,
is_map: true,
pinyin: "zixing"
},
{
id: 893,
name: "樟树",
abbr: "ZS",
area_code: "200439",
sort: 2000,
latitude: 28.055889,
longitude: 115.54615,
is_map: true,
pinyin: "zhangshu"
},
{
id: 899,
name: "庄河",
abbr: "ZH",
area_code: "200445",
sort: 2000,
latitude: 39.68037,
longitude: 122.96611,
is_map: true,
pinyin: "zhuanghe"
},
{
id: 918,
name: "准格尔",
abbr: "ZGE",
area_code: "200464",
sort: 2000,
latitude: 39.864262,
longitude: 111.239868,
is_map: true,
pinyin: "zhungeer"
},
{
id: 925,
name: "诸城",
abbr: "ZC",
area_code: "200471",
sort: 2000,
latitude: 35.995831,
longitude: 119.409828,
is_map: true,
pinyin: "zhucheng"
},
{
id: 926,
name: "章丘",
abbr: "ZQ",
area_code: "200472",
sort: 2000,
latitude: 36.67968,
longitude: 117.52578,
is_map: true,
pinyin: "zhangqiu"
},
{
id: 927,
name: "邹城",
abbr: "ZC",
area_code: "200473",
sort: 2000,
latitude: 35.40522,
longitude: 117.003853,
is_map: true,
pinyin: "zoucheng"
},
{
id: 939,
name: "邹平",
abbr: "ZP",
area_code: "200485",
sort: 2000,
latitude: 36.862991,
longitude: 117.743088,
is_map: true,
pinyin: "zouping"
},
{
id: 965,
name: "招远",
abbr: "ZY",
area_code: "200511",
sort: 2000,
latitude: 37.355309,
longitude: 120.434212,
is_map: true,
pinyin: "zhaoyuan"
},
{
id: 1003,
name: "泽州",
abbr: "ZZ",
area_code: "200549",
sort: 2000,
latitude: 35.500431,
longitude: 112.943657,
is_map: true,
pinyin: "zezhou"
},
{
id: 1025,
name: "资中",
abbr: "ZZ",
area_code: "200571",
sort: 2000,
latitude: 29.76416,
longitude: 104.852119,
is_map: true,
pinyin: "zizhong"
},
{
id: 1028,
name: "中江",
abbr: "ZJ",
area_code: "200574",
sort: 2000,
latitude: 31.033039,
longitude: 104.678719,
is_map: true,
pinyin: "zhongjiang"
},
{
id: 1066,
name: "镇雄",
abbr: "ZX",
area_code: "200612",
sort: 2000,
latitude: 27.4415,
longitude: 104.873596,
is_map: true,
pinyin: "zhenxiong"
},
{
id: 1067,
name: "沾益",
abbr: "ZY",
area_code: "200613",
sort: 2000,
latitude: 25.60009,
longitude: 103.822258,
is_map: true,
pinyin: "zhanyi"
},
{
id: 1081,
name: "诸暨",
abbr: "ZJ",
area_code: "200627",
sort: 2000,
latitude: 29.71364,
longitude: 120.23632,
is_map: true,
pinyin: "zhuji"
},
{
id: 1128,
name: "忠县",
abbr: "ZX",
area_code: "200674",
sort: 2000,
latitude: 30.300261,
longitude: 108.037666,
is_map: true,
pinyin: "zhongxian"
},
{
id: 1142,
name: "樟木头",
abbr: "ZMT",
area_code: "441900000",
sort: 2000,
latitude: 23.020691,
longitude: 113.751808,
is_map: false,
pinyin: "zhangmutou"
},
{
id: 357,
name: "张家港",
abbr: "ZJG",
area_code: "05123",
sort: 9999,
latitude: 31.875469,
longitude: 120.555496,
is_map: true,
pinyin: "zhangjiagang"
},
{
id: 370,
name: "涿州",
abbr: "ZZ",
area_code: "03121",
sort: 9999,
latitude: 39.485291,
longitude: 115.974388,
is_map: true,
pinyin: "zhuozhou"
},
{
id: 379,
name: "遵义",
abbr: "ZY",
area_code: "0852",
sort: 9999,
latitude: 28.17544,
longitude: 107.816093,
is_map: true,
pinyin: "zunyi"
},
{
id: 380,
name: "遵化",
abbr: "ZH",
area_code: "03151",
sort: 9999,
latitude: 40.18924,
longitude: 117.965668,
is_map: true,
pinyin: "zunhua"
},
{
id: 1144,
name: "中卫",
abbr: "ZW",
area_code: "640500",
sort: 9999,
latitude: 37.500259,
longitude: 105.196762,
is_map: true,
pinyin: "zhongwei"
},
{
id: 1145,
name: "政和",
abbr: "ZH",
area_code: "350725",
sort: 9999,
latitude: 27.366091,
longitude: 118.857536,
is_map: true,
pinyin: "zhenghe"
},
{
id: 1152,
name: "柘荣",
abbr: "ZR",
area_code: "350926",
sort: 9999,
latitude: 27.23513,
longitude: 119.900848,
is_map: true,
pinyin: "zherong"
},
{
id: 1162,
name: "正阳",
abbr: "ZY",
area_code: "411724",
sort: 9999,
latitude: 32.605659,
longitude: 114.392738,
is_map: true,
pinyin: "zhengyang"
},
{
id: 1218,
name: "张北",
abbr: "ZB",
area_code: "130722",
sort: 9999,
latitude: 41.151714,
longitude: 114.71595,
is_map: true,
pinyin: "zhangbei"
},
{
id: 1227,
name: "涿鹿",
abbr: "ZL",
area_code: "130731",
sort: 9999,
latitude: 40.3787,
longitude: 115.219246,
is_map: true,
pinyin: "zhuolu"
},
{
id: 1248,
name: "枣强",
abbr: "ZQ",
area_code: "131121",
sort: 9999,
latitude: 37.511513,
longitude: 115.726501,
is_map: true,
pinyin: "zaoqiang"
},
{
id: 1278,
name: "长子",
abbr: "ZZ",
area_code: "140428",
sort: 9999,
latitude: 36.119484,
longitude: 112.884659,
is_map: true,
pinyin: "zhangzi"
},
{
id: 1364,
name: "扎鲁特旗",
abbr: "ZLTQ",
area_code: "150526",
sort: 9999,
latitude: 44.555294,
longitude: 120.905273,
is_map: true,
pinyin: "zhaluteqi"
},
{
id: 1378,
name: "扎兰屯",
abbr: "ZLT",
area_code: "150783",
sort: 9999,
latitude: 48.007412,
longitude: 122.7444,
is_map: true,
pinyin: "zhalantun"
},
{
id: 1387,
name: "卓资",
abbr: "ZZ",
area_code: "150921",
sort: 9999,
latitude: 40.89576,
longitude: 112.577705,
is_map: true,
pinyin: "zhuozi"
},
{
id: 1401,
name: "扎赉特旗",
abbr: "ZLTQ",
area_code: "152223",
sort: 9999,
latitude: 46.725136,
longitude: 122.909332,
is_map: true,
pinyin: "zhalaiteqi"
},
{
id: 1412,
name: "正镶白旗",
abbr: "ZXBQ",
area_code: "152529",
sort: 9999,
latitude: 42.307152,
longitude: 115.005943,
is_map: true,
pinyin: "zhengxiangbaiqi"
},
{
id: 1413,
name: "正蓝旗",
abbr: "ZLQ",
area_code: "152530",
sort: 9999,
latitude: 42.245895,
longitude: 116.003311,
is_map: true,
pinyin: "zhenglanqi"
},
{
id: 1434,
name: "彰武",
abbr: "ZW",
area_code: "210922",
sort: 9999,
latitude: 42.384823,
longitude: 122.537445,
is_map: true,
pinyin: "zhangwu"
},
{
id: 1458,
name: "镇赉",
abbr: "ZL",
area_code: "220821",
sort: 9999,
latitude: 45.846088,
longitude: 123.202248,
is_map: true,
pinyin: "zhenlai"
},
{
id: 1486,
name: "肇州",
abbr: "ZZ",
area_code: "230621",
sort: 9999,
latitude: 45.708687,
longitude: 125.273254,
is_map: true,
pinyin: "zhaozhou"
},
{
id: 1487,
name: "肇源",
abbr: "ZY",
area_code: "230622",
sort: 9999,
latitude: 45.518833,
longitude: 125.08197,
is_map: true,
pinyin: "zhaoyuan"
},
{
id: 1553,
name: "赞皇",
abbr: "ZH",
area_code: "130129",
sort: 9999,
latitude: 37.660198,
longitude: 114.387756,
is_map: true,
pinyin: "zanhuang"
},
{
id: 1568,
name: "漳平",
abbr: "ZP",
area_code: "350881",
sort: 9999,
latitude: 25.291597,
longitude: 117.420731,
is_map: true,
pinyin: "zhangping"
},
{
id: 1571,
name: "周宁",
abbr: "ZN",
area_code: "350925",
sort: 9999,
latitude: 27.103106,
longitude: 119.338242,
is_map: true,
pinyin: "zhouning"
},
{
id: 1615,
name: "资溪",
abbr: "ZX",
area_code: "361028",
sort: 9999,
latitude: 27.70653,
longitude: 117.066093,
is_map: true,
pinyin: "zixi"
},
{
id: 1700,
name: "株洲县",
abbr: "ZZX",
area_code: "430221",
sort: 9999,
latitude: 27.705845,
longitude: 113.146179,
is_map: true,
pinyin: "zhuzhou"
},
{
id: 1785,
name: "资源",
abbr: "ZY",
area_code: "450329",
sort: 9999,
latitude: 26.034201,
longitude: 110.642586,
is_map: true,
pinyin: "ziyuan"
},
{
id: 1814,
name: "昭平",
abbr: "ZP",
area_code: "451121",
sort: 9999,
latitude: 24.172958,
longitude: 110.810867,
is_map: true,
pinyin: "zhaoping"
},
{
id: 1815,
name: "钟山",
abbr: "ZS",
area_code: "451122",
sort: 9999,
latitude: 24.528566,
longitude: 111.303627,
is_map: true,
pinyin: "zhongshan"
},
{
id: 1963,
name: "正安",
abbr: "ZA",
area_code: "520324",
sort: 9999,
latitude: 28.550337,
longitude: 107.441872,
is_map: true,
pinyin: "zhengan"
},
{
id: 1973,
name: "镇宁布依族苗族自治县",
abbr: "ZNBYZMZZZX",
area_code: "520423",
sort: 9999,
latitude: 26.056095,
longitude: 105.768654,
is_map: true,
pinyin: "zhenningbuyizumiaozuzizhixian"
},
{
id: 1975,
name: "紫云苗族布依族自治县",
abbr: "ZYMZBYZZZX",
area_code: "520425",
sort: 9999,
latitude: 25.751568,
longitude: 106.084518,
is_map: true,
pinyin: "ziyunmiaozubuyizuzizhixian"
},
{
id: 1990,
name: "贞丰",
abbr: "ZF",
area_code: "522325",
sort: 9999,
latitude: 25.385752,
longitude: 105.650131,
is_map: true,
pinyin: "zhenfeng"
},
{
id: 1998,
name: "镇远",
abbr: "ZY",
area_code: "522625",
sort: 9999,
latitude: 27.050234,
longitude: 108.423653,
is_map: true,
pinyin: "zhenyuan"
},
{
id: 2058,
name: "镇沅彝族哈尼族拉祜族自治县",
abbr: "ZYYZHNZLHZZZX",
area_code: "530825",
sort: 9999,
latitude: 24.005713,
longitude: 101.108513,
is_map: true,
pinyin: "zhenyuanyizuhanizulahuzuzizhixian"
},
{
id: 2067,
name: "镇康",
abbr: "ZK",
area_code: "530924",
sort: 9999,
latitude: 23.88583,
longitude: 99.024818,
is_map: true,
pinyin: "zhenkang"
},
{
id: 2242,
name: "志丹",
abbr: "ZD",
area_code: "610625",
sort: 9999,
latitude: 36.823032,
longitude: 108.768898,
is_map: true,
pinyin: "zhidan"
},
{
id: 2282,
name: "镇安",
abbr: "ZA",
area_code: "611025",
sort: 9999,
latitude: 33.423981,
longitude: 109.151077,
is_map: true,
pinyin: "zhenan"
},
{
id: 2283,
name: "柞水",
abbr: "ZS",
area_code: "611026",
sort: 9999,
latitude: 33.682774,
longitude: 109.111252,
is_map: true,
pinyin: "zuoshui"
},
{
id: 2415,
name: "中宁县",
abbr: "ZNX",
area_code: "640521",
sort: 9999,
latitude: 37.489735,
longitude: 105.675781,
is_map: true,
pinyin: "zhongning"
}
],
B: [
{
id: 3,
name: "北京",
abbr: "BJ",
area_code: "010",
sort: 2000,
latitude: 39.90469,
longitude: 116.407173,
is_map: true,
pinyin: "beijing"
},
{
id: 68,
name: "包头",
abbr: "BT",
area_code: "0472",
sort: 2000,
latitude: 40.65781,
longitude: 109.84021,
is_map: true,
pinyin: "baotou"
},
{
id: 75,
name: "蚌埠",
abbr: "BB",
area_code: "0552",
sort: 2000,
latitude: 32.915482,
longitude: 117.38932,
is_map: true,
pinyin: "bengbu"
},
{
id: 95,
name: "保定",
abbr: "BD",
area_code: "0312",
sort: 2000,
latitude: 38.873959,
longitude: 115.464592,
is_map: true,
pinyin: "baoding"
},
{
id: 134,
name: "滨州",
abbr: "BZ",
area_code: "0543",
sort: 2000,
latitude: 37.382111,
longitude: 117.972794,
is_map: true,
pinyin: "binzhou"
},
{
id: 136,
name: "毕节",
abbr: "BJ",
area_code: "0857",
sort: 2000,
latitude: 27.29847,
longitude: 105.305038,
is_map: true,
pinyin: "bijie"
},
{
id: 156,
name: "百色",
abbr: "BS",
area_code: "0776",
sort: 2000,
latitude: 23.902161,
longitude: 106.618378,
is_map: true,
pinyin: "baise"
},
{
id: 223,
name: "白城",
abbr: "BC",
area_code: "0436",
sort: 2000,
latitude: 45.619598,
longitude: 122.838707,
is_map: true,
pinyin: "baicheng"
},
{
id: 244,
name: "宝鸡",
abbr: "BJ",
area_code: "0917",
sort: 2000,
latitude: 34.361938,
longitude: 107.23732,
is_map: true,
pinyin: "baoji"
},
{
id: 264,
name: "保山",
abbr: "BS",
area_code: "0875",
sort: 2000,
latitude: 25.112049,
longitude: 99.161812,
is_map: true,
pinyin: "baoshan"
},
{
id: 290,
name: "北海",
abbr: "BH",
area_code: "0779",
sort: 2000,
latitude: 21.481119,
longitude: 109.120079,
is_map: true,
pinyin: "beihai"
},
{
id: 313,
name: "亳州",
abbr: "BZ",
area_code: "05581",
sort: 2000,
latitude: 33.844608,
longitude: 115.779312,
is_map: true,
pinyin: "bozhou"
},
{
id: 317,
name: "巴中",
abbr: "BZ",
area_code: "0827",
sort: 2000,
latitude: 31.867149,
longitude: 106.74733,
is_map: true,
pinyin: "bazhong"
},
{
id: 336,
name: "本溪",
abbr: "BX",
area_code: "0414",
sort: 2000,
latitude: 41.294128,
longitude: 123.766861,
is_map: true,
pinyin: "benxi"
},
{
id: 397,
name: "白山",
abbr: "BS",
area_code: "0439",
sort: 2000,
latitude: 41.9408,
longitude: 126.424431,
is_map: true,
pinyin: "baishan"
},
{
id: 422,
name: "巴南",
abbr: "BN",
area_code: "10000",
sort: 2000,
latitude: 29.402679,
longitude: 106.540413,
is_map: true,
pinyin: "banan"
},
{
id: 423,
name: "北碚",
abbr: "BB",
area_code: "10001",
sort: 2000,
latitude: 29.80583,
longitude: 106.396278,
is_map: true,
pinyin: "beibei"
},
{
id: 425,
name: "璧山",
abbr: "BS",
area_code: "10003",
sort: 2000,
latitude: 29.59202,
longitude: 106.227417,
is_map: true,
pinyin: "bishan"
},
{
id: 522,
name: "白银",
abbr: "BY",
area_code: "200068",
sort: 2000,
latitude: 36.544701,
longitude: 104.137733,
is_map: true,
pinyin: "baiyin"
},
{
id: 534,
name: "博罗",
abbr: "BL",
area_code: "200080",
sort: 2000,
latitude: 23.173149,
longitude: 114.289726,
is_map: true,
pinyin: "boluo"
},
{
id: 566,
name: "北流",
abbr: "BL",
area_code: "200112",
sort: 2000,
latitude: 22.70837,
longitude: 110.354263,
is_map: true,
pinyin: "beiliu"
},
{
id: 596,
name: "霸州",
abbr: "BZ",
area_code: "200142",
sort: 2000,
latitude: 39.12709,
longitude: 116.391342,
is_map: true,
pinyin: "bazhou"
},
{
id: 652,
name: "泌阳",
abbr: "BY",
area_code: "200198",
sort: 2000,
latitude: 32.724098,
longitude: 113.327087,
is_map: true,
pinyin: "biyang"
},
{
id: 684,
name: "博爱",
abbr: "BA",
area_code: "200230",
sort: 2000,
latitude: 35.17123,
longitude: 113.064529,
is_map: true,
pinyin: "boai"
},
{
id: 690,
name: "宝丰",
abbr: "BF",
area_code: "200236",
sort: 2000,
latitude: 33.868401,
longitude: 113.054787,
is_map: true,
pinyin: "baofeng"
},
{
id: 705,
name: "北安",
abbr: "BA",
area_code: "200251",
sort: 2000,
latitude: 48.241459,
longitude: 126.491081,
is_map: true,
pinyin: "beian"
},
{
id: 839,
name: "滨海",
abbr: "BH",
area_code: "200385",
sort: 2000,
latitude: 33.98975,
longitude: 119.820641,
is_map: true,
pinyin: "binhai"
},
{
id: 856,
name: "宝应",
abbr: "BY",
area_code: "200402",
sort: 2000,
latitude: 33.241421,
longitude: 119.358414,
is_map: true,
pinyin: "baoying"
},
{
id: 914,
name: "巴彦淖尔",
abbr: "BYNE",
area_code: "200460",
sort: 2000,
latitude: 40.743172,
longitude: 107.387733,
is_map: true,
pinyin: "bayannaoer"
},
{
id: 970,
name: "博兴",
abbr: "BX",
area_code: "200516",
sort: 2000,
latitude: 37.152988,
longitude: 118.110962,
is_map: true,
pinyin: "boxing"
},
{
id: 367,
name: "泊头",
abbr: "BT",
area_code: "03174",
sort: 9999,
latitude: 38.083641,
longitude: 116.578278,
is_map: true,
pinyin: "botou"
},
{
id: 1157,
name: "宾县",
abbr: "BX",
area_code: "230125",
sort: 9999,
latitude: 45.75864,
longitude: 127.485863,
is_map: true,
pinyin: "binxian"
},
{
id: 1193,
name: "柏乡",
abbr: "BX",
area_code: "130524",
sort: 9999,
latitude: 37.483597,
longitude: 114.693382,
is_map: true,
pinyin: "baixiang"
},
{
id: 1214,
name: "博野",
abbr: "BY",
area_code: "130637",
sort: 9999,
latitude: 38.458271,
longitude: 115.4618,
is_map: true,
pinyin: "boye"
},
{
id: 1351,
name: "巴林左旗",
abbr: "BLZQ",
area_code: "150422",
sort: 9999,
latitude: 43.980717,
longitude: 119.391739,
is_map: true,
pinyin: "balinzuoqi"
},
{
id: 1352,
name: "巴林右旗",
abbr: "BLYQ",
area_code: "150423",
sort: 9999,
latitude: 43.528961,
longitude: 118.678345,
is_map: true,
pinyin: "balinyouqi"
},
{
id: 1427,
name: "本溪满族自治县",
abbr: "BXMZZZX",
area_code: "210521",
sort: 9999,
latitude: 41.300343,
longitude: 124.12616,
is_map: true,
pinyin: "benximanzuzizhixian"
},
{
id: 1432,
name: "北镇",
abbr: "BZ",
area_code: "210782",
sort: 9999,
latitude: 41.598763,
longitude: 121.795959,
is_map: true,
pinyin: "beizhen"
},
{
id: 1443,
name: "北票",
abbr: "BP",
area_code: "211381",
sort: 9999,
latitude: 41.803288,
longitude: 120.766953,
is_map: true,
pinyin: "beipiao"
},
{
id: 1466,
name: "巴彦",
abbr: "BY",
area_code: "230126",
sort: 9999,
latitude: 46.08189,
longitude: 127.403603,
is_map: true,
pinyin: "bayan"
},
{
id: 1476,
name: "拜泉",
abbr: "BQ",
area_code: "230231",
sort: 9999,
latitude: 47.607365,
longitude: 126.091911,
is_map: true,
pinyin: "baiquan"
},
{
id: 1484,
name: "宝清",
abbr: "BQ",
area_code: "230522",
sort: 9999,
latitude: 46.328781,
longitude: 132.206421,
is_map: true,
pinyin: "baoqing"
},
{
id: 1496,
name: "勃利",
abbr: "BL",
area_code: "230921",
sort: 9999,
latitude: 45.751572,
longitude: 130.575027,
is_map: true,
pinyin: "boli"
},
{
id: 1770,
name: "宾阳",
abbr: "BY",
area_code: "450126",
sort: 9999,
latitude: 23.216885,
longitude: 108.816734,
is_map: true,
pinyin: "binyang"
},
{
id: 1801,
name: "博白",
abbr: "BB",
area_code: "450923",
sort: 9999,
latitude: 22.271284,
longitude: 109.980003,
is_map: true,
pinyin: "bobai"
},
{
id: 1824,
name: "巴马瑶族自治县",
abbr: "BMYZZZX",
area_code: "451227",
sort: 9999,
latitude: 24.139538,
longitude: 107.253128,
is_map: true,
pinyin: "bamayaozuzizhixian"
},
{
id: 1845,
name: "白沙黎族自治县",
abbr: "BSLZZZX",
area_code: "469025",
sort: 9999,
latitude: 19.360565,
longitude: 109.122688,
is_map: true,
pinyin: "baishalizuzizhixian"
},
{
id: 1848,
name: "保亭黎族苗族自治县",
abbr: "BTLZMZZZX",
area_code: "469029",
sort: 9999,
latitude: 18.636372,
longitude: 109.702454,
is_map: true,
pinyin: "baotinglizumiaozuzizhixian"
},
{
id: 2102,
name: "宾川",
abbr: "BC",
area_code: "532924",
sort: 9999,
latitude: 25.829161,
longitude: 100.584801,
is_map: true,
pinyin: "binchuan"
},
{
id: 2234,
name: "白水",
abbr: "BS",
area_code: "610527",
sort: 9999,
latitude: 35.177292,
longitude: 109.594307,
is_map: true,
pinyin: "baishui"
},
{
id: 2383,
name: "班玛县",
abbr: "BMX",
area_code: "632622",
sort: 9999,
latitude: 32.931587,
longitude: 100.737953,
is_map: true,
pinyin: "banma"
},
{
id: 5026,
name: "宝坻区",
abbr: "BCQ",
area_code: "120115",
sort: 9999,
latitude: 39.716965,
longitude: 117.30809,
is_map: true,
pinyin: "baochiqu"
},
{
id: 5145,
name: "鲅鱼圈区",
abbr: "BYQQ",
area_code: "210804",
sort: 9999,
latitude: 40.263645,
longitude: 122.127243,
is_map: true,
pinyin: "bayuquanqu"
}
],
D: [
{
id: 20,
name: "大连",
abbr: "DL",
area_code: "0411",
sort: 2000,
latitude: 38.913689,
longitude: 121.614761,
is_map: true,
pinyin: "dalian"
},
{
id: 51,
name: "东莞",
abbr: "DG",
area_code: "0769",
sort: 2000,
latitude: 23.020691,
longitude: 113.751808,
is_map: true,
pinyin: "dongguan"
},
{
id: 86,
name: "大庆",
abbr: "DQ",
area_code: "0459",
sort: 2000,
latitude: 46.587582,
longitude: 125.103073,
is_map: true,
pinyin: "daqing"
},
{
id: 131,
name: "德阳",
abbr: "DY",
area_code: "0838",
sort: 2000,
latitude: 31.126789,
longitude: 104.397903,
is_map: true,
pinyin: "deyang"
},
{
id: 132,
name: "东营",
abbr: "DY",
area_code: "0546",
sort: 2000,
latitude: 37.433651,
longitude: 118.67466,
is_map: true,
pinyin: "dongying"
},
{
id: 145,
name: "丹东",
abbr: "DD",
area_code: "0415",
sort: 2000,
latitude: 39.999802,
longitude: 124.35601,
is_map: true,
pinyin: "dandong"
},
{
id: 169,
name: "大同",
abbr: "DT",
area_code: "0352",
sort: 2000,
latitude: 40.07637,
longitude: 113.300011,
is_map: true,
pinyin: "datong"
},
{
id: 174,
name: "大理",
abbr: "DL",
area_code: "0872",
sort: 2000,
latitude: 25.591579,
longitude: 100.229759,
is_map: true,
pinyin: "dali"
},
{
id: 224,
name: "德州",
abbr: "DZ",
area_code: "0534",
sort: 2000,
latitude: 37.435501,
longitude: 116.359268,
is_map: true,
pinyin: "dezhou"
},
{
id: 247,
name: "达州",
abbr: "DZ",
area_code: "0818",
sort: 2000,
latitude: 31.208639,
longitude: 107.467911,
is_map: true,
pinyin: "dazhou"
},
{
id: 286,
name: "儋州",
abbr: "DZ",
area_code: "4600003",
sort: 2000,
latitude: 19.520929,
longitude: 109.580688,
is_map: true,
pinyin: "danzhou"
},
{
id: 426,
name: "大渡口",
abbr: "DDK",
area_code: "10004",
sort: 2000,
latitude: 29.484079,
longitude: 106.482246,
is_map: true,
pinyin: "dadukou"
},
{
id: 427,
name: "大足",
abbr: "DZ",
area_code: "10005",
sort: 2000,
latitude: 29.48604,
longitude: 105.780167,
is_map: true,
pinyin: "dazu"
},
{
id: 428,
name: "都江堰",
abbr: "DJY",
area_code: "10006",
sort: 2000,
latitude: 30.988371,
longitude: 103.646622,
is_map: true,
pinyin: "doujiangyan"
},
{
id: 464,
name: "当涂",
abbr: "DT",
area_code: "200010",
sort: 2000,
latitude: 31.569901,
longitude: 118.497803,
is_map: true,
pinyin: "dangtu"
},
{
id: 465,
name: "砀山",
abbr: "DS",
area_code: "200011",
sort: 2000,
latitude: 34.440971,
longitude: 116.366058,
is_map: true,
pinyin: "dangshan"
},
{
id: 479,
name: "定远",
abbr: "DY",
area_code: "200025",
sort: 2000,
latitude: 32.52998,
longitude: 117.698563,
is_map: true,
pinyin: "dingyuan"
},
{
id: 484,
name: "东至",
abbr: "DZ",
area_code: "200030",
sort: 2000,
latitude: 30.09663,
longitude: 117.027657,
is_map: true,
pinyin: "dongzhi"
},
{
id: 511,
name: "德化",
abbr: "DH",
area_code: "200057",
sort: 2000,
latitude: 25.4916,
longitude: 118.240982,
is_map: true,
pinyin: "dehua"
},
{
id: 518,
name: "大田",
abbr: "DT",
area_code: "200064",
sort: 2000,
latitude: 25.69261,
longitude: 117.84713,
is_map: true,
pinyin: "datian"
},
{
id: 545,
name: "电白",
abbr: "DB",
area_code: "200091",
sort: 2000,
latitude: 21.514139,
longitude: 111.013557,
is_map: true,
pinyin: "dianbai"
},
{
id: 575,
name: "大方",
abbr: "DF",
area_code: "200121",
sort: 2000,
latitude: 27.141609,
longitude: 105.612999,
is_map: true,
pinyin: "dafang"
},
{
id: 576,
name: "都匀",
abbr: "DY",
area_code: "200122",
sort: 2000,
latitude: 26.25979,
longitude: 107.518669,
is_map: true,
pinyin: "duyun"
},
{
id: 583,
name: "东方",
abbr: "DF",
area_code: "200129",
sort: 2000,
latitude: 19.09614,
longitude: 108.653671,
is_map: true,
pinyin: "dongfang"
},
{
id: 586,
name: "定安",
abbr: "DA",
area_code: "200132",
sort: 2000,
latitude: 19.68121,
longitude: 110.359299,
is_map: true,
pinyin: "dingan"
},
{
id: 587,
name: "定州",
abbr: "DZ",
area_code: "200133",
sort: 2000,
latitude: 38.516258,
longitude: 114.99025,
is_map: true,
pinyin: "dingzhou"
},
{
id: 595,
name: "大名",
abbr: "DM",
area_code: "200141",
sort: 2000,
latitude: 36.28558,
longitude: 115.147881,
is_map: true,
pinyin: "daming"
},
{
id: 618,
name: "大城",
abbr: "DC",
area_code: "200164",
sort: 2000,
latitude: 38.704689,
longitude: 116.654228,
is_map: true,
pinyin: "daicheng"
},
{
id: 621,
name: "邓州",
abbr: "DZ",
area_code: "200167",
sort: 2000,
latitude: 32.687771,
longitude: 112.087357,
is_map: true,
pinyin: "dengzhou"
},
{
id: 630,
name: "登封",
abbr: "DF",
area_code: "200176",
sort: 2000,
latitude: 34.45348,
longitude: 113.050278,
is_map: true,
pinyin: "dengfeng"
},
{
id: 642,
name: "郸城",
abbr: "DC",
area_code: "200188",
sort: 2000,
latitude: 33.644749,
longitude: 115.17704,
is_map: true,
pinyin: "dancheng"
},
{
id: 712,
name: "大冶",
abbr: "DY",
area_code: "200258",
sort: 2000,
latitude: 30.09551,
longitude: 114.979767,
is_map: true,
pinyin: "daye"
},
{
id: 728,
name: "大悟",
abbr: "DW",
area_code: "200274",
sort: 2000,
latitude: 31.560961,
longitude: 114.126938,
is_map: true,
pinyin: "dawu"
},
{
id: 744,
name: "丹江口",
abbr: "DJK",
area_code: "200290",
sort: 2000,
latitude: 32.540401,
longitude: 111.513222,
is_map: true,
pinyin: "danjiangkou"
},
{
id: 746,
name: "当阳",
abbr: "DY",
area_code: "200292",
sort: 2000,
latitude: 30.82118,
longitude: 111.78833,
is_map: true,
pinyin: "dangyang"
},
{
id: 784,
name: "洞口",
abbr: "DK",
area_code: "200330",
sort: 2000,
latitude: 27.060381,
longitude: 110.575829,
is_map: true,
pinyin: "dongkou"
},
{
id: 789,
name: "东安",
abbr: "DA",
area_code: "200335",
sort: 2000,
latitude: 26.392059,
longitude: 111.316437,
is_map: true,
pinyin: "dongan"
},
{
id: 792,
name: "道县",
abbr: "DX",
area_code: "200338",
sort: 2000,
latitude: 25.527531,
longitude: 111.600067,
is_map: true,
pinyin: "daoxian"
},
{
id: 806,
name: "敦化",
abbr: "DH",
area_code: "200352",
sort: 2000,
latitude: 43.372711,
longitude: 128.232056,
is_map: true,
pinyin: "dunhua"
},
{
id: 813,
name: "大安",
abbr: "DA",
area_code: "200359",
sort: 2000,
latitude: 45.507111,
longitude: 124.292519,
is_map: true,
pinyin: "daan"
},
{
id: 818,
name: "德惠",
abbr: "DH",
area_code: "200364",
sort: 2000,
latitude: 44.53709,
longitude: 125.705582,
is_map: true,
pinyin: "dehui"
},
{
id: 834,
name: "东台",
abbr: "DT",
area_code: "200380",
sort: 2000,
latitude: 32.866951,
longitude: 120.320503,
is_map: true,
pinyin: "dongtai"
},
{
id: 844,
name: "东海",
abbr: "DH",
area_code: "200390",
sort: 2000,
latitude: 34.54216,
longitude: 118.771469,
is_map: true,
pinyin: "donghai"
},
{
id: 855,
name: "大丰",
abbr: "DF",
area_code: "200401",
sort: 2000,
latitude: 33.201069,
longitude: 120.501022,
is_map: true,
pinyin: "dafeng"
},
{
id: 895,
name: "东乡",
abbr: "DX",
area_code: "200441",
sort: 2000,
latitude: 28.247709,
longitude: 116.60334,
is_map: true,
pinyin: "dongxiang"
},
{
id: 896,
name: "都昌",
abbr: "DC",
area_code: "200442",
sort: 2000,
latitude: 29.273069,
longitude: 116.204086,
is_map: true,
pinyin: "duchang"
},
{
id: 901,
name: "大石桥",
abbr: "DSQ",
area_code: "200447",
sort: 2000,
latitude: 40.644482,
longitude: 122.509171,
is_map: true,
pinyin: "dashiqiao"
},
{
id: 902,
name: "东港",
abbr: "DG",
area_code: "200448",
sort: 2000,
latitude: 39.861721,
longitude: 124.152092,
is_map: true,
pinyin: "donggang"
},
{
id: 905,
name: "大洼",
abbr: "DW",
area_code: "200451",
sort: 2000,
latitude: 41.002468,
longitude: 122.082451,
is_map: true,
pinyin: "dawa"
},
{
id: 919,
name: "达拉特",
abbr: "DLT",
area_code: "200465",
sort: 2000,
latitude: 40.400162,
longitude: 110.032928,
is_map: true,
pinyin: "dalate"
},
{
id: 937,
name: "单县",
abbr: "DX",
area_code: "200483",
sort: 2000,
latitude: 34.79438,
longitude: 116.087242,
is_map: true,
pinyin: "danxian"
},
{
id: 966,
name: "东平",
abbr: "DP",
area_code: "200512",
sort: 2000,
latitude: 35.93708,
longitude: 116.470238,
is_map: true,
pinyin: "dongping"
},
{
id: 971,
name: "东明",
abbr: "DM",
area_code: "200517",
sort: 2000,
latitude: 35.289532,
longitude: 115.090157,
is_map: true,
pinyin: "dongming"
},
{
id: 1018,
name: "达县",
abbr: "DX",
area_code: "200564",
sort: 2000,
latitude: 31.19603,
longitude: 107.511772,
is_map: true,
pinyin: "daxian"
},
{
id: 1024,
name: "大竹",
abbr: "DZ",
area_code: "200570",
sort: 2000,
latitude: 30.736071,
longitude: 107.204407,
is_map: true,
pinyin: "dazhu"
},
{
id: 1045,
name: "大邑",
abbr: "DY",
area_code: "200591",
sort: 2000,
latitude: 30.58757,
longitude: 103.520851,
is_map: true,
pinyin: "dayi"
},
{
id: 1083,
name: "东阳",
abbr: "DY",
area_code: "200629",
sort: 2000,
latitude: 29.289459,
longitude: 120.241913,
is_map: true,
pinyin: "dongyang"
},
{
id: 1100,
name: "德清",
abbr: "DQ",
area_code: "200646",
sort: 2000,
latitude: 30.54269,
longitude: 119.977539,
is_map: true,
pinyin: "deqing"
},
{
id: 1116,
name: "岱山",
abbr: "DS",
area_code: "200662",
sort: 2000,
latitude: 30.24369,
longitude: 122.204979,
is_map: true,
pinyin: "daishan"
},
{
id: 1129,
name: "垫江",
abbr: "DJ",
area_code: "200675",
sort: 2000,
latitude: 30.326799,
longitude: 107.335152,
is_map: true,
pinyin: "dianjiang"
},
{
id: 349,
name: "丹阳",
abbr: "DY",
area_code: "05111",
sort: 9999,
latitude: 32.009449,
longitude: 119.606941,
is_map: true,
pinyin: "danyang"
},
{
id: 1143,
name: "定边",
abbr: "DB",
area_code: "610825",
sort: 9999,
latitude: 37.59454,
longitude: 107.60128,
is_map: true,
pinyin: "dingbian"
},
{
id: 1166,
name: "代县",
abbr: "DX",
area_code: "140923",
sort: 9999,
latitude: 39.066891,
longitude: 112.959961,
is_map: true,
pinyin: "daixian"
},
{
id: 1205,
name: "定兴县",
abbr: "DXX",
area_code: "130626",
sort: 9999,
latitude: 39.266193,
longitude: 115.796898,
is_map: true,
pinyin: "dingxing"
},
{
id: 1239,
name: "东光",
abbr: "DG",
area_code: "130923",
sort: 9999,
latitude: 37.886551,
longitude: 116.542061,
is_map: true,
pinyin: "dongguang"
},
{
id: 1247,
name: "大厂回族自治县",
abbr: "DCHZZZX",
area_code: "131028",
sort: 9999,
latitude: 39.889267,
longitude: 116.986504,
is_map: true,
pinyin: "dachanghuizuzizhixian"
},
{
id: 1382,
name: "磴口",
abbr: "DK",
area_code: "150822",
sort: 9999,
latitude: 40.330479,
longitude: 107.006058,
is_map: true,
pinyin: "dengkou"
},
{
id: 1408,
name: "东乌珠穆沁旗",
abbr: "DWZMQQ",
area_code: "152525",
sort: 9999,
latitude: 45.510307,
longitude: 116.980019,
is_map: true,
pinyin: "dongwuzhumuqinqi"
},
{
id: 1436,
name: "灯塔市",
abbr: "DT",
area_code: "211081",
sort: 9999,
latitude: 41.427837,
longitude: 123.325867,
is_map: true,
pinyin: "dengta"
},
{
id: 1447,
name: "东丰",
abbr: "DF",
area_code: "220421",
sort: 9999,
latitude: 42.675228,
longitude: 125.529625,
is_map: true,
pinyin: "dongfeng"
},
{
id: 1448,
name: "东辽",
abbr: "DL",
area_code: "220422",
sort: 9999,
latitude: 42.927723,
longitude: 124.991997,
is_map: true,
pinyin: "dongliao"
},
{
id: 1489,
name: "杜尔伯特蒙古族自治县",
abbr: "DEBTMGZZZX",
area_code: "230624",
sort: 9999,
latitude: 46.865974,
longitude: 124.446259,
is_map: true,
pinyin: "duerbotemengguzuzizhixian"
},
{
id: 1497,
name: "东宁",
abbr: "DN",
area_code: "231024",
sort: 9999,
latitude: 44.06358,
longitude: 131.12529,
is_map: true,
pinyin: "dongning"
},
{
id: 1515,
name: "洞头",
abbr: "DT",
area_code: "330322",
sort: 9999,
latitude: 27.836058,
longitude: 121.156181,
is_map: true,
pinyin: "dongtou"
},
{
id: 1558,
name: "东山",
abbr: "DS",
area_code: "350626",
sort: 9999,
latitude: 23.702845,
longitude: 117.427681,
is_map: true,
pinyin: "dongshan"
},
{
id: 1578,
name: "德安",
abbr: "DA",
area_code: "360426",
sort: 9999,
latitude: 29.327475,
longitude: 115.762611,
is_map: true,
pinyin: "dean"
},
{
id: 1586,
name: "大余",
abbr: "DY",
area_code: "360723",
sort: 9999,
latitude: 25.395937,
longitude: 114.362244,
is_map: true,
pinyin: "dayu"
},
{
id: 1590,
name: "定南",
abbr: "DN",
area_code: "360728",
sort: 9999,
latitude: 24.774277,
longitude: 115.032669,
is_map: true,
pinyin: "dingnan"
},
{
id: 1622,
name: "德兴",
abbr: "DX",
area_code: "361181",
sort: 9999,
latitude: 28.945034,
longitude: 117.578735,
is_map: true,
pinyin: "dexing"
},
{
id: 1637,
name: "东阿",
abbr: "DE",
area_code: "371524",
sort: 9999,
latitude: 36.336002,
longitude: 116.248856,
is_map: true,
pinyin: "donge"
},
{
id: 1639,
name: "定陶",
abbr: "DT",
area_code: "371727",
sort: 9999,
latitude: 35.072701,
longitude: 115.569603,
is_map: true,
pinyin: "dingtao"
},
{
id: 1747,
name: "大埔",
abbr: "DP",
area_code: "441422",
sort: 9999,
latitude: 24.351587,
longitude: 116.695518,
is_map: true,
pinyin: "dapu"
},
{
id: 1755,
name: "东源",
abbr: "DY",
area_code: "441625",
sort: 9999,
latitude: 23.789093,
longitude: 114.742714,
is_map: true,
pinyin: "dongyuan"
},
{
id: 1796,
name: "东兴",
abbr: "DX",
area_code: "450681",
sort: 9999,
latitude: 21.541172,
longitude: 107.970169,
is_map: true,
pinyin: "dongxing"
},
{
id: 1806,
name: "德保",
abbr: "DB",
area_code: "451024",
sort: 9999,
latitude: 23.321465,
longitude: 106.618164,
is_map: true,
pinyin: "debao"
},
{
id: 1821,
name: "东兰",
abbr: "DL",
area_code: "451224",
sort: 9999,
latitude: 24.509367,
longitude: 107.373695,
is_map: true,
pinyin: "donglan"
},
{
id: 1825,
name: "都安瑶族自治县",
abbr: "DAYZZZX",
area_code: "451228",
sort: 9999,
latitude: 23.934963,
longitude: 108.10276,
is_map: true,
pinyin: "duanyaozuzizhixian"
},
{
id: 1826,
name: "大化瑶族自治县",
abbr: "DHYZZZX",
area_code: "451229",
sort: 9999,
latitude: 23.739595,
longitude: 107.994499,
is_map: true,
pinyin: "dahuayaozuzizhixian"
},
{
id: 1836,
name: "大新",
abbr: "DX",
area_code: "451424",
sort: 9999,
latitude: 22.833368,
longitude: 107.200806,
is_map: true,
pinyin: "daxin"
},
{
id: 1964,
name: "道真仡佬族苗族自治县",
abbr: "DZGLZMZZZX",
area_code: "520325",
sort: 9999,
latitude: 28.880089,
longitude: 107.605339,
is_map: true,
pinyin: "daozhengelaozumiaozuzizhixian"
},
{
id: 1983,
name: "德江",
abbr: "DJ",
area_code: "520626",
sort: 9999,
latitude: 28.260941,
longitude: 108.117317,
is_map: true,
pinyin: "dejiang"
},
{
id: 2009,
name: "丹寨",
abbr: "DZ",
area_code: "522636",
sort: 9999,
latitude: 26.19875,
longitude: 107.792107,
is_map: true,
pinyin: "danzhai"
},
{
id: 2015,
name: "独山",
abbr: "DS",
area_code: "522726",
sort: 9999,
latitude: 25.826283,
longitude: 107.542755,
is_map: true,
pinyin: "dushan"
},
{
id: 2044,
name: "大关",
abbr: "DG",
area_code: "530624",
sort: 9999,
latitude: 27.747114,
longitude: 103.891609,
is_map: true,
pinyin: "daguan"
},
{
id: 2076,
name: "大姚",
abbr: "DY",
area_code: "532326",
sort: 9999,
latitude: 25.722347,
longitude: 101.323601,
is_map: true,
pinyin: "dayao"
},
{
id: 2111,
name: "德宏傣族景颇族自治州",
abbr: "DHDZJPZZZZ",
area_code: "533100",
sort: 9999,
latitude: 24.436693,
longitude: 98.578362,
is_map: true,
pinyin: "dehongdaizujingpozuzizhizhou"
},
{
id: 2122,
name: "迪庆藏族自治州",
abbr: "DQZZZZZ",
area_code: "533400",
sort: 9999,
latitude: 27.826853,
longitude: 99.706467,
is_map: true,
pinyin: "diqingzangzuzizhizhou"
},
{
id: 2124,
name: "德钦",
abbr: "DQ",
area_code: "533422",
sort: 9999,
latitude: 28.483273,
longitude: 98.915062,
is_map: true,
pinyin: "deqin"
},
{
id: 2230,
name: "大荔",
abbr: "DL",
area_code: "610523",
sort: 9999,
latitude: 34.79501,
longitude: 109.943123,
is_map: true,
pinyin: "dali"
},
{
id: 2279,
name: "丹凤",
abbr: "DF",
area_code: "611022",
sort: 9999,
latitude: 33.69471,
longitude: 110.331909,
is_map: true,
pinyin: "danfeng"
},
{
id: 2315,
name: "敦煌",
abbr: "DH",
area_code: "620982",
sort: 9999,
latitude: 40.141117,
longitude: 94.664276,
is_map: true,
pinyin: "dunhuang"
},
{
id: 2323,
name: "定西",
abbr: "DX",
area_code: "621100",
sort: 9999,
latitude: 35.579578,
longitude: 104.626297,
is_map: true,
pinyin: "dingxi"
},
{
id: 2385,
name: "达日县",
abbr: "DRX",
area_code: "632624",
sort: 9999,
latitude: 33.753258,
longitude: 99.651718,
is_map: true,
pinyin: "dari"
},
{
id: 2396,
name: "德令哈",
abbr: "DLH",
area_code: "632802",
sort: 9999,
latitude: 37.374554,
longitude: 97.37014,
is_map: true,
pinyin: "delingha"
}
],
K: [
{
id: 23,
name: "昆明",
abbr: "KM",
area_code: "0871",
sort: 2000,
latitude: 24.87966,
longitude: 102.833221,
is_map: true,
pinyin: "kunming"
},
{
id: 140,
name: "凯里",
abbr: "KL",
area_code: "0855",
sort: 2000,
latitude: 26.56756,
longitude: 107.9804,
is_map: true,
pinyin: "kaili"
},
{
id: 183,
name: "开封",
abbr: "KF",
area_code: "410203",
sort: 2000,
latitude: 34.79726,
longitude: 114.307312,
is_map: true,
pinyin: "kaifeng"
},
{
id: 326,
name: "库尔勒",
abbr: "KEL",
area_code: "0996",
sort: 2000,
latitude: 41.726429,
longitude: 86.173691,
is_map: true,
pinyin: "kuerle"
},
{
id: 439,
name: "开县",
abbr: "KX",
area_code: "10017",
sort: 2000,
latitude: 31.16098,
longitude: 108.393112,
is_map: true,
pinyin: "kaixian"
},
{
id: 547,
name: "开平",
abbr: "KP",
area_code: "200093",
sort: 2000,
latitude: 22.376381,
longitude: 112.698509,
is_map: true,
pinyin: "kaiping"
},
{
id: 903,
name: "开原",
abbr: "KY",
area_code: "200449",
sort: 2000,
latitude: 42.546452,
longitude: 124.0382,
is_map: true,
pinyin: "kaiyuan"
},
{
id: 1053,
name: "克拉玛依",
abbr: "KLMY",
area_code: "200599",
sort: 2000,
latitude: 44.67762,
longitude: 84.76297,
is_map: true,
pinyin: "kelamayi"
},
{
id: 1055,
name: "喀什",
abbr: "KS",
area_code: "200601",
sort: 2000,
latitude: 39.46772,
longitude: 75.993813,
is_map: true,
pinyin: "kashi"
},
{
id: 1058,
name: "库车",
abbr: "KC",
area_code: "200604",
sort: 2000,
latitude: 41.717411,
longitude: 82.96212,
is_map: true,
pinyin: "kuche"
},
{
id: 1070,
name: "开远",
abbr: "KY",
area_code: "200616",
sort: 2000,
latitude: 23.71434,
longitude: 103.266762,
is_map: true,
pinyin: "kaiyuan"
},
{
id: 358,
name: "昆山",
abbr: "KS",
area_code: "05122",
sort: 9999,
latitude: 31.38475,
longitude: 120.981812,
is_map: true,
pinyin: "kunshan"
},
{
id: 1219,
name: "康保",
abbr: "KB",
area_code: "130723",
sort: 9999,
latitude: 41.850044,
longitude: 114.615807,
is_map: true,
pinyin: "kangbao"
},
{
id: 1236,
name: "宽城满族自治县",
abbr: "KCMZZZX",
area_code: "130827",
sort: 9999,
latitude: 40.607983,
longitude: 118.48864,
is_map: true,
pinyin: "kuanchengmanzuzizhixian"
},
{
id: 1354,
name: "克什克腾旗",
abbr: "KSKTQ",
area_code: "150425",
sort: 9999,
latitude: 43.256233,
longitude: 117.542465,
is_map: true,
pinyin: "keshiketengqi"
},
{
id: 1356,
name: "喀喇沁旗",
abbr: "KLQQ",
area_code: "150428",
sort: 9999,
latitude: 41.92778,
longitude: 118.708572,
is_map: true,
pinyin: "kalaqinqi"
},
{
id: 1359,
name: "科尔沁左翼中旗",
abbr: "KEQZYZQ",
area_code: "150521",
sort: 9999,
latitude: 44.127167,
longitude: 123.313873,
is_map: true,
pinyin: "keerqinzuoyizhongqi"
},
{
id: 1360,
name: "科尔沁左翼后旗",
abbr: "KEQZYHQ",
area_code: "150522",
sort: 9999,
latitude: 42.954563,
longitude: 122.355156,
is_map: true,
pinyin: "keerqinzuoyihouqi"
},
{
id: 1361,
name: "开鲁",
abbr: "KL",
area_code: "150523",
sort: 9999,
latitude: 43.602432,
longitude: 121.3088,
is_map: true,
pinyin: "kailu"
},
{
id: 1362,
name: "库伦旗",
abbr: "KLQ",
area_code: "150524",
sort: 9999,
latitude: 42.734692,
longitude: 121.774887,
is_map: true,
pinyin: "kulunqi"
},
{
id: 1399,
name: "科尔沁右翼前旗",
abbr: "KEQYYQQ",
area_code: "152221",
sort: 9999,
latitude: 46.076496,
longitude: 121.957542,
is_map: true,
pinyin: "keerqinyouyiqianqi"
},
{
id: 1400,
name: "科尔沁右翼中旗",
abbr: "KEQYYZQ",
area_code: "152222",
sort: 9999,
latitude: 45.059647,
longitude: 121.472816,
is_map: true,
pinyin: "keerqinyouyizhongqi"
},
{
id: 1419,
name: "康平",
abbr: "KP",
area_code: "210123",
sort: 9999,
latitude: 42.741531,
longitude: 124.352699,
is_map: true,
pinyin: "kangping"
},
{
id: 1429,
name: "宽甸满族自治县",
abbr: "KDMZZZX",
area_code: "210624",
sort: 9999,
latitude: 40.730412,
longitude: 124.784866,
is_map: true,
pinyin: "kuandianmanzuzizhixian"
},
{
id: 1474,
name: "克山",
abbr: "KS",
area_code: "230229",
sort: 9999,
latitude: 48.034344,
longitude: 125.874352,
is_map: true,
pinyin: "keshan"
},
{
id: 1475,
name: "克东",
abbr: "KD",
area_code: "230230",
sort: 9999,
latitude: 48.037319,
longitude: 126.249092,
is_map: true,
pinyin: "kedong"
},
{
id: 1520,
name: "开化",
abbr: "KH",
area_code: "330824",
sort: 9999,
latitude: 29.136503,
longitude: 118.414436,
is_map: true,
pinyin: "kaihua"
},
{
id: 1627,
name: "垦利县",
abbr: "KLX",
area_code: "370521",
sort: 9999,
latitude: 37.58868,
longitude: 118.551315,
is_map: true,
pinyin: "kenli"
},
{
id: 1955,
name: "开阳",
abbr: "KY",
area_code: "520121",
sort: 9999,
latitude: 27.056793,
longitude: 106.969437,
is_map: true,
pinyin: "kaiyang"
},
{
id: 2481,
name: "奎屯",
abbr: "KT",
area_code: "654003",
sort: 9999,
latitude: 44.423447,
longitude: 84.901604,
is_map: true,
pinyin: "kuitun"
}
],
M: [
{
id: 56,
name: "梅州",
abbr: "MZ",
area_code: "0753",
sort: 2000,
latitude: 24.288441,
longitude: 116.122643,
is_map: true,
pinyin: "meizhou"
},
{
id: 82,
name: "绵阳",
abbr: "MY",
area_code: "0816",
sort: 2000,
latitude: 31.46751,
longitude: 104.679604,
is_map: true,
pinyin: "mianyang"
},
{
id: 90,
name: "马鞍山",
abbr: "MAS",
area_code: "0555",
sort: 2000,
latitude: 31.67067,
longitude: 118.506111,
is_map: true,
pinyin: "maanshan"
},
{
id: 123,
name: "茂名",
abbr: "MM",
area_code: "0668",
sort: 2000,
latitude: 21.66329,
longitude: 110.925232,
is_map: true,
pinyin: "maoming"
},
{
id: 138,
name: "牡丹江",
abbr: "MDJ",
area_code: "0453",
sort: 2000,
latitude: 44.552689,
longitude: 129.632446,
is_map: true,
pinyin: "mudanjiang"
},
{
id: 312,
name: "眉山",
abbr: "MS",
area_code: "0281",
sort: 2000,
latitude: 30.07563,
longitude: 103.848511,
is_map: true,
pinyin: "meishan"
},
{
id: 325,
name: "绵竹",
abbr: "MZ",
area_code: "08381",
sort: 2000,
latitude: 31.337761,
longitude: 104.220833,
is_map: true,
pinyin: "mianzhu"
},
{
id: 469,
name: "蒙城",
abbr: "MC",
area_code: "200015",
sort: 2000,
latitude: 33.265839,
longitude: 116.564499,
is_map: true,
pinyin: "mengcheng"
},
{
id: 486,
name: "明光",
abbr: "MG",
area_code: "200032",
sort: 2000,
latitude: 32.776989,
longitude: 117.989441,
is_map: true,
pinyin: "mingguang"
},
{
id: 493,
name: "密云",
abbr: "MY",
area_code: "200039",
sort: 2000,
latitude: 40.376251,
longitude: 116.84317,
is_map: true,
pinyin: "miyun"
},
{
id: 502,
name: "闽侯",
abbr: "MH",
area_code: "200048",
sort: 2000,
latitude: 26.150209,
longitude: 119.131393,
is_map: true,
pinyin: "minhou"
},
{
id: 559,
name: "梅县",
abbr: "MX",
area_code: "200105",
sort: 2000,
latitude: 24.26539,
longitude: 116.082451,
is_map: true,
pinyin: "meixian"
},
{
id: 679,
name: "民权",
abbr: "MQ",
area_code: "200225",
sort: 2000,
latitude: 34.646912,
longitude: 115.147659,
is_map: true,
pinyin: "minquan"
},
{
id: 719,
name: "麻城",
abbr: "MC",
area_code: "200265",
sort: 2000,
latitude: 31.17333,
longitude: 115.00869,
is_map: true,
pinyin: "macheng"
},
{
id: 756,
name: "汨罗",
abbr: "ML",
area_code: "200302",
sort: 2000,
latitude: 28.806419,
longitude: 113.067108,
is_map: true,
pinyin: "miluo"
},
{
id: 807,
name: "梅河口",
abbr: "MHK",
area_code: "200353",
sort: 2000,
latitude: 42.538731,
longitude: 125.712097,
is_map: true,
pinyin: "meihekou"
},
{
id: 917,
name: "满洲里",
abbr: "MZL",
area_code: "200463",
sort: 2000,
latitude: 49.59655,
longitude: 117.378357,
is_map: true,
pinyin: "manzhouli"
},
{
id: 994,
name: "蒙阴",
abbr: "MY",
area_code: "200540",
sort: 2000,
latitude: 35.710098,
longitude: 117.944939,
is_map: true,
pinyin: "mengyin"
},
{
id: 1065,
name: "弥勒",
abbr: "ML",
area_code: "200611",
sort: 2000,
latitude: 24.410509,
longitude: 103.41465,
is_map: true,
pinyin: "mile"
},
{
id: 1135,
name: "漠河",
abbr: "MH",
area_code: "333333",
sort: 2000,
latitude: 52.972092,
longitude: 122.538643,
is_map: true,
pinyin: "mohe"
},
{
id: 377,
name: "蒙自",
abbr: "MZ",
area_code: "08731",
sort: 9999,
latitude: 23.396219,
longitude: 103.364807,
is_map: true,
pinyin: "mengzi"
},
{
id: 1202,
name: "满城县",
abbr: "MCX",
area_code: "130621",
sort: 9999,
latitude: 38.948921,
longitude: 115.322166,
is_map: true,
pinyin: "manchengxian"
},
{
id: 1245,
name: "孟村回族自治县",
abbr: "MCHZZZX",
area_code: "130930",
sort: 9999,
latitude: 38.057953,
longitude: 117.105103,
is_map: true,
pinyin: "mengcunhuizuzizhixian"
},
{
id: 1372,
name: "莫力达瓦达斡尔族自治旗",
abbr: "MLDWDWEZZZQ",
area_code: "150722",
sort: 9999,
latitude: 48.478386,
longitude: 124.507401,
is_map: true,
pinyin: "molidawadawoerzuzizhiqi"
},
{
id: 1467,
name: "木兰",
abbr: "ML",
area_code: "230127",
sort: 9999,
latitude: 45.949825,
longitude: 128.042679,
is_map: true,
pinyin: "mulan"
},
{
id: 1479,
name: "密山",
abbr: "MS",
area_code: "230382",
sort: 9999,
latitude: 45.5457,
longitude: 131.872726,
is_map: true,
pinyin: "mishan"
},
{
id: 1502,
name: "穆棱",
abbr: "ML",
area_code: "231085",
sort: 9999,
latitude: 44.91967,
longitude: 130.527084,
is_map: true,
pinyin: "muleng"
},
{
id: 1509,
name: "明水",
abbr: "MS",
area_code: "231225",
sort: 9999,
latitude: 47.183529,
longitude: 125.907547,
is_map: true,
pinyin: "mingshui"
},
{
id: 1548,
name: "闽清",
abbr: "MQ",
area_code: "350124",
sort: 9999,
latitude: 26.223793,
longitude: 118.868416,
is_map: true,
pinyin: "minqing"
},
{
id: 1551,
name: "明溪",
abbr: "MX",
area_code: "350421",
sort: 9999,
latitude: 26.357374,
longitude: 117.201843,
is_map: true,
pinyin: "mingxi"
},
{
id: 1641,
name: "孟津",
abbr: "MJ",
area_code: "410322",
sort: 9999,
latitude: 34.826485,
longitude: 112.443893,
is_map: true,
pinyin: "mengjin"
},
{
id: 1656,
name: "孟州",
abbr: "MZ",
area_code: "410883",
sort: 9999,
latitude: 34.90963,
longitude: 112.787079,
is_map: true,
pinyin: "mengzhou"
},
{
id: 1663,
name: "渑池",
abbr: "MC",
area_code: "411221",
sort: 9999,
latitude: 34.763489,
longitude: 111.762993,
is_map: true,
pinyin: "mianchi"
},
{
id: 1768,
name: "马山",
abbr: "MS",
area_code: "450124",
sort: 9999,
latitude: 23.711758,
longitude: 108.172905,
is_map: true,
pinyin: "mashan"
},
{
id: 1791,
name: "蒙山",
abbr: "MS",
area_code: "450423",
sort: 9999,
latitude: 24.199829,
longitude: 110.522598,
is_map: true,
pinyin: "mengshan"
},
{
id: 1967,
name: "湄潭",
abbr: "MT",
area_code: "520328",
sort: 9999,
latitude: 27.765839,
longitude: 107.485725,
is_map: true,
pinyin: "meitan"
},
{
id: 2008,
name: "麻江",
abbr: "MJ",
area_code: "522635",
sort: 9999,
latitude: 26.494802,
longitude: 107.59317,
is_map: true,
pinyin: "majiang"
},
{
id: 2028,
name: "马龙",
abbr: "ML",
area_code: "530321",
sort: 9999,
latitude: 25.429451,
longitude: 103.578758,
is_map: true,
pinyin: "malong"
},
{
id: 2055,
name: "墨江哈尼族自治县",
abbr: "MJHNZZZX",
area_code: "530822",
sort: 9999,
latitude: 23.428165,
longitude: 101.687607,
is_map: true,
pinyin: "mojianghanizuzizhixian"
},
{
id: 2060,
name: "孟连傣族拉祜族佤族自治县",
abbr: "MLDZLHZWZZZX",
area_code: "530827",
sort: 9999,
latitude: 22.325924,
longitude: 99.585403,
is_map: true,
pinyin: "mengliandaizulahuzuwazuzizhixian"
},
{
id: 2073,
name: "牟定",
abbr: "MD",
area_code: "532323",
sort: 9999,
latitude: 25.312111,
longitude: 101.543045,
is_map: true,
pinyin: "mouding"
},
{
id: 2092,
name: "麻栗坡",
abbr: "MLP",
area_code: "532624",
sort: 9999,
latitude: 23.124203,
longitude: 104.701897,
is_map: true,
pinyin: "malipo"
},
{
id: 2093,
name: "马关",
abbr: "MG",
area_code: "532625",
sort: 9999,
latitude: 23.011723,
longitude: 104.398621,
is_map: true,
pinyin: "maguan"
},
{
id: 2098,
name: "勐海",
abbr: "MH",
area_code: "532822",
sort: 9999,
latitude: 21.955866,
longitude: 100.448288,
is_map: true,
pinyin: "menghai"
},
{
id: 2099,
name: "勐腊",
abbr: "ML",
area_code: "532823",
sort: 9999,
latitude: 21.479448,
longitude: 101.567055,
is_map: true,
pinyin: "mengla"
},
{
id: 2103,
name: "弥渡",
abbr: "MD",
area_code: "532925",
sort: 9999,
latitude: 25.342594,
longitude: 100.490669,
is_map: true,
pinyin: "midu"
},
{
id: 2113,
name: "芒市",
abbr: "MS",
area_code: "533103",
sort: 9999,
latitude: 24.436699,
longitude: 98.577606,
is_map: true,
pinyin: "mangshi"
},
{
id: 2254,
name: "勉县",
abbr: "MX",
area_code: "610725",
sort: 9999,
latitude: 33.155617,
longitude: 106.680176,
is_map: true,
pinyin: "mianxian"
},
{
id: 2300,
name: "民乐",
abbr: "ML",
area_code: "620722",
sort: 9999,
latitude: 38.434456,
longitude: 100.81662,
is_map: true,
pinyin: "minle"
},
{
id: 2382,
name: "玛沁县",
abbr: "MQX",
area_code: "632621",
sort: 9999,
latitude: 34.473385,
longitude: 100.24353,
is_map: true,
pinyin: "maqin"
},
{
id: 2387,
name: "玛多县",
abbr: "MDX",
area_code: "632626",
sort: 9999,
latitude: 34.915279,
longitude: 98.211342,
is_map: true,
pinyin: "maduo"
}
],
R: [
{
id: 58,
name: "日照",
abbr: "RZ",
area_code: "0633",
sort: 2000,
latitude: 35.416458,
longitude: 119.527191,
is_map: true,
pinyin: "rizhao"
},
{
id: 446,
name: "荣昌县",
abbr: "RCX",
area_code: "10024",
sort: 2000,
latitude: 29.40485,
longitude: 105.594437,
is_map: true,
pinyin: "rongchangxian"
},
{
id: 540,
name: "饶平",
abbr: "RP",
area_code: "200086",
sort: 2000,
latitude: 23.66412,
longitude: 117.003899,
is_map: true,
pinyin: "raoping"
},
{
id: 577,
name: "仁怀",
abbr: "RH",
area_code: "200123",
sort: 2000,
latitude: 27.792339,
longitude: 106.401558,
is_map: true,
pinyin: "renhuai"
},
{
id: 629,
name: "汝州",
abbr: "RZ",
area_code: "200175",
sort: 2000,
latitude: 34.167171,
longitude: 112.844368,
is_map: true,
pinyin: "ruzhou"
},
{
id: 665,
name: "汝南",
abbr: "RN",
area_code: "200211",
sort: 2000,
latitude: 33.006851,
longitude: 114.362289,
is_map: true,
pinyin: "runan"
},
{
id: 828,
name: "如皋",
abbr: "RG",
area_code: "200374",
sort: 2000,
latitude: 32.371601,
longitude: 120.573822,
is_map: true,
pinyin: "rugao"
},
{
id: 832,
name: "如东",
abbr: "RD",
area_code: "200378",
sort: 2000,
latitude: 32.329559,
longitude: 121.18502,
is_map: true,
pinyin: "rudong"
},
{
id: 880,
name: "瑞金",
abbr: "RJ",
area_code: "200426",
sort: 2000,
latitude: 25.88562,
longitude: 116.027092,
is_map: true,
pinyin: "ruijin"
},
{
id: 953,
name: "荣成",
abbr: "RC",
area_code: "200499",
sort: 2000,
latitude: 37.16523,
longitude: 122.486282,
is_map: true,
pinyin: "rongcheng"
},
{
id: 972,
name: "乳山",
abbr: "RS",
area_code: "200518",
sort: 2000,
latitude: 36.920212,
longitude: 121.540199,
is_map: true,
pinyin: "rushan"
},
{
id: 1027,
name: "仁寿",
abbr: "RS",
area_code: "200573",
sort: 2000,
latitude: 29.99572,
longitude: 104.134071,
is_map: true,
pinyin: "renshou"
},
{
id: 1046,
name: "荣县",
abbr: "RX",
area_code: "200592",
sort: 2000,
latitude: 29.4445,
longitude: 104.417664,
is_map: true,
pinyin: "rongxian"
},
{
id: 1076,
name: "瑞安",
abbr: "RA",
area_code: "200622",
sort: 2000,
latitude: 27.778379,
longitude: 120.655182,
is_map: true,
pinyin: "ruian"
},
{
id: 1123,
name: "荣昌",
abbr: "RC",
area_code: "200669",
sort: 2000,
latitude: 29.40485,
longitude: 105.594437,
is_map: true,
pinyin: "rongchang"
},
{
id: 351,
name: "任丘",
abbr: "RQ",
area_code: "03171",
sort: 9999,
latitude: 38.711639,
longitude: 116.099541,
is_map: true,
pinyin: "renqiu"
},
{
id: 1171,
name: "瑞昌",
abbr: "RC",
area_code: "360481",
sort: 9999,
latitude: 29.67658,
longitude: 115.68103,
is_map: true,
pinyin: "ruichang"
},
{
id: 1194,
name: "任县",
abbr: "RX",
area_code: "130526",
sort: 9999,
latitude: 37.129951,
longitude: 114.684471,
is_map: true,
pinyin: "renxian"
},
{
id: 1208,
name: "容城",
abbr: "RC",
area_code: "130629",
sort: 9999,
latitude: 39.052818,
longitude: 115.866249,
is_map: true,
pinyin: "rongcheng"
},
{
id: 1251,
name: "饶阳",
abbr: "RY",
area_code: "131124",
sort: 9999,
latitude: 38.23267,
longitude: 115.726578,
is_map: true,
pinyin: "raoyang"
},
{
id: 1305,
name: "芮城",
abbr: "RC",
area_code: "140830",
sort: 9999,
latitude: 34.694771,
longitude: 110.691139,
is_map: true,
pinyin: "ruicheng"
},
{
id: 1485,
name: "饶河",
abbr: "RH",
area_code: "230524",
sort: 9999,
latitude: 46.801289,
longitude: 134.021164,
is_map: true,
pinyin: "raohe"
},
{
id: 1644,
name: "汝阳",
abbr: "RY",
area_code: "410326",
sort: 9999,
latitude: 34.153229,
longitude: 112.473785,
is_map: true,
pinyin: "ruyang"
},
{
id: 1713,
name: "汝城",
abbr: "RC",
area_code: "431026",
sort: 9999,
latitude: 25.553759,
longitude: 113.685684,
is_map: true,
pinyin: "rucheng"
},
{
id: 1737,
name: "乳源瑶族自治县",
abbr: "RYYZZZX",
area_code: "440232",
sort: 9999,
latitude: 24.77611,
longitude: 113.278419,
is_map: true,
pinyin: "ruyuanyaozuzizhixian"
},
{
id: 1775,
name: "融安",
abbr: "RA",
area_code: "450224",
sort: 9999,
latitude: 25.214703,
longitude: 109.403618,
is_map: true,
pinyin: "rongan"
},
{
id: 1776,
name: "融水苗族自治县",
abbr: "RSMZZZX",
area_code: "450225",
sort: 9999,
latitude: 25.068811,
longitude: 109.252747,
is_map: true,
pinyin: "rongshuimiaozuzizhixian"
},
{
id: 1799,
name: "容县",
abbr: "RX",
area_code: "450921",
sort: 9999,
latitude: 22.856436,
longitude: 110.552467,
is_map: true,
pinyin: "rongxian"
},
{
id: 2005,
name: "榕江",
abbr: "RJ",
area_code: "522632",
sort: 9999,
latitude: 25.931086,
longitude: 108.521027,
is_map: true,
pinyin: "rongjiang"
},
{
id: 2112,
name: "瑞丽",
abbr: "RL",
area_code: "533102",
sort: 9999,
latitude: 24.010735,
longitude: 97.855881,
is_map: true,
pinyin: "ruili"
},
{
id: 2133,
name: "日喀则",
abbr: "RKZ",
area_code: "540200",
sort: 9999,
latitude: 29.261454,
longitude: 88.884346,
is_map: true,
pinyin: "rikaze"
}
],
A: [
{
id: 70,
name: "安庆",
abbr: "AQ",
area_code: "0556",
sort: 2000,
latitude: 30.54294,
longitude: 117.063538,
is_map: true,
pinyin: "anqing"
},
{
id: 96,
name: "鞍山",
abbr: "AS",
area_code: "0412",
sort: 2000,
latitude: 41.107769,
longitude: 122.994598,
is_map: true,
pinyin: "anshan"
},
{
id: 216,
name: "澳门",
abbr: "AM",
area_code: "00853",
sort: 2000,
latitude: 22.186834,
longitude: 113.54303,
is_map: true,
pinyin: "aomen"
},
{
id: 257,
name: "安宁",
abbr: "AN",
area_code: "4401003",
sort: 2000,
latitude: 24.91954,
longitude: 102.477997,
is_map: true,
pinyin: "anning"
},
{
id: 261,
name: "安阳",
abbr: "AY",
area_code: "0372",
sort: 2000,
latitude: 36.09771,
longitude: 114.393097,
is_map: true,
pinyin: "anyang"
},
{
id: 272,
name: "安康",
abbr: "AK",
area_code: "0915",
sort: 2000,
latitude: 32.68486,
longitude: 109.02932,
is_map: true,
pinyin: "ankang"
},
{
id: 273,
name: "安顺",
abbr: "AS",
area_code: "085",
sort: 2000,
latitude: 26.25367,
longitude: 105.946198,
is_map: true,
pinyin: "anshun"
},
{
id: 327,
name: "阿拉尔",
abbr: "ALE",
area_code: "0997",
sort: 2000,
latitude: 40.547981,
longitude: 81.28067,
is_map: true,
pinyin: "alaer"
},
{
id: 499,
name: "安溪",
abbr: "AX",
area_code: "200045",
sort: 2000,
latitude: 25.055441,
longitude: 118.186852,
is_map: true,
pinyin: "anxi"
},
{
id: 608,
name: "安新",
abbr: "AX",
area_code: "200154",
sort: 2000,
latitude: 38.935349,
longitude: 115.935638,
is_map: true,
pinyin: "anxin"
},
{
id: 729,
name: "安陆",
abbr: "AL",
area_code: "200275",
sort: 2000,
latitude: 31.255541,
longitude: 113.689133,
is_map: true,
pinyin: "anlu"
},
{
id: 770,
name: "安化",
abbr: "AH",
area_code: "200316",
sort: 2000,
latitude: 28.374281,
longitude: 111.213028,
is_map: true,
pinyin: "anhua"
},
{
id: 796,
name: "安乡",
abbr: "AX",
area_code: "200342",
sort: 2000,
latitude: 29.411421,
longitude: 112.170959,
is_map: true,
pinyin: "anxiang"
},
{
id: 801,
name: "安仁",
abbr: "AR",
area_code: "200347",
sort: 2000,
latitude: 26.709419,
longitude: 113.269478,
is_map: true,
pinyin: "anren"
},
{
id: 963,
name: "安丘",
abbr: "AQ",
area_code: "200509",
sort: 2000,
latitude: 36.47842,
longitude: 119.217842,
is_map: true,
pinyin: "anqiu"
},
{
id: 1032,
name: "安岳",
abbr: "AY",
area_code: "200578",
sort: 2000,
latitude: 30.09733,
longitude: 105.335373,
is_map: true,
pinyin: "anyue"
},
{
id: 1057,
name: "阿克苏",
abbr: "AKS",
area_code: "200603",
sort: 2000,
latitude: 39.48328,
longitude: 81.08432,
is_map: true,
pinyin: "akesu"
},
{
id: 1105,
name: "安吉",
abbr: "AJ",
area_code: "200651",
sort: 2000,
latitude: 30.638241,
longitude: 119.68219,
is_map: true,
pinyin: "anji"
},
{
id: 1169,
name: "阿荣旗",
abbr: "ARQ",
area_code: "150721",
sort: 9999,
latitude: 48.12582,
longitude: 123.459442,
is_map: true,
pinyin: "arongqi"
},
{
id: 1216,
name: "安国",
abbr: "AG",
area_code: "130683",
sort: 9999,
latitude: 38.421368,
longitude: 115.331413,
is_map: true,
pinyin: "anguo"
},
{
id: 1252,
name: "安平",
abbr: "AP",
area_code: "131125",
sort: 9999,
latitude: 38.233513,
longitude: 115.51963,
is_map: true,
pinyin: "anping"
},
{
id: 1350,
name: "阿鲁科尔沁旗",
abbr: "ALKEQQ",
area_code: "150421",
sort: 9999,
latitude: 43.878769,
longitude: 120.094971,
is_map: true,
pinyin: "alukeerqinqi"
},
{
id: 1358,
name: "敖汉旗",
abbr: "AHQ",
area_code: "150430",
sort: 9999,
latitude: 42.28701,
longitude: 119.906487,
is_map: true,
pinyin: "aohanqi"
},
{
id: 1398,
name: "阿尔山",
abbr: "AES",
area_code: "152202",
sort: 9999,
latitude: 47.176998,
longitude: 119.943657,
is_map: true,
pinyin: "aershan"
},
{
id: 1405,
name: "阿巴嘎旗",
abbr: "ABGQ",
area_code: "152522",
sort: 9999,
latitude: 44.022728,
longitude: 114.970619,
is_map: true,
pinyin: "abagaqi"
},
{
id: 1416,
name: "阿拉善左旗",
abbr: "ALSZQ",
area_code: "152921",
sort: 9999,
latitude: 38.844841,
longitude: 105.705528,
is_map: true,
pinyin: "alashanzuoqi"
},
{
id: 1417,
name: "阿拉善右旗",
abbr: "ALSYQ",
area_code: "152922",
sort: 9999,
latitude: 39.21159,
longitude: 101.671982,
is_map: true,
pinyin: "alashanyouqi"
},
{
id: 1463,
name: "安图",
abbr: "AT",
area_code: "222426",
sort: 9999,
latitude: 43.110992,
longitude: 128.901871,
is_map: true,
pinyin: "antu"
},
{
id: 1510,
name: "安达",
abbr: "AD",
area_code: "231281",
sort: 9999,
latitude: 46.410614,
longitude: 125.329926,
is_map: true,
pinyin: "anda"
},
{
id: 1573,
name: "安义",
abbr: "AY",
area_code: "360123",
sort: 9999,
latitude: 28.841333,
longitude: 115.553108,
is_map: true,
pinyin: "anyi"
},
{
id: 1589,
name: "安远",
abbr: "AY",
area_code: "360726",
sort: 9999,
latitude: 25.13459,
longitude: 115.392326,
is_map: true,
pinyin: "anyuan"
},
{
id: 1600,
name: "安福",
abbr: "AF",
area_code: "360829",
sort: 9999,
latitude: 27.382746,
longitude: 114.613838,
is_map: true,
pinyin: "anfu"
},
{
id: 1648,
name: "安阳",
abbr: "AY",
area_code: "410522",
sort: 9999,
latitude: 36.130585,
longitude: 114.130203,
is_map: true,
pinyin: "anyang"
},
{
id: 1905,
name: "阿坝藏族羌族自治州",
abbr: "ABZZQZZZZ",
area_code: "513200",
sort: 9999,
latitude: 31.899792,
longitude: 102.221375,
is_map: true,
pinyin: "abazangzuqiangzuzizhizhou"
},
{
id: 1993,
name: "安龙",
abbr: "AL",
area_code: "522328",
sort: 9999,
latitude: 25.106426,
longitude: 105.469063,
is_map: true,
pinyin: "anlong"
},
{
id: 2241,
name: "安塞",
abbr: "AS",
area_code: "610624",
sort: 9999,
latitude: 36.86441,
longitude: 109.32534,
is_map: true,
pinyin: "ansai"
}
],
E: [
{
id: 184,
name: "鄂州",
abbr: "EZ",
area_code: "0711",
sort: 2000,
latitude: 30.39085,
longitude: 114.894951,
is_map: true,
pinyin: "ezhou"
},
{
id: 213,
name: "峨眉山",
abbr: "EMS",
area_code: "440100",
sort: 2000,
latitude: 29.60125,
longitude: 103.484467,
is_map: true,
pinyin: "emeishan"
},
{
id: 229,
name: "恩施",
abbr: "ES",
area_code: "0718",
sort: 2000,
latitude: 30.29504,
longitude: 109.479179,
is_map: true,
pinyin: "enshi"
},
{
id: 395,
name: "鄂尔多斯",
abbr: "EEDS",
area_code: "0477",
sort: 2000,
latitude: 39.608452,
longitude: 109.780869,
is_map: true,
pinyin: "eerduosi"
},
{
id: 555,
name: "恩平",
abbr: "EP",
area_code: "200101",
sort: 2000,
latitude: 22.18294,
longitude: 112.305321,
is_map: true,
pinyin: "enping"
},
{
id: 1366,
name: "鄂托克前旗",
abbr: "ETKQQ",
area_code: "150623",
sort: 9999,
latitude: 38.183258,
longitude: 107.48172,
is_map: true,
pinyin: "etuokeqianqi"
},
{
id: 1367,
name: "鄂托克旗",
abbr: "ETKQ",
area_code: "150624",
sort: 9999,
latitude: 39.095753,
longitude: 107.982605,
is_map: true,
pinyin: "etuokeqi"
},
{
id: 1373,
name: "鄂伦春自治旗",
abbr: "ELCZZQ",
area_code: "150723",
sort: 9999,
latitude: 50.590176,
longitude: 123.725685,
is_map: true,
pinyin: "elunchunzizhiqi"
},
{
id: 1374,
name: "鄂温克族自治旗",
abbr: "EWKZZZQ",
area_code: "150724",
sort: 9999,
latitude: 49.143291,
longitude: 119.754044,
is_map: true,
pinyin: "ewenkezuzizhiqi"
},
{
id: 1379,
name: "额尔古纳",
abbr: "EEGN",
area_code: "150784",
sort: 9999,
latitude: 50.2439,
longitude: 120.178635,
is_map: true,
pinyin: "eerguna"
},
{
id: 1404,
name: "二连浩特",
abbr: "ELHT",
area_code: "152501",
sort: 9999,
latitude: 43.652897,
longitude: 111.979813,
is_map: true,
pinyin: "erlianhaote"
},
{
id: 1418,
name: "额济纳旗",
abbr: "EJNQ",
area_code: "152923",
sort: 9999,
latitude: 41.958813,
longitude: 101.069443,
is_map: true,
pinyin: "ejinaqi"
},
{
id: 2035,
name: "峨山彝族自治县",
abbr: "ESYZZZX",
area_code: "530426",
sort: 9999,
latitude: 24.173256,
longitude: 102.404358,
is_map: true,
pinyin: "eshanyizuzizhixian"
},
{
id: 2108,
name: "洱源",
abbr: "EY",
area_code: "532930",
sort: 9999,
latitude: 26.111183,
longitude: 99.951706,
is_map: true,
pinyin: "eryuan"
}
],
hotCities: [
{
id: 1,
name: "上海",
abbr: "SH",
area_code: "021",
sort: 1,
latitude: 31.23037,
longitude: 121.473701,
is_map: true,
pinyin: "shanghai"
},
{
id: 10,
name: "哈尔滨",
abbr: "HEB",
area_code: "0451",
sort: 4,
latitude: 45.802158,
longitude: 126.535797,
is_map: true,
pinyin: "haerbin"
},
{
id: 6,
name: "南京",
abbr: "NJ",
area_code: "025",
sort: 5,
latitude: 31.84178,
longitude: 118.504669,
is_map: true,
pinyin: "nanjing"
},
{
id: 4,
name: "广州",
abbr: "GZ",
area_code: "020",
sort: 6,
latitude: 23.12908,
longitude: 113.264359,
is_map: true,
pinyin: "guangzhou"
},
{
id: 13,
name: "厦门",
abbr: "XM",
area_code: "0592",
sort: 7,
latitude: 24.479509,
longitude: 118.089478,
is_map: true,
pinyin: "xiamen"
},
{
id: 2,
name: "杭州",
abbr: "HZ",
area_code: "0571",
sort: 8,
latitude: 30.274151,
longitude: 120.155151,
is_map: true,
pinyin: "hangzhou"
},
{
id: 5,
name: "天津",
abbr: "TJ",
area_code: "022",
sort: 14,
latitude: 39.085098,
longitude: 117.199371,
is_map: true,
pinyin: "tianjin"
},
{
id: 28,
name: "青岛",
abbr: "QD",
area_code: "0532",
sort: 15,
latitude: 36.066231,
longitude: 120.382988,
is_map: true,
pinyin: "qingdao"
}
]
}
================================================
FILE: InitData/delivery.js
================================================
export default {
color: "57A9FF",
id: 1,
is_solid: true,
text: "蜂鸟专送"
}
================================================
FILE: InitData/entry.js
================================================
export default [
{
id: 15,
is_in_serving: true,
description: "附近美食一网打尽",
title: "美食",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu7f8e%5Cu98df%22%2C%22complex_category_ids%22%3A%5B207%2C220%2C233%2C260%5D%2C%22is_show_all_category%22%3Afalse%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A207%2C%22name%22%3A%22%5Cu5feb%5Cu9910%5Cu4fbf%5Cu5f53%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E7%BE%8E%E9%A3%9F&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/b/7e/d1890cf73ae6f2adb97caa39de7fcjpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 20,
is_in_serving: true,
description: "苦了累了,来点甜的",
title: "甜品饮品",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu751c%5Cu54c1%5Cu996e%5Cu54c1%22%2C%22complex_category_ids%22%3A%5B240%2C241%2C242%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A239%2C%22name%22%3A%22%5Cu751c%5Cu54c1%5Cu996e%5Cu54c1%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E7%94%9C%E5%93%81%E9%A5%AE%E5%93%81&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/2/35/696aa5cf9820adada9b11a3d14bf5jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 10,
is_in_serving: true,
description: "足不出户,便利回家",
title: "商超便利",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu5546%5Cu8d85%5Cu4fbf%5Cu5229%22%2C%22complex_category_ids%22%3A%5B254%2C255%2C256%2C257%2C258%2C271%2C272%2C273%2C274%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A252%2C%22name%22%3A%22%5Cu5546%5Cu5e97%5Cu8d85%5Cu5e02%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E5%95%86%E8%B6%85%E4%BE%BF%E5%88%A9&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/0/da/f42235e6929a5cb0e7013115ce78djpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 1,
is_in_serving: true,
description: "0元早餐0起送,每天都有新花样。",
title: "预订早餐",
link: "eleme://web?url=https%3A%2F%2Fzaocan.ele.me&target_name=%E9%A2%84%E8%AE%A2%E6%97%A9%E9%A4%90&animation_type=1&is_need_mark=&banner_type=",
image_url: "/d/49/7757ff22e8ab28e7dfa5f7e2c2692jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 8,
is_in_serving: true,
description: "一天变女神",
title: "果蔬生鲜",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu679c%5Cu852c%5Cu751f%5Cu9c9c%22%2C%22complex_category_ids%22%3A%5B245%2C246%2C247%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A244%2C%22name%22%3A%22%5Cu679c%5Cu852c%5Cu751f%5Cu9c9c%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E6%9E%9C%E8%94%AC%E7%94%9F%E9%B2%9C&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/4/34/ea0d51c9608310cf41faa5de6b8efjpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 403297,
is_in_serving: true,
description: "大胆尝鲜,遇见惊喜",
title: "新店特惠",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu65b0%5Cu5e97%5Cu7279%5Cu60e0%22%2C%22complex_category_ids%22%3A%5B207%2C220%2C233%2C239%2C244%2C248%2C252%2C260%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A207%2C%22name%22%3A%22%5Cu5feb%5Cu9910%5Cu4fbf%5Cu5f53%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22support_ids%22%3A%5B-1%5D%2C%22activities%22%3A%5B%5D%7D&target_name=%E6%96%B0%E5%BA%97%E7%89%B9%E6%83%A0&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/a/fa/d41b04d520d445dc5de42dae9a384jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 92,
is_in_serving: true,
description: "准时必达,超时赔付",
title: "准时达",
link: "eleme://restaurants?filter_key=%7B%22support_ids%22%3A%5B9%5D%2C%22activities%22%3A%5B%7B%22id%22%3A9%2C%22name%22%3A%22%5Cu51c6%5Cu65f6%5Cu8fbe%22%2C%22icon_name%22%3A%22%5Cu51c6%22%2C%22icon_color%22%3A%22E8842D%22%2C%22is_need_filling%22%3A0%2C%22is_multi_choice%22%3A1%2C%22filter_value%22%3A9%2C%22filter_key%22%3A%22support_ids%22%2C%22description%22%3A%22%5Cu51c6%5Cu65f6%5Cu8fbe%22%7D%5D%7D&target_name=%E5%87%86%E6%97%B6%E8%BE%BE&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/3/84/8e031bf7b3c036b4ec19edff16e46jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 225,
is_in_serving: true,
description: "有菜有肉,营养均衡",
title: "简餐",
link: "eleme://restaurants?filter_key=%7B%22activity_types%22%3A%5B3%5D%2C%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu7b80%5Cu9910%22%2C%22complex_category_ids%22%3A%5B209%2C212%2C215%2C265%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A207%2C%22name%22%3A%22%5Cu5feb%5Cu9910%5Cu4fbf%5Cu5f53%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%7B%22id%22%3A3%2C%22name%22%3A%22%5Cu4e0b%5Cu5355%5Cu7acb%5Cu51cf%22%2C%22icon_name%22%3A%22%5Cu51cf%22%2C%22icon_color%22%3A%22f07373%22%2C%22is_need_filling%22%3A1%2C%22is_multi_choice%22%3A0%2C%22filter_value%22%3A3%2C%22filter_key%22%3A%22activity_types%22%7D%5D%7D&target_name=%E7%AE%80%E9%A4%90&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/d/38/7bddb07503aea4b711236348e2632jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 65,
is_in_serving: true,
description: "",
title: "土豪推荐",
link: "eleme://restaurants?filter_key=%7B%22activities%22%3A%5B%7B%22filter_key%22%3A%22tags%22%2C%22filter_value%22%3A0%7D%5D%7D&target_name=%E5%9C%9F%E8%B1%AA%E6%8E%A8%E8%8D%90&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/e/7e/02b72b5e63c127d5bfae57b8e4ab1jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 236,
is_in_serving: true,
description: "大口大口把你吃掉",
title: "汉堡薯条",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu6c49%5Cu5821%22%2C%22complex_category_ids%22%3A%5B212%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A207%2C%22name%22%3A%22%5Cu5feb%5Cu9910%5Cu4fbf%5Cu5f53%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E6%B1%89%E5%A0%A1%E8%96%AF%E6%9D%A1&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/b/7f/432619fb21a40b05cd25d11eca02djpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 289,
is_in_serving: true,
description: "老字号,好味道",
title: "包子粥店",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu5305%5Cu5b50%5Cu7ca5%5Cu5e97%22%2C%22complex_category_ids%22%3A%5B215%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A207%2C%22name%22%3A%22%5Cu5feb%5Cu9910%5Cu4fbf%5Cu5f53%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E5%8C%85%E5%AD%90%E7%B2%A5%E5%BA%97&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/2/17/244241b514affc0f12f4168cf6628jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 9,
is_in_serving: true,
description: "内心小公举,一直被宠爱",
title: "鲜花蛋糕",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu9c9c%5Cu82b1%5Cu86cb%5Cu7cd5%22%2C%22complex_category_ids%22%3A%5B249%2C250%2C251%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A248%2C%22name%22%3A%22%5Cu9c9c%5Cu82b1%5Cu86cb%5Cu7cd5%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E9%B2%9C%E8%8A%B1%E8%9B%8B%E7%B3%95&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/8/83/171fd98b85dee3b3f4243b7459b48jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 286,
is_in_serving: true,
description: "",
title: "麻辣烫",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu9ebb%5Cu8fa3%5Cu70eb%22%2C%22complex_category_ids%22%3A%5B214%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A207%2C%22name%22%3A%22%5Cu5feb%5Cu9910%5Cu4fbf%5Cu5f53%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E9%BA%BB%E8%BE%A3%E7%83%AB&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/3/c7/a9ef469a12e7a596b559145b87f09jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 288,
is_in_serving: true,
description: "无辣不欢",
title: "川湘菜",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu5ddd%5Cu6e58%5Cu83dc%22%2C%22complex_category_ids%22%3A%5B221%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A220%2C%22name%22%3A%22%5Cu7279%5Cu8272%5Cu83dc%5Cu7cfb%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E5%B7%9D%E6%B9%98%E8%8F%9C&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/9/7c/9700836a33e05c2410bda8da59117jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 287,
is_in_serving: true,
description: "西餐始祖,欧洲的味道",
title: "披萨意面",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu62ab%5Cu8428%5Cu610f%5Cu9762%22%2C%22complex_category_ids%22%3A%5B211%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A260%2C%22name%22%3A%22%5Cu5f02%5Cu56fd%5Cu6599%5Cu7406%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E6%8A%AB%E8%90%A8%E6%84%8F%E9%9D%A2&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/7/b6/235761e50d391445f021922b71789jpeg.jpeg",
icon_url: "",
title_color: ""
},
{
id: 285,
is_in_serving: true,
description: "寿司定食,泡菜烤肉",
title: "日韩料理",
link: "eleme://restaurants?filter_key=%7B%22category_schema%22%3A%7B%22category_name%22%3A%22%5Cu65e5%5Cu97e9%5Cu6599%5Cu7406%22%2C%22complex_category_ids%22%3A%5B229%5D%2C%22is_show_all_category%22%3Atrue%7D%2C%22restaurant_category_id%22%3A%7B%22id%22%3A260%2C%22name%22%3A%22%5Cu5f02%5Cu56fd%5Cu6599%5Cu7406%22%2C%22sub_categories%22%3A%5B%5D%2C%22image_url%22%3A%22%22%7D%2C%22activities%22%3A%5B%5D%7D&target_name=%E6%97%A5%E9%9F%A9%E6%96%99%E7%90%86&animation_type=1&is_need_mark=0&banner_type=",
image_url: "/6/1a/1e0f448be0624c62db416e864d2afjpeg.jpeg",
icon_url: "",
title_color: ""
}
]
================================================
FILE: InitData/explain.js
================================================
export default {
activityCaption: "活动问题",
activityContent: '### Q1: 我是新用户,为什么不能享受新用户下单立减优惠/新用户首单红包? * 新用户是指您的下单设备、手机号、饿了么账号、支付账号都是第一次在饿了么平台使用。以上任意条件不满足,都不能享受新用户优惠。 * 新用户立减优惠、新用户红包、满减特价菜活动不能同时使用。在您首次下单过程中,我们会优先为您选择优惠最大(优惠金额最高)的。 ### Q2: 商品活动规则 * 新用户下首单时,如果用户自己主动退单,则下次不可再享受新用户优惠,如果是商家或客服取消订单,则可以再次享受新用户优惠。 * 6.0版本(含)之前的所有版本,用户在下单时不再享受任何优惠(包含新用户、在线满减、商品折扣、红包等)。 * 移动端所有活动,相同手机号或设备每天只限3单,超过3单收取原价。 * 每个订单最多享受3份活动优惠,超过3份的其余商品收取原价。 * 下单手机号和所选择下单的商家不在同一城市,不享受优惠活动。 * 配送费不计入满减活动的门槛。 ### Q3: 我第一次在 "A" 商家下单,"A" 商家有参加「新用户」活动,我为什么享受不到新用户的立减优惠? * 活动中的新用户指的是饿了么网站的新用户,而不是指 "A" 商家的新客户。如果您不符合饿了么网站新用户的定义则无法享受于新用户相关的活动优惠。 ',
anonymousBuyCaption: "匿名购买",
anonymousBuyContent: "",
awesomeRestaurantCaption: "超赞商家",
awesomeRestaurantContent: "# 超赞商家",
balanceCaption: "余额问题",
balanceContent: "### Q1: 使用余额的条件 为了保护账户安全,使用余额前必须先绑定手机号。 ### Q2: 余额可以怎么用? 余额可以在饿了么平台上提现,当余额大于等于待支付金额时可以在支持在线支付的商家中进行消费。提现功能将于2016年12月25日00:00全面开放。 ### Q3:我要如何提现? 为了保护账户和资金安全,您在提现前需要输入真实姓名和用该姓名开通的银行卡号、选择开户行,并验证已绑定饿了么账号的手机号。每日只能提现1次,每次限额50元。若提现金额超过50元,点击【提现】时系统会提示您已超额,请您修改提现金额。 ### Q4:为什么会提现失败? 可能原因有:您的姓名、开户行、银行卡号等信息不匹配;您当日的提现次数和金额超过限制;您的账户存在异常,被风控拦截。 ",
businessCaption: "商务合作",
businessContent: '### 品牌合作 marketing_coop@ele.me ### 媒体合作 pr@ele.me',
couponCaption: "代金券说明",
couponContent: "### Q1: 什么是商家代金券? 商家代金券是指由商家自己发放代金券,只限在指定的商家使用,可根据条件抵扣相应金额。 ### Q2: 怎么获得商家代金券? * 进入有「进店领券」或「下单返券」标示的商家即有机会获得代金券。 * 「下单返券」需要在指定商家完成满足返券金额要求的订单后才会返还,代金券可在下次下单时使用。 ### Q3: 商家代金券使用条件 * 商家代金券仅限在指定商家使用 * 商家代金券仅限在线支付使用 * 每个订单只能使用一张商家代金券,不可与其他代金券叠加使用",
disclaimerCaption: "免责声明",
disclaimerContent: "# Disclaimer: The application developed by Ele.me or have. Ele.me makes it clear that, your business activities through the participation of the software have nothing to do with Apple Inc., and Apple does not assume any responsibilities of the program. Mobile phone brand partners from Ele.me, such as Apple and App Store. Sponsors of non-mobile phone clients from Ele.me, nor do you get the mobile phone client’s intellectual property rights or any other rights. If the mobile phone client violates the third party’s intellectual property rights, Ele.me will bears the corresponding legal responsibility. Ele.me has the right but not the obligation to improve or correct any errors or defects. Ele.me will not represent or warrant the accuracy or reliability of any contents,information or advertisements which users obtain from the application. Moreover, Ele.me will not be responsible for any products or information which users purchase by the mobile client. Users shall use the application at their own risk. # 免责声明: 本应用由饿了么开发或拥有。饿了么在此申明,用户通过本软件参加的商业活动,与Apple Inc.无关,Apple不承担该程序的任何责任。 饿了么手机客户端的品牌合作商,如Apple,AppStore,非饿了么手机客户端的赞助商,也未拥有该客户端的知识产权或其他任何权益。因饿了么手机客户端侵犯第三方知识产权的,由饿了么承担相应的法律责任。 饿了么有权但无义务,改善或更正本手机客户端的任何错误或缺陷。 用户通过饿了么手机客户端及其中的任何链接、下载获得的一切信息、内容或广告,饿了么不声明或保证其正确性或可靠性;并且对于用户经本手机客户端上的展示、内容、广告而购买、取得的任何产品、或信息,饿了么不负保证责任。用户自行承担使用本软件的风险。",
discountCaption: "优惠说明",
discountContent: '### Q1: 我是新用户,为什么不能享受新用户下单立减优惠/新用户首单红包? * 新用户是指您的下单设备、手机号、饿了么账号、支付账号都是第一次在饿了么平台使用。以上任意条件不满足,都不能享受新用户优惠。 * 如果监测到您不满足以上的信用条件,您的订单将被系统拦截或无偿取消。 * 新用户立减优惠、新用户红包、满减特价菜活动不能同时使用。在您首次下单过程中,我们会优先为您选择优惠最大(优惠金额最高)的。 ### Q2: 首单被取消,再次下单还能享受新用户立减优惠/新用户红包吗? * 您主动取消或商家、骑手取消的订单,饿了么会返还您的新用户资格,这时您仍然可以享受新用户的优惠。 * 您被取消的首单因为「使用的支付账户曾下过单」,必须更换新的支付账户才可以享受新用户优惠。 * 但您取消的原因是账户异常等原因,则不能享受新用户优惠。 ### Q3: 我第一次在 "A" 商家下单,"A" 商家有参加「新用户」活动,我为什么享受不到新用户的立减优惠? * 活动中的新用户指的是饿了么网站的新用户,而不是指 "A" 商家的新客户。如果您不符合饿了么网站新用户的定义则无法享受于新用户相关的活动优惠。 ### Q4: 一个红包能拆开多次使用吗? * 不能,一个红包只能一次性使用,不能分开使用。 ### Q5: 下单的时候使用了红包,但是后来订单取消了,红包还会返还吗? * 会的,订单无效后红包会自动返还到您的账户里。 ### Q6: 红包兑换码怎样兑换成红包,怎样查看红包? * 在个人中心 > 我的红包 > 兑换红包,输入兑换码进行兑换。 ### Q7: 在线支付订单取消后,钱怎么返还? * 使用饿了么账户余额支付,订单无效后,所有款项将退到您的饿了么账户;使用第三方支付订单无效后,支付款项将于2个工作日内返还到您的第三方支付账户,红包退还到饿了么账户。 ### Q8: 每天限制优惠3单,前面下了一个在线支付的单子,由于未付款,订单自动取消了,这单会计算我的参与活动次数吗? * 不会。未付款的订单不会计入您使用优惠的次数。 ### Q9: 每天红包使用次数有限制吗? * 同一个手机号每天最多能使用两个红包优惠(不含预订早餐和预订午餐),使用红包的订单出现退单情况不计入限制。 ',
forgotCaption: "补签规则",
forgotContent: "### 如何补签? 如忘记签到,可通过下单补签,漏签当日至红包领取日前一天每1笔有效订单可补签 1 天(仅限在线支付订单),例:如您在活动第 3 天忘记签到,只要你在第 3 天至第 9 天内完成1笔有效的订单,即可完成补签。",
freshmanCaption: "活动细则",
freshmanContent: "* 新用户是根据设备、饿了么账号、下单手机号进行判断,如果您下单时以上信息均为首次使用则符合饿了么定义的新用户 * 仅限新用户使用移动端app提交订单并选择在线支付时享受(饿配送订单选择餐到付款也可享受) * 在本设备上曾经有过购买记录行为的手机不能参加本活动 * 新用户首单立减金额各区域不同 * 活动仅支持手机客户端最新版本",
hongbaoCaption: "红包问题",
hongbaoContent: "### Q1: 怎么获得红包? * 抢微信朋友分享的红包获得; * 玩游戏领红包(仅限Android客户端); ### Q2: 红包如何使用? * 红包仅限订单选择在线支付时使用; * 每个订单限使用一个红包,每天最多可使用2个红包; * 每个红包只能使用一次,不能叠加或拆分使用; * 红包如有使用金额门槛,则购物车金额需满足金额门槛才可使用; * 红包如有品类、商家、手机号或时段限制,订单需满足对应条件后才可使用; * 红包使用不设找零,如红包可抵扣金额大于订单金额,则订单需支付0.01元。 ### Q3: 下单的时候使用了红包,但是后来订单取消了,红包还会返还吗? * 会的,订单无效后红包会自动返还到您的账户里。 ### Q4: 红包兑换码怎样兑换成红包,怎样查看红包? * 在个人中心 > 我的红包 > 兑换红包,输入兑换码进行兑换。 ### Q5: 预订早餐、预订午餐的红包怎么使用?在哪里查询? * 预订早餐、预订午餐的红包暂时不支持直接点外卖使用,并且当前点外卖的红包也暂时不支持在预订早餐、预订午餐时使用。 * 预订早餐、预订午餐的红包从APP首页点击“预订早餐”按钮进入后在右上角的个人中心中查找预订早餐、预订午餐的红包。 ### Q6: 互斥红包怎么使用? * 互斥红包不与其他优惠活动(包含但不限于:新用户专享、满X元减X元、满X元赠XX)同时使用。 ### Q7: 红包领取规则是什么? * 同一个手机号一天限领取三个。 * 同一注册用户一天限领取三个。 * 注册用户红包直接发送至用户账户里。 * 同一个手机号一天最多使用两个红包。 * 未收到红包短信的用户注意查看手机里的拦截短信。 * 有任何问题请拨打客服电话:10105757。 ### Q8:首单红包的使用条件? * 首单红包需同时满足以下条件才可用,且首单红包不与其他优惠(首减、满减、满赠、套餐赠、折扣菜)同享。 * 新用户(设备、手机号、饿了么账号、支付账号均未在饿了么外卖下过单)首次下单。 * 仅限在线支付使用,且收餐人手机号、领取红包时输入的手机号和账号中的手机号需为同一手机号。 * 微信小程序中“商超便利”和“果蔬生鲜”分类暂未开通。 ",
index: "payment,balance,hongbao,pointtext,member,activity,other",
memberCaption: "会员问题",
memberContent: "### 会员权益调整 尊敬的用户,随着会员服务体系优化,「蜂鸟专送」商家得到大规模普及,大大丰富了会员用户的用餐选择,从2016年9月1日开始,新购及续费的会员服务将由免配送费调整为每单最高减免4元配送费,之前购买的会员服务不受影响,感谢您的支持!敬请期待更多会员特权。 ### Q1: 特权介绍 * 减配送费:饿了么会员卡绑定账户,每日前3单在「蜂鸟专送」标识商家可减配送费,每单最高可减4元。 * 更多特权,敬请期待! ### Q2: 会员资费 * 月卡20元(一个月按31天计算) ### Q3: 购卡说明 * 在线购买:饿了么App > 我的 > 饿了么会员卡。 * 请认准饿了么官方认证渠道,任何从其他第三方途径获得的会员卡,饿了么不保证其可用性。",
memberFullCutCaption: "会员说明",
memberFullCutContent: "### Q1: 特权介绍 * 免配送费:饿了么会员卡绑定账户,每日前3单在「蜂鸟专送」标识商家免配送费。 * 更多特权,敬请期待! ### Q2: 温馨提示 * 用户在当前会员服务失效前,无法购买新卡。 * 请认准饿了么官方渠道,任何从其他第三方途径获得的会员卡,饿了么不保证其可用性。",
memberPartCutCaption: "会员说明",
memberPartCutContent: "### Q1: 特权介绍 * 减免配送费: 饿了么会员卡绑定账户,每日前3单在「蜂鸟专送」标识商家可减免配送费,每单最高可减免4元。 * 更多特权,敬请期待! ### Q2: 温馨提示 * 用户在当前会员服务失效前,无法购买新卡。 * 请认准饿了么官方渠道,任何从其他第三方途径获得的会员卡,饿了么不保证其可用性。",
memberTimesCaption: "会员说明",
memberTimesContent: "> 尊敬的用户,随着会员体系逐渐完善,自2016年10月10日起,饿了么会员权益将做如下优化: 购卡后31天内,累积享有30单减免配送费服务(每日最多3单,每单最高减免4元)。 > 注:已购买的会员服务不受影响,当前会员服务失效前无法购买新卡。 ### Q1: 特权介绍 * 身份标识:饿了么会员服务有效期内,享有专属皇冠标识。 * 减免配送费: 饿了么会员卡自绑定账户之日起31天内,在「蜂鸟专送」标识商家下单,享有30次减免配送费特权,每日最多减免3单,每单最高可减4元。 * 更多特权,敬请期待! ### Q2: 资费介绍 * 饿了么会员卡:20元 ### Q3: 使用说明 当用户满足以下任一条件,会员服务自动失效: 1. 自绑定之日起超过31天; 2. 在31天内累计使用减免配送费的蜂鸟订单数量达到30单; ### Q4: 购卡说明 * 在线购买:饿了么App>我的>饿了么会员卡 ### Q5: 温馨提示 * 用户在当前会员服务失效前,无法购买新卡。 * 请认准饿了么官方渠道,任何从其他第三方途径获得的会员卡,饿了么不保证其可用性。",
ontimeCaption: "准时达问题",
ontimeContent: "### Q1: 准时达规则: 饿了么用户在饿了么App带有「准时达」标签的商家下单,若商品送达时间超过承诺送达时间10分钟,我们将为您赔付一个无门槛红包。 ### Q2: 关于准时达的特殊情况: a. 预订单暂不参加赔付; b. 夜间部分时段下单暂不参加赔付; c. 恶劣天气(雨、雪等)暂不参加赔付; d. 每位用户每天最多赔付3个红包; ### Q3: 常见问题Q&A Q1:我怎么收到赔付红包? A1:当确认送达商品时已超过承诺送达时间10分钟,我们将向您的饿了么账户发放一个无门槛红包,同时会有短信通知到您的手机号码。 ### 饿了么保留法律允许范围内对活动的解释权",
otherCaption: "其它问题",
otherContent: "### Q1: 什么是订单数 订单数是指商家最近30天的订单总数,这个数据是动态的,每天都会进行更新。 ### Q2: 商品多久内可以评价?评价后是否能修改? * 下单确认收货后,7天内可以对商品进行评价。超过7天,评价功能自动失效。 * 美食一旦点评就不能做修改,评价不可删除撤销,请知悉。 ### Q3: 为什么提示下单次数过多,无法下单? 在24小时内,同一手机号在同一设备上最多可以成功提交7次订单。",
paymentCaption: "支付问题",
paymentContent: "### Q1: 使用余额支付不了? 先确认下您的饿了么账户是否有绑定手机号,使用余额支付必须先绑定手机号。 ### Q2: 在线支付订单取消后,钱怎么返还? 使用饿了么账户余额支付(包括:余额、余额+红包),订单无效后,所有款项(包括红包)将退到您的饿了么账户;使用第三方支付(包括:第三方支付、第三方支付+红包),订单无效后,支付款项将于2个工作日内返还到您的第三方支付账户,红包退还到饿了么账户。 ### Q3: 在线支付的过程中,订单显示未支付成功,款项却被扣了,怎么办? 该问题属于第三方(银行/支付宝/微信等)数据传输延迟问题。您可以再等待一下, 如果超过半个小时,订单还是未支付状态,第三方会把款项返还到您的付款账户。具体到账时间依银行而定,一般会在2个工作日内。 ### Q4: 每天限制优惠3单,前面下了一个在线支付的单子,由于未付款,订单自动取消了,这单会计算我的参与活动次数吗? 不会,您可以在「订单列表页」或者「订单详情页」查看,当订单状态变为「订单已取消」时,系统会自动将您之前享受的优惠返还到您的账户中,下一次下单依然可以使用。自己取消订单、超时未付款自动取消订单、商家取消订单,这些情况都会返还优惠次数。 ### Q5: 饿了么账户里的款项怎么提现? 在个人中心 > 我的余额 > 提现处进行提现操作。操作日起2个工作日内,款项会返还至您最近消费过的账户中。 ### Q6: 支付宝免密支付功能如何使用? 首次进入支付收银台并使用支付宝支付时,系统会默认进入免密支付签约页面,您可以根据自身支付喜好选择是否签约免密支付功能。如您不签约该功能,之后会默认使用正常支付宝支付流程。此外,您还可以通过“个人中心”-“小额免密支付”中的免密支付开关,随时进行“签约”、“解约”支付宝免密支付操作。",
phototutorialCaption: "教我拍大片",
phototutorialContent: " ## 1. 清晰 拍照时持稳手机,避免出现大幅度晃动。将焦点对准食物本身,锁焦后、点击快门。
 ## 2. 光线 尽量选择明亮、柔和的光线,避免强光直射;拍摄时避免身体或器物的阴影遮住食物本身,有条件时,可以用小型手电进行补光,以提高食物质感。
 ## 3. 构图 构图可以选择通用的三分构图法或中心构图法,如果是拍摄整体食物时,需要考虑食物的完整性;如果拍摄特写时,需要将细节体现清楚。
 ## 4.角度 可以选择45度拍摄、90度俯拍或者水平拍摄,一切都看你的心情哦~
 ## 5. 背景 可以选择合适的背景拍摄,例如黑色能体现食物蒸腾的热气,白色让食物更有质感,米色更加温馨等;但背景尽量不要太乱,以免影响整体效果。
 ## 6. 细节 餐具的搭配使用、人物的烘托、道具的陪衬等都能使食物更具诱惑力,照片更有氛围。",
pointtextCaption: "积分问题",
pointtextContent: "### Q1: 怎么获得积分? 在线支付的订单将获得订单积分奖励: * 积分将在用户完成评价后获得,会根据订单实际支付金额和评价的质量发放。 * 每位用户每天最多可以获得2000积分,体验商家的订单和评价不会增加积分。 ### Q2: 积分用来做什么? 可以在积分商城兑换各种礼品。 ### Q3: 礼品兑换很多天了还没有收到,该怎么办? 礼品从兑换日起,3个工作日(周末不算)内处理发货,发货后,通常会在3个工作日左右送达。 ### Q4: 礼品兑换中的手机充值卡兑换,怎么样进行充值,充值之前会和我电话确认嘛? 不会,手机充值卡兑换,是直接充值到您填写的手机号上,充值之前不会和您电话确认,所以您在填写电话的时候,请确认电话是否正确。",
rankCaption: "用户等级说明",
rankContent: "用户等级是你在饿了么的身份表现,为了感谢您长期以来对饿了么的信赖和支持,我们会根据你的等级回馈相应福利和特权,功能还在内测中,暂定规则如下: ### 用户等级的划分: 用户等级按月度计算,每个自然月的最后一天会统计你当月的累计消费金额(限在线支付金额,不包含活动优惠及红包及代金券抵扣),决定你次月的等级,具体要求如下。 * Lv0 月累计消费100元以下; * Lv1 月累计消费大于等于100,小于200元 * Lv2 月累计消费大于等于200,小于500元 * Lv3 月累计消费大于等于500 ### 升级及降级规则: 每笔订单完成后,系统会自动计算你当月有效的消费金额(限在线支付金额,不包含活动优惠及红包及代金券抵扣),当月累计消费一旦达到下一等级要求,我们会立刻为您升级,您即时就可享受新等级的相关权益。 如你本月累计消费金额未达到当前等级要求,次月你将被降到与本月消费相匹配的对应等级。 *内测期间饿了么会调整等级权益及规则,饿了么保留对等级体系的所有解释权",
signCaption: "签到规则",
signContent: "### 如何签到领红包 用户需要支付 1 元参与活动(后续签到不收费) 活动期间每日签到,9 天后即可领取 10 元无门槛红包 如期间忘记签到,可领红包金额会减少,详细如下: - **完成 9 天签到:**10元(2个5元红包) - **漏签 1 天:**8元(2个4元红包) - **漏签 2 天:**6元(2个3元红包) - **漏签 3 天:**4元(2个2元红包) - **漏签 4 天及以上:**1个2元红包 ### 漏签后如何补签 如忘记签到,可通过下单补签,漏签当日至红包领取日前一天每1笔有效订单可补签 1 天(仅限在线支付订单),例:如您在活动第 3 天忘记签到,只要你在第 3 天至第 9 天内完成1笔有效的订单,即可完成补签。 ### 每日签到拿福利: - 签到期间,每日 10:30 可抢 5 元红包,每日限领取 1个。红包数量有限,抢完即止,要记得来早哦~",
supervipCaption: "超级会员权益说明",
supervipContent: "## 什么是超级会员 超级会员是饿了么为了更好服务用户,推出的一项增值会员服务,包含众多会员专属权益,全面提升核心用户购物体验,加入会员后您将获得以下会员特权: ### 专享红包 * 当月购买当月生效,可立即获得4张面额5元的饿了么红包,总计20元; * 发放的4个红包皆无使用金额要求,全品类通用(早餐及帮买帮送等特殊订单除外); * 其中有2个红包限蜂鸟专送使用,其余红包无配送要求; * 发放的红包使用日期有区别,相隔14天,也就是有2个红包发放日当日即可使用,有2个需14天后才能使用。 ### 下单奖励 * 每完成5笔在线支付订单,更可领取5元红包,下单越多可领取的红包越多! * 奖励的红包无使用金额要求,全品类通用(早餐及帮买帮送订单除外)。 ### 专属活动 * 针对会员不定期会推出专属活动,可享受会员折扣商品,可获得专属红包及商家代金券等活动。 ### 积分特权 * 积分商城的会员专区将为超级会员不定期推出专属礼品,优惠多多,豪礼多多! ## 常见问题 ### 超级会员是否有配送费优惠? * 超级会员暂无配送费优惠政策,配送费按商家定价收取。 ### 为何没收到会员专享红包? * 专享红包按月发放,如用户购买多月会员,则每月会员生效日可获得对应的4个专享红包。 ### 如何获得下单奖励红包? * 会员有效期内,用户每完成5笔在线支付订单,用户可去会员主页领取5元红包,如会员已过期,则无法领取。 ### 超级会员如何退订? * 会员到期后,如用户不再续费则自动退订,会员有效期内无法退订会员,已缴纳的会费不能返还。 ### 红包有无使用限制? * 专享红包及下单奖励红包无金额门槛要求,但每笔订单需最少支付0.01元,如抵扣金额小于红包金额,则需支付0.01元; * 每个红包只能使用一次,不能叠加或拆分使用; * 红包需在有效期内使用,过期红包即刻失效,请注意红包有效期; * 每月专享红包中,有2个红包有配送限制,订单需为蜂鸟专送方可使用,其余红包无配送限制。 "
}
================================================
FILE: InitData/hongbao.js
================================================
export default [
{
id: 7160761341773,
sn: "201705211244186655961161757573",
user_id: 186655961,
amount: 2,
sum_condition: 40,
name: "分享红包",
phone: "13681711254",
begin_date: "2017-05-21",
end_date: "2017-05-23",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "剩3日",
validity_periods: "2017-05-23到期",
sum_condition: "满 40 元可用"
},
limit_map: { },
status: 0,
present_status: 1,
share_status: 0,
schema: "eleme://restaurants?target_name=%E9%99%84%E8%BF%91%E5%95%86%E5%AE%B6&target=%7B%7D"
},
{
id: 7160771283789,
sn: "201705211244186655961313417766",
user_id: 186655961,
amount: 1,
sum_condition: 20,
name: "分享红包",
phone: "13681711254",
begin_date: "2017-05-21",
end_date: "2017-05-23",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "剩3日",
validity_periods: "2017-05-23到期",
sum_condition: "满 20 元可用"
},
limit_map: { },
status: 0,
present_status: 1,
share_status: 0,
schema: "eleme://restaurants?target_name=%E9%99%84%E8%BF%91%E5%95%86%E5%AE%B6&target=%7B%7D"
},
{
id: 7160754582349,
sn: "201705211243186655961753696656",
user_id: 186655961,
amount: 4.5,
sum_condition: 30,
name: "分享红包",
phone: "13681711254",
begin_date: "2017-05-21",
end_date: "2017-05-23",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "剩3日",
validity_periods: "2017-05-23到期",
sum_condition: "满 30 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:快餐便当、特色菜系、小吃夜宵、甜品饮品、异国料理"
},
status: 0,
present_status: 1,
share_status: 0,
schema: "eleme://restaurants?target_name=%E5%BF%AB%E9%A4%90%E4%BE%BF%E5%BD%93%E7%89%B9%E8%89%B2%E8%8F%9C%E7%B3%BB%E5%B0%8F%E5%90%83%E5%A4%9C%E5%AE%B5%E7%94%9C%E5%93%81%E9%A5%AE%E5%93%81%E5%BC%82%E5%9B%BD%E6%96%99%E7%90%86&target=%7B%22category_schema%22%3A%7B%22is_show_all_category%22%3Atrue%2C%22complex_category_ids%22%3A%5B207%2C220%2C233%2C239%2C260%5D%2C%22category_name%22%3A%22%5Cu5feb%5Cu9910%5Cu4fbf%5Cu5f53%5Cu7279%5Cu8272%5Cu83dc%5Cu7cfb%5Cu5c0f%5Cu5403%5Cu591c%5Cu5bb5%5Cu751c%5Cu54c1%5Cu996e%5Cu54c1%5Cu5f02%5Cu56fd%5Cu6599%5Cu7406%22%7D%7D"
},
{
id: 7114345941837,
sn: "201705180135186655961227785920",
user_id: 186655961,
amount: 5,
sum_condition: 24,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-18",
end_date: "2017-05-20",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-3天后可用",
validity_periods: "2017-05-20到期",
sum_condition: "满 24 元可用"
},
limit_map: { },
status: 0,
present_status: 4,
share_status: 0
},
{
id: 7114345943885,
sn: "201705180135186655961682785933",
user_id: 186655961,
amount: 4,
sum_condition: 18,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-18",
end_date: "2017-05-20",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-3天后可用",
validity_periods: "2017-05-20到期",
sum_condition: "满 18 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:果蔬生鲜、商店超市"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 7114345944909,
sn: "201705180135186655961379164125",
user_id: 186655961,
amount: 5,
sum_condition: 25,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-18",
end_date: "2017-05-20",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-3天后可用",
validity_periods: "2017-05-20到期",
sum_condition: "满 25 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:小吃夜宵",
time_periods: "限时段:21:00 - 02:00"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6988252000077,
sn: "201705110124186655961361787430",
user_id: 186655961,
amount: 5,
sum_condition: 25,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-11",
end_date: "2017-05-13",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-10天后可用",
validity_periods: "2017-05-13到期",
sum_condition: "满 25 元可用"
},
limit_map: { },
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6988252001101,
sn: "201705110124186655961722477791",
user_id: 186655961,
amount: 4,
sum_condition: 18,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-11",
end_date: "2017-05-13",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-10天后可用",
validity_periods: "2017-05-13到期",
sum_condition: "满 18 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:果蔬生鲜、商店超市"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6988252002125,
sn: "201705110124186655961378209054",
user_id: 186655961,
amount: 5,
sum_condition: 25,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-11",
end_date: "2017-05-13",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-10天后可用",
validity_periods: "2017-05-13到期",
sum_condition: "满 25 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:小吃夜宵",
time_periods: "限时段:21:00 - 23:59"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6826679667533,
sn: "201705040218186655961404756960",
user_id: 186655961,
amount: 5,
sum_condition: 25,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-04",
end_date: "2017-05-06",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-17天后可用",
validity_periods: "2017-05-06到期",
sum_condition: "满 25 元可用"
},
limit_map: { },
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6826679668557,
sn: "201705040218186655961625497972",
user_id: 186655961,
amount: 4,
sum_condition: 18,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-04",
end_date: "2017-05-06",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-17天后可用",
validity_periods: "2017-05-06到期",
sum_condition: "满 18 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:果蔬生鲜"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6826679669581,
sn: "201705040218186655961724208735",
user_id: 186655961,
amount: 4,
sum_condition: 20,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-04",
end_date: "2017-05-06",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-17天后可用",
validity_periods: "2017-05-06到期",
sum_condition: "满 20 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:超市便利店"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6776347937613,
sn: "201705020237186655961587770680",
user_id: 186655961,
amount: 5,
sum_condition: 25,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-02",
end_date: "2017-05-04",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-19天后可用",
validity_periods: "2017-05-04到期",
sum_condition: "满 25 元可用"
},
limit_map: { },
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6776347939661,
sn: "201705020237186655961281037962",
user_id: 186655961,
amount: 4,
sum_condition: 20,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-02",
end_date: "2017-05-04",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-19天后可用",
validity_periods: "2017-05-04到期",
sum_condition: "满 20 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:果蔬生鲜"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6776347942733,
sn: "201705020237186655961580452097",
user_id: 186655961,
amount: 4,
sum_condition: 28,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-05-02",
end_date: "2017-05-04",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-19天后可用",
validity_periods: "2017-05-04到期",
sum_condition: "满 28 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:超市便利店"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6635705093965,
sn: "201704250238186655961834564160",
user_id: 186655961,
amount: 5,
sum_condition: 25,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-04-25",
end_date: "2017-04-27",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-26天后可用",
validity_periods: "2017-04-27到期",
sum_condition: "满 25 元可用"
},
limit_map: { },
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6635705096013,
sn: "201704250238186655961925708910",
user_id: 186655961,
amount: 4,
sum_condition: 20,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-04-25",
end_date: "2017-04-27",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-26天后可用",
validity_periods: "2017-04-27到期",
sum_condition: "满 20 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:果蔬生鲜"
},
status: 0,
present_status: 4,
share_status: 0
},
{
id: 6635705097037,
sn: "201704250238186655961400865908",
user_id: 186655961,
amount: 4,
sum_condition: 28,
name: "普通红包",
phone: "13681711254",
begin_date: "2017-04-25",
end_date: "2017-04-27",
description_map: {
phone: "限收货手机号为 13681711254",
online_paid_only: "限在线支付使用",
validity_delta: "-26天后可用",
validity_periods: "2017-04-27到期",
sum_condition: "满 28 元可用"
},
limit_map: {
restaurant_flavor_ids: "限品类:超市便利店"
},
status: 0,
present_status: 4,
share_status: 0
}
]
================================================
FILE: InitData/payments.js
================================================
export default [{
description: "(商家仅支持在线支付)",
disabled_reason: "",
id: 1,
is_online_payment: true,
name: "在线支付",
promotion: [],
select_state: 1,
}, {
description: "(商家不支持货到付款)",
disabled_reason: "商家仅支持在线支付",
id: 2,
is_online_payment: false,
name: "货到付款",
promotion: [],
select_state: -1,
}]
================================================
FILE: InitData/rate.js
================================================
export const ratingList = [{"avatar":"","highlights":[],"item_ratings":[{"food_id":508807792,"food_name":"超级至尊比萨-铁盘","image_hash":"dc864033625905f0a15a2d181d53a425jpeg","is_valid":1},{"food_id":508808743,"food_name":"韩式浓情风味鸡(标准份)","image_hash":"074e0e203f613deff4e456c31e4177d1jpeg","is_valid":1}],"rated_at":"2017-02-10","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"按时送达","username":"4*******b"},{"avatar":"15f6cf782b0c9cd5ca8daa7f76ab05aejpeg","highlights":[],"item_ratings":[{"food_id":508809467,"food_name":"香草凤尾虾-5只装","image_hash":"","is_valid":1},{"food_id":508808754,"food_name":"鸡茸蘑菇汤","image_hash":"5388b26ad173389d89e0e015dbf295fcjpeg","is_valid":1}],"rated_at":"2017-02-09","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":"t****n"},{"avatar":"","highlights":[],"item_ratings":[{"food_id":508809480,"food_name":"冰柠檬红茶(标准份)","image_hash":"","is_valid":1}],"rated_at":"2017-01-18","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":",******C"},{"avatar":"","highlights":[],"item_ratings":[],"rated_at":"2017-02-10","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":"试******春"},{"avatar":"1b523ca27369a0eed1ce0c3fc0a5ba8bjpeg","highlights":[],"item_ratings":[{"food_id":529149980,"food_name":"富贵“鸡”祥大吉大利比萨","image_hash":"","is_valid":1},{"food_id":144654782,"food_name":"热柠檬红茶","image_hash":"","is_valid":1}],"rated_at":"2017-02-10","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":"王******a"},{"avatar":"","highlights":[],"item_ratings":[{"food_id":508808726,"food_name":"加州风情香烤牛肉比萨-铁盘","image_hash":"","is_valid":1},{"food_id":508810265,"food_name":"海鲜至尊比萨-铁盘","image_hash":"","is_valid":1},{"food_id":508807792,"food_name":"超级至尊比萨-铁盘","image_hash":"","is_valid":1}],"rated_at":"2017-02-10","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":"3*******7"},{"avatar":"","highlights":[],"item_ratings":[{"food_id":529149980,"food_name":"富贵“鸡”祥大吉大利比萨","image_hash":"","is_valid":1},{"food_id":508808743,"food_name":"韩式浓情风味鸡(标准份)","image_hash":"","is_valid":1}],"rated_at":"2017-02-10","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":"3*******6"},{"avatar":"818cf0c977c77ca365557230db619a18jpeg","highlights":[],"item_ratings":[],"rated_at":"2017-02-10","rating_star":5,"rating_text":"送餐速度很快!","tags":[],"time_spent_desc":"","username":"3*******7"},{"avatar":"","highlights":[],"item_ratings":[],"rated_at":"2017-02-10","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":"3*******b"},{"avatar":"","highlights":[],"item_ratings":[],"rated_at":"2017-02-09","rating_star":5,"rating_text":"","tags":[],"time_spent_desc":"","username":"景***0"}];
export const scores = {"compare_rating":0.76869,"deliver_time":40,"food_score":4.76378,"order_rating_amount":473,"overall_score":4.72836,"service_score":4.69295};
export const tags = [{"count":473,"name":"全部","unsatisfied":false},{"count":453,"name":"满意","unsatisfied":false},{"count":20,"name":"不满意","unsatisfied":true},{"count":2,"name":"有图","unsatisfied":false},{"count":47,"name":"味道好","unsatisfied":false},{"count":32,"name":"送货快","unsatisfied":false},{"count":18,"name":"分量足","unsatisfied":false},{"count":15,"name":"包装精美","unsatisfied":false},{"count":15,"name":"干净卫生","unsatisfied":false},{"count":15,"name":"食材新鲜","unsatisfied":false},{"count":11,"name":"服务不错","unsatisfied":false}];
================================================
FILE: InitData/remark.js
================================================
export default {
remarks: [
[
"不要辣",
"少点辣",
"多点辣"
],
[
"不要香菜"
],
[
"不要洋葱"
],
[
"多点醋"
],
[
"多点葱"
],
[
"去冰",
"少冰"
]
]
}
================================================
FILE: README.md
================================================
# About
因为前端项目是根据饿了么官网接口写的,所以后台系统也保持了和官网一致的API接口。
整个项目分为两部分:前台项目接口、后台管理接口,共60多个。涉及登陆、注册、添加商品、商品展示、筛选排序、购物车、下单、用户中心等,构成一个完整的流程。
__注1:此项目纯属个人瞎搞,不用于任何商业用途。__
__注2:项目预览地址和接口需要使用https访问哦!__
# 说明
> node-elm 接口文档: [接口文档地址](https://github.com/bailicangdu/node-elm/blob/master/API.md)
> 如果对您对此项目有兴趣,可以点 "Star" 支持一下 谢谢! ^_^
> 或者您可以 "follow" 一下,我会不断开源更多的有趣的项目
> 开发环境 macOS 10.12.4 nodejs 6.10.0 Mongodb 3.4.2
> 部署环境 阿里云 CentOS 7.2 64位
> 如有问题请直接在 Issues 中提,或者您发现问题并有非常好的解决方案,欢迎 PR 👍
> 相关项目地址:[前端项目地址](https://github.com/bailicangdu/vue2-elm) 、 [后台管理系统地址](https://github.com/bailicangdu/back-manage)
## 技术栈
nodejs + express + mongodb + mongoose + es6/7 + vue + element-ui
## 项目运行
```
项目运行之前,请确保系统已经安装以下应用
1、node (6.0 及以上版本)
2、mongodb (开启状态)
3、GraphicsMagick (裁切图片)
```
```
git clone https://github.com/bailicangdu/node-elm
cd node-elm
npm install 或 yarn(推荐)
npm run dev
访问: http://localhost:8001(如果已启动前台程序,则不需打开此地址)
```
## API接口文档
接口文档地址:https://github.com/bailicangdu/node-elm/blob/master/API.md
## 数据库文件
数据库备份文件:https://cangdu.org/file/elm.zip (mongodb)
按照mongodb的方式恢复备份即可
## 效果演示
#### (可在后台管理系统添加商铺,食品等数据,并在前端地址查看效果)
### 前端网址
[前端网址戳这里](https://cangdu.org/elm/)(请用chrome手机模式预览)
###### 移动端扫描下方二维码
### 后台管理系统网址
[后台管理网址戳这里](https://cangdu.org/manage/)
## 目标功能
- [x] IP定位 -- 完成
- [x] 城市列表 -- 完成
- [x] 搜索地址 -- 完成
- [x] 上传图片 -- 完成
- [x] 添加商铺 -- 完成
- [x] 添加食品 -- 完成
- [x] 测量距离 -- 完成
- [x] 搜索美食,餐馆 -- 完成
- [x] 根据距离、销量、评分、特色菜、配送方式等进行排序和筛选 -- 完成
- [x] 评价列表 -- 完成
- [x] 食品详情 -- 完成
- [x] 商家详情 -- 完成
- [x] 购物车功能 -- 完成
- [x] 登录、注册 -- 完成
- [x] 修改密码 -- 完成
- [x] 用户信息 -- 完成
- [x] 添加、删除、修改收货地址 -- 完成
- [x] 下单 -- 完成 ✨✨
- [x] 订单信息 -- 完成
- [x] 红包 -- 完成
- [x] 商铺管理 -- 完成
- [x] 食品管理 -- 完成
- [x] 管理员权限验证 -- 完成
- [x] 超级管理员 -- 完成
- [x] 订单管理 -- 完成
- [x] 流量统计 -- 完成
- [x] 前后台路由同构 -- 完成
- [x] 部署上线 -- 完成
## 部分截图
#### 部分前台页面
#### 部分后台管理系统页面
## 项目布局
```
.
├── InitData 初始化数据
│ ├── activity.js 餐馆活动
│ ├── category.js 餐馆分类
│ ├── cities.js 城市列表
│ ├── delivery.js 配送方式
│ ├── entry.js 食品分类
│ ├── explain.js 解释说明
│ ├── hongbao.js 红包
│ ├── payments.js 支付方式
│ ├── rate.js 评论
│ └── remark.js 备注列表
├── config 运行配置
│ ├── default.js 默认配置
│ └── development.js 开发环境
├── controller 处理中心,负责路由及数据库的具体操作
│ ├── admin
│ │ └── admin.js 管理员
│ ├── bos
│ ├── eus
│ ├── member
│ │ └── vipcart.js 会员卡
│ ├── payapi
│ ├── promotion
│ │ └── hongbao.js 红包
│ ├── shopping
│ │ ├── category.js 餐馆分类
│ │ ├── food.js 食品
│ │ └── shop.js 餐馆
│ ├── statis
│ │ └── statis.js 数据统计
│ ├── ugc
│ │ └── rating.js 评论
│ ├── v1
│ │ ├── address.js 收获地址
│ │ ├── captchas.js 验证码
│ │ ├── carts.js 购物车
│ │ ├── cities.js 城市列表
│ │ ├── order.js 订单
│ │ ├── remark.js 备注
│ │ └── search.js 搜索
│ ├── v2
│ │ ├── entry.js 食品分类
│ │ └── user.js 用户信息
│ ├── v3
│ │ └── explain.js 解析说明
│ └── v4
├── logs 日志文件
├── middlewares 中间件
│ ├── check.js 权限验证
│ └── statistic.js API数据统计
├── models 模型(数据库)
│ ├── admin
│ │ └── admin.js 管理员模型
│ ├── bos
│ │ └── order.js 订单模型
│ ├── eus
│ ├── ids.js
│ ├── member
│ ├── payapi
│ ├── promotion
│ │ └── hongbao.js 红包模型
│ ├── shopping
│ │ ├── activity.js 餐馆活动模型
│ │ ├── category.js 餐馆分类模型
│ │ ├── delivery.js 配送方式模型
│ │ ├── food.js 食品模型
│ │ └── shop.js 餐馆模型
│ ├── statis
│ │ └── statis.js 数据统计模型
│ ├── ugc
│ │ └── rating.js 评论模型
│ ├── v1
│ │ ├── address.js 收获地址模型
│ │ ├── cart.js 购物车模型
│ │ ├── cities.js 城市列表模型
│ │ ├── payments.js 付款方式模型
│ │ └── remark.js 备注模型
│ ├── v2
│ │ ├── entry.js 食品分类模型
│ │ ├── user.js 用户模型
│ │ └── userInfo.js 用户信息模型
│ ├── v3
│ │ └── explain.js 解释说明模型
│ └── v4
├── mongodb 连接数据库
│ └── db.js
├── prototype 基础功能Class
│ ├── addressComponent.js 与腾讯、百度地图API相关的Class
│ └── baseComponent.js 底层类
├── public 静态资源目录
├── routes 路由配置
│ ├── admin.js 管理员
│ ├── bos.js 订单
│ ├── eus.js 用户
│ ├── index.js 路由配置主文件
│ ├── member.js 会员卡
│ ├── payapi.js 付款
│ ├── promotion.js 红包
│ ├── shopping.js 餐馆、食品、Menu
│ ├── statis.js 数据统计
│ ├── ugc.js 评论
│ ├── v1.js 城市、用户、收获地址
│ ├── v2.js 登陆、退出
│ ├── v3.js 解释说明
│ └── v4.js 餐馆
├── screenshots 项目截图
├── views
├── .babelrc
├── .gitignore
├── API.md 接口文档
├── app.js 基础配置
├── COPYING GPL协议
├── index.js 入口文件
├── package.json
├── README.md
.
47 directories, 197 files
```
## License
[GPL](https://github.com/bailicangdu/node-elm/blob/master/COPYING)
================================================
FILE: app.js
================================================
import express from 'express';
import db from './mongodb/db.js';
import config from 'config-lite';
import router from './routes/index.js';
import cookieParser from 'cookie-parser'
import session from 'express-session';
import connectMongo from 'connect-mongo';
import winston from 'winston';
import expressWinston from 'express-winston';
import history from 'connect-history-api-fallback';
import chalk from 'chalk';
// import Statistic from './middlewares/statistic'
const app = express();
app.all('*', (req, res, next) => {
const { origin, Origin, referer, Referer } = req.headers;
const allowOrigin = origin || Origin || referer || Referer || '*';
res.header("Access-Control-Allow-Origin", allowOrigin);
res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("Access-Control-Allow-Credentials", true); //可以带cookies
res.header("X-Powered-By", 'Express');
if (req.method == 'OPTIONS') {
res.sendStatus(200);
} else {
next();
}
});
// app.use(Statistic.apiRecord)
const MongoStore = connectMongo(session);
app.use(cookieParser());
app.use(session({
name: config.session.name,
secret: config.session.secret,
resave: true,
saveUninitialized: false,
cookie: config.session.cookie,
store: new MongoStore({
url: config.url
})
}))
// app.use(expressWinston.logger({
// transports: [
// new (winston.transports.Console)({
// json: true,
// colorize: true
// }),
// new winston.transports.File({
// filename: 'logs/success.log'
// })
// ]
// }));
router(app);
// app.use(expressWinston.errorLogger({
// transports: [
// new winston.transports.Console({
// json: true,
// colorize: true
// }),
// new winston.transports.File({
// filename: 'logs/error.log'
// })
// ]
// }));
app.use(history());
app.use(express.static('./public'));
app.listen(config.port, () => {
console.log(
chalk.green(`成功监听端口:${config.port}`)
)
});
================================================
FILE: config/.gitignore
================================================
# Ignore everything in this directory
production.js
================================================
FILE: config/default.js
================================================
'use strict';
module.exports = {
port: parseInt(process.env.PORT, 10) || 8001,
url: 'mongodb://localhost:27017/elm',
session: {
name: 'SID',
secret: 'SID',
cookie: {
httpOnly: true,
secure: false,
maxAge: 365 * 24 * 60 * 60 * 1000,
}
}
}
================================================
FILE: config/development.js
================================================
'use strict';
module.exports = {
}
================================================
FILE: controller/admin/admin.js
================================================
'use strict';
import AdminModel from '../../models/admin/admin'
import AddressComponent from '../../prototype/addressComponent'
import crypto from 'crypto'
import formidable from 'formidable'
import dtime from 'time-formater'
class Admin extends AddressComponent {
constructor(){
super()
this.login = this.login.bind(this)
this.register = this.register.bind(this)
this.encryption = this.encryption.bind(this)
this.updateAvatar = this.updateAvatar.bind(this)
}
async login(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
if (err) {
res.send({
status: 0,
type: 'FORM_DATA_ERROR',
message: '表单信息错误'
})
return
}
const {user_name, password, status = 1} = fields;
try{
if (!user_name) {
throw new Error('用户名参数错误')
}else if(!password){
throw new Error('密码参数错误')
}
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'GET_ERROR_PARAM',
message: err.message,
})
return
}
const newpassword = this.encryption(password);
try{
const admin = await AdminModel.findOne({user_name})
if (!admin) {
const adminTip = status == 1 ? '管理员' : '超级管理员'
const admin_id = await this.getId('admin_id');
const cityInfo = await this.guessPosition(req);
const newAdmin = {
user_name,
password: newpassword,
id: admin_id,
create_time: dtime().format('YYYY-MM-DD HH:mm'),
admin: adminTip,
status,
city: cityInfo.city
}
await AdminModel.create(newAdmin)
req.session.admin_id = admin_id;
res.send({
status: 1,
success: '注册管理员成功',
})
}else if(newpassword.toString() != admin.password.toString()){
console.log('管理员登录密码错误');
res.send({
status: 0,
type: 'ERROR_PASSWORD',
message: '该用户已存在,密码输入错误',
})
}else{
req.session.admin_id = admin.id;
res.send({
status: 1,
success: '登录成功'
})
}
}catch(err){
console.log('登录管理员失败', err);
res.send({
status: 0,
type: 'LOGIN_ADMIN_FAILED',
message: '登录管理员失败',
})
}
})
}
async register(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
if (err) {
res.send({
status: 0,
type: 'FORM_DATA_ERROR',
message: '表单信息错误'
})
return
}
const {user_name, password, status = 1} = fields;
try{
if (!user_name) {
throw new Error('用户名错误')
}else if(!password){
throw new Error('密码错误')
}
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'GET_ERROR_PARAM',
message: err.message,
})
return
}
try{
const admin = await AdminModel.findOne({user_name})
if (admin) {
console.log('该用户已经存在');
res.send({
status: 0,
type: 'USER_HAS_EXIST',
message: '该用户已经存在',
})
}else{
const adminTip = status == 1 ? '管理员' : '超级管理员'
const admin_id = await this.getId('admin_id');
const newpassword = this.encryption(password);
const newAdmin = {
user_name,
password: newpassword,
id: admin_id,
create_time: dtime().format('YYYY-MM-DD'),
admin: adminTip,
status,
}
await AdminModel.create(newAdmin)
req.session.admin_id = admin_id;
res.send({
status: 1,
message: '注册管理员成功',
})
}
}catch(err){
console.log('注册管理员失败', err);
res.send({
status: 0,
type: 'REGISTER_ADMIN_FAILED',
message: '注册管理员失败',
})
}
})
}
encryption(password){
const newpassword = this.Md5(this.Md5(password).substr(2, 7) + this.Md5(password));
return newpassword
}
Md5(password){
const md5 = crypto.createHash('md5');
return md5.update(password).digest('base64');
}
async singout(req, res, next){
try{
delete req.session.admin_id;
res.send({
status: 1,
success: '退出成功'
})
}catch(err){
console.log('退出失败', err)
res.send({
status: 0,
message: '退出失败'
})
}
}
async getAllAdmin(req, res, next){
const {limit = 20, offset = 0} = req.query;
try{
const allAdmin = await AdminModel.find({}, '-_id -password').sort({id: -1}).skip(Number(offset)).limit(Number(limit))
res.send({
status: 1,
data: allAdmin,
})
}catch(err){
console.log('获取超级管理列表失败', err);
res.send({
status: 0,
type: 'ERROR_GET_ADMIN_LIST',
message: '获取超级管理列表失败'
})
}
}
async getAdminCount(req, res, next){
try{
const count = await AdminModel.count()
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取管理员数量失败', err);
res.send({
status: 0,
type: 'ERROR_GET_ADMIN_COUNT',
message: '获取管理员数量失败'
})
}
}
async getAdminInfo(req, res, next){
const admin_id = req.session.admin_id;
if (!admin_id || !Number(admin_id)) {
// console.log('获取管理员信息的session失效');
res.send({
status: 0,
type: 'ERROR_SESSION',
message: '获取管理员信息失败'
})
return
}
try{
const info = await AdminModel.findOne({id: admin_id}, '-_id -__v -password');
if (!info) {
throw new Error('未找到当前管理员')
}else{
res.send({
status: 1,
data: info
})
}
}catch(err){
console.log('获取管理员信息失败');
res.send({
status: 0,
type: 'GET_ADMIN_INFO_FAILED',
message: '获取管理员信息失败'
})
}
}
async updateAvatar(req, res, next){
const admin_id = req.params.admin_id;
if (!admin_id || !Number(admin_id)) {
console.log('admin_id参数错误', admin_id)
res.send({
status: 0,
type: 'ERROR_ADMINID',
message: 'admin_id参数错误',
})
return
}
try{
const image_path = await this.getPath(req);
await AdminModel.findOneAndUpdate({id: admin_id}, {$set: {avatar: image_path}});
res.send({
status: 1,
image_path,
})
return
}catch(err){
console.log('上传图片失败', err);
res.send({
status: 0,
type: 'ERROR_UPLOAD_IMG',
message: '上传图片失败'
})
return
}
}
}
export default new Admin()
================================================
FILE: controller/member/vipcart.js
================================================
'use strict'
class VipCart {
constructor(props) {
}
async useCart(req, res, next){
res.send({
status: 0,
type: 'INVALID_CART',
message: '无效的卡号'
})
}
}
export default new VipCart()
================================================
FILE: controller/promotion/hongbao.js
================================================
'use strict'
import HongbaoModel from '../../models/promotion/hongbao'
import BaseComponent from '../../prototype/baseComponent'
class Hongbao extends BaseComponent{
constructor(){
super()
this.getHongbao = this.getHongbao.bind(this);
this.getExpiredHongbao = this.getExpiredHongbao.bind(this);
}
async getHongbao(req, res, next){
this.hongbaoHandle(req, res, 'intime')
}
async getExpiredHongbao(req, res, next){
this.hongbaoHandle(req, res, 'expired')
}
async hongbaoHandle(req, res, type){
const present_status = type == 'intime'? 1 : 4;
const user_id = req.params.user_id;
const {limit = 0, offset = 0} = req.query;
try{
if(!user_id || !Number(user_id)){
throw new Error('user_id参数错误')
}else if(!Number(limit)){
throw new Error('limit参数错误')
}else if(typeof Number(offset) !== 'number'){
throw new Error('offset参数错误')
}
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
try{
const hongbaos = await HongbaoModel.find({present_status}, '-_id').limit(Number(limit)).skip(Number(offset));
res.send(hongbaos)
}catch(err){
console.log('获取红包数据失败');
res.send({
status: 0,
type: 'ERROR_TO_GET_HONGBAO_DATA',
message: '获取红包数据失败'
})
}
}
async exchange(req, res, next){
res.send({
status: 0,
type: 'NOT_ALLOWD_API',
message: '无效的兑换码'
})
}
}
export default new Hongbao()
================================================
FILE: controller/shopping/category.js
================================================
'use strict';
import CategoryModel from '../../models/shopping/category'
import BaseComponent from '../../prototype/baseComponent'
import DeliveryModel from '../../models/shopping/delivery'
import ActivityModel from '../../models/shopping/activity'
class Category extends BaseComponent{
constructor(){
super()
}
//获取所有餐馆分类和数量
async getCategories(req, res, next){
try{
const categories = await CategoryModel.find({}, '-_id');
res.send(categories);
}catch(err){
console.log('获取categories失败');
res.send({
status: 0,
type: 'ERROR_DATA',
message: '获取categories失败'
})
}
}
async addCategory(type){
try{
await CategoryModel.addCategory(type)
}catch(err){
console.log('增加category数量失败');
}
}
async findById(id){
try{
const CateEntity = await CategoryModel.findOne({'sub_categories.id': id});
let categoName = CateEntity.name;
CateEntity.sub_categories.forEach(item => {
if (item.id == id) {
categoName += '/' + item.name;
}
})
return categoName
}catch(err){
console.log('通过category id获取数据失败')
throw new Error(err)
}
}
//获取配送方式
async getDelivery(req, res, next){
try{
const deliveries = await DeliveryModel.find({}, '-_id');
res.send(deliveries)
}catch(err){
console.log('获取配送方式数据失败');
res.send({
status: 0,
type: 'ERROR_DATA',
message: '获取配送方式数据失败'
})
}
}
//获取活动列表
async getActivity(req, res, next){
try{
const activities = await ActivityModel.find({}, '-_id');
res.send(activities)
}catch(err){
console.log('获取活动数据失败');
res.send({
status: 0,
type: 'ERROR_DATA',
message: '获取活动数据失败'
})
}
}
}
export default new Category()
================================================
FILE: controller/shopping/food.js
================================================
'use strict';
import {Food as FoodModel, Menu as MenuModel} from '../../models/shopping/food'
import ShopModel from '../../models/shopping/shop'
import BaseComponent from '../../prototype/baseComponent'
import formidable from 'formidable'
class Food extends BaseComponent{
constructor(){
super();
this.defaultData = [{
name: '热销榜',
description: '大家喜欢吃,才叫真好吃。',
icon_url: "5da3872d782f707b4c82ce4607c73d1ajpeg",
is_selected: true,
type: 1,
foods: [],
}, {
name: '优惠',
description: '美味又实惠, 大家快来抢!',
icon_url: "4735c4342691749b8e1a531149a46117jpeg",
type: 1,
foods: [],
}]
this.initData = this.initData.bind(this);
this.addFood = this.addFood.bind(this);
this.getCategory = this.getCategory.bind(this);
this.addCategory = this.addCategory.bind(this);
this.getSpecfoods = this.getSpecfoods.bind(this);
this.updateFood = this.updateFood.bind(this);
}
async initData(restaurant_id){
for (let i = 0; i < this.defaultData.length; i++) {
let category_id;
try{
category_id = await this.getId('category_id');
}catch(err){
console.log('获取category_id失败');
throw new Error(err);
}
const defaultData = this.defaultData[i];
const Category = {...defaultData, id: category_id, restaurant_id};
const newFood = new MenuModel(Category);
try{
await newFood.save();
console.log('初始化食品数据成功');
}catch(err){
console.log('初始化食品数据失败');
throw new Error(err);
}
}
}
async getCategory(req, res, next){
const restaurant_id = req.params.restaurant_id;
try{
const category_list = await MenuModel.find({restaurant_id});
res.send({
status: 1,
category_list,
})
}catch(err){
console.log('获取餐馆食品种类失败');
res.send({
status: 0,
type: 'ERROR_GET_DATA',
message: '获取数据失败'
})
}
}
async addCategory(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
try{
if (!fields.name) {
throw new Error('必须填写食品类型名称');
}else if(!fields.restaurant_id){
throw new Error('餐馆ID错误');
}
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
let category_id;
try{
category_id = await this.getId('category_id');
}catch(err){
console.log('获取category_id失败');
res.send({
type: 'ERROR_DATA',
message: '获取数据失败'
})
return
}
const foodObj = {
name: fields.name,
description: fields.description,
restaurant_id: fields.restaurant_id,
id: category_id,
foods: [],
}
const newFood = new MenuModel(foodObj);
try{
await newFood.save();
res.send({
status: 1,
success: '添加食品种类成功',
})
}catch(err){
console.log('保存数据失败');
res.send({
status: 0,
type: 'ERROR_IN_SAVE_DATA',
message: '保存数据失败',
})
}
})
}
async addFood(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
try{
if (!fields.name) {
throw new Error('必须填写食品名称');
}else if(!fields.image_path){
throw new Error('必须上传食品图片');
}else if(!fields.specs.length){
throw new Error('至少填写一种规格');
}else if(!fields.category_id){
throw new Error('食品类型ID错误');
}else if(!fields.restaurant_id){
throw new Error('餐馆ID错误');
}
}catch(err){
console.log('前台参数错误', err.message);
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
let category;
let restaurant;
try{
category = await MenuModel.findOne({id: fields.category_id});
restaurant = await ShopModel.findOne({id: fields.restaurant_id});
}catch(err){
console.log('获取食品类型和餐馆信息失败');
res.send({
status: 0,
type: 'ERROR_DATA',
message: '添加食品失败'
})
return
}
let item_id;
try{
item_id = await this.getId('item_id');
}catch(err){
console.log('获取item_id失败');
res.send({
status: 0,
type: 'ERROR_DATA',
message: '添加食品失败'
})
return
}
const rating_count = Math.ceil(Math.random()*1000);
const month_sales = Math.ceil(Math.random()*1000);
const tips = rating_count + "评价 月售" + month_sales + "份";
const newFood = {
name: fields.name,
description: fields.description,
image_path: fields.image_path,
activity: null,
attributes: [],
restaurant_id: fields.restaurant_id,
category_id: fields.category_id,
satisfy_rate: Math.ceil(Math.random()*100),
satisfy_count: Math.ceil(Math.random()*1000),
item_id,
rating: (4 + Math.random()).toFixed(1),
rating_count,
month_sales,
tips,
specfoods: [],
specifications: [],
}
if (fields.activity) {
newFood.activity = {
image_text_color: 'f1884f',
icon_color: 'f07373',
image_text: fields.activity,
}
}
if (fields.attributes.length) {
fields.attributes.forEach(item => {
let attr;
switch(item){
case '新':
attr = {
icon_color: '5ec452',
icon_name: '新'
}
break;
case '招牌':
attr = {
icon_color: 'f07373',
icon_name: '招牌'
}
break;
}
newFood.attributes.push(attr);
})
}
try{
const [specfoods, specifications] = await this.getSpecfoods(fields, item_id);
newFood.specfoods = specfoods;
newFood.specifications = specifications;
}catch(err){
console.log('添加specs失败', err);
res.send({
status: 0,
type: 'ERROR_DATA',
message: '添加食品失败'
})
return
}
try{
const foodEntity = await FoodModel.create(newFood);
category.foods.push(foodEntity);
category.markModified('foods');
await category.save();
res.send({
status: 1,
success: '添加食品成功',
});
}catch(err){
console.log('保存食品到数据库失败', err);
res.send({
status: 0,
type: 'ERROR_DATA',
message: '添加食品失败'
})
}
})
}
async getSpecfoods(fields, item_id){
let specfoods = [], specifications = [];
if (fields.specs.length < 2) {
let food_id, sku_id;
try{
sku_id = await this.getId('sku_id');
food_id = await this.getId('food_id');
}catch(err){
throw new Error('获取sku_id、food_id失败')
}
specfoods.push({
packing_fee: fields.specs[0].packing_fee,
price: fields.specs[0].price,
specs: [],
specs_name: fields.specs[0].specs,
name: fields.name,
item_id,
sku_id,
food_id,
restaurant_id: fields.restaurant_id,
recent_rating: (Math.random()*5).toFixed(1),
recent_popularity: Math.ceil(Math.random()*1000),
})
}else{
specifications.push({
values: [],
name: "规格"
})
for (let i = 0; i < fields.specs.length; i++) {
let food_id, sku_id;
try{
sku_id = await this.getId('sku_id');
food_id = await this.getId('food_id');
}catch(err){
throw new Error('获取sku_id、food_id失败')
}
specfoods.push({
packing_fee: fields.specs[i].packing_fee,
price: fields.specs[i].price,
specs: [{
name: "规格",
value: fields.specs[i].specs
}],
specs_name: fields.specs[i].specs,
name: fields.name,
item_id,
sku_id,
food_id,
restaurant_id: fields.restaurant_id,
recent_rating: (Math.random()*5).toFixed(1),
recent_popularity: Math.ceil(Math.random()*1000),
})
specifications[0].values.push(fields.specs[i].specs);
}
}
return [specfoods, specifications]
}
async getMenu(req, res, next){
const restaurant_id = req.query.restaurant_id;
const allMenu = req.query.allMenu;
if (!restaurant_id || !Number(restaurant_id)) {
console.log('获取餐馆参数ID错误');
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '餐馆ID参数错误',
})
return
}
let filter;
if (allMenu) {
filter = {restaurant_id}
}else{
filter = {restaurant_id, $where: function(){return this.foods.length}};
}
try{
const menu = await MenuModel.find(filter, '-_id');
res.send(menu);
}catch(err){
console.log('获取食品数据失败', err);
res.send({
status: 0,
type: 'GET_DATA_ERROR',
message: '获取食品数据失败'
})
}
}
async getMenuDetail(req, res, next){
const category_id = req.params.category_id;
if (!category_id || !Number(category_id)) {
console.log('获取Menu详情参数ID错误');
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: 'Menu ID参数错误',
})
return
}
try{
const menu = await MenuModel.findOne({id: category_id}, '-_id');
res.send(menu)
}catch(err){
console.log('获取Menu详情失败', err);
res.send({
status: 0,
type: 'GET_DATA_ERROR',
message: '获取Menu详情失败'
})
}
}
async getFoods(req, res, next){
const {restaurant_id, limit = 20, offset = 0} = req.query;
try{
let filter = {};
if (restaurant_id && Number(restaurant_id)) {
filter = {restaurant_id}
}
const foods = await FoodModel.find(filter, '-_id').sort({item_id: -1}).limit(Number(limit)).skip(Number(offset));
res.send(foods);
}catch(err){
console.log('获取食品数据失败', err);
res.send({
status: 0,
type: 'GET_DATA_ERROR',
message: '获取食品数据失败'
})
}
}
async getFoodsCount(req, res, next){
const restaurant_id = req.query.restaurant_id;
try{
let filter = {};
if (restaurant_id && Number(restaurant_id)) {
filter = {restaurant_id}
}
const count = await FoodModel.find(filter).count();
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取食品数量失败', err);
res.send({
status: 0,
type: 'ERROR_TO_GET_COUNT',
message: '获取食品数量失败'
})
}
}
async updateFood(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
if (err) {
console.log('获取食品信息form出错', err);
res.send({
status: 0,
type: 'ERROR_FORM',
message: '表单信息错误',
})
return
}
const {name, item_id, description = "", image_path, category_id, new_category_id} = fields;
try{
if (!name) {
throw new Error('食品名称错误');
}else if(!item_id || !Number(item_id)){
throw new Error('食品ID错误');
}else if(!category_id || !Number(category_id)){
throw new Error('食品分类ID错误');
}else if(!image_path){
throw new Error('食品图片地址错误');
}
const [specfoods, specifications] = await this.getSpecfoods(fields, item_id);
let newData;
if (new_category_id !== category_id) {
newData = {name, description, image_path, category_id: new_category_id, specfoods, specifications};
const food = await FoodModel.findOneAndUpdate({item_id}, {$set: newData});
const menu = await MenuModel.findOne({id: category_id})
const targetmenu = await MenuModel.findOne({id: new_category_id})
let subFood = menu.foods.id(food._id);
subFood.set(newData)
targetmenu.foods.push(subFood)
targetmenu.markModified('foods');
await targetmenu.save()
await subFood.remove()
await menu.save()
}else{
newData = {name, description, image_path, specfoods, specifications};
const food = await FoodModel.findOneAndUpdate({item_id}, {$set: newData});
const menu = await MenuModel.findOne({id: category_id})
let subFood = menu.foods.id(food._id);
subFood.set(newData)
await menu.save()
}
res.send({
status: 1,
success: '修改食品信息成功',
})
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'ERROR_UPDATE_FOOD',
message: '更新食品信息失败',
})
}
})
}
async deleteFood(req, res, next){
const food_id = req.params.food_id;
if (!food_id || !Number(food_id)) {
console.log('food_id参数错误');
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: 'food_id参数错误',
})
return
}
try{
const food = await FoodModel.findOne({item_id: food_id});
const menu = await MenuModel.findOne({id: food.category_id})
let subFood = menu.foods.id(food._id);
await subFood.remove()
await menu.save()
await food.remove()
res.send({
status: 1,
success: '删除食品成功',
})
}catch(err){
console.log('删除食品失败', err);
res.send({
status: 0,
type: 'DELETE_FOOD_FAILED',
message: '删除食品失败',
})
}
}
}
export default new Food()
================================================
FILE: controller/shopping/shop.js
================================================
'use strict';
import ShopModel from '../../models/shopping/shop'
import AddressComponent from '../../prototype/addressComponent'
import Food from './food'
import formidable from 'formidable'
import CategoryHandle from './category'
import Rating from '../ugc/rating'
class Shop extends AddressComponent{
constructor(){
super()
this.addShop = this.addShop.bind(this);
this.getRestaurants = this.getRestaurants.bind(this);
this.searchResaturant = this.searchResaturant.bind(this);
}
//添加商铺
async addShop(req, res, next){
let restaurant_id;
try{
restaurant_id = await this.getId('restaurant_id');
}catch(err){
console.log('获取商店id失败');
res.send({
type: 'ERROR_DATA',
message: '获取数据失败'
})
return
}
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
try{
if (!fields.name) {
throw new Error('必须填写商店名称');
}else if(!fields.address){
throw new Error('必须填写商店地址');
}else if(!fields.phone){
throw new Error('必须填写联系电话');
}else if(!fields.latitude || !fields.longitude){
throw new Error('商店位置信息错误');
}else if(!fields.image_path){
throw new Error('必须上传商铺图片');
}else if(!fields.category){
throw new Error('必须上传食品种类');
}
}catch(err){
console.log('前台参数出错', err.message);
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
const exists = await ShopModel.findOne({name: fields.name});
if (exists) {
res.send({
status: 0,
type: 'RESTURANT_EXISTS',
message: '店铺已存在,请尝试其他店铺名称'
})
return
}
const opening_hours = fields.startTime&&fields.endTime? fields.startTime + '/' + fields.endTime : "8:30/20:30";
const newShop = {
name: fields.name,
address: fields.address,
description: fields.description || '',
float_delivery_fee: fields.float_delivery_fee || 0,
float_minimum_order_amount: fields.float_minimum_order_amount || 0,
id: restaurant_id,
is_premium: fields.is_premium || false,
is_new: fields.new || false,
latitude: fields.latitude,
longitude: fields.longitude,
location: [fields.longitude, fields.latitude],
opening_hours: [opening_hours],
phone: fields.phone,
promotion_info: fields.promotion_info || "欢迎光临,用餐高峰请提前下单,谢谢",
rating: (4 + Math.random()).toFixed(1),
rating_count: Math.ceil(Math.random()*1000),
recent_order_num: Math.ceil(Math.random()*1000),
status: Math.round(Math.random()),
image_path: fields.image_path,
category: fields.category,
piecewise_agent_fee: {
tips: "配送费约¥" + (fields.float_delivery_fee || 0),
},
activities: [],
supports: [],
license: {
business_license_image: fields.business_license_image || '',
catering_service_license_image: fields.catering_service_license_image || '',
},
identification: {
company_name: "",
identificate_agency: "",
identificate_date: "",
legal_person: "",
licenses_date: "",
licenses_number: "",
licenses_scope: "",
operation_period: "",
registered_address: "",
registered_number: "",
},
}
//配送方式
if (fields.delivery_mode) {
Object.assign(newShop, {delivery_mode: {
color: "57A9FF",
id: 1,
is_solid: true,
text: "蜂鸟专送"
}})
}
//商店支持的活动
fields.activities.forEach((item, index) => {
switch(item.icon_name){
case '减':
item.icon_color = 'f07373';
item.id = index + 1;
break;
case '特':
item.icon_color = 'EDC123';
item.id = index + 1;
break;
case '新':
item.icon_color = '70bc46';
item.id = index + 1;
break;
case '领':
item.icon_color = 'E3EE0D';
item.id = index + 1;
break;
}
newShop.activities.push(item);
})
if (fields.bao) {
newShop.supports.push({
description: "已加入“外卖保”计划,食品安全有保障",
icon_color: "999999",
icon_name: "保",
id: 7,
name: "外卖保"
})
}
if (fields.zhun) {
newShop.supports.push({
description: "准时必达,超时秒赔",
icon_color: "57A9FF",
icon_name: "准",
id: 9,
name: "准时达"
})
}
if (fields.piao) {
newShop.supports.push({
description: "该商家支持开发票,请在下单时填写好发票抬头",
icon_color: "999999",
icon_name: "票",
id: 4,
name: "开发票"
})
}
try{
//保存数据,并增加对应食品种类的数量
const shop = new ShopModel(newShop);
await shop.save();
CategoryHandle.addCategory(fields.category)
Rating.initData(restaurant_id);
Food.initData(restaurant_id);
res.send({
status: 1,
sussess: '添加餐馆成功',
shopDetail: newShop
})
}catch(err){
console.log('商铺写入数据库失败');
res.send({
status: 0,
type: 'ERROR_SERVER',
message: '添加商铺失败',
})
}
})
}
//获取餐馆列表
async getRestaurants(req, res, next){
const {
latitude,
longitude,
offset = 0,
limit = 20,
keyword,
restaurant_category_id,
order_by,
extras,
delivery_mode = [],
support_ids = [],
restaurant_category_ids = [],
} = req.query;
try{
if (!latitude) {
throw new Error('latitude参数错误')
}else if(!longitude){
throw new Error('longitude参数错误');
}
}catch(err){
console.log('latitude,longitude参数错误');
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
let filter = {};
//获取对应食品种类
if (restaurant_category_ids.length && Number(restaurant_category_ids[0])) {
const category = await CategoryHandle.findById(restaurant_category_ids[0]);
Object.assign(filter, {category})
}
//按照距离,评分,销量等排序
let sortBy = {};
if (Number(order_by)) {
switch(Number(order_by)){
case 1:
Object.assign(sortBy, {float_minimum_order_amount: 1});
break;
case 2:
Object.assign(filter, {location: {$near: [longitude, latitude]}});
break;
case 3:
Object.assign(sortBy, {rating: -1});
break;
case 5:
Object.assign(filter, {location: {$near: [longitude, latitude]}});
break;
case 6:
Object.assign(sortBy, {recent_order_num: -1});
break;
}
}
//查找配送方式
if (delivery_mode.length) {
delivery_mode.forEach(item => {
if (Number(item)) {
Object.assign(filter, {'delivery_mode.id': Number(item)})
}
})
}
//查找活动支持方式
if (support_ids.length) {
const filterArr = [];
support_ids.forEach(item => {
if (Number(item) && (Number(item) !== 8)) {
filterArr.push(Number(item))
}else if(Number(item) == 8){ //品牌保证特殊处理
Object.assign(filter, {is_premium: true})
}
})
if (filterArr.length) {
//匹配同时拥有多种活动的数据
Object.assign(filter, {'supports.id': {$all: filterArr}})
}
}
const restaurants = await ShopModel.find(filter, '-_id').sort(sortBy).limit(Number(limit)).skip(Number(offset))
const from = latitude + ',' + longitude;
let to = '';
//获取百度地图测局所需经度纬度
restaurants.forEach((item, index) => {
const slpitStr = (index == restaurants.length -1) ? '' : '|';
to += item.latitude + ',' + item.longitude + slpitStr;
})
try{
if (restaurants.length) {
//获取距离信息,并合并到数据中
const distance_duration = await this.getDistance(from, to)
restaurants.map((item, index) => {
return Object.assign(item, distance_duration[index])
})
}
}catch(err){
// 百度地图达到上限后会导致加车失败,需优化
console.log('从addressComoponent获取测距数据失败', err);
restaurants.map((item, index) => {
return Object.assign(item, {distance: '10公里', order_lead_time: '40分钟'})
})
}
try{
res.send(restaurants)
}catch(err){
res.send({
status: 0,
type: 'ERROR_GET_SHOP_LIST',
message: '获取店铺列表数据失败'
})
}
}
//搜索餐馆
async searchResaturant(req, res, next){
const {geohash, keyword} = req.query;
try{
if (!geohash || geohash.indexOf(',') == -1) {
throw new Error('经纬度参数错误');
}else if(!keyword){
throw new Error('关键词参数错误');
}
}catch(err){
console.log('搜索商铺参数错误');
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message,
})
return
}
try{
const restaurants = await ShopModel.find({name: eval('/' + keyword + '/gi')}, '-_id').limit(50);
if (restaurants.length) {
const [latitude, longitude] = geohash.split(',');
const from = latitude + ',' + longitude;
let to = '';
//获取百度地图测局所需经度纬度
restaurants.forEach((item, index) => {
const slpitStr = (index == restaurants.length -1) ? '' : '|';
to += item.latitude + ',' + item.longitude + slpitStr;
})
//获取距离信息,并合并到数据中
const distance_duration = await this.getDistance(from, to)
restaurants.map((item, index) => {
return Object.assign(item, distance_duration[index])
})
}
res.send(restaurants);
}catch(err){
console.log('搜索餐馆数据失败');
res.send({
status: 0,
type: 'ERROR_DATA',
message: '搜索餐馆数据失败'
})
}
}
//获取餐馆详情
async getRestaurantDetail(req, res, next){
const restaurant_id = req.params.restaurant_id;
if (!restaurant_id || !Number(restaurant_id)) {
console.log('获取餐馆详情参数ID错误');
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '餐馆ID参数错误',
})
return
}
try{
const restaurant = await ShopModel.findOne({id: restaurant_id}, '-_id');
res.send(restaurant)
}catch(err){
console.log('获取餐馆详情失败', err);
res.send({
status: 0,
type: 'GET_DATA_ERROR',
message: '获取餐馆详情失败'
})
}
}
async getShopCount(req, res, next){
try{
const count = await ShopModel.count();
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取餐馆数量失败', err);
res.send({
status: 0,
type: 'ERROR_TO_GET_COUNT',
message: '获取餐馆数量失败'
})
}
}
async updateshop(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
if (err) {
console.log('获取商铺信息form出错', err);
res.send({
status: 0,
type: 'ERROR_FORM',
message: '表单信息错误',
})
return
}
const {name, address, description = "", phone, category, id, latitude, longitude, image_path} = fields;
if (id == 1) {
res.send({
status: 0,
message: '此店铺用做展示,请不要修改'
})
return
}
try{
if (!name) {
throw new Error('餐馆名称错误');
}else if(!address){
throw new Error('餐馆地址错误');
}else if(!phone){
throw new Error('餐馆联系电话错误');
}else if(!category){
throw new Error('餐馆分类错误');
}else if(!id || !Number(id)){
throw new Error('餐馆ID错误');
}else if(!image_path){
throw new Error('餐馆图片地址错误');
}
let newData;
if (latitude && longitude) {
newData = {name, address, description, phone, category, latitude, longitude, image_path}
}else{
newData = {name, address, description, phone, category, image_path}
}
await ShopModel.findOneAndUpdate({id}, {$set: newData});
res.send({
status: 1,
success: '修改商铺信息成功',
})
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'ERROR_UPDATE_RESTAURANT',
message: '更新商铺信息失败',
})
}
})
}
async deleteResturant(req, res, next){
const restaurant_id = req.params.restaurant_id;
if (!restaurant_id || !Number(restaurant_id)) {
console.log('restaurant_id参数错误');
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: 'restaurant_id参数错误',
})
return
}
if (restaurant_id == 1) {
res.send({
status: 0,
message: '此店铺用做展示,请不要删除'
})
return
}
try{
await ShopModel.remove({id: restaurant_id});
res.send({
status: 1,
success: '删除餐馆成功',
})
}catch(err){
console.log('删除餐馆失败', err);
res.send({
status: 0,
type: 'DELETE_RESTURANT_FAILED',
message: '删除餐馆失败',
})
}
}
}
export default new Shop()
================================================
FILE: controller/statis/statis.js
================================================
'use strict'
import StatisModel from '../../models/statis/statis'
import UserInfoModel from '../../models/v2/userInfo'
import OrderModel from '../../models/bos/order'
import dtime from 'time-formater'
import AdminModel from '../../models/admin/admin'
class Statis {
constructor(){
}
async apiCount(req, res, next){
const date = req.params.date;
if (!date) {
console.log('参数错误')
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '参数错误'
})
return
}
try{
const count = await StatisModel.find({date}).count()
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取当天API请求次数失败');
res.send({
status: 0,
type: 'ERROR_GET_TODAY_API_COUNT',
message: '获取当天API请求次数失败'
})
}
}
async apiAllCount(req, res, next){
try{
const count = await StatisModel.count()
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取所有API请求次数失败');
res.send({
status: 0,
type: 'ERROR_GET_ALL_API_COUNT',
message: '获取所有API请求次数失败'
})
}
}
async allApiRecord(req, res, next){
try{
const allRecord = await StatisModel.find({}, '-_id -__v')
res.send(allRecord)
}catch(err){
console.log('获取所有API请求信息失败');
res.send({
status: 0,
type: 'GET_ALL_API_RECORD_DATA_FAILED',
message: '获取所有API请求信息失败'
})
}
}
async userCount(req, res, next){
const date = req.params.date;
if (!date) {
console.log('参数错误')
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '参数错误'
})
return
}
try{
const count = await UserInfoModel.find({registe_time: eval('/^' + date + '/gi')}).count()
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取当天注册人数失败');
res.send({
status: 0,
type: 'ERROR_GET_USER_REGISTE_COUNT',
message: '获取当天注册人数失败'
})
}
}
async adminCount(req, res, next){
const date = req.params.date;
if (!date) {
console.log('参数错误')
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '参数错误'
})
return
}
try{
const count = await AdminModel.find({create_time: eval('/^' + date + '/gi')}).count()
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取当天注册管理员人数失败');
res.send({
status: 0,
type: 'ERROR_GET_ADMIN_REGISTE_COUNT',
message: '获取当天注册管理员人数失败'
})
}
}
async orderCount(req, res, next){
const date = req.params.date;
if (!date) {
console.log('参数错误')
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '参数错误'
})
return
}
try{
const count = await OrderModel.find({formatted_created_at: eval('/^' + date + '/gi')}).count()
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取当天订单数量失败');
res.send({
status: 0,
type: 'ERROR_GET_ORDER_COUNT',
message: '获取当天订单数量失败'
})
}
}
}
export default new Statis()
================================================
FILE: controller/ugc/rating.js
================================================
'use strict';
import RatingModel from '../../models/ugc/rating'
class Rating {
constructor(){
this.type = ['ratings', 'scores', 'tags'];
this.getRatings = this.getRatings.bind(this);
this.getScores = this.getScores.bind(this);
this.getTags = this.getTags.bind(this);
}
async initData(restaurant_id){
try{
const status = await RatingModel.initData(restaurant_id);
if (status) {
console.log('初始化评论数据成功');
}
}catch(err){
console.log('初始化评论数据失败');
throw new Error(err);
}
}
async getRatings(req, res, next){
const restaurant_id = req.params.restaurant_id;
if (!restaurant_id || !Number(restaurant_id)) {
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '餐馆ID参数错误'
})
return
}
try{
const ratings = await RatingModel.getData(restaurant_id, this.type[0]);
res.send(ratings)
}catch(err){
console.log('获取评论列表失败', err);
res.send({
status: 0,
type: "ERROR_DATA",
message: '未找到当前餐馆的评论数据'
})
}
}
async getScores(req, res, next){
const restaurant_id = req.params.restaurant_id;
if (!restaurant_id || !Number(restaurant_id)) {
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '餐馆ID参数错误'
})
return
}
try{
const scores = await RatingModel.getData(restaurant_id, this.type[1]);
res.send(scores)
}catch(err){
console.log('获取评论列表失败', err);
res.send({
status: 0,
type: "ERROR_DATA",
message: '未找到当前餐馆的评论数据'
})
}
}
async getTags(req, res, next){
const restaurant_id = req.params.restaurant_id;
if (!restaurant_id || !Number(restaurant_id)) {
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '餐馆ID参数错误'
})
return
}
try{
const tags = await RatingModel.getData(restaurant_id, this.type[2]);
res.send(tags)
}catch(err){
console.log('获取评论列表失败', err);
res.send({
status: 0,
type: "ERROR_DATA",
message: '未找到当前餐馆的评论数据'
})
}
}
}
export default new Rating()
================================================
FILE: controller/v1/address.js
================================================
'use strict';
import BaseComponent from '../../prototype/baseComponent'
import AddressModel from '../../models/v1/address'
import formidable from 'formidable'
class Address extends BaseComponent{
constructor(){
super()
this.addAddress = this.addAddress.bind(this);
}
async getAddress(req, res, next){
const user_id = req.params.user_id;
if (!user_id || !Number(user_id)) {
res.send({
type: 'ERROR_USER_ID',
message: 'user_id参数错误',
})
return
}
try{
const addressList = await AddressModel.find({user_id}, '-_id');
res.send(addressList)
}catch(err){
console.log('获取收获地址失败', err);
res.send({
type: 'ERROR_GET_ADDRESS',
message: '获取地址列表失败'
})
}
}
async addAddress(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
const user_id = req.params.user_id;
const {address, address_detail, geohash, name, phone, phone_bk, poi_type = 0, sex, tag, tag_type} = fields;
try{
if (!user_id || !Number(user_id)) {
throw new Error('用户ID参数错误');
}else if(!address){
throw new Error('地址信息错误');
}else if(!address_detail){
throw new Error('详细地址信息错误');
}else if(!geohash){
throw new Error('geohash参数错误');
}else if(!name){
throw new Error('收货人姓名错误');
}else if(!phone){
throw new Error('收获手机号错误');
}else if(!sex){
throw new Error('性别错误');
}else if(!tag){
throw new Error('标签错误');
}else if(!tag_type){
throw new Error('标签类型错误');
}
}catch(err){
console.log(err.message);
res.send({
status: 0,
type: 'GET_WRONG_PARAM',
message: err.message
})
return
}
try{
const address_id = await this.getId('address_id');
const newAddress = {
id: address_id,
address,
phone,
phone_bk: phone_bk&&phone_bk,
name,
st_geohash: geohash,
address_detail,
sex,
tag,
tag_type,
user_id,
}
await AddressModel.create(newAddress);
res.send({
status: 1,
success: '添加地址成功'
})
}catch(err){
console.log('添加地址失败', err);
res.send({
status: 0,
type: 'ERROR_ADD_ADDRESS',
message: '添加地址失败'
})
}
})
}
async deleteAddress(req, res, next){
const {user_id, address_id} = req.params;
if (!user_id || !Number(user_id) || !address_id || !Number(address_id)) {
res.send({
type: 'ERROR_PARAMS',
message: '参数错误',
})
return
}
try{
await AddressModel.findOneAndRemove({id: address_id});
res.send({
status: 1,
success: '删除地址成功',
})
}catch(err){
console.log('删除收获地址失败', err);
res.send({
type: 'ERROR_DELETE_ADDRESS',
message: '删除收获地址失败'
})
}
}
async getAddAddressById(req, res, next){
const address_id = req.params.address_id;
if (!address_id || !Number(address_id)) {
res.send({
type: 'ERROR_PARAMS',
message: '参数错误',
})
return
}
try{
const address = await AddressModel.findOne({id: address_id});
res.send(address)
}catch(err){
console.log('获取地址信息失败', err);
res.send({
type: 'ERROR_GET_ADDRESS',
message: '获取地址信息失败'
})
}
}
}
export default new Address()
================================================
FILE: controller/v1/captchas.js
================================================
'use strict';
import captchapng from 'captchapng';
class Captchas {
constructor(){
}
//验证码
async getCaptchas(req, res, next){
const cap = parseInt(Math.random()*9000+1000);
const p = new captchapng(80,30, cap);
p.color(0, 0, 0, 0);
p.color(80, 80, 80, 255);
const base64 = p.getBase64();
res.cookie('cap', cap, { maxAge: 300000, httpOnly: true });
res.send({
status: 1,
code: 'data:image/png;base64,' + base64
});
}
}
export default new Captchas()
================================================
FILE: controller/v1/carts.js
================================================
'use strict';
import AddressComponent from '../../prototype/addressComponent'
import formidable from 'formidable'
import PaymentsModel from '../../models/v1/payments'
import ShopModel from '../../models/shopping/shop'
import CartModel from '../../models/v1/cart'
class Carts extends AddressComponent{
constructor(){
super();
this.extra = [{
description: '',
name: '餐盒',
price: 0,
quantity: 1,
type: 0,
}]
this.checkout = this.checkout.bind(this);
}
async checkout(req, res, next){
const UID = req.session.UID;
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
const {come_from, geohash, entities = [], restaurant_id} = fields;
try{
if(!(entities instanceof Array) || !entities.length){
throw new Error('entities参数错误')
}else if(!(entities[0] instanceof Array) || !entities[0].length){
throw new Error('entities参数错误')
}else if(!restaurant_id){
throw new Error('restaurant_id参数错误')
}
}catch(err){
console.log(err);
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
let payments; //付款方式
let cart_id; //购物车id
let restaurant; //餐馆详情
let deliver_time; //配送时间
let delivery_reach_time; //到达时间
let from = geohash.split(',')[0] + ',' + geohash.split(',')[1];
try{
payments = await PaymentsModel.find({}, '-_id');
cart_id = await this.getId('cart_id');
restaurant = await ShopModel.findOne({id: restaurant_id});
const to = restaurant.latitude+ ',' + restaurant.longitude;
deliver_time = await this.getDistance(from, to, 'tiemvalue');
let time = new Date().getTime() + deliver_time*1000;
let hour = ('0' + new Date(time).getHours()).substr(-2);
let minute = ('0' + new Date(time).getMinutes()).substr(-2);
delivery_reach_time = hour + ':' + minute;
}catch(err){
console.log('获取数据数据失败', err);
res.send({
status: 0,
type: 'ERROR_DATA',
message: '添加购物车失败',
})
return
}
const deliver_amount = 4;
let price = 0; //食品价格
entities[0].map(item => {
price += item.price * item.quantity;
if (item.packing_fee) {
this.extra[0].price += item.packing_fee*item.quantity;
}
if (item.specs[0]) {
return item.name = item.name + '-' + item.specs[0];
}
})
//食品总价格
const total = price + this.extra[0].price * this.extra[0].quantity + deliver_amount;
//是否支持发票
let invoice = {
is_available: false,
status_text: "商家不支持开发票",
};
restaurant.supports.forEach(item => {
if (item.icon_name == '票') {
invoice = {
is_available: true,
status_text: "不需要开发票",
};
}
})
const checkoutInfo = {
id: cart_id,
cart: {
id: cart_id,
groups: entities,
extra: this.extra,
deliver_amount,
is_deliver_by_fengniao: !!restaurant.delivery_mode,
original_total: total,
phone: restaurant.phone,
restaurant_id,
restaurant_info: restaurant,
restaurant_minimum_order_amount: restaurant.float_minimum_order_amount,
total,
user_id: UID,
},
delivery_reach_time,
invoice,
sig: Math.ceil(Math.random()*1000000).toString(),
payments,
}
try{
const newCart = new CartModel(checkoutInfo);
const cart = await newCart.save();
res.send(cart)
}catch(err){
console.log('保存购物车数据失败');
res.send({
status: 0,
type: 'ERROR_TO_SAVE_CART',
message: '加入购物车失败'
})
}
})
}
}
export default new Carts()
================================================
FILE: controller/v1/cities.js
================================================
'use strict';
import Cities from '../../models/v1/cities'
import pinyin from "pinyin"
import AddressComponent from '../../prototype/addressComponent'
class CityHandle extends AddressComponent{
constructor(){
super()
this.getCity = this.getCity.bind(this);
this.getExactAddress = this.getExactAddress.bind(this);
this.pois = this.pois.bind(this);
}
async getCity(req, res, next){
const type = req.query.type;
let cityInfo;
try{
switch (type){
case 'guess':
const city = await this.getCityName(req);
cityInfo = await Cities.cityGuess(city);
break;
case 'hot':
cityInfo = await Cities.cityHot();
break;
case 'group':
cityInfo = await Cities.cityGroup();
break;
default:
res.json({
name: 'ERROR_QUERY_TYPE',
message: '参数错误',
})
return
}
res.send(cityInfo);
}catch(err){
res.send({
name: 'ERROR_DATA',
message: '获取数据失败',
});
}
}
async getCityById(req, res, next){
const cityid = req.params.id;
if (isNaN(cityid)) {
res.json({
name: 'ERROR_PARAM_TYPE',
message: '参数错误',
})
return
}
try{
const cityInfo = await Cities.getCityById(cityid);
res.send(cityInfo);
}catch(err){
res.send({
name: 'ERROR_DATA',
message: '获取数据失败',
});
}
}
async getCityName(req){
try{
const cityInfo = await this.guessPosition(req);
/*
汉字转换成拼音
*/
const pinyinArr = pinyin(cityInfo.city, {
style: pinyin.STYLE_NORMAL,
});
let cityName = '';
pinyinArr.forEach(item => {
cityName += item[0];
})
return cityName;
}catch(err){
return '北京';
}
}
async getExactAddress(req, res, next){
try{
const position = await this.geocoder(req)
res.send(position);
}catch(err){
console.log('获取精确位置信息失败');
res.send({
name: 'ERROR_DATA',
message: '获取精确位置信息失败',
});
}
}
async pois(req, res, next){
try{
const geohash = req.params.geohash || '';
if (geohash.indexOf(',') == -1) {
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '参数错误',
})
return;
}
const poisArr = geohash.split(',');
const result = await this.getpois(poisArr[0], poisArr[1]);
const address = {
address: result.result.address,
city: result.result.address_component.province,
geohash,
latitude: poisArr[0],
longitude: poisArr[1],
name: result.result.formatted_addresses.recommend,
}
res.send(address);
}catch(err){
console.log('getpois返回信息失败', err);
res.send({
status: 0,
type: 'ERROR_DATA',
message: '获取数据失败',
})
}
}
}
export default new CityHandle()
================================================
FILE: controller/v1/order.js
================================================
'use strict';
import BaseComponent from '../../prototype/baseComponent'
import formidable from 'formidable'
import OrderModel from '../../models/bos/order'
import CartModel from '../../models/v1/cart'
import dtime from 'time-formater'
import AddressModel from '../../models/v1/address'
class Order extends BaseComponent{
constructor(){
super()
this.postOrder = this.postOrder.bind(this);
}
async postOrder(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
if (err) {
console.log('formidable解析出错', err);
res.send({
status: 1,
message: '下单失败'
})
return
}
const {user_id, cart_id} = req.params;
const {address_id, come_from = 'mobile_web', deliver_time = '', description, entities, geohash, paymethod_id = 1} = fields;
try{
if(!(entities instanceof Array) || !entities.length){
throw new Error('entities参数错误')
}else if(!(entities[0] instanceof Array) || !entities[0].length){
throw new Error('entities参数错误')
}else if(!address_id){
throw new Error('address_id参数错误')
}else if(!user_id || !Number(user_id)){
throw new Error('user_id参数错误')
}else if(!cart_id || !Number(cart_id)){
throw new Error('cart_id参数错误')
}else if(!user_id){
throw new Error('未登录')
}
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
let cartDetail;
let order_id;
try{
cartDetail = await CartModel.findOne({id: cart_id});
order_id = await this.getId('order_id');
}catch(err){
console.log('获取数据失败', err);
res.send({
status: 0,
type: 'ERROR_GET_DATA',
message: '获取订单失败',
})
return
}
const deliver_fee = {price: cartDetail.cart.deliver_amount};
const orderObj = {
basket: {
group: entities,
packing_fee: {
name: cartDetail.cart.extra[0].name,
price: cartDetail.cart.extra[0].price,
quantity: cartDetail.cart.extra[0].quantity,
},
deliver_fee,
},
restaurant_id: cartDetail.cart.restaurant_id,
restaurant_image_url: cartDetail.cart.restaurant_info.image_path,
restaurant_name: cartDetail.cart.restaurant_info.name,
formatted_created_at: dtime().format('YYYY-MM-DD HH:mm'),
order_time: new Date().getTime(),
time_pass: 900,
status_bar: {
color: 'f60',
image_type: '',
sub_title: '15分钟内支付',
title: '',
},
total_amount: cartDetail.cart.total,
total_quantity: entities[0].length,
unique_id: order_id,
id: order_id,
user_id,
address_id,
}
try{
await OrderModel.create(orderObj);
res.send({
status: 1,
success: '下单成功,请及时付款',
need_validation: false,
})
}catch(err){
console.log('保存订单数据失败');
res.send({
status: 0,
type: 'ERROR_SAVE_ORDER',
message: '保存订单失败'
})
}
})
}
async getOrders(req, res, next){
const user_id = req.params.user_id;
const {limit = 0, offset = 0} = req.query;
try{
if(!user_id || !Number(user_id)){
throw new Error('user_id参数错误')
}else if(!Number(limit)){
throw new Error('limit参数错误')
}else if(typeof Number(offset) !== 'number'){
throw new Error('offset参数错误')
}
}catch(err){
console.log(err.message, err);
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: err.message
})
return
}
try{
const orders = await OrderModel.find({user_id}).sort({id: -1}).limit(Number(limit)).skip(Number(offset));
const timeNow = new Date().getTime();
orders.map(item => {
if (timeNow - item.order_time < 900000) {
item.status_bar.title = '等待支付';
}else{
item.status_bar.title = '支付超时';
}
item.time_pass = Math.ceil((timeNow - item.order_time)/1000);
item.save()
return item
})
res.send(orders);
}catch(err){
console.log('获取订单列表失败', err);
res.send({
status: 0,
type: 'ERROR_GET_ORDER_LIST',
message: '获取订单列表失败'
})
}
}
async getDetail(req, res, next){
const {user_id, order_id} = req.params;
try{
if (!user_id || !Number(user_id)) {
throw new Error('user_id参数错误')
}else if(!order_id || !Number(order_id)){
throw new Error('order_id参数错误')
}
}catch(err){
console.log(err.message);
res.send({
status: 0,
type: 'GET_ERROR_PARAM',
message: err.message,
})
return
}
try{
const order = await OrderModel.findOne({id: order_id}, '-_id');
const addressDetail = await AddressModel.findOne({id: order.address_id});
const orderDetail = {...order, ...{addressDetail: addressDetail.address, consignee: addressDetail.name, deliver_time: '尽快送达', pay_method: '在线支付', phone: addressDetail.phone}};
res.send(orderDetail)
}catch(err){
console.log('获取订单信息失败', err);
res.send({
status: 0,
type: 'ERROR_TO_GET_ORDER_DETAIL',
message: '获取订单信息失败'
})
}
}
async getAllOrders(req, res, next){
const {restaurant_id, limit = 20, offset = 0} = req.query;
try{
let filter = {};
if (restaurant_id && Number(restaurant_id)) {
filter = {restaurant_id}
}
const orders = await OrderModel.find(filter).sort({id: -1}).limit(Number(limit)).skip(Number(offset));
const timeNow = new Date().getTime();
orders.map(item => {
if (timeNow - item.order_time < 900000) {
item.status_bar.title = '等待支付';
}else{
item.status_bar.title = '支付超时';
}
item.time_pass = Math.ceil((timeNow - item.order_time)/1000);
item.save()
return item
})
res.send(orders);
}catch(err){
console.log('获取订单数据失败', err);
res.send({
status: 0,
type: 'GET_ORDER_DATA_ERROR',
message: '获取订单数据失败'
})
}
}
async getOrdersCount(req, res, next){
const restaurant_id = req.query.restaurant_id;
try{
let filter = {};
if (restaurant_id && Number(restaurant_id)) {
filter = {restaurant_id}
}
const count = await OrderModel.find(filter).count();
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取订单数量失败', err);
res.send({
status: 0,
type: 'ERROR_TO_GET_COUNT',
message: '获取订单数量失败'
})
}
}
}
export default new Order()
================================================
FILE: controller/v1/remark.js
================================================
'use strict';
import BaseComponent from '../../prototype/baseComponent'
import RemarkModel from '../../models/v1/remark'
class Remark extends BaseComponent{
constructor(){
super()
}
async getRemarks(req, res, next){
const cart_id = req.params.cart_id;
if (!cart_id || !Number(cart_id)) {
res.send({
status: 0,
type: 'ERROR_PARAMS',
message: '购物车ID参数错误'
})
return
}
try{
const remarks = await RemarkModel.findOne({}, '-_id');
res.send(remarks);
}catch(err){
console.log('获取备注数据失败',err);
res.send({
status: 0,
type: 'ERROR_GET_DATA',
message: '获取备注数据失败'
})
}
}
}
export default new Remark()
================================================
FILE: controller/v1/search.js
================================================
'use strict';
import AddressComponent from '../../prototype/addressComponent';
import Cities from '../../models/v1/cities';
import CityHandle from './cities'
class SearchPlace extends AddressComponent{
constructor(){
super()
this.search = this.search.bind(this)
}
async search(req, res, next){
let {type = 'search', city_id, keyword} = req.query;
if (!keyword) {
res.send({
name: 'ERROR_QUERY_TYPE',
message: '参数错误',
})
return
}else if(isNaN(city_id)){
try{
const cityname = await CityHandle.getCityName(req);
const cityInfo = await Cities.cityGuess(cityname);
city_id = cityInfo.id;
}catch(err){
console.log('搜索地址时,获取定位城失败')
res.send({
name: 'ERROR_GET_POSITION',
message: '获取数据失败',
})
}
}
try{
const cityInfo = await Cities.getCityById(city_id);
const resObj = await this.searchPlace(keyword, cityInfo.name, type);
const cityList = [];
resObj.data.forEach((item, index) => {
cityList.push({
name: item.title,
address: item.address,
latitude: item.location.lat,
longitude: item.location.lng,
geohash: item.location.lat + ',' + item.location.lng,
})
});
res.send(cityList);
}catch(err){
res.send({
name: 'GET_ADDRESS_ERROR',
message: '获取地址信息失败',
});
}
}
}
export default new SearchPlace();
================================================
FILE: controller/v2/entry.js
================================================
'use strict';
import EntryModel from '../../models/v2/entry'
class Entry {
constructor(){
}
async getEntry(req, res, next){
try{
const entries = await EntryModel.find({}, '-_id');
res.send(entries);
}catch(err){
console.log('获取数据失败');
res.send({
status: 0,
type: 'ERROR_DATA',
message: '获取数据失败'
})
return
}
}
}
export default new Entry()
================================================
FILE: controller/v2/user.js
================================================
'use strict';
import AddressComponent from '../../prototype/addressComponent'
import formidable from 'formidable'
import UserInfoModel from '../../models/v2/userInfo'
import UserModel from '../../models/v2/user'
import crypto from 'crypto'
import dtime from 'time-formater'
class User extends AddressComponent {
constructor(){
super()
this.login = this.login.bind(this);
this.encryption = this.encryption.bind(this);
this.chanegPassword = this.chanegPassword.bind(this);
this.updateAvatar = this.updateAvatar.bind(this);
}
async login(req, res, next){
const cap = req.cookies.cap;
if (!cap) {
console.log('验证码失效')
res.send({
status: 0,
type: 'ERROR_CAPTCHA',
message: '验证码失效',
})
return
}
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
const {username, password, captcha_code} = fields;
try{
if (!username) {
throw new Error('用户名参数错误');
}else if(!password){
throw new Error('密码参数错误');
}else if(!captcha_code){
throw new Error('验证码参数错误');
}
}catch(err){
console.log('登陆参数错误', err);
res.send({
status: 0,
type: 'ERROR_QUERY',
message: err.message,
})
return
}
if (cap.toString() !== captcha_code.toString()) {
res.send({
status: 0,
type: 'ERROR_CAPTCHA',
message: '验证码不正确',
})
return
}
const newpassword = this.encryption(password);
try{
const user = await UserModel.findOne({username});
//创建一个新的用户
if (!user) {
const user_id = await this.getId('user_id');
const cityInfo = await this.guessPosition(req);
const registe_time = dtime().format('YYYY-MM-DD HH:mm');
const newUser = {username, password: newpassword, user_id};
const newUserInfo = {username, user_id, id: user_id, city: cityInfo.city, registe_time, };
UserModel.create(newUser);
const createUser = new UserInfoModel(newUserInfo);
const userinfo = await createUser.save();
req.session.user_id = user_id;
res.send(userinfo);
}else if (user.password.toString() !== newpassword.toString()) {
console.log('用户登录密码错误')
res.send({
status: 0,
type: 'ERROR_PASSWORD',
message: '密码错误',
})
return
}else{
req.session.user_id = user.user_id;
const userinfo = await UserInfoModel.findOne({user_id: user.user_id}, '-_id');
res.send(userinfo)
}
}catch(err){
console.log('用户登陆失败', err);
res.send({
status: 0,
type: 'SAVE_USER_FAILED',
message: '登陆失败',
})
}
})
}
async getInfo(req, res, next){
const sid = req.session.user_id;
const qid = req.query.user_id;
const user_id = sid || qid;
if (!user_id || !Number(user_id)) {
// console.log('获取用户信息的参数user_id无效', user_id)
res.send({
status: 0,
type: 'GET_USER_INFO_FAIELD',
message: '通过session获取用户信息失败',
})
return
}
try{
const userinfo = await UserInfoModel.findOne({user_id}, '-_id');
res.send(userinfo)
}catch(err){
console.log('通过session获取用户信息失败', err);
res.send({
status: 0,
type: 'GET_USER_INFO_FAIELD',
message: '通过session获取用户信息失败',
})
}
}
async getInfoById(req, res, next){
const user_id = req.params.user_id;
if (!user_id || !Number(user_id)) {
console.log('通过ID获取用户信息失败')
res.send({
status: 0,
type: 'GET_USER_INFO_FAIELD',
message: '通过用户ID获取用户信息失败',
})
return
}
try{
const userinfo = await UserInfoModel.findOne({user_id}, '-_id');
res.send(userinfo)
}catch(err){
console.log('通过用户ID获取用户信息失败', err);
res.send({
status: 0,
type: 'GET_USER_INFO_FAIELD',
message: '通过用户ID获取用户信息失败',
})
}
}
async signout(req, res, next){
delete req.session.user_id;
res.send({
status: 1,
message: '退出成功'
})
}
async chanegPassword(req, res, next){
const cap = req.cookies.cap;
if (!cap) {
console.log('验证码失效')
res.send({
status: 0,
type: 'ERROR_CAPTCHA',
message: '验证码失效',
})
return
}
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
const {username, oldpassWord, newpassword, confirmpassword, captcha_code} = fields;
try{
if (!username) {
throw new Error('用户名参数错误');
}else if(!oldpassWord){
throw new Error('必须添加旧密码');
}else if(!newpassword){
throw new Error('必须填写新密码');
}else if(!confirmpassword){
throw new Error('必须填写确认密码');
}else if(newpassword !== confirmpassword){
throw new Error('两次密码不一致');
}else if(!captcha_code){
throw new Error('请填写验证码');
}
}catch(err){
console.log('修改密码参数错误', err);
res.send({
status: 0,
type: 'ERROR_QUERY',
message: err.message,
})
return
}
if (cap.toString() !== captcha_code.toString()) {
res.send({
status: 0,
type: 'ERROR_CAPTCHA',
message: '验证码不正确',
})
return
}
const md5password = this.encryption(oldpassWord);
try{
const user = await UserModel.findOne({username});
if (!user) {
res.send({
status: 0,
type: 'USER_NOT_FOUND',
message: '未找到当前用户',
})
}else if(user.password.toString() !== md5password.toString()){
res.send({
status: 0,
type: 'ERROR_PASSWORD',
message: '密码不正确',
})
}else{
user.password = this.encryption(newpassword);
user.save();
res.send({
status: 1,
success: '密码修改成功',
})
}
}catch(err){
console.log('修改密码失败', err);
res.send({
status: 0,
type: 'ERROR_CHANGE_PASSWORD',
message: '修改密码失败',
})
}
})
}
encryption(password){
const newpassword = this.Md5(this.Md5(password).substr(2, 7) + this.Md5(password));
return newpassword
}
Md5(password){
const md5 = crypto.createHash('md5');
return md5.update(password).digest('base64');
}
async getUserList(req, res, next){
const {limit = 20, offset = 0} = req.query;
try{
const users = await UserInfoModel.find({}, '-_id').sort({user_id: -1}).limit(Number(limit)).skip(Number(offset));
res.send(users);
}catch(err){
console.log('获取用户列表数据失败', err);
res.send({
status: 0,
type: 'GET_DATA_ERROR',
message: '获取用户列表数据失败'
})
}
}
async getUserCount(req, res, next){
try{
const count = await UserInfoModel.count();
res.send({
status: 1,
count,
})
}catch(err){
console.log('获取用户数量失败', err);
res.send({
status: 0,
type: 'ERROR_TO_GET_USER_COUNT',
message: '获取用户数量失败'
})
}
}
async updateAvatar(req, res, next){
const sid = req.session.user_id;
const pid = req.params.user_id;
const user_id = sid || pid;
if (!user_id || !Number(user_id)) {
console.log('更新头像,user_id错误', user_id)
res.send({
status: 0,
type: 'ERROR_USERID',
message: 'user_id参数错误',
})
return
}
try{
const image_path = await this.getPath(req);
await UserInfoModel.findOneAndUpdate({user_id}, {$set: {avatar: image_path}});
res.send({
status: 1,
image_path,
})
}catch(err){
console.log('上传图片失败', err);
res.send({
status: 0,
type: 'ERROR_UPLOAD_IMG',
message: '上传图片失败'
})
}
}
async getUserCity(req, res, next){
const cityArr = ['北京', '上海', '深圳', '杭州'];
const filterArr = [];
cityArr.forEach(item => {
filterArr.push(UserInfoModel.find({city: item}).count())
})
filterArr.push(UserInfoModel.$where('!"北京上海深圳杭州".includes(this.city)').count())
Promise.all(filterArr).then(result => {
res.send({
status: 1,
user_city: {
beijing: result[0],
shanghai: result[1],
shenzhen: result[2],
hangzhou: result[3],
qita: result[4],
}
})
}).catch(err => {
console.log('获取用户分布城市数据失败', err);
res.send({
status: 0,
type: 'ERROR_GET_USER_CITY',
message: '获取用户分布城市数据失败'
})
})
}
}
export default new User()
================================================
FILE: controller/v3/explain.js
================================================
'use strict';
import ExplainModel from '../../models/v3/explain'
class Explain {
constructor(){
}
async getExpalin(req, res, next){
try{
const explain = await ExplainModel.findOne();
res.send(explain.data)
}catch(err){
console.log('获取服务中心数据失败', err);
res.send({
status: 0,
type: 'ERROR_GET_SERVER_DATA',
message: '获取服务中心数据失败'
})
}
}
}
export default new Explain()
================================================
FILE: ecosystem.config.js
================================================
module.exports = {
apps : [{
name: 'node-elm',
script: 'index.js',
instances: 1 ,
autorestart: true,
watch: false,
max_memory_restart: '1G',
output: 'logs/out.log',
error: 'logs/error.log',
log: 'logs/combined.outerr.log',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production',
HOST: '0.0.0.0',
PORT: 8001,
}
}],
deploy: {
production: {
user: 'root',
host: ['139.224.234.213'],
port: '22',
ref : 'origin/master',
repo: 'git@github.com:bailicangdu/node-elm.git',
path: '/root/mygit/node-elm',
'ssh_options': 'StrictHostKeyChecking=no',
'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production',
}
}
};
================================================
FILE: index.js
================================================
require('babel-core/register');
require('./app.js');
================================================
FILE: logs/.gitignore
================================================
# Ignore everything in this directory
*
# Except this file
!.gitignore
================================================
FILE: middlewares/check.js
================================================
'use strict';
import AdminModel from '../models/admin/admin'
class Check {
constructor(){
}
async checkAdmin(req, res, next){
const admin_id = req.session.admin_id;
if (!admin_id || !Number(admin_id)) {
res.send({
status: 0,
type: 'ERROR_SESSION',
message: '亲,您还没有登录',
})
return
}else{
const admin = await AdminModel.findOne({id: admin_id});
if (!admin) {
res.send({
status: 0,
type: 'HAS_NO_ACCESS',
message: '亲,您还不是管理员',
})
return
}
}
next()
}
async checkSuperAdmin(req, res, next){
const admin_id = req.session.admin_id;
if (!admin_id || !Number(admin_id)) {
res.send({
status: 0,
type: 'ERROR_SESSION',
message: '亲,您还没有登录',
})
return
}else{
const admin = await AdminModel.findOne({id: admin_id});
if (!admin || admin.status != 2) {
res.send({
status: 0,
type: 'HAS_NO_ACCESS',
message: '亲,您的权限不足',
})
return
}
}
next()
}
}
export default new Check()
================================================
FILE: middlewares/history.js
================================================
// 'use strict'
// export default (req, res, next) => {
// if ((/manage/gi).test(req.url)) {
// res.sendFile(__dirname + '/public/manage/index.html')
// }else{
// res.sendFile(__dirname + '/public/elm/index.html')
// }
// }
================================================
FILE: middlewares/statistic.js
================================================
'use strict';
import BaseComponent from '../prototype/baseComponent'
import StatisModel from '../models/statis/statis'
import dtime from 'time-formater'
class Statistic extends BaseComponent {
constructor(){
super()
this.apiRecord = this.apiRecord.bind(this)
}
async apiRecord(req, res, next){
try{
const statis_id = await this.getId('statis_id')
const apiInfo = {
date: dtime().format('YYYY-MM-DD'),
origin: req.headers.origin,
id: statis_id,
}
StatisModel.create(apiInfo)
}catch(err){
console.log('API记录出错', err);
}
next()
}
}
export default new Statistic()
================================================
FILE: middlewares/w2-proxy
================================================
================================================
FILE: models/admin/admin.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const adminSchema = new Schema({
user_name: String,
password: String,
id: Number,
create_time: String,
admin: {type: String, default: '管理员'},
status: Number, //1:普通管理、 2:超级管理员
avatar: {type: String, default: 'default.jpg'},
city: String,
})
adminSchema.index({id: 1});
const Admin = mongoose.model('Admin', adminSchema);
export default Admin
================================================
FILE: models/bos/order.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const orderSchema = new Schema({
basket: {
abandoned_extra: [
{
category_id: Number,
name: {type: String, default: ''},
price: {type: Number, default: 0},
quantity: {type: Number, default: 0},
}
],
deliver_fee: {
category_id: {type: Number, default: 2},
name: {type: String, default: '配送费'},
price: {type: Number, default: 4},
quantity: {type: Number, default: 1},
},
extra: [],
group: [
[
{
attrs: [],
new_specs: [],
name: String,
price: Number,
quantity: Number,
specs: [String]
}
]
],
packing_fee: {
category_id: {type: Number, default: 1},
name: {type: String, default: '餐盒'},
price: Number,
quantity: Number
},
pindan_map: []
},
formatted_created_at: String,
order_time: Number,
time_pass: Number,
id: Number,
is_brand: {type: Number, default: 0},
is_deletable: {type: Number, default: 1},
is_new_pay: {type: Number, default: 1},
is_pindan: {type: Number, default: 0},
operation_confirm: {type: Number, default: 0},
operation_pay: {type: Number, default: 0},
operation_rate: {type: Number, default: 0},
operation_rebuy: {type: Number, default: 2},
operation_upload_photo: {type: Number, default: 0},
pay_remain_seconds: {type: Number, default: 0},
rated_point: {type: Number, default: 0},
remind_reply_count: {type: Number, default: 0},
restaurant_id: Number,
restaurant_image_hash: String,
restaurant_image_url: String,
restaurant_name: String,
restaurant_type: {type: Number, default: 0},
status_bar: {
color: String,
image_type: String,
sub_title: String,
title: String,
},
status_code: {type: Number, default: 0},
timeline_node: {
actions: [],
description: String,
in_processing: {type: Number, default: 0},
sub_description: String,
title: String,
},
top_show: {type: Number, default: 0},
total_amount: Number,
total_quantity: Number,
unique_id: Number,
user_id: Number,
address_id: Number,
})
orderSchema.index({id: 1});
const Order = mongoose.model('Order', orderSchema);
export default Order
================================================
FILE: models/ids.js
================================================
'use strict';
import mongoose from 'mongoose'
const idsSchema = new mongoose.Schema({
restaurant_id: Number,
food_id: Number,
order_id: Number,
user_id: Number,
address_id: Number,
cart_id: Number,
img_id: Number,
category_id: Number,
item_id: Number,
sku_id: Number,
admin_id: Number,
statis_id: Number,
});
const Ids = mongoose.model('Ids', idsSchema);
Ids.findOne((err, data) => {
if (!data) {
const newIds = new Ids({
restaurant_id: 0,
food_id: 0,
order_id: 0,
user_id: 0,
address_id: 0,
cart_id: 0,
img_id: 0,
category_id: 0,
item_id: 0,
sku_id: 0,
admin_id: 0,
statis_id: 0,
});
newIds.save();
}
})
export default Ids
================================================
FILE: models/promotion/hongbao.js
================================================
'use strict'
import mongoose from 'mongoose'
import hongbaoData from '../../InitData/hongbao'
const Schema = mongoose.Schema;
const hongbaoSchema = new Schema({
id: Number,
sn: String,
user_id: Number,
amount: Number,
sum_condition: Number,
name: String,
phone: String,
begin_date: String,
end_date: String,
description_map: {
phone: String,
online_paid_only: String,
validity_delta: String,
validity_periods: String,
sum_condition: String
},
limit_map: {},
status: Number,
present_status: Number,
share_status: Number,
})
hongbaoSchema.index({id: 1});
const Hongbao = mongoose.model('Hongbao', hongbaoSchema);
Hongbao.findOne((err, data) => {
if (!data) {
hongbaoData.forEach(item => {
Hongbao.create(item)
})
}
})
export default Hongbao
================================================
FILE: models/shopping/activity.js
================================================
'use strict';
import mongoose from 'mongoose'
import activityData from '../../InitData/activity'
const Schema = mongoose.Schema;
const activitySchema = new Schema({
description: String,
icon_color: String,
icon_name: String,
id: Number,
name: String,
ranking_weight: Number
})
activitySchema.index({index: 1});
const Activity = mongoose.model('Activity', activitySchema);
Activity.findOne((err, data) => {
if (!data) {
activityData.forEach(item => {
Activity.create(item);
})
}
})
export default Activity
================================================
FILE: models/shopping/category.js
================================================
'use strict';
import mongoose from 'mongoose'
import categoryData from '../../InitData/category'
const Schema = mongoose.Schema;
const categorySchema = new Schema({
count: Number,
id: Number,
ids: [],
image_url: String,
level: Number,
name: String,
sub_categories: [
{
count: Number,
id: Number,
image_url: String,
level: Number,
name: String
},
]
});
categorySchema.statics.addCategory = async function (type){
const categoryName = type.split('/');
try{
const allcate = await this.findOne();
const subcate = await this.findOne({name: categoryName[0]});
allcate.count ++;
subcate.count ++ ;
subcate.sub_categories.map(item => {
if (item.name == categoryName[1]) {
return item.count ++
}
})
await allcate.save();
await subcate.save();
console.log('保存cetegroy成功');
return
}catch(err){
console.log('保存cetegroy失败');
throw new Error(err)
}
}
const Category = mongoose.model('Category', categorySchema)
Category.findOne((err, data) => {
if (!data) {
for (let i = 0; i < categoryData.length; i++) {
Category.create(categoryData[i]);
}
}
})
export default Category
================================================
FILE: models/shopping/delivery.js
================================================
'use strict';
import mongoose from 'mongoose'
import deliveryData from '../../InitData/delivery'
const Schema = mongoose.Schema;
const DeliverySchema = new Schema({
color: String,
id: Number,
is_solid: Boolean,
text: String
})
DeliverySchema.index({id: 1});
const Delivery = mongoose.model('Delivery', DeliverySchema);
Delivery.findOne((err, data) => {
if (!data) {
Delivery.create(deliveryData);
}
})
export default Delivery
================================================
FILE: models/shopping/food.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const foodSchema = new Schema({
rating: {type: Number, default: 0},
is_featured: {type: Number, default: 0},
restaurant_id: {type: Number, isRequired: true},
category_id: {type: Number, isRequired: true},
pinyin_name: {type: String, default: ''},
display_times: {type: Array, default: []},
attrs: {type: Array, default: []},
description: {type: String, default: ""},
month_sales: {type: Number, default: 0},
rating_count: {type: Number, default: 0},
tips: String,
image_path: String,
specifications: [Schema.Types.Mixed],
server_utc: {type: Date, default: Date.now()},
is_essential: {type: Boolean, default: false},
attributes: {type: Array, default: []},
item_id: {type: Number, isRequired: true},
limitation: Schema.Types.Mixed,
name: {type: String, isRequired: true},
satisfy_count: {type: Number, default: 0},
activity: Schema.Types.Mixed,
satisfy_rate: {type: Number, default: 0},
specfoods: [{
original_price: {type: Number, default: 0},
sku_id: {type: Number, isRequired: true},
name: {type: String, isRequired: true},
pinyin_name: {type: String, default: ""},
restaurant_id: {type: Number, isRequired: true},
food_id: {type: Number, isRequired: true},
packing_fee: {type: Number, default: 0},
recent_rating: {type: Number, default: 0},
promotion_stock: {type: Number, default: -1},
price: {type: Number, default: 0},
sold_out: {type: Boolean, default: false},
recent_popularity: {type: Number, default: 0},
is_essential: {type: Boolean, default: false},
item_id: {type: Number, isRequired: true},
checkout_mode: {type: Number, default: 1},
stock: {type: Number, default: 1000},
specs_name: String,
specs: [
{
name: String,
value: String
}
]
}]
})
foodSchema.index({item_id: 1});
const menuSchema = new Schema({
description: String,
is_selected: {type: Boolean, default: true},
icon_url: {type: String, default: ''},
name: {type: String, isRequired: true},
id: {type: Number, isRequired: true},
restaurant_id: {type: Number, isRequired: true},
type: {type: Number, default: 1},
foods: [foodSchema]
});
menuSchema.index({ id: 1 });
const Food = mongoose.model('Food', foodSchema);
const Menu = mongoose.model('Menu', menuSchema);
export {Food, Menu}
================================================
FILE: models/shopping/shop.js
================================================
'use strict';
import mongoose from 'mongoose'
const shopSchema = new mongoose.Schema({
activities: [{
description: String,
icon_color: String,
icon_name: String,
id: Number,
name: String,
}],
address: String,
delivery_mode: {
color: String,
id: Number,
is_solid: Boolean,
text: String
},
description: { type: String, default: "" },
order_lead_time: { type: String, default: "" },
distance: { type: String, default: "" },
location:{type:[Number],index: '2d'},
float_delivery_fee: { type: Number, default: 0 },
float_minimum_order_amount: { type: Number, default: 0 },
id: Number,
category: String,
identification: {
company_name: { type: String, default: "" },
identificate_agency: { type: String, default: "" },
identificate_date: { type: Date, default: Date.now },
legal_person: { type: String, default: "" },
licenses_date: { type: String, default: "" },
licenses_number: { type: String, default: "" },
licenses_scope: { type: String, default: "" },
operation_period: { type: String, default: "" },
registered_address: { type: String, default: "" },
registered_number: { type: String, default: "" },
},
image_path: { type: String, default: "" },
is_premium: { type: Boolean, default: false },
is_new: { type: Boolean, default: false },
latitude: Number,
longitude: Number,
license: {
business_license_image: { type: String, default: "" },
catering_service_license_image: { type: String, default: "" },
},
name: {
type: String,
required: true
},
opening_hours: { type: Array, default: ["08:30/20:30"] },
phone: {
type: String,
required: true
},
piecewise_agent_fee: {
tips: String
},
promotion_info: { type: String, default: "欢迎光临,用餐高峰请提前下单,谢谢" },
rating: { type: Number, default: 0 },
rating_count: { type: Number, default: 0 },
recent_order_num: { type: Number, default: 0 },
status: { type: Number, default: 0 },
supports: [{
description: String,
icon_color: String,
icon_name: String,
id: Number,
name: String
}],
});
shopSchema.index({ id: 1 }); //primary_key 主键
const Shop = mongoose.model('Shop', shopSchema);
export default Shop
================================================
FILE: models/statis/statis.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const statisSchema = new Schema({
date: String,
origin: String,
id: Number,
})
statisSchema.index({id: 1})
const Statis = mongoose.model('Statis', statisSchema)
export default Statis
================================================
FILE: models/ugc/rating.js
================================================
'use strict';
import mongoose from 'mongoose'
import {ratingList, scores, tags} from '../../InitData/rate'
const Schema = mongoose.Schema;
const rateSchema = new Schema({
restaurant_id: Number,
ratings: [
{
avatar: {type: String, default: ''},
highlights: [],
item_ratings: [
{
food_id: Number,
food_name: String,
image_hash: {type: String, default: ''},
is_valid: {type: Number, default: 1},
},
],
rated_at: String,
rating_star: Number,
rating_text: String,
tags: {type: Array, default: []},
time_spent_desc: String,
username: {type: String, default: "匿名用户"},
},
],
scores: {
compare_rating: {type: Number, default: 0},
deliver_time: {type: Number, default: 0},
food_score: {type: Number, default: 0},
order_rating_amount: {type: Number, default: 0},
overall_score: {type: Number, default: 0},
service_score: {type: Number, default: 0},
},
tags: [{
count: {type: Number, default: 0},
name: String,
unsatisfied: {type: Boolean, default: false},
}]
})
rateSchema.index({restaurant_id: 1});
rateSchema.statics.initData = async function (restaurant_id){
try{
const data = await this.findOne({restaurant_id});
if (!data) {
const newRating = {
restaurant_id,
ratings: ratingList,
scores,
tags,
}
await this.create(newRating);
return true
}else{
return false
}
}catch(err){
console.log('初始化评论数据失败');
throw new Error(err)
}
}
rateSchema.statics.getData = async function (restaurant_id, type){
try{
const data = await this.findOne({restaurant_id}, '-_id');
if (!data) {
throw new Error('未找到当前餐馆的评论数据');
}else{
return data[type]
}
}catch(err){
console.log('初始化评论数据失败');
throw new Error(err)
}
}
const Rating = mongoose.model('Rating', rateSchema);
export default Rating
================================================
FILE: models/v1/address.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const addressSchema = new Schema({
id: Number,
address: String,
phone: String,
user_id: Number,
is_valid: {type: Number, default: 1},
created_at: {type: Date, default: Date.now()},
phone_bk: String,
tag_type: Number,
name: String,
st_geohash: String,
address_detail: String,
poi_type: {type: Number, default: 0},
sex: {type: Number, default: 1},
city_id: {type: Number, default: 1},
tag: {type: String, default: '家'},
is_user_default: {type: Boolean, default: true},
is_deliverable: {type: Boolean, default: true},
agent_fee: {type: Number, default: 0},
deliver_amount: {type: Number, default: 0},
phone_had_bound: {type: Boolean, default: true},
})
addressSchema.index({id: 1});
const Address = mongoose.model('Address', addressSchema);
export default Address
================================================
FILE: models/v1/cart.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const cartSchema = Schema({
id: Number,
cart: {
id: Number,
groups: [
[
{
attrs: [],
extra: [],
id: Number,
new_specs: [],
name: String,
price: Number,
quantity: Number,
specs: [String],
packing_fee: Number,
sku_id: Number,
stock: Number,
}
]
],
extra: [{
description: String,
name: {type: String, default: '餐盒'},
price: {type: Number, default: 0},
quantity: {type: Number, default: 0},
type: {type: Number, default: 0},
}],
deliver_amount: Number,
deliver_time: String,
discount_amount: String,
dist_info: String,
is_address_too_far: {type: Boolean, default: false},
is_deliver_by_fengniao: Boolean,
is_online_paid: {type: Number, default: 1},
is_ontime_available: {type: Number, default: 0},
must_new_user: {type: Number, default: 0},
must_pay_online: {type: Number, default: 0},
ontime_status: {type: Number, default: 0},
ontime_unavailable_reason: String,
original_total: Number,
phone: String,
promise_delivery_time: {type: Number, default: 0},
restaurant_id: Number,
restaurant_info: Schema.Types.Mixed,
restaurant_minimum_order_amount: Number,
restaurant_name_for_url: String,
restaurant_status: {type: Number, default: 1},
service_fee_explanation: {type: Number, default: 0},
total: Number,
user_id: Number,
},
delivery_reach_time: String,
invoice: {
is_available: {type: Boolean, default: false},
status_text: String,
},
sig: String,
current_address: {},
payments: [{
description: String,
disabled_reason: String,
id: Number,
is_online_payment: {type: Boolean, default: true},
name: String,
promotion:[],
select_state: Number,
}],
deliver_times: [],
deliver_times_v2: [],
merchant_coupon_info: {},
number_of_meals: {},
discount_rule: {},
hongbao_info: {},
is_support_coupon: {type: Boolean, default: false},
is_support_ninja: {type: Number, default: 1},
})
cartSchema.index({id: 1});
const Cart = mongoose.model('Cart', cartSchema);
export default Cart
================================================
FILE: models/v1/cities.js
================================================
'use strict';
import mongoose from 'mongoose';
import cityData from '../../InitData/cities'
const citySchema = new mongoose.Schema({
data: {}
});
citySchema.statics.cityGuess = function(name){
return new Promise(async (resolve, reject) => {
const firtWord = name.substr(0,1).toUpperCase();
try{
const city = await this.findOne();
Object.entries(city.data).forEach(item => {
if(item[0] == firtWord){
item[1].forEach(cityItem => {
if (cityItem.pinyin == name) {
resolve(cityItem)
}
})
}
})
}catch(err){
reject({
name: 'ERROR_DATA',
message: '查找数据失败',
});
console.error(err);
}
})
}
citySchema.statics.cityHot = function (){
return new Promise(async (resolve, reject) => {
try{
const city = await this.findOne();
resolve(city.data.hotCities)
}catch(err){
reject({
name: 'ERROR_DATA',
message: '查找数据失败',
});
console.error(err);
}
})
}
citySchema.statics.cityGroup = function (){
return new Promise(async (resolve, reject) => {
try{
const city = await this.findOne();
const cityObj = city.data;
delete(cityObj._id)
delete(cityObj.hotCities)
resolve(cityObj)
}catch(err){
reject({
name: 'ERROR_DATA',
message: '查找数据失败',
});
console.error(err);
}
})
}
citySchema.statics.getCityById = function(id){
return new Promise(async (resolve, reject) => {
try{
const city = await this.findOne();
Object.entries(city.data).forEach(item => {
if(item[0] !== '_id' && item[0] !== 'hotCities'){
item[1].forEach(cityItem => {
if (cityItem.id == id) {
resolve(cityItem)
}
})
}
})
}catch(err){
reject({
name: 'ERROR_DATA',
message: '查找数据失败',
});
console.error(err);
}
})
}
const Cities = mongoose.model('Cities', citySchema);
Cities.findOne((err, data) => {
if (!data) {
Cities.create({data: cityData});
}
});
export default Cities
================================================
FILE: models/v1/payments.js
================================================
'use strict';
import mongoose from 'mongoose'
import paymentsData from '../../InitData/payments'
const Schema = mongoose.Schema;
const paymentsSchema = new Schema({
description: String,
disabled_reason: String,
id: Number,
is_online_payment: Boolean,
name: String,
promotion: [],
select_state: Number,
})
const Payments = mongoose.model('Payments', paymentsSchema);
Payments.findOne((err, data) => {
if (!data) {
paymentsData.forEach(item => {
Payments.create(item);
})
}
})
export default Payments
================================================
FILE: models/v1/remark.js
================================================
'use strict';
import mongoose from 'mongoose'
import remarkData from '../../InitData/remark'
const Schema = mongoose.Schema;
const remarkSchema = new Schema({
remarks: [],
})
const Remark = mongoose.model('Remark', remarkSchema);
Remark.findOne((err, data) => {
if(!data){
Remark.create(remarkData)
}
})
export default Remark
================================================
FILE: models/v2/entry.js
================================================
'use strict';
import mongoose from 'mongoose'
import entryData from '../../InitData/entry'
const Schema = mongoose.Schema;
const entrySchema = new Schema({
id: Number,
is_in_serving: Boolean,
description: String,
title: String,
link: String,
image_url: String,
icon_url: String,
title_color: String
});
const Entry = mongoose.model('Entry', entrySchema)
Entry.findOne((err, data) => {
if (!data) {
for (let i = 0; i < entryData.length; i++) {
Entry.create(entryData[i]);
}
}
})
export default Entry
================================================
FILE: models/v2/user.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const userSchema = new Schema({
user_id: Number,
username: String,
password: String,
})
const User = mongoose.model('User', userSchema);
export default User
================================================
FILE: models/v2/userInfo.js
================================================
'use strict';
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const userInfoSchema = new Schema({
avatar: {type: String, default: 'default.jpg'},
balance: {type: Number, default: 0},
brand_member_new: {type: Number, default: 0},
current_address_id: {type: Number, default: 0},
current_invoice_id: {type: Number, default: 0},
delivery_card_expire_days: {type: Number, default: 0},
email: {type: String, default: ''},
gift_amount: {type: Number, default: 3},
city: String,
registe_time: String,
id: Number,
user_id: Number,
is_active: {type: Number, default: 1},
is_email_valid: {type: Boolean, default: false},
is_mobile_valid: {type: Boolean, default: true},
mobile: {type: String, default: ''},
point: {type: Number, default: 0},
username: String,
column_desc: {
game_desc: {type: String, default: '玩游戏领红包'},
game_image_hash: {type: String, default: '05f108ca4e0c543488799f0c7c708cb1jpeg'},
game_is_show: {type: Number, default: 1},
game_link: {type: String, default: 'https://gamecenter.faas.ele.me'},
gift_mall_desc: {type: String, default: '0元好物在这里'},
},
})
userInfoSchema.index({id: 1});
const UserInfo = mongoose.model('UserInfo', userInfoSchema);
export default UserInfo
================================================
FILE: models/v3/explain.js
================================================
'use strict';
import mongoose from 'mongoose'
import explainData from '../../InitData/explain'
const Schema = mongoose.Schema;
const explainSchema = new Schema({
data: Schema.Types.Mixed,
})
const Explain = mongoose.model('Explain', explainSchema);
Explain.findOne((err, data) => {
if(!data){
Explain.create({data: explainData});
}
})
export default Explain
================================================
FILE: mongodb/db.js
================================================
'use strict';
import mongoose from 'mongoose';
import config from 'config-lite';
import chalk from 'chalk';
mongoose.connect(config.url, {useMongoClient:true});
mongoose.Promise = global.Promise;
const db = mongoose.connection;
db.once('open' ,() => {
console.log(
chalk.green('连接数据库成功')
);
})
db.on('error', function(error) {
console.error(
chalk.red('Error in MongoDb connection: ' + error)
);
mongoose.disconnect();
});
db.on('close', function() {
console.log(
chalk.red('数据库断开,重新连接数据库')
);
mongoose.connect(config.url, {server:{auto_reconnect:true}});
});
export default db;
================================================
FILE: package.json
================================================
{
"name": "node-elm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"author": "cangdu <1264889788@qq.com>",
"license": "GPL",
"private": true,
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon --harmony index.js",
"check": "cross-env NODE_ENV=production nodemon --harmony index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"deploy": "pm2 deploy production"
},
"repository": {
"type": "git",
"url": "https://github.com/bailicangdu/node-elm"
},
"dependencies": {
"babel": "^6.23.0",
"babel-cli": "^6.24.1",
"babel-core": "^6.24.0",
"babel-preset-es2015": "^6.24.0",
"babel-preset-stage-3": "^6.22.0",
"babel-register": "^6.24.0",
"bluebird": "^3.5.0",
"captchapng": "0.0.1",
"chalk": "^2.3.0",
"config-lite": "^1.5.0",
"connect-flash": "^0.1.1",
"connect-history-api-fallback": "^1.3.0",
"connect-mongo": "^1.3.2",
"cookie-parser": "^1.4.3",
"cross-env": "^5.0.0",
"express": "^4.15.2",
"express-session": "^1.15.2",
"express-winston": "^2.3.0",
"formidable": "^1.1.1",
"gm": "^1.23.0",
"marked": "^0.3.6",
"moment": "^2.18.1",
"mongodb": "^2.2.25",
"mongoose": "^4.9.3",
"node-fetch": "^1.6.3",
"pinyin": "^2.8.3",
"pm2": "^2.8.0",
"qiniu": "^6.1.13",
"sha1": "^1.1.1",
"time-formater": "1.0.1",
"time-stamp": "^2.0.0",
"winston": "^2.3.1"
},
"devDependencies": {
"babel-plugin-transform-async-to-generator": "^6.24.1",
"babel-plugin-transform-es2015-classes": "^6.24.1",
"babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
"babel-plugin-transform-export-extensions": "^6.22.0",
"nodemon": "^1.18.6"
}
}
================================================
FILE: prototype/addressComponent.js
================================================
'use strict';
import BaseComponent from './baseComponent'
/*
腾讯地图和百度地图API统一调配组件
*/
class AddressComponent extends BaseComponent {
constructor(){
super();
this.tencentkey = 'RLHBZ-WMPRP-Q3JDS-V2IQA-JNRFH-EJBHL';
this.tencentkey2 = 'RRXBZ-WC6KF-ZQSJT-N2QU7-T5QIT-6KF5X';
this.tencentkey3 = 'OHTBZ-7IFRG-JG2QF-IHFUK-XTTK6-VXFBN';
this.tencentkey4 = 'Z2BBZ-QBSKJ-DFUFG-FDGT3-4JRYV-JKF5O';
this.baidukey = 'fjke3YUipM9N64GdOIh1DNeK2APO2WcT';
// this.baidukey2 = 'fjke3YUipM9N64GdOIh1DNeK2APO2WcT';
}
//获取定位地址
async guessPosition(req){
return new Promise(async (resolve, reject) => {
let ip;
const defaultIp = '180.158.102.141';
if (process.env.NODE_ENV == 'development') {
ip = defaultIp;
} else {
try {
ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress;
const ipArr = ip.split(':');
ip = ipArr[ipArr.length -1] || defaultIp;
} catch (e) {
ip = defaultIp;
}
}
try{
let result = await this.fetch('http://apis.map.qq.com/ws/location/v1/ip', {
ip,
key: this.tencentkey,
})
if (result.status != 0) {
result = await this.fetch('http://apis.map.qq.com/ws/location/v1/ip', {
ip,
key: this.tencentkey2,
})
}
if (result.status != 0) {
result = await this.fetch('http://apis.map.qq.com/ws/location/v1/ip', {
ip,
key: this.tencentkey3,
})
}
if (result.status != 0) {
result = await this.fetch('http://apis.map.qq.com/ws/location/v1/ip', {
ip,
key: this.tencentkey4,
})
}
if (result.status == 0) {
const cityInfo = {
lat: result.result.location.lat,
lng: result.result.location.lng,
city: result.result.ad_info.city,
}
cityInfo.city = cityInfo.city.replace(/市$/, '');
resolve(cityInfo)
}else{
console.log('定位失败', result)
reject('定位失败');
}
}catch(err){
reject(err);
}
})
}
//搜索地址
async searchPlace(keyword, cityName, type = 'search'){
try{
const resObj = await this.fetch('http://apis.map.qq.com/ws/place/v1/search', {
key: this.tencentkey,
keyword: encodeURIComponent(keyword),
boundary: 'region(' + encodeURIComponent(cityName) + ',0)',
page_size: 10,
});
if (resObj.status == 0) {
return resObj
}else{
throw new Error('搜索位置信息失败');
}
}catch(err){
throw new Error(err);
}
}
//测量距离
async getDistance(from, to, type){
try{
let res
res = await this.fetch('http://api.map.baidu.com/routematrix/v2/driving', {
ak: this.baidukey,
output: 'json',
origins: from,
destinations: to,
})
// if(res.status !== 0){
// res = await this.fetch('http://api.map.baidu.com/routematrix/v2/driving', {
// ak: this.baidukey2,
// output: 'json',
// origins: from,
// destinations: to,
// })
// }
if(res.status == 0){
const positionArr = [];
let timevalue;
res.result.forEach(item => {
timevalue = parseInt(item.duration.value) + 1200;
let durationtime = Math.ceil(timevalue%3600/60) + '分钟';
if(Math.floor(timevalue/3600)){
durationtime = Math.floor(timevalue/3600) + '小时' + durationtime;
}
positionArr.push({
distance: item.distance.text,
order_lead_time: durationtime,
})
})
if (type == 'tiemvalue') {
return timevalue
}else{
return positionArr
}
}else{
if (type == 'tiemvalue') {
return 2000;
} else {
throw new Error('调用百度地图测距失败');
}
}
}catch(err){
console.log('获取位置距离失败');
throw new Error(err);
}
}
//通过ip地址获取精确位置
async geocoder(req){
try{
const address = await this.guessPosition(req);
const params = {
key: this.tencentkey,
location: address.lat + ',' + address.lng
};
let res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
if (res.status != 0) {
params.key = this.tencentkey2;
res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
}
if (res.status != 0) {
params.key = this.tencentkey3;
res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
}
if (res.status != 0) {
params.key = this.tencentkey4;
res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
}
if (res.status == 0) {
return res
}else{
throw new Error('获取具体位置信息失败');
}
}catch(err){
console.log('geocoder获取定位失败', err);
throw new Error(err);
}
}
//通过geohash获取精确位置
async getpois(lat, lng){
try{
const params = {
key: this.tencentkey,
location: lat + ',' + lng
};
let res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
if (res.status != 0) {
params.key = this.tencentkey2;
res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
}
if (res.status != 0) {
params.key = this.tencentkey3;
res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
}
if (res.status != 0) {
params.key = this.tencentkey4;
res = await this.fetch('http://apis.map.qq.com/ws/geocoder/v1/', params);
}
if (res.status == 0) {
return res
}else{
throw new Error('通过获geohash取具体位置失败');
}
}catch(err){
console.log('getpois获取定位失败', err)
throw new Error(err);
}
}
}
export default AddressComponent
================================================
FILE: prototype/baseComponent.js
================================================
import fetch from 'node-fetch';
import Ids from '../models/ids'
import formidable from 'formidable'
import path from 'path'
import fs from 'fs'
import qiniu from 'qiniu'
import gm from 'gm'
qiniu.conf.ACCESS_KEY = 'Ep714TDrVhrhZzV2VJJxDYgGHBAX-KmU1xV1SQdS';
qiniu.conf.SECRET_KEY = 'XNIW2dNffPBdaAhvm9dadBlJ-H6yyCTIJLxNM_N6';
export default class BaseComponent {
constructor(){
this.idList = ['restaurant_id', 'food_id', 'order_id', 'user_id', 'address_id', 'cart_id', 'img_id', 'category_id', 'item_id', 'sku_id', 'admin_id', 'statis_id'];
this.imgTypeList = ['shop', 'food', 'avatar','default'];
this.uploadImg = this.uploadImg.bind(this)
this.qiniu = this.qiniu.bind(this)
}
async fetch(url = '', data = {}, type = 'GET', resType = 'JSON'){
type = type.toUpperCase();
resType = resType.toUpperCase();
if (type == 'GET') {
let dataStr = ''; //数据拼接字符串
Object.keys(data).forEach(key => {
dataStr += key + '=' + data[key] + '&';
})
if (dataStr !== '') {
dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
url = url + '?' + dataStr;
}
}
let requestConfig = {
method: type,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
}
if (type == 'POST') {
Object.defineProperty(requestConfig, 'body', {
value: JSON.stringify(data)
})
}
let responseJson;
try {
const response = await fetch(url, requestConfig);
if (resType === 'TEXT') {
responseJson = await response.text();
}else{
responseJson = await response.json();
}
} catch (err) {
console.log('获取http数据失败', err);
throw new Error(err)
}
return responseJson
}
//获取id列表
async getId(type){
if (!this.idList.includes(type)) {
console.log('id类型错误');
throw new Error('id类型错误');
return
}
try{
const idData = await Ids.findOne();
idData[type] ++ ;
await idData.save();
return idData[type]
}catch(err){
console.log('获取ID数据失败');
throw new Error(err)
}
}
async uploadImg(req, res, next){
const type = req.params.type;
try{
//const image_path = await this.qiniu(req, type);
const image_path = await this.getPath(req, res);
res.send({
status: 1,
image_path,
})
}catch(err){
console.log('上传图片失败', err);
res.send({
status: 0,
type: 'ERROR_UPLOAD_IMG',
message: '上传图片失败'
})
}
}
async getPath(req, res){
return new Promise((resolve, reject) => {
const form = formidable.IncomingForm();
form.uploadDir = './public/img';
form.parse(req, async (err, fields, files) => {
let img_id;
try{
img_id = await this.getId('img_id');
}catch(err){
console.log('获取图片id失败');
fs.unlinkSync(files.file.path);
reject('获取图片id失败');
}
const hashName = (new Date().getTime() + Math.ceil(Math.random()*10000)).toString(16) + img_id;
const extname = path.extname(files.file.name);
if (!['.jpg', '.jpeg', '.png'].includes(extname)) {
fs.unlinkSync(files.file.path);
res.send({
status: 0,
type: 'ERROR_EXTNAME',
message: '文件格式错误'
})
reject('上传失败');
return
}
const fullName = hashName + extname;
const repath = './public/img/' + fullName;
try{
fs.renameSync(files.file.path, repath);
gm(repath)
.resize(200, 200, "!")
.write(repath, async (err) => {
// if(err){
// console.log('裁切图片失败');
// reject('裁切图片失败');
// return
// }
resolve(fullName)
})
}catch(err){
console.log('保存图片失败', err);
if (fs.existsSync(repath)) {
fs.unlinkSync(repath);
} else {
fs.unlinkSync(files.file.path);
}
reject('保存图片失败')
}
});
})
}
async qiniu(req, type = 'default'){
return new Promise((resolve, reject) => {
const form = formidable.IncomingForm();
form.uploadDir = './public/img';
form.parse(req, async (err, fields, files) => {
let img_id;
try{
img_id = await this.getId('img_id');
}catch(err){
console.log('获取图片id失败');
fs.unlinkSync(files.file.path);
reject('获取图片id失败')
}
const hashName = (new Date().getTime() + Math.ceil(Math.random()*10000)).toString(16) + img_id;
const extname = path.extname(files.file.name);
const repath = './public/img/' + hashName + extname;
try{
const key = hashName + extname;
await fs.rename(files.file.path, repath);
const token = this.uptoken('node-elm', key);
const qiniuImg = await this.uploadFile(token.toString(), key, repath);
fs.unlinkSync(repath);
resolve(qiniuImg)
}catch(err){
console.log('保存至七牛失败', err);
fs.unlinkSync(files.file.path)
reject('保存至七牛失败')
}
});
})
}
uptoken(bucket, key){
var putPolicy = new qiniu.rs.PutPolicy(bucket+":"+key);
return putPolicy.token();
}
uploadFile(uptoken, key, localFile){
return new Promise((resolve, reject) => {
var extra = new qiniu.io.PutExtra();
qiniu.io.putFile(uptoken, key, localFile, extra, function(err, ret) {
if(!err) {
resolve(ret.key)
} else {
console.log('图片上传至七牛失败', err);
reject(err)
}
});
})
}
}
================================================
FILE: public/elm/static/css/app.css
================================================
a,article,aside,b,body,button,dd,div,dl,dt,figcaption,figure,footer,h1,h2,h3,h4,h5,h6,header,i,input,li,nav,p,section,select,span,textarea,ul{padding:0;margin:0;list-style:none;font-style:normal;text-decoration:none;border:none;color:#333;font-weight:400;font-family:Microsoft Yahei;box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased}a:hover,article:hover,aside:hover,b:hover,body:hover,button:hover,dd:hover,div:hover,dl:hover,dt:hover,figcaption:hover,figure:hover,footer:hover,h1:hover,h2:hover,h3:hover,h4:hover,h5:hover,h6:hover,header:hover,i:hover,input:hover,li:hover,nav:hover,p:hover,section:hover,select:hover,span:hover,textarea:hover,ul:hover{outline:none}::-webkit-scrollbar{width:0;height:0;background-color:#f5f5f5}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 1px transparent;border-radius:10px;background-color:#f5f5f5}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#555}input[type=button],input[type=reset],input[type=search],input[type=submit],textarea{-webkit-appearance:none}body,html{height:100%;width:100%;background-color:#f5f5f5}.clear:after{content:"";display:block;clear:both}.clear{zoom:1}.back_img{background-repeat:no-repeat;background-size:100% 100%}.margin{margin:0 auto}.left{float:left}.right{float:right}.hide{display:none}.show{display:block}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paddingTop{padding-top:1.95rem}@keyframes backOpacity{0%{opacity:1}25%{opacity:.5}50%{opacity:1}75%{opacity:.5}to{opacity:1}}.animation_opactiy{animation:backOpacity 2s ease-in-out infinite}.router-fade-enter-active,.router-fade-leave-active{transition:opacity .3s}.router-fade-enter,.router-fade-leave-active{opacity:0}
================================================
FILE: public/elm/static/js/app.js
================================================
webpackJsonp([47,45],{0:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var a=n(120),o=r(a),i=n(439),s=r(i),c=n(172),u=r(c),l=n(175),d=r(l),f=n(17);n(170);var h=n(317),v=r(h);"addEventListener"in document&&document.addEventListener("DOMContentLoaded",function(){v.default.attach(document.body)},!1),o.default.use(s.default);var p=new s.default({routes:u.default,mode:f.routerMode,strict:!1,scrollBehavior:function(t,e,n){return n?n:(e.meta.keepAlive&&(e.meta.savedPosition=document.body.scrollTop),{x:0,y:t.meta.savedPosition||0})}});new o.default({router:p,store:d.default}).$mount("#app")},16:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.changePassword=e.signout=e.accountLogin=e.deleteAddress=e.getSearchAddress=e.getAddressList=e.getOrderDetail=e.getOrderList=e.getUser=e.exChangeHongbao=e.getExpired=e.getHongbaoNum=e.vipCart=e.getService=e.payRequest=e.validateOrders=e.rePostVerify=e.placeOrders=e.postAddAddress=e.searchNearby=e.getAddress=e.getRemark=e.checkout=e.sendMobile=e.checkExsis=e.getcaptchas=e.mobileCode=e.ratingTags=e.ratingScores=e.getRatingList=e.foodMenu=e.shopDetails=e.foodActivity=e.foodDelivery=e.foodCategory=e.searchRestaurant=e.shopList=e.msiteFoodTypes=e.msiteAddress=e.searchplace=e.currentcity=e.groupcity=e.hotcity=e.cityGuess=void 0;var a=n(66),o=r(a),i=n(169),s=r(i),c=n(27);e.cityGuess=function(){return(0,s.default)("/v1/cities",{type:"guess"})},e.hotcity=function(){return(0,s.default)("/v1/cities",{type:"hot"})},e.groupcity=function(){return(0,s.default)("/v1/cities",{type:"group"})},e.currentcity=function(t){return(0,s.default)("/v1/cities/"+t)},e.searchplace=function(t,e){return(0,s.default)("/v1/pois",{type:"search",city_id:t,keyword:e})},e.msiteAddress=function(t){return(0,s.default)("/v2/pois/"+t)},e.msiteFoodTypes=function(t){return(0,s.default)("/v2/index_entry",{geohash:t,group_type:"1","flags[]":"F"})},e.shopList=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"",i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"",c=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[],u="";c.forEach(function(t){t.status&&(u+="&support_ids[]="+t.id)});var l={latitude:t,longitude:e,offset:n,limit:"20","extras[]":"activities",keyword:"",restaurant_category_id:r,"restaurant_category_ids[]":a,order_by:o,"delivery_mode[]":i+u};return(0,s.default)("/shopping/restaurants",l)},e.searchRestaurant=function(t,e){return(0,s.default)("/v4/restaurants",{"extras[]":"restaurant_activity",geohash:t,keyword:e,type:"search"})},e.foodCategory=function(t,e){return(0,s.default)("/shopping/v2/restaurant/category",{latitude:t,longitude:e})},e.foodDelivery=function(t,e){return(0,s.default)("/shopping/v1/restaurants/delivery_modes",{latitude:t,longitude:e,kw:""})},e.foodActivity=function(t,e){return(0,s.default)("/shopping/v1/restaurants/activity_attributes",{latitude:t,longitude:e,kw:""})},e.shopDetails=function(t,e,n){return(0,s.default)("/shopping/restaurant/"+t,{latitude:e,longitude:n+"&extras[]=activities&extras[]=album&extras[]=license&extras[]=identification&extras[]=statistics"})},e.foodMenu=function(t){return(0,s.default)("/shopping/v2/menu",{restaurant_id:t})},e.getRatingList=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return(0,s.default)("/ugc/v2/restaurants/"+t+"/ratings",{has_content:!0,offset:e,limit:10,tag_name:n})},e.ratingScores=function(t){return(0,s.default)("/ugc/v2/restaurants/"+t+"/ratings/scores")},e.ratingTags=function(t){return(0,s.default)("/ugc/v2/restaurants/"+t+"/ratings/tags")},e.mobileCode=function(t){return(0,s.default)("/v4/mobile/verify_code/send",{mobile:t,scene:"login",type:"sms"},"POST")},e.getcaptchas=function(){return(0,s.default)("/v1/captchas",{},"POST")},e.checkExsis=function(t,e){var n;return(0,s.default)("/v1/users/exists",(n={},(0,o.default)(n,e,t),(0,o.default)(n,"type",e),n))},e.sendMobile=function(t,e,n,r){var a;return(0,s.default)("/v1/mobile/verify_code/send",(a={action:"send",captcha_code:e},(0,o.default)(a,n,t),(0,o.default)(a,"type","sms"),(0,o.default)(a,"way",n),(0,o.default)(a,"password",r),a),"POST")},e.checkout=function(t,e,n){return(0,s.default)("/v1/carts/checkout",{come_from:"web",geohash:t,entities:e,restaurant_id:n},"POST")},e.getRemark=function(t,e){return(0,s.default)("/v1/carts/"+t+"/remarks",{sig:e})},e.getAddress=function(t,e){return(0,s.default)("/v1/carts/"+t+"/addresses",{sig:e})},e.searchNearby=function(t){return(0,s.default)("/v1/pois",{type:"nearby",keyword:t})},e.postAddAddress=function(t,e,n,r,a,o,i,c,u,l,d){return(0,s.default)("/v1/users/"+t+"/addresses",{address:e,address_detail:n,geohash:r,name:a,phone:o,phone_bk:i,poi_type:c,sex:u,tag:l,tag_type:d},"POST")},e.placeOrders=function(t,e,n,r,a,o,i){return(0,s.default)("/v1/users/"+t+"/carts/"+e+"/orders",{address_id:n,come_from:"mobile_web",deliver_time:"",description:r,entities:a,geohash:o,paymethod_id:1,sig:i},"POST")},e.rePostVerify=function(t,e,n){return(0,s.default)("/v1/carts/"+t+"/verify_code",{sig:e,type:n},"POST")},e.validateOrders=function(t){var e=t.user_id,n=t.cart_id,r=t.address_id,a=t.description,o=t.entities,i=t.geohash,c=t.sig,u=t.validation_code,l=t.validation_token;return(0,s.default)("/v1/users/"+e+"/carts/"+n+"/orders",{address_id:r,come_from:"mobile_web",deliver_time:"",description:a,entities:o,geohash:i,paymethod_id:1,sig:c,validation_code:u,validation_token:l},"POST")},e.payRequest=function(t,e){return(0,s.default)("/payapi/payment/queryOrder",{merchantId:5,merchantOrderNo:t,source:"MOBILE_WAP",userId:e,version:"1.0.0"})},e.getService=function(){return(0,s.default)("/v3/profile/explain")},e.vipCart=function(t,e,n){return(0,s.default)("/member/v1/users/"+t+"/delivery_card/physical_card/bind",{number:e,password:n},"POST")},e.getHongbaoNum=function(t){return(0,s.default)("/promotion/v2/users/"+t+"/hongbaos?limit=20&offset=0")},e.getExpired=function(t){return(0,s.default)("/promotion/v2/users/"+t+"/expired_hongbaos?limit=20&offset=0")},e.exChangeHongbao=function(t,e,n){return(0,s.default)("/v1/users/"+t+"/hongbao/exchange",{exchange_code:e,captcha_code:n},"POST")},e.getUser=function(){return(0,s.default)("/v1/user",{user_id:(0,c.getStore)("user_id")})},e.getOrderList=function(t,e){return(0,s.default)("/bos/v2/users/"+t+"/orders",{limit:10,offset:e})},e.getOrderDetail=function(t,e){return(0,s.default)("/bos/v1/users/"+t+"/orders/"+e+"/snapshot")},e.getAddressList=function(t){return(0,s.default)("/v1/users/"+t+"/addresses")},e.getSearchAddress=function(t){return(0,s.default)("v1/pois",{keyword:t,type:"nearby"})},e.deleteAddress=function(t,e){return(0,s.default)("/v1/users/"+t+"/addresses/"+e,{},"DELETE")},e.accountLogin=function(t,e,n){return(0,s.default)("/v2/login",{username:t,password:e,captcha_code:n},"POST")},e.signout=function(){return(0,s.default)("/v2/signout")},e.changePassword=function(t,e,n,r,a){return(0,s.default)("/v2/changepassword",{username:t,oldpassWord:e,newpassword:n,confirmpassword:r,captcha_code:a},"POST")}},17:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="",a="hash",o="";e.baseUrl=r="//elm.cangdu.org",e.imgBaseUrl=o="//elm.cangdu.org/img/",e.baseUrl=r,e.routerMode=a,e.imgBaseUrl=o},27:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.animate=e.showBack=e.loadMore=e.getStyle=e.removeStore=e.getStore=e.setStore=void 0;var a=n(65),o=r(a),i=n(98),s=r(i),c=(e.setStore=function(t,e){t&&("string"!=typeof e&&(e=(0,s.default)(e)),window.localStorage.setItem(t,e))},e.getStore=function(t){if(t)return window.localStorage.getItem(t)},e.removeStore=function(t){t&&window.localStorage.removeItem(t)},e.getStyle=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"int",r=void 0;return r="scrollTop"===e?t.scrollTop:t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null)[e],"float"==n?parseFloat(r):parseInt(r)});e.loadMore=function t(e,n){var r=window.screen.height,a=void 0,o=void 0,i=void 0,s=void 0,u=void 0,l=void 0;document.body.addEventListener("scroll",function(){t()},!1),e.addEventListener("touchstart",function(){a=e.offsetHeight,o=e.offsetTop,i=c(e,"paddingBottom"),s=c(e,"marginBottom")},{passive:!0}),e.addEventListener("touchmove",function(){t()},{passive:!0}),e.addEventListener("touchend",function(){l=document.body.scrollTop,d()},{passive:!0});var d=function n(){u=requestAnimationFrame(function(){document.body.scrollTop!=l?(l=document.body.scrollTop,t(),n()):(cancelAnimationFrame(u),a=e.offsetHeight,t())})},t=function(){document.body.scrollTop+r>=a+o+i+s&&n()}},e.showBack=function(t){var e=void 0,n=void 0;document.addEventListener("scroll",function(){a()},!1),document.addEventListener("touchstart",function(){a()},{passive:!0}),document.addEventListener("touchmove",function(){a()},{passive:!0}),document.addEventListener("touchend",function(){n=document.body.scrollTop,r()},{passive:!0});var r=function t(){e=requestAnimationFrame(function(){document.body.scrollTop!=n?(n=document.body.scrollTop,t()):cancelAnimationFrame(e),a()})},a=function(){t(document.body.scrollTop>500?!0:!1)}},e.animate=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:400,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"ease-out",a=arguments[4];clearInterval(t.timer),n instanceof Function?(a=n,n=400):n instanceof String&&(r=n,n=400),r instanceof Function&&(a=r,r="ease-out");var i=function(e){return"opacity"===e?Math.round(100*c(t,e,"float")):c(t,e)},s=parseFloat(document.documentElement.style.fontSize),u={},l={};(0,o.default)(e).forEach(function(t){/[^\d^\.]+/gi.test(e[t])?u[t]=e[t].match(/[^\d^\.]+/gi)[0]||"px":u[t]="px",l[t]=i(t)}),(0,o.default)(e).forEach(function(t){"rem"==u[t]?e[t]=Math.ceil(parseInt(e[t])*s):e[t]=parseInt(e[t])});var d=!0,f={};t.timer=setInterval(function(){(0,o.default)(e).forEach(function(o){var s=0,c=!1,u=i(o)||0,h=0,v=void 0;switch(r){case"ease-out":h=u,v=5*n/400;break;case"linear":h=l[o],v=20*n/400;break;case"ease-in":var p=f[o]||0;s=p+(e[o]-l[o])/n,f[o]=s;break;default:h=u,v=5*n/400}switch("ease-in"!==r&&(s=(e[o]-h)/v,s=s>0?Math.ceil(s):Math.floor(s)),r){case"ease-out":c=u!=e[o];break;case"linear":c=Math.abs(Math.abs(u)-Math.abs(e[o]))>Math.abs(s);break;case"ease-in":c=Math.abs(Math.abs(u)-Math.abs(e[o]))>Math.abs(s);break;default:c=u!=e[o]}c?(d=!1,"opacity"===o?(t.style.filter="alpha(opacity:"+(u+s)+")",t.style.opacity=(u+s)/100):"scrollTop"===o?t.scrollTop=u+s:t.style[o]=u+s+"px"):d=!0,d&&(clearInterval(t.timer),a&&a())})},20)}},96:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.RECORD_ADDRESS="RECORD_ADDRESS",e.ADD_CART="ADD_CART",e.REDUCE_CART="REDUCE_CART",e.INIT_BUYCART="INIT_BUYCART",e.CLEAR_CART="CLEAR_CART",e.RECORD_SHOPDETAIL="RECORD_SHOPDETAIL",e.RECORD_USERINFO="RECORD_USERINFO",e.GET_USERINFO="GET_USERINFO",e.CONFIRM_REMARK="CONFIRM_REMARK",e.CONFIRM_INVOICE="CONFIRM_INVOICE",e.CHOOSE_SEARCH_ADDRESS="CHOOSE_SEARCH_ADDRESS",e.SAVE_GEOHASH="SAVE_GEOHASH",e.CONFIRM_ADDRESS="CONFIRM_ADDRESS",e.CHOOSE_ADDRESS="CHOOSE_ADDRESS",e.NEED_VALIDATION="NEED_VALIDATION",e.SAVE_CART_ID_SIG="SAVE_CART_ID_SIG",e.SAVE_ORDER_PARAM="SAVE_ORDER_PARAM",e.CHANGE_ORDER_PARAM="CHANGE_ORDER_PARAM",e.ORDER_SUCCESS="ORDER_SUCCESS",e.SAVE_SHOPID="SAVE_SHOPID",e.SAVE_ORDER="SAVE_ORDER",e.OUT_LOGIN="OUT_LOGIN",e.RETSET_NAME="RETSET_NAME",e.SAVE_AVANDER="SAVE_AVANDER",e.SAVE_ADDDETAIL="SAVE_ADDDETAIL",e.SAVE_ADDRESS="SAVE_ADDRESS",e.SAVE_QUESTION="SAVE_QUESTION",e.ADD_ADDRESS="ADD_ADDRESS",e.BUY_CART="BUY_CART"},121:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(345),o=r(a);e.default={components:{svgIcon:o.default}}},123:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={}},169:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(20),o=r(a),i=n(100),s=r(i),c=n(99),u=r(c),l=n(98),d=r(l),f=n(65),h=r(f),v=n(19),p=r(v),m=n(17);e.default=function(){var t=(0,p.default)(o.default.mark(function t(){var e,n,r,a,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET",f=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"fetch";return o.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(l=l.toUpperCase(),i=m.baseUrl+i,"GET"==l&&(e="",(0,h.default)(c).forEach(function(t){e+=t+"="+c[t]+"&"}),""!==e&&(e=e.substr(0,e.lastIndexOf("&")),i=i+"?"+e)),!window.fetch||"fetch"!=f){t.next=21;break}return n={credentials:"include",method:l,headers:{Accept:"application/json","Content-Type":"application/json"},mode:"cors",cache:"force-cache"},"POST"==l&&Object.defineProperty(n,"body",{value:(0,d.default)(c)}),t.prev=6,t.next=9,fetch(i,n);case 9:return r=t.sent,t.next=12,r.json();case 12:return a=t.sent,t.abrupt("return",a);case 16:throw t.prev=16,t.t0=t.catch(6),new Error(t.t0);case 19:t.next=22;break;case 21:return t.abrupt("return",new u.default(function(t,e){var n=void 0;n=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject;var r="";"POST"==l&&(r=(0,d.default)(c)),n.open(l,i,!0),n.setRequestHeader("Content-type","application/x-www-form-urlencoded"),n.send(r),n.onreadystatechange=function(){if(4==n.readyState)if(200==n.status){var r=n.response;"object"!==("undefined"==typeof r?"undefined":(0,s.default)(r))&&(r=JSON.parse(r)),t(r)}else e(n)}}));case 22:case"end":return t.stop()}},t,void 0,[[6,16]])}));return function(){return t.apply(this,arguments)}}()},170:function(t,e){"use strict";!function(t,e){var n=t.documentElement,r="orientationchange"in window?"orientationchange":"resize",a=function(){var t=n.clientWidth;t&&(n.style.fontSize=20*(t/320)+"px")};t.addEventListener&&(e.addEventListener(r,a,!1),t.addEventListener("DOMContentLoaded",a,!1))}(document,window)},172:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(343),o=r(a),i=function(t){return n.e(41,function(){return t(n(367))})},s=function(t){return n.e(44,function(){return t(n(354))})},c=function(t){return n.e(0,function(){return t(n(369))})},u=function(t){return n.e(25,function(){return t(n(380))})},l=function(t){return n.e(2,function(){return t(n(386))})},d=function(t){return n.e(27,function(){return t(n(368))})},f=function(t){return n.e(18,function(){return t(n(379))})},h=function(t){return n.e(28,function(){return t(n(366))})},v=function(t){return n.e(1,function(){return t(n(371))})},p=function(t){return n.e(12,function(){return t(n(370))})},m=function(t){return n.e(31,function(){return t(n(390))})},_=function(t){return n.e(34,function(){return t(n(387))})},g=function(t){return n.e(26,function(){return t(n(388))})},S=function(t){return n.e(39,function(){return t(n(389))})},y=function(t){return n.e(3,function(){return t(n(365))})},A=function(t){return n.e(4,function(){return t(n(362))})},E=function(t){return n.e(20,function(){return t(n(360))})},b=function(t){return n.e(23,function(){return t(n(359))})},M=function(t){return n.e(29,function(){return t(n(361))})},z=function(t){return n.e(42,function(){return t(n(358))})},R=function(t){return n.e(16,function(){return t(n(357))})},w=function(t){return n.e(24,function(){return t(n(355))})},D=function(t){return n.e(43,function(){return t(n(356))})},x=function(t){return n.e(5,function(){return t(n(384))})},O=function(t){return n.e(35,function(){return t(n(385))})},C=function(t){return n.e(32,function(){return t(n(383))})},L=function(t){return n.e(14,function(){return t(n(378))})},T=function(t){return n.e(36,function(){return t(n(377))})},I=function(t){return n.e(38,function(){return t(n(374))})},k=function(t){return n.e(21,function(){return t(n(375))})},H=function(t){return n.e(37,function(){return t(n(376))})},B=function(t){return n.e(17,function(){return t(n(346))})},V=function(t){return n.e(10,function(){return t(n(347))})},F=function(t){return n.e(6,function(){return t(n(348))})},P=function(t){return n.e(9,function(){return t(n(350))})},N=function(t){return n.e(7,function(){return t(n(352))})},U=function(t){return n.e(13,function(){return t(n(353))})},G=function(t){return n.e(30,function(){return t(n(351))})},j=function(t){return n.e(11,function(){return t(n(349))})},q=function(t){return n.e(15,function(){return t(n(373))})},X=function(t){return n.e(8,function(){return t(n(372))})},Y=function(t){return n.e(40,function(){return t(n(382))})},$=function(t){return n.e(33,function(){return t(n(381))})},J=function(t){return n.e(19,function(){return t(n(364))})},K=function(t){return n.e(22,function(){return t(n(363))})};e.default=[{path:"/",component:o.default,children:[{path:"",redirect:"/home"},{path:"/home",component:i},{path:"/city/:cityid",component:s},{path:"/msite",component:c,meta:{keepAlive:!0}},{path:"/food",component:y},{path:"/search/:geohash",component:u},{path:"/shop",component:l,children:[{path:"foodDetail",component:x},{path:"shopDetail",component:O,children:[{path:"shopSafe",component:C}]}]},{path:"/confirmOrder",component:A,children:[{path:"remark",component:E},{path:"invoice",component:z},{path:"payment",component:b},{path:"userValidation",component:M},{path:"chooseAddress",component:R,children:[{path:"addAddress",component:w,children:[{path:"searchAddress",component:D}]}]}]},{path:"/login",component:d},{path:"/profile",component:f,children:[{path:"info",component:L,children:[{path:"setusername",component:T},{path:"address",component:I,children:[{path:"add",component:k,children:[{path:"addDetail",component:H}]}]}]},{path:"service",component:Y}]},{path:"/forget",component:h},{path:"/order",component:v,children:[{path:"orderDetail",component:p}]},{path:"/vipcard",component:m,children:[{path:"invoiceRecord",component:_},{path:"useCart",component:g},{path:"vipDescription",component:S}]},{path:"/find",component:J},{path:"/download",component:K},{path:"/service",component:Y,children:[{path:"questionDetail",component:$}]},{path:"balance",component:B,children:[{path:"detail",component:V}]},{path:"benefit",component:F,children:[{path:"coupon",component:P},{path:"hbDescription",component:N},{path:"hbHistory",component:U},{path:"exchange",component:G},{path:"commend",component:j}]},{path:"points",component:q,children:[{path:"detail",component:X}]}]}]},173:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(20),o=r(a),i=n(19),s=r(i),c=n(16),u=n(96);e.default={getUserInfo:function(t){var e=this,n=t.commit;t.state;return(0,s.default)(o.default.mark(function t(){var r;return o.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,c.getUser)();case 2:r=t.sent,n(u.GET_USERINFO,r);case 4:case"end":return t.stop()}},t,e)}))()},saveAddress:function(t){var e=this,n=t.commit,r=t.state;return(0,s.default)(o.default.mark(function t(){var a;return o.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!(r.removeAddress.length>0)){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,(0,c.getAddressList)(r.userInfo.user_id);case 4:a=t.sent,n(u.SAVE_ADDRESS,a);case 6:case"end":return t.stop()}},t,e)}))()}}},174:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={}},175:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(120),o=r(a),i=n(4),s=r(i),c=n(176),u=r(c),l=n(173),d=r(l),f=n(174),h=r(f);o.default.use(s.default);var v={latitude:"",longitude:"",cartList:{},shopDetail:null,userInfo:null,shopid:null,remarkText:null,inputText:"",invoice:!1,newAddress:[],searchAddress:null,geohash:"31.22299,121.36025",choosedAddress:null,addressIndex:null,needValidation:null,cartId:null,sig:null,orderParam:null,orderMessage:null,orderDetail:null,login:!0,imgPath:null,removeAddress:[],addAddress:"",question:null,cartPrice:null};e.default=new s.default.Store({state:v,getters:h.default,actions:d.default,mutations:u.default})},176:function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a,o=n(66),i=r(o),s=n(52),c=r(s),u=n(55),l=r(u),d=n(10),f=r(d),h=n(96),v=n(27);n(17);e.default=(a={},(0,i.default)(a,h.RECORD_ADDRESS,function(t,e){var n=e.latitude,r=e.longitude;t.latitude=n,t.longitude=r}),(0,i.default)(a,h.RECORD_SHOPDETAIL,function(t,e){t.shopDetail=e}),(0,i.default)(a,h.ADD_CART,function(t,e){var n=e.shopid,r=e.category_id,a=e.item_id,o=e.food_id,i=e.name,s=e.price,c=e.specs,u=e.packing_fee,l=e.sku_id,d=e.stock,h=t.cartList,p=h[n]=h[n]||{},m=p[r]=p[r]||{},_=m[a]=m[a]||{};_[o]?_[o].num++:_[o]={num:1,id:o,name:i,price:s,specs:c,packing_fee:u,sku_id:l,stock:d},t.cartList=(0,f.default)({},h),(0,v.setStore)("buyCart",t.cartList)}),(0,i.default)(a,h.REDUCE_CART,function(t,e){var n=e.shopid,r=e.category_id,a=e.item_id,o=e.food_id,i=(e.name,e.price,e.specs,t.cartList),s=i[n]||{},c=s[r]||{},u=c[a]||{};u&&u[o]&&(u[o].num>0?(u[o].num--,t.cartList=(0,f.default)({},i),(0,v.setStore)("buyCart",t.cartList)):u[o]=null)}),(0,i.default)(a,h.INIT_BUYCART,function(t){var e=(0,v.getStore)("buyCart");e&&(t.cartList=JSON.parse(e))}),(0,i.default)(a,h.CLEAR_CART,function(t,e){t.cartList[e]=null,t.cartList=(0,f.default)({},t.cartList),(0,v.setStore)("buyCart",t.cartList)}),(0,i.default)(a,h.RECORD_USERINFO,function(t,e){t.userInfo=e,t.login=!0,(0,v.setStore)("user_id",e.user_id)}),(0,i.default)(a,h.GET_USERINFO,function(t,e){t.userInfo&&t.userInfo.username!==e.username||t.login&&(e.message?t.userInfo=null:t.userInfo=(0,f.default)({},e))}),(0,i.default)(a,h.RETSET_NAME,function(t,e){t.userInfo=(0,l.default)({},t.userInfo,{username:e})}),(0,i.default)(a,h.SAVE_SHOPID,function(t,e){t.shopid=e}),(0,i.default)(a,h.CONFIRM_REMARK,function(t,e){var n=e.remarkText,r=e.inputText;t.remarkText=n,t.inputText=r}),(0,i.default)(a,h.CONFIRM_INVOICE,function(t,e){t.invoice=e}),(0,i.default)(a,h.CHOOSE_SEARCH_ADDRESS,function(t,e){t.searchAddress=e}),(0,i.default)(a,h.SAVE_GEOHASH,function(t,e){t.geohash=e}),(0,i.default)(a,h.CONFIRM_ADDRESS,function(t,e){t.newAddress.push(e)}),(0,i.default)(a,h.CHOOSE_ADDRESS,function(t,e){var n=e.address,r=e.index;t.choosedAddress=n,t.addressIndex=r}),(0,i.default)(a,h.NEED_VALIDATION,function(t,e){t.needValidation=e}),(0,i.default)(a,h.SAVE_CART_ID_SIG,function(t,e){var n=e.cart_id,r=e.sig;t.cart_id=n,t.sig=r}),(0,i.default)(a,h.SAVE_ORDER_PARAM,function(t,e){t.orderParam=e}),(0,i.default)(a,h.CHANGE_ORDER_PARAM,function(t,e){t.orderParam=(0,l.default)({},t.orderParam,e)}),(0,i.default)(a,h.ORDER_SUCCESS,function(t,e){t.cartPrice=null,t.orderMessage=e}),(0,i.default)(a,h.SAVE_ORDER,function(t,e){t.orderDetail=e}),(0,i.default)(a,h.OUT_LOGIN,function(t){t.userInfo={},t.login=!1}),(0,i.default)(a,h.SAVE_AVANDER,function(t,e){t.imgPath=e}),(0,i.default)(a,h.SAVE_ADDRESS,function(t,e){t.removeAddress=e}),(0,i.default)(a,h.SAVE_ADDDETAIL,function(t,e){t.addAddress=e}),(0,i.default)(a,h.SAVE_QUESTION,function(t,e){t.question=(0,f.default)({},e)}),(0,i.default)(a,h.ADD_ADDRESS,function(t,e){t.removeAddress=[e].concat((0,c.default)(t.removeAddress))}),(0,i.default)(a,h.BUY_CART,function(t,e){t.cartPrice=e}),a)},272:function(t,e){},289:function(t,e){},343:function(t,e,n){n(289);var r=n(1)(n(121),n(412),null,null);t.exports=r.exports},345:function(t,e,n){n(272);var r=n(1)(n(123),n(395),null,null);t.exports=r.exports},395:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("svg",{staticStyle:{position:"absolute",width:"0",height:"0",visibility:"hidden"},attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[n("defs",[n("symbol",{attrs:{viewBox:"0 0 60 60",id:"eleme"}},[n("path",{attrs:{fill:"#3CABFF","fill-rule":"evenodd",d:"M0 9.375A9.374 9.374 0 0 1 9.375 0h41.25A9.374 9.374 0 0 1 60 9.375v41.25A9.374 9.374 0 0 1 50.625 60H9.375A9.374 9.374 0 0 1 0 50.625V9.375zm35.94 30.204c-5.601 3.147-12.645 1.256-15.834-4.217-3.206-5.501-1.303-12.537 4.25-15.713 4.7-2.689 10.51-1.749 14.127 1.941L27.526 27.89a2.81 2.81 0 0 0-1.037 3.854 2.862 2.862 0 0 0 3.887 1.035l15.988-9.166a17.238 17.238 0 0 0-1.222-2.571c-4.777-8.198-15.358-11.007-23.632-6.275-8.275 4.734-11.11 15.217-6.332 23.415 4.77 8.184 15.322 10.997 23.59 6.297.877-.5 1.654-1.037 2.376-1.623l-1.31-2.248a2.868 2.868 0 0 0-3.893-1.028zm10.824-7.39l-1.418-2.425-4.911 2.798 2.835 4.846 2.454-1.399h.002a2.779 2.779 0 0 0 1.038-3.82z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 28 33",id:"user"}},[n("path",{staticClass:"path1",attrs:{"fill-rule":"evenodd",d:"M20.798 19.289c2.636-2.002 4.215-5.091 4.215-8.437 0-5.886-4.845-10.647-10.808-10.647S3.397 4.966 3.397 10.852c0 3.345 1.578 6.433 4.212 8.435l.264-2.678C4.358 18.32 1.591 21.403.168 25.187l1.478.556v-1.579c-1.485.73-1.485.73-1.501 1.079-.054.188-.054.188-.069.278a2.58 2.58 0 0 0-.026.229 9.112 9.112 0 0 0-.019.4c-.008.265-.014.617-.018 1.039-.005.511-.006 1.037-.006 1.451v.027c-.004 1.732 1.41 3.129 3.154 3.129h22.082a3.18 3.18 0 0 0 3.172-3.153l.011-1.305.008-.897.003-.296.001-.083v-.022-.006-.001l.002-.278-.093-.262c-1.385-3.918-4.203-7.122-7.812-8.88l.263 2.678zm-1.911-2.516l-2.045 1.553 2.309 1.125c2.856 1.392 5.106 3.949 6.218 7.093l-.09-.54V26.033l-.001.083-.003.296-.008.897-.011 1.305c0 .01-.011.021-.013.021H3.161c-.007 0 .005.011.005.032v-.031c0-.404.001-.92.006-1.418.004-.4.01-.732.017-.969.004-.121.008-.212.012-.262l-.006.043c-.009.06-.009.06-.058.229-.01.336-.01.336-1.49 1.063H2.74l.385-1.024c1.141-3.035 3.35-5.495 6.131-6.849l2.309-1.124-2.045-1.554c-1.859-1.412-2.964-3.576-2.964-5.92 0-4.129 3.418-7.488 7.649-7.488s7.649 3.359 7.649 7.488c0 2.344-1.106 4.509-2.966 5.921z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 32 31",id:"shop"}},[n("g",{attrs:{"fill-rule":"evenodd"}},[n("path",{attrs:{d:"M28.232 1.822C27.905.728 26.97.152 25.759.152H5.588c-1.252 0-1.867.411-2.397 1.415l-.101.243-.443 1.434-.975 3.154-.002.007C.837 9.101.294 10.854.26 10.956l-.059.259c-.231 1.787.337 3.349 1.59 4.448 1.159 1.017 2.545 1.384 3.865 1.384.07 0 .07 0 .132-.002-.01.001-.01.001.061.002 1.32 0 2.706-.367 3.865-1.384a4.96 4.96 0 0 0 .413-.407l-1.043-.946-1.056.931c1.033 1.171 2.51 1.792 4.21 1.801.04.002.088.004.173.004 1.32 0 2.706-.367 3.865-1.384.148-.13.287-.267.418-.411l-1.044-.944-1.057.93c1.033 1.174 2.511 1.796 4.213 1.806.04.002.088.004.173.004 1.32 0 2.706-.367 3.865-1.384.15-.131.29-.27.422-.416l-1.046-.943-1.058.929c1.033 1.177 2.513 1.801 4.218 1.811.04.002.088.004.173.004 1.32 0 2.706-.367 3.865-1.384 1.206-1.058 1.858-2.812 1.676-4.426-.069-.61-.535-2.207-1.354-4.785l-.109-.342a327.554 327.554 0 0 0-1.295-3.966l-.122-.366.014.043h.004zm-2.684.85l.12.361.318.962c.329.999.658 2.011.965 2.973l.108.338c.719 2.262 1.203 3.92 1.24 4.249.08.711-.233 1.553-.735 1.993-.553.485-1.308.685-2.008.685l-.098-.002c-.987-.007-1.695-.306-2.177-.854l-1.044-1.189-1.06 1.175a2.192 2.192 0 0 1-.188.185c-.553.485-1.308.685-2.008.685l-.098-.002c-.985-.007-1.693-.305-2.174-.852l-1.043-1.185-1.059 1.171c-.058.064-.12.125-.186.183-.553.485-1.308.685-2.008.685l-.098-.002c-.984-.007-1.692-.304-2.173-.85L9.101 12.2l-1.058 1.166a2.248 2.248 0 0 1-.184.181c-.553.485-1.307.685-2.008.685l-.061-.001-.131.001c-.701 0-1.455-.2-2.008-.685-.538-.472-.767-1.102-.654-1.971l-1.396-.18 1.338.44c.043-.13.552-1.775 1.425-4.599l.002-.007.975-3.155.443-1.434-1.345-.415 1.245.658c.054-.102.042-.085-.083-.001-.122.082-.143.086-.009.086H25.763c.053 0-.164-.133-.225-.339l.014.043-.004-.001zM5.528 19.48c.778 0 1.408.63 1.408 1.408v7.424a1.408 1.408 0 1 1-2.816 0v-7.424c0-.778.63-1.408 1.408-1.408z"}}),t._v(" "),n("path",{attrs:{d:"M.28 29.72c0-.707.58-1.28 1.277-1.28h28.155a1.28 1.28 0 0 1 .007 2.56H1.561A1.278 1.278 0 0 1 .28 29.72z"}}),t._v(" "),n("path",{attrs:{d:"M26.008 19.48c.778 0 1.408.63 1.408 1.408v7.424a1.408 1.408 0 1 1-2.816 0v-7.424c0-.778.63-1.408 1.408-1.408z"}})])]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 28 33",id:"location"}},[n("g",{attrs:{"fill-rule":"evenodd"}},[n("path",{staticClass:"path1",attrs:{d:"M20.809 21.6L12.9 29.509h1.616l-7.992-7.992a13.003 13.003 0 0 1-.506-.478c-4.25-4.25-4.25-11.14 0-15.389s11.14-4.25 15.389 0c4.25 4.25 4.25 11.14 0 15.389a10.81 10.81 0 0 1-.543.508l-.056.052zm1.56 1.669c.225-.196.443-.401.656-.613 5.142-5.142 5.142-13.48 0-18.622s-13.48-5.142-18.622 0c-5.142 5.142-5.142 13.48 0 18.622.18.18.364.354.553.522l8.753 8.755 8.661-8.664z"}}),t._v(" "),n("path",{staticClass:"path2",attrs:{d:"M9.428 16.739a6.063 6.063 0 1 0 8.573-8.575 6.063 6.063 0 0 0-8.573 8.575zm1.616-1.616a3.776 3.776 0 1 1 5.34-5.341 3.776 3.776 0 0 1-5.34 5.341z"}})])]),t._v(" "),n("symbol",{attrs:{id:"star",viewBox:"0 0 32 32"}},[n("path",{staticClass:"path1",attrs:{d:"M16 26.382l-8.16 4.992c-1.5 0.918-2.382 0.264-1.975-1.435l2.226-9.303-7.269-6.218c-1.337-1.143-0.987-2.184 0.755-2.322l9.536-0.758 3.667-8.835c0.674-1.624 1.772-1.613 2.442 0l3.667 8.835 9.536 0.758c1.753 0.139 2.082 1.187 0.755 2.322l-7.269 6.218 2.226 9.303c0.409 1.71-0.485 2.347-1.975 1.435l-8.16-4.992z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 32 32",id:"backtop"}},[n("g",{attrs:{"fill-rule":"evenodd"}},[n("circle",{attrs:{cx:"16",cy:"16",r:"15",stroke:"#999","stroke-width":"0.6",fill:"none"}}),t._v(" "),n("line",{staticStyle:{stroke:"#999","stroke-width":"0.8"},attrs:{x1:"16",y1:"10",x2:"16",y2:"21"}}),t._v(" "),n("line",{staticStyle:{stroke:"#999","stroke-width":"0.8"},attrs:{x1:"10",y1:"10",x2:"22",y2:"10"}}),t._v(" "),n("path",{staticStyle:{stroke:"#999","stroke-width":"0.8",fill:"none"},attrs:{d:"M9.5 18 L16 10 L22.5 18"}}),t._v(" "),n("text",{staticStyle:{"font-size":"6px",fill:"#999","font-weight":"700"},attrs:{x:"10",y:"27"}},[t._v("顶部")])])]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 33 32",id:"default"}},[n("path",{attrs:{fill:"#3b87c8",d:"M13.374 29.064a.94.94 0 0 1-.941-.941V6.476l-7.285 6.899a.942.942 0 0 1-1.299-1.364l8.876-8.424a.94.94 0 0 1 1.59.681v23.855a.94.94 0 0 1-.941.941zM20.904 29.355h-.008a.94.94 0 0 1-.375-.078.943.943 0 0 1-.559-.86V3.944a.94.94 0 1 1 1.882 0v22.287l7.238-6.842a.94.94 0 0 1 1.289 1.366l-8.818 8.338a.943.943 0 0 1-.649.264z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 32 32",id:"distance"}},[n("path",{attrs:{fill:"#2a9bd3",d:"M15.884 31.236l-.042.001a.888.888 0 0 1-.59-.224l-7.91-7.91a7.548 7.548 0 0 1-.498-.471 12.752 12.752 0 0 1-3.747-9.045C3.097 6.523 8.824.796 15.888.796s12.791 5.727 12.791 12.791c0 3.532-1.432 6.73-3.747 9.045-.196.196-.409.391-.613.578l-7.813 7.804a.886.886 0 0 1-.589.223l-.035-.001zm0-28.667C9.818 2.59 4.908 7.513 4.908 13.582c0 3.023 1.218 5.762 3.19 7.752l.461.435 7.316 7.316 7.2-7.2q.284-.249.551-.516a10.977 10.977 0 0 0 3.225-7.787c0-6.066-4.905-10.987-10.965-11.013z"}}),t._v(" "),n("path",{attrs:{fill:"#2a9bd3",d:"M15.884 18.524a5.707 5.707 0 0 1-4.07-1.732l-.001-.001a5.76 5.76 0 1 1 4.119 1.734h-.05zm-2.817-2.942a3.982 3.982 0 1 0 0-5.626c-.726.717-1.175 1.713-1.175 2.813s.449 2.096 1.175 2.813z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 32 32",id:"fengniao"}},[n("path",{attrs:{fill:"#27a9e1",d:"M5.953 2.793s-.117 1.801.857 3.56c.361.255 10.458 6.218 10.458 6.218L5.953 2.794z"}}),t._v(" "),n("path",{attrs:{fill:"#b8e5fa",d:"M9.604.889s-.333 1.404.069 3.147c.254.307 7.801 8.116 7.801 8.116L9.604.889z"}}),t._v(" "),n("path",{attrs:{fill:"#0089cf",d:"M29.282 14.601l-4.861-.361s-.133-.001-.147-.226h-.002a2.652 2.652 0 0 0-2.978-2.357h-.003l-.011.001-.12.019-.004.001c-.432.075-1.812.374-3.038 1.285 0 0-.167.121-.421.33L2.665 6.043s3.254 8.665 12.207 11.98c-1.6 2.849-7.407 13.48-7.407 13.48l2.446-1.306s.775-2.853 1.884-4.957c.609-.936 1.211-.992 1.498-1.141.291-.151 3.707-.765 6.431-4.339.897-1.166 1.244-2.666 1.723-4.261.28-.061 3.008-.651 3.789-.718 1.068-.092 4.045-.181 4.045-.181z"
}}),t._v(" "),n("path",{attrs:{fill:"#0089cf",d:"M7.392 17.849c-1.567-1.368-2.199-3.219-2.035-5.217-.232-.288-.45-.572-.654-.851-.484 2.903.555 4.854 2.176 6.269 1.538 1.342 3.635 1.85 5.466 1.577-1.674.109-3.563-.565-4.953-1.778z"}}),t._v(" "),n("path",{attrs:{fill:"#0089cf",d:"M12.345 19.628h.002zm-7.642-7.846c.204.279.421.563.654.851-.164 1.998.468 3.849 2.035 5.217 1.292 1.128 3.016 1.79 4.597 1.79.12 0 .238-.004.356-.011a6.554 6.554 0 0 1-.975.071c-1.568 0-3.22-.54-4.49-1.648-1.621-1.415-2.66-3.366-2.176-6.269z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 23 32",id:"hot"}},[n("path",{attrs:{fill:"#f07373",d:"M9.859 29.375c-3.489-.771-6.362-3.097-7.187-5.551-.882-2.623-1.029-6.873-.238-9.318l-1.727.037.001.002.001.004.004.01.011.029.038.091c.039.09.086.191.142.3.155.304.349.627.586.955a7.477 7.477 0 0 0 2.711 2.318c.583.153.583.153 1.087-.188.187-.263.187-.263.224-.39.028-.094.041-.176.05-.28.01-.109.016-.238.022-.47.063-2.219.162-3.38.562-4.943a10.05 10.05 0 0 1 .814-2.185c1.433-2.723 4.843-6.053 6.699-7.021l-1.325-.962c-.064.382-.127.992-.131 1.722-.008 1.252.169 2.393.616 3.329.261.547.525.968 1.132 1.862l.23.339c.86 1.281 1.161 1.986 1.069 2.653l-.009.125c.069.517.069.517.781.906.451-.026.451-.026.578-.104.144-.093.144-.093.19-.136.041-.037.079-.077.123-.125.068-.076.153-.178.245-.295.22-.279.458-.615.677-.963.648-1.028 1.045-1.988 1.037-2.845l-.914.009-.706.581c.295.358.809 1.075 1.33 1.936.826 1.363 1.492 2.791 1.898 4.209 1.1 3.845.3 9.288-2.245 11.75a9.652 9.652 0 0 1-1.659 1.29 10.232 10.232 0 0 1-3.471 1.332c-.794.151-1.385.191-2.064.191h-.009a2.75 2.75 0 0 1-.373-.03 6.007 6.007 0 0 1-.585-.115 7.765 7.765 0 0 1-.536-.15l-.578 1.735a9.182 9.182 0 0 0 1.445.341c.221.031.43.048.627.048h.009a12.546 12.546 0 0 0 2.407-.224 12.011 12.011 0 0 0 4.088-1.572c.699-.431 1.358-.94 1.971-1.533 3.098-2.998 4-9.132 2.731-13.567-.455-1.591-1.188-3.161-2.092-4.653-.569-.939-1.134-1.727-1.482-2.15l-1.645-1.998.024 2.588c.004.412-.281 1.1-.756 1.853a9.64 9.64 0 0 1-.569.809 4.528 4.528 0 0 1-.158.195c.028-.027.028-.027.16-.113.122-.075.122-.075.57-.101.71.388.71.388.778.902h-.914l.906.125c.174-1.262-.261-2.281-1.362-3.922l-.235-.347c-.554-.817-.787-1.189-.995-1.624-.306-.642-.444-1.53-.438-2.53a10.566 10.566 0 0 1 .107-1.431L14.44.304l-1.628.85c-2.18 1.138-5.862 4.733-7.471 7.791a11.873 11.873 0 0 0-.967 2.583 19.2 19.2 0 0 0-.511 3.147c-.036.423-.061.839-.079 1.273-.011.281-.019.531-.029.924-.005.191-.01.298-.015.354a.403.403 0 0 1 .019-.077c.027-.099.027-.099.203-.346.492-.332.492-.332 1.112-.157a5.745 5.745 0 0 1-2.54-2.496 3.456 3.456 0 0 1-.093-.197l-.018-.044-.002-.006v.001l.001.002v.002l-.915-2.473-.812 2.51c-.917 2.836-.757 7.485.245 10.463 1.042 3.099 4.442 5.852 8.526 6.754l.395-1.785z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 32 32",id:"price"}},[n("path",{attrs:{fill:"#e6b61a",d:"M16 32c8.837 0 16-7.163 16-16S24.837 0 16 0 0 7.163 0 16s7.163 16 16 16zm0-2C8.268 30 2 23.732 2 16S8.268 2 16 2s14 6.268 14 14-6.268 14-14 14z"}}),n("path",{attrs:{fill:"#e6b61a",d:"M23.14 6.06l-5.12 8.65h4.48v1.54h-5.49v2.43h5.49v1.54h-5.49v5.1h-2.02v-5.1H9.53v-1.54h5.46v-2.43H9.53v-1.54h4.45L8.8 6.06h2.24l4.99 8.48 4.93-8.48h2.18z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 33 32",id:"rating"}},[n("path",{attrs:{fill:"#eba53b",d:"M27.087 31.84L16.8 25.553 6.504 31.84l2.824-11.727-9.186-7.878 12.019-.941L16.801.16l4.631 11.134 12.019.941-9.158 7.849zM16.8 23.369l7.407 4.527-2.014-8.471 6.588-5.647-8.659-.696L16.8 5.063l-3.341 8.019-8.659.696 6.588 5.647-2.014 8.471z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 38 32",id:"selected"}},[n("path",{attrs:{fill:"#3190e8",d:"M32.291 2.327c.582-.582 1.455-.582 2.036 0l2.036 2.036c.582.582.582 1.455 0 2.036L13.818 29.09c-.582.582-1.455.582-2.036 0L1.455 18.908c-.582-.582-.582-1.455 0-2.036l2.036-2.036c.582-.582 1.455-.582 2.036 0l7.273 7.273L32.291 2.327z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 32 32",id:"speed"}},[n("path",{attrs:{fill:"#37c7b7",d:"M16 32c8.837 0 16-7.163 16-16S24.837 0 16 0 0 7.163 0 16s7.163 16 16 16zm0-2C8.268 30 2 23.732 2 16S8.268 2 16 2s14 6.268 14 14-6.268 14-14 14z"}}),n("path",{attrs:{fill:"#37c7b7",d:"M15 7v11.002l5.678 4.882 1.304-1.517-5.33-4.583.348.758V6.999h-2z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 50 50",id:"cart-minus"}},[n("path",{attrs:{"fill-rule":"evenodd","stroke-width":"4",d:"M22 0C9.8 0 0 9.8 0 22s9.8 22 22 22 22-9.8 22-22S34.2 0 22 0zm0 42C11 42 2 33 2 22S11 2 22 2s20 9 20 20-9 20-20 20z","clip-rule":"evenodd"}}),t._v(" "),n("path",{attrs:{"fill-rule":"evenodd",d:"M32 20c1.1 0 2 .9 2 2s-.9 2-2 2H12c-1.1 0-2-.9-2-2s.9-2 2-2h20z","clip-rule":"evenodd"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 50 50",id:"cart-add"}},[n("path",{attrs:{fill:"none",d:"M0 0h44v44H0z"}}),t._v(" "),n("path",{attrs:{"fill-rule":"evenodd",d:"M22 0C9.8 0 0 9.8 0 22s9.8 22 22 22 22-9.8 22-22S34.2 0 22 0zm10 24h-8v8c0 1.1-.9 2-2 2s-2-.9-2-2v-8h-8c-1.1 0-2-.9-2-2s.9-2 2-2h8v-8c0-1.1.9-2 2-2s2 .9 2 2v8h8c1.1 0 2 .9 2 2s-.9 2-2 2z","clip-rule":"evenodd"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 24 32",id:"cart-remove"}},[n("path",{attrs:{fill:"#bbb","fill-rule":"evenodd",d:"M21.5 10h-19c-1.1 0-1.918.896-1.819 1.992l1.638 18.016C2.419 31.104 3.4 32 4.5 32h15c1.1 0 2.081-.896 2.182-1.992l1.637-18.016A1.798 1.798 0 0 0 21.5 10zM8 28H5L4 14h4v14zm6 0h-4V14h4v14zm5 0h-3V14h4l-1 14zm2-24h-2.941l-.353-2.514C17.592.669 16.823 0 15.998 0H8c-.825 0-1.593.668-1.708 1.486L5.94 4H3a3 3 0 0 0-3 3v1h24V7a3 3 0 0 0-3-3zM8.24 2h7.52l.279 2H7.96l.28-2z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 14 16",id:"cart"}},[n("path",{attrs:{fill:"#FFF","fill-rule":"evenodd",d:"M12.364 2.998H2.088L1.816.687a.455.455 0 0 0-.478-.431L.431.303A.454.454 0 0 0 0 .78l1.256 10.893c.006.293.011 1.325.933 1.325h9.546a.455.455 0 0 0 .455-.454v-.881a.454.454 0 0 0-.455-.455H3.05l-.11-.937h8.606c.998 0 1.889-.724 1.989-1.616l.455-4.04c.1-.893-.628-1.617-1.626-1.617zm-.45 4.245c-.075.669-.317 1.212-1.066 1.212H2.727L2.3 4.812h8.821c.749 0 1.065.543.99 1.212l-.197 1.219zM2.416 15.79a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm9.092 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 58 58",id:"cart-icon"}},[n("defs",[n("filter",{attrs:{id:"a",width:"200%",height:"200%",x:"-50%",y:"-50%",filterUnits:"objectBoundingBox"}},[n("feOffset",{attrs:{in:"SourceAlpha",result:"shadowOffsetOuter1"}}),n("feGaussianBlur",{attrs:{stdDeviation:"1.5",in:"shadowOffsetOuter1",result:"shadowBlurOuter1"}}),n("feColorMatrix",{attrs:{values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.08 0",in:"shadowBlurOuter1",result:"shadowMatrixOuter1"}}),n("feMerge",[n("feMergeNode",{attrs:{in:"shadowMatrixOuter1"}}),n("feMergeNode",{attrs:{in:"SourceGraphic"}})],1)],1),n("path",{attrs:{id:"b",d:"M7.614 4.051c-1.066.086-1.452-.398-1.752-1.584C5.562 1.28.33 5.88.33 5.88l3.71 19.476c0 .148-1.56 7.515-1.56 7.515-.489 2.19.292 4.27 3.56 4.32 0 0 36.917.017 36.92.047 1.979-.012 2.981-.995 3.013-3.039.03-2.043-1.045-2.978-2.987-2.993L8.83 31.192s.86-3.865 1.077-3.865c0 0-5.788.122 32.065-1.956.606-.033 2.018-.764 2.298-1.848 1.113-4.317 4.008-13.26 4.458-15.64.932-4.925 2.061-8.558-4.28-7.405 0 0-35.768 3.487-36.833 3.573z"}})]),t._v(" "),n("g",{attrs:{fill:"none","fill-rule":"evenodd",filter:"url(#a)",transform:"translate(3 2)"}},[n("g",{attrs:{transform:"translate(5.038 7.808)"}},[n("mask",{attrs:{id:"c",fill:"#fff"}},[n("use",{attrs:{"xlink:href":"#b"}})]),n("use",{attrs:{fill:"#FFF","xlink:href":"#b"}}),n("path",{attrs:{fill:"#2073C1",d:"M53.962 7.774l-5.701 19.305-40.78 1.574z",opacity:".1",mask:"url(#c)"}})]),n("path",{attrs:{stroke:"#FFF","stroke-width":"6",d:"M9.374 18.722S7.868 11.283 7.323 8.71C6.778 6.136 5.86 5.33 3.978 4.52 2.096 3.713.367 2.286.367 2.286","stroke-linecap":"round"}}),n("circle",{attrs:{cx:"46",cy:"51",r:"4",fill:"#FFF"}}),n("circle",{attrs:{cx:"12",cy:"51",r:"4",fill:"#FFF"}})])]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 14 14",id:"arrow-left"}},[n("path",{attrs:{d:"M0 0 L8 7 L0 14",stroke:"#fff","stroke-width":"1",fill:"none"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 1024 1024",id:"res-well"}},[n("path",{attrs:{fill:"#7ED321","fill-rule":"evenodd",d:"M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zM247.808 402.432c0-36.864 39.936-93.184 93.184-93.184s93.184 56.32 93.184 93.184c0 11.264-9.216 20.48-20.48 20.48-11.264 0-20.48-9.216-20.48-20.48 0-16.384-24.576-52.224-52.224-52.224-27.648 0-52.224 35.84-52.224 52.224 0 11.264-9.216 20.48-20.48 20.48-11.264 0-20.48-9.216-20.48-20.48zM512 800.768c-132.096 0-239.616-96.256-239.616-215.04 0-11.264 9.216-20.48 20.48-20.48 11.264 0 20.48 9.216 20.48 20.48 0 96.256 89.088 174.08 198.656 174.08 109.568 0 198.656-77.824 198.656-174.08 0-11.264 9.216-20.48 20.48-20.48 11.264 0 20.48 9.216 20.48 20.48 0 117.76-107.52 215.04-239.616 215.04zm243.712-377.856c-11.264 0-20.48-9.216-20.48-20.48 0-17.408-24.576-52.224-52.224-52.224-28.672 0-52.224 34.816-52.224 52.224 0 11.264-9.216 20.48-20.48 20.48-11.264 0-20.48-9.216-20.48-20.48 0-36.864 39.936-93.184 93.184-93.184s93.184 56.32 93.184 93.184c0 11.264-9.216 20.48-20.48 20.48z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 1024 1024",id:"res-bad"}},[n("path",{attrs:{fill:"#D0021B","fill-rule":"evenodd",d:"M512 0C230.326 0 0 230.326 0 512s230.573 512 512 512 512-230.326 512-512S793.674 0 512 0zM240.694 373.755l158.735-56.285 15.306 46.164L256 419.919l-15.306-46.164zm440.409 384.123c-10.122 0-20.49-10.122-25.674-20.49-10.122-10.122-61.47-25.674-148.366-25.674-86.896 0-138.245 15.306-148.366 25.674 0 10.122-10.122 20.49-25.674 20.49s-25.674-10.122-25.674-25.674c0-71.591 174.041-71.591 194.53-71.591 20.489 0 194.53 0 194.53 71.591 10.122 10.368 0 25.674-15.306 25.674zM768 419.919l-163.672-61.47 15.306-46.164 158.735 56.285-10.368 51.348-.001.001z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 122 122",id:"avatar-default"}},[n("path",{attrs:{fill:"#DCDCDC","fill-rule":"evenodd",d:"M61 121.5c33.413 0 60.5-27.087 60.5-60.5S94.413.5 61 .5.5 27.587.5 61s27.087 60.5 60.5 60.5zm12.526-45.806c-.019 3.316-.108 6.052.237 9.825 3.286 8.749 18.816 9.407 28.468 17.891-1.833 1.998-6.768 6.788-15 10.848-7.02 3.463-16.838 6.416-24.831 6.416-17.366 0-32.764-7.149-42.919-17.264 9.713-8.407 25.49-9.173 28.769-17.891.345-3.773.258-6.509.24-9.825l-.004-.002c-1.903-.985-5.438-7.268-6.01-12.571-1.492-.12-3.843-1.561-4.534-7.247-.37-3.053 1.107-4.77 2.004-5.31-5.046-19.212 1.507-33.16 20.749-34.406 5.753 0 10.18 1.52 11.909 4.523 15.35 2.702 11.756 22.658 9.328 29.882.899.54 2.376 2.258 2.004 5.31-.689 5.687-3.042 7.127-4.534 7.248-.575 5.305-3.25 10.82-5.873 12.57l-.003.003zM61 120.5C28.14 120.5 1.5 93.86 1.5 61S28.14 1.5 61 1.5s59.5 26.64 59.5 59.5-26.64 59.5-59.5 59.5z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 655 1024",id:"mobile"}},[n("path",{attrs:{d:"M0 122.501v778.998C0 968.946 55.189 1024 123.268 1024h408.824c68.52 0 123.268-54.846 123.268-122.501V122.501C655.36 55.054 600.171 0 532.092 0H123.268C54.748 0 0 54.846 0 122.501zM327.68 942.08c-22.622 0-40.96-18.338-40.96-40.96s18.338-40.96 40.96-40.96 40.96 18.338 40.96 40.96-18.338 40.96-40.96 40.96zM81.92 163.84h491.52V819.2H81.92V163.84z"}})]),t._v(" "),n("symbol",{staticClass:"icon",attrs:{viewBox:"0 0 1024 1024",id:"arrow-right"}},[n("path",{staticClass:"selected",attrs:{d:"M716.298 417.341l-.01.01L307.702 7.23l-94.295 94.649 408.591 410.117-408.591 410.137 94.295 94.639 502.891-504.76z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 40 40",id:"order"}},[n("path",{attrs:{d:"M31.5 3h-23C6 3 4 5.1 4 7.7v24.7C4 34.9 6 37 8.5 37h23c2.5 0 4.5-2.1 4.5-4.7V7.7C36 5.1 34 3 31.5 3zM11.8 28.2c-1.1 0-2-.9-2-2.1 0-1.1.9-2.1 2-2.1s2 .9 2 2.1c0 1.2-.9 2.1-2 2.1zm0-6.1c-1.1 0-2-.9-2-2.1 0-1.1.9-2.1 2-2.1s2 .9 2 2.1c0 1.1-.9 2.1-2 2.1zm0-6.2c-1.1 0-2-.9-2-2.1 0-1.1.9-2.1 2-2.1s2 .9 2 2.1c0 1.2-.9 2.1-2 2.1zm5.1 11.9h13.5v-2.6H16.9v2.6zm0-6.5h13.5v-2.6H16.9v2.6zm0-6.6h13.5v-2.6H16.9v2.6z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 40 40",id:"point"}},[n("path",{attrs:{d:"M34.6 7.1c0-1.1-1-2.1-2.1-2.1h-24c-1.1 0-2 1-2.1 2.1l-1.6 25C4.6 34.3 6.3 36 8.5 36h24c2.2 0 3.9-1.7 3.7-3.9l-1.6-25zm-5.9 6.1c-.2 4.6-3.7 8.2-8.3 8.2-4.6 0-8.2-3.7-8.4-8.3-.3-.2-.5-.6-.5-1 0-.7.6-1.2 1.3-1.2s1.3.6 1.3 1.2c0 .5-.3.9-.7 1.1.2 3.8 3.2 6.8 7.1 6.8 3.9 0 6.8-3.1 7-6.9-.4-.2-.6-.6-.6-1.1 0-.7.6-1.2 1.3-1.2s1.3.6 1.3 1.2c-.2.6-.4 1-.8 1.2z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 40 40",id:"vip"}},[n("path",{attrs:{d:"M7 33.4c0 1.1.9 1.6 2 1.6h22c1.1 0 2-.5 2-1.6V31H7v2.4z"}}),n("path",{staticClass:"st0",attrs:{d:"M32.1 14.3c-.6 2.3-2.6 4-5.1 4-2.9 0-5.3-2.3-5.3-5.2v-.2c-.5.2-1 .3-1.6.3-.6 0-1.1-.1-1.7-.3v.2c0 2.9-2.4 5.2-5.3 5.2-2.5 0-4.6-1.7-5.1-4.1-.5.4-1.2.6-1.8.6-.3 0-.5.1-.8 0L7.2 29h26l1.7-14.2c-.3.1-.5.1-.8.1-.8 0-1.5-.2-2-.6z"}}),n("ellipse",{attrs:{cx:"20.1",cy:"8.2",rx:"3.2",ry:"3.2"}}),n("ellipse",{attrs:{cx:"6.4",cy:"10.5",rx:"2.4",ry:"2.4"}}),n("ellipse",{attrs:{cx:"33.8",cy:"10.5",rx:"2.4",ry:"2.4"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 40 40",id:"download"}},[n("path",{attrs:{d:"M30 5H10c-2.8 0-5 2.2-5 5v20c0 2.8 2.2 5 5 5h20c2.8 0 5-2.2 5-5V10c0-2.8-2.2-5-5-5zm-3.9 22.7c-.1.2-.3.4-.6.5-4.3 2.8-10.1 1.6-13-2.8-2.8-4.3-1.6-10.2 2.8-13 4.3-2.8 10.2-1.6 13 2.8.2.2.3.5.4.8.1.2 0 .5-.2.7l-8.8 5.7c-.2.2-.6.1-.7-.2l-.5-.7c-.4-.6-.2-1.5.4-1.9l5.6-3.6c.2-.2.3-.5.2-.7l-.1-.1c-2.2-1.8-5.4-2.1-7.9-.4-3.1 2-4 6.1-2 9.2 2 3.1 6.1 4 9.2 2 .6-.4 1.3-.2 1.7.4l.3.7c.1.2.4.5.2.6zm3.1-4.4l-.9.6c-.2.2-.6.1-.7-.2L26.5 22c-.2-.2-.1-.6.2-.7l1.8-1.1c.2-.2.6-.1.7.2l.6.9c.3.6.1 1.5-.6 2z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 40 40",id:"service"}},[n("g",{attrs:{id:"service_XMLID_1_"}},[n("path",{attrs:{id:"service_XMLID_6_",d:"M32.2 9.5c-.2-.7-.1-.7-.4-.9-1.7-1.2-5.3.2-6.7 1.9-.8-3.8-3.8-6.1-4.7-5.9-.9-.2-4 2.1-4.8 5.9-1.3-1.7-5-3.1-6.7-1.9-.1.1-.5.6-.5.7C5.4 20.7 15 24.6 19 25.7v8.7c0 .7.3 1.2 1 1.2s1-.5 1-1.2v-8.6c4-1 14.2-4.8 11.2-16.3z"}}),n("path",{attrs:{id:"service_XMLID_7_",d:"M6 25c-.9 0-1.6.7-1.6 1.5.1.8.7 1.5 1.6 1.5 3.1 0 6.5 1.5 8.5 3.7.3.3.7.6 1.1.6.4 0 .7-.1 1-.4.6-.6.6-1.6.1-2.3C14.1 26.8 10 25 6 25z"}}),n("path",{attrs:{id:"service_XMLID_8_",d:"M34.6 25c-4 0-8.1 1.9-10.7 4.6-.6.6-.5 1.6.1 2.2.3.3.7.4 1 .4.4 0 .8-.3 1.1-.6 2-2.1 5.3-3.7 8.4-3.7h.1c.8 0 1.5-.7 1.5-1.5 0-.7-.7-1.4-1.5-1.4z"}})]),n("path",{staticClass:"st1",attrs:{d:"M0 0h40v40H0z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 120 120",id:"select"}},[n("circle",{attrs:{cx:"60",cy:"60",r:"60"}}),n("path",{attrs:{fill:"#FFF",d:"M63.84 84.678a1.976 1.976 0 0 1-.387.545l-7.975 7.976a1.996 1.996 0 0 1-2.829-.005L24.172 64.716a2.005 2.005 0 0 1-.005-2.828l7.976-7.976a1.996 1.996 0 0 1 2.828.005l19.015 19.015L91.498 35.42a1.991 1.991 0 0 1 2.823 0l7.976 7.977c.784.784.78 2.043 0 2.823L63.84 84.678z"}})]),t._v(" "),n("symbol",{attrs:{"xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 72 72",id:"sdk_icon_zhifubao@2x"}},[n("defs",[n("path",{attrs:{d:"M36 72c19.882 0 36-16.118 36-36S55.882 0 36 0 0 16.118 0 36s16.118 36 36 36z",id:"sdk_icon_zhifubao@2x_a"}})]),n("g",{attrs:{fill:"none","fill-rule":"evenodd"}},[n("mask",{attrs:{id:"sdk_icon_zhifubao@2x_b",fill:"#fff"}},[n("use",{attrs:{"xlink:href":"#sdk_icon_zhifubao@2x_a"}})]),n("use",{attrs:{fill:"#00A1E9","xlink:href":"#sdk_icon_zhifubao@2x_a"}}),n("path",{attrs:{d:"M33 21v-5h7v5h14v3H40v4h12c-.202.048-.408 3.223-2 7-1.32 4.134-2.683 6.15-2 6l23.6 8c-.2-.285-.848 2.3-2 4-.775 2.013-2 5-2 5L44 46c.237.162-3.79 4.674-8 7-4.002 1.645-8.717 2.88-14 1-4.93-.56-8.554-3.867-8-10 .693-6.083 7.138-8.19 13-8 4.739-.19 14.796 3.29 15 3-.204.29.642-1.628 2-4 .283-2.015.518-3.777 0-4H22v-3h11v-4H20v-3h13zm-7 30c-7.407 0-9-3.593-9-6 0-2.761 1.576-5.57 8-6 6.484-.383 15.2 4.436 15 4 .2.436-6.238 8-14 8z",fill:"#FFF",mask:"url(#sdk_icon_zhifubao@2x_b)"}})])]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 72 72",id:"weixin"}},[n("g",{attrs:{fill:"none","fill-rule":"evenodd"}},[n("path",{attrs:{d:"M36 72c19.882 0 36-16.118 36-36S55.882 0 36 0 0 16.118 0 36s16.118 36 36 36z",fill:"#45C144"}}),n("path",{attrs:{d:"M29 40l-4-8c-.262-.292-.288-.398 0-1 .594-.228.743-.174 1 0l4 4c1.5 1.098 1.5 1.098 3 0l21-10c-3.668-4.964-10.11-8-17-8-12.33 0-22 8.12-22 18 0 5.6 2.91 10.518 7 14 1 .8 1.068.537 1 1 .068.185-.954 4.042-1 4-.027.316-.097.495 0 1-.097.075.225.4 1 0-.22.4 5-3 5-3 1.4.6 5.8 1 9 1 11.533 0 21.2-7.85 21-18 .2-2.899-.692-5.756-2-8L31 41c-1.5.5-2-1-2-1z",fill:"#FFF"}})])]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 46 46",id:"human"}},[n("path",{attrs:{fill:"#ff7b52",d:"M33.291 37.774c-.25.097-.504.175-.765.233-6.427 1.444-5.954-3.968-6-3.953 10.457-5.053 10.348-13.466 10-16.216-16.15-.041-22.943-7.063-22.943-7.063s-.176 1.733-2.933 4.996c-2.756 3.262-5.236 4.09-5.132 4.113.54 13.9 12.246 14.242 12.246 14.242-.762 4.662-4.357 4.33-4.357 4.33s-6.38.213-11.173-7.446c-.85-1.359-1.02-2.864-1.166-4.579-.217-2.542.14-4.643.312-7.2.271-4.064.96-6.269.96-6.269S7.13 0 21.4 0s17.828 12.508 17.828 12.508l-.035.074c.533.763.984 1.997 1.356 3.36A3.483 3.483 0 0 1 45 19.281v7.257a3.484 3.484 0 0 1-3.325 3.472c-2.009 4.537-6.657 12.185-15.241 12.457C26.023 44.485 24.269 46 22.168 46c-2.407 0-4.357-1.988-4.357-4.44 0-2.453 1.95-4.44 4.357-4.44 1.955 0 3.609 1.311 4.16 3.118 1.447.13 4.044-.094 6.963-2.464zM18.216 27.018s.99 3.08 3.705 3.08 3.807-1.875 3.807-2.906c.467-1.135 1.348-.541 1.482-.071.134.47-.763 4.67-5.24 4.67s-5.205-4.358-5.205-4.358.033-.97.702-.97c.669 0 .749.555.749.555zm10.052-2.332c.963 0 1.743-1.192 1.743-2.664 0-1.471-.78-2.664-1.743-2.664-.963 0-1.743 1.193-1.743 2.664 0 1.472.78 2.664 1.743 2.664zm-12.723 0c.962 0 1.743-1.192 1.743-2.664 0-1.471-.78-2.664-1.743-2.664-.963 0-1.743 1.193-1.743 2.664 0 1.472.78 2.664 1.743 2.664z"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 46 46",id:"phone"}},[n("path",{attrs:{fill:"#6ac20b",d:"M15.433 30.568c9.342 9.342 17.708 12.15 18.871 12.316 1.163.167 3.07.542 5.837-2.225 3.24-3.24 3.566-4.94 1.783-6.724-1.783-1.783-6.212-4.48-7.416-5.176-1.206-.696-2.228-.472-3.097.133-.868.605-1.87 1.375-2.798 2.047-.927.671-2.087.955-3.332.167-1.245-.79-3.35-2.27-5.735-4.652-2.384-2.384-3.863-4.49-4.651-5.735-.789-1.245-.505-2.405.167-3.332.671-.928 1.441-1.93 2.046-2.798.605-.869.828-1.89.134-3.097-.696-1.204-3.394-5.633-5.177-7.416-1.783-1.783-3.484-1.457-6.724 1.783-2.766 2.766-2.391 4.674-2.226 5.837.167 1.164 2.976 9.53 12.318 18.872"}})]),t._v(" "),n("symbol",{attrs:{viewBox:"0 0 126 126",id:"expired"}},[n("path",{attrs:{fill:"#9B9B9B","fill-rule":"evenodd",d:"M63 125.5c34.518 0 62.5-27.982 62.5-62.5S97.518.5 63 .5.5 28.482.5 63s27.982 62.5 62.5 62.5zM15.156 66.678l-3.073-1.258 2.868-1.674.248-3.31 2.478 2.21 3.225-.79-1.335 3.04 1.746 2.825-3.302-.33-2.147 2.533-.704-3.245zm4.07-24.55l-2.03-2.625 3.32-.015 1.87-2.744 1.04 3.153 3.187.93-2.677 1.964.1 3.32-2.695-1.94-3.124 1.122 1.01-3.163zm15.8-19.223l-.446-3.29 2.883 1.646 2.99-1.44-.674 3.25 2.294 2.4-3.3.363-1.573 2.924-1.363-3.027-3.267-.592 2.457-2.233zm23.296-8.75l1.258-3.072 1.674 2.868 3.31.248-2.21 2.478.79 3.225-3.04-1.335-2.825 1.746.33-3.302-2.533-2.147 3.245-.704zm24.55 4.072l2.625-2.032.015 3.32 2.744 1.87-3.153 1.04-.93 3.188-1.964-2.677-3.32.1 1.94-2.695-1.122-3.124 3.163 1.01zm27.972 39.095l3.073 1.258-2.868 1.674-.248 3.31-2.478-2.21-3.225.79 1.335-3.04-1.746-2.825 3.302.33 2.147-2.533.704 3.245zm-4.07 24.55l2.03 2.625-3.32.015-1.87 2.744-1.04-3.153-3.187-.93 2.677-1.964-.1-3.32 2.695 1.94 3.124-1.122-1.01 3.163zm-15.8 19.223l.446 3.29-2.883-1.646-2.99 1.44.674-3.25-2.294-2.4 3.3-.363 1.573-2.924 1.363 3.027 3.267.592-2.457 2.233zm-23.296 8.75l-1.258 3.072-1.674-2.868-3.31-.248 2.21-2.478-.79-3.225 3.04 1.335 2.825-1.746-.33 3.302 2.533 2.147-3.245.704zm-24.55-4.072l-2.625 2.032-.015-3.32-2.744-1.87 3.153-1.04.93-3.188 1.964 2.677 3.32-.1-1.94 2.695 1.122 3.124-3.163-1.01zM74.257 41.7a23.764 23.764 0 0 0-22.17.092 23.767 23.767 0 0 0-12.508 18.646l.995.1a22.767 22.767 0 0 1 11.983-17.863 22.764 22.764 0 0 1 21.238-.088l.462-.887zm11.387 22.436A22.764 22.764 0 0 1 74.313 82.1a22.767 22.767 0 0 1-21.5.696l-.44.897a23.767 23.767 0 0 0 22.44-.727A23.764 23.764 0 0 0 86.64 64.214l-.997-.078zM63 122.5C30.14 122.5 3.5 95.86 3.5 63S30.14 3.5 63 3.5s59.5 26.64 59.5 59.5-26.64 59.5-59.5 59.5zm14.127-71.148l1.14 1.975 3.388-1.956-1.14-1.974-3.388 1.956zm2.704-3.14l-1.055-1.83-3.388 1.956 1.056 1.83 3.388-1.957zm.237 8.232l3.388-1.956-1.14-1.974-3.388 1.956 1.14 1.974zm-6.89-8.715a24.73 24.73 0 0 0-.892-1.453 7.288 7.288 0 0 0-.79-.985c.31-.104.617-.227.924-.367a6.52 6.52 0 0 0 .842-.46c.13-.093.226-.12.285-.08.06.04.066.128.017.267a.653.653 0 0 0-.032.378c.03.113.09.253.187.42l.85 1.475 3.39-1.956a39.962 39.962 0 0 0-1.01-1.677c-.25-.383-.472-.665-.67-.847a13.33 13.33 0 0 0 1.857-.767c.19-.09.313-.107.374-.05.062.057.064.148.007.273-.09.2-.128.356-.117.47.01.114.06.247.147.4l.792 1.37c.24-.157.48-.318.718-.483a9.91 9.91 0 0 0 .673-.513l1.02 1.766c-.26.095-.52.204-.78.327-.262.123-.525.243-.79.36l4.655 8.063c.234-.17.46-.333.675-.486.217-.153.43-.318.643-.496l.912 1.58c-.21.085-.434.177-.672.278-.238.1-.534.243-.888.43-.354.185-.79.423-1.307.712a205.733 205.733 0 0 0-3.876 2.238c-.516.307-.943.567-1.28.78-.34.215-.615.402-.828.562-.212.16-.408.31-.586.45l-.912-1.58c.638-.24 1.29-.533 1.958-.882l-4.668-8.085a20.893 20.893 0 0 0-1.67 1.186l-1.02-1.767a21.623 21.623 0 0 0 1.862-.854zm14.762 2.285l3.387-1.956-2.124-3.68-3.388 1.956 2.124 3.68zm-1.45-10.332l-3.387 1.956 1.956 3.387 3.387-1.956-1.956-3.387zm2.11 11.67c.274.634.514 1.305.717 2.01.204.704.36 1.408.47 2.11.11.704.167 1.4.17 2.093a10.19 10.19 0 0 1-.17 1.94c-.51-.15-1.18-.14-2.008.024.213-.974.312-1.88.298-2.723a10.595 10.595 0 0 0-.37-2.558c-.23-.865-.573-1.77-1.028-2.72a48.398 48.398 0 0 0-1.714-3.208l-2.7-4.676a25.767 25.767 0 0 0-.875-1.42 21.753 21.753 0 0 0-.85-1.186c.525-.21 1.043-.45 1.554-.717.51-.267 1.112-.6 1.805-1a60.923 60.923 0 0 0 1.893-1.136 17.45 17.45 0 0 0 1.502-1.047c.137.364.325.787.565 1.267.24.48.517.99.83 1.53l7.535 13.054a6.1 6.1 0 0 1 .46.94.97.97 0 0 1-.036.756c-.115.25-.347.527-.698.832-.35.304-.864.688-1.54 1.15a3.186 3.186 0 0 0-.647-.858 4.97 4.97 0 0 0-1.038-.717 13.81 13.81 0 0 0 1.096-.55c.264-.152.45-.295.555-.43a.502.502 0 0 0 .108-.437 2.097 2.097 0 0 0-.243-.566l-2.172-3.762-3.47 2.004zm-1.954 7.223a6.16 6.16 0 0 0-1.466-.69 6.537 6.537 0 0 0-1.563-.332l.69-1.59a14.604 14.604 0 0 1 3.05.817l-.71 1.794zm-4.033-.027a2.137 2.137 0 0 0-.287.51 6.12 6.12 0 0 0-.26.872 23.78 23.78 0 0 0-.283 1.452c-.1.594-.225 1.34-.37 2.237a3.37 3.37 0 0 0-.92-.078 5.34 5.34 0 0 0-1.096.19 8.492 8.492 0 0 0 .812-2.41c.15-.843.175-1.782.077-2.816.39.034.75.034 1.08 0a8.61 8.61 0 0 0 1.06-.182c.14-.044.227-.04.26.017.03.056.007.126-.074.21zm-17.506-5.745c.68-.392 1.22-.72 1.624-.98.405-.26.798-.538 1.182-.834l1.044 1.81c-.426.19-.86.4-1.3.626a40.64 40.64 0 0 0-1.66.917l5.015 8.688c.21.36.354.684.435.97.082.285.043.584-.118.9-.16.313-.468.676-.924 1.086-.455.41-1.11.918-1.962 1.52a10.17 10.17 0 0 0-.84-.83 7.863 7.863 0 0 0-1.12-.836 20.7 20.7 0 0 0 1.457-.813c.36-.226.625-.43.797-.612.172-.183.262-.346.27-.49a.783.783 0 0 0-.117-.444l-4.68-8.105-4.448 2.568c-.846.488-1.512.886-2 1.195-.485.31-.936.6-1.35.877l-1.03-1.788c.236-.1.472-.204.706-.31.234-.108.484-.234.75-.38a93.69 93.69 0 0 0 2.035-1.132l4.45-2.568a106.39 106.39 0 0 0-1.3-2.202c-.33-.54-.576-.92-.74-1.138.35-.13.72-.29 1.105-.486.387-.194.696-.378.93-.55.192-.147.346-.176.462-.086.117.09.133.205.048.346a.79.79 0 0 0-.08.56c.044.186.098.335.162.446l1.2 2.08zm-1.79 11.537a25.633 25.633 0 0 0-1.934-1.475 35.97 35.97 0 0 0-2.03-1.31l1.267-1.644a38.25 38.25 0 0 1 2.034 1.195c.68.428 1.346.9 1.993 1.412l-1.33 1.822zm-12.53-7.01c.706.293 1.41.608 2.11.942.702.334 1.376.693 2.022 1.078l-1.13 2.12a56.81 56.81 0 0 0-2.01-1.152 41.097 41.097 0 0 0-2.06-1.044l1.067-1.945zM63 118.25c30.514 0 55.25-24.736 55.25-55.25S93.514 7.75 63 7.75 7.75 32.486 7.75 63 32.486 118.25 63 118.25zm-2.237-47.53c.262-.058.562-.097.9-.118.34-.02.753-.04 1.24-.063.52-.025 1.176-.163 1.964-.415.788-.25 1.72-.646 2.794-1.184 1.077-.536 2.303-1.235 3.682-2.096a87.9 87.9 0 0 0 4.634-3.133 10.2 10.2 0 0 0 .24 1.4c.098.378.23.74.394 1.09a321.96 321.96 0 0 1-4.068 2.362 69.403 69.403 0 0 1-3.052 1.65c-.88.445-1.643.802-2.29 1.074s-1.236.483-1.768.633c-.533.15-1.03.256-1.492.32-.462.063-.954.107-1.476.13-.62.046-1.087.126-1.4.24-.31.117-.536.344-.674.682-.123.33-.22.74-.286 1.232a18.89 18.89 0 0 0-.144 1.62 7.14 7.14 0 0 0-1.164-.31 9.118 9.118 0 0 0-1.23-.136c.132-.575.256-1.07.374-1.49.118-.42.23-.785.338-1.096.106-.31.212-.575.318-.793.105-.22.214-.407.326-.564l-3.66-6.34c-.582.337-1.08.634-1.495.892-.415.257-.75.498-1.01.722l-.972-1.684c.293-.132.648-.3 1.066-.505.42-.203.83-.42 1.23-.653a31.8 31.8 0 0 0 1.27-.775c.433-.277.775-.516 1.028-.718.14.4.292.778.46 1.134.17.355.413.81.733 1.364l3.193 5.53zm-15.907-.43l-2.712-4.7-5.425 3.133c-1.456.84-2.783 1.63-3.983 2.368-1.2.74-2.125 1.344-2.778 1.813l-1.237-2.14c.307-.14.708-.335 1.202-.583.494-.25 1.055-.54 1.684-.876a143.593 143.593 0 0 0 4.375-2.429 153.71 153.71 0 0 0 4.442-2.648c1.175-.734 2.054-1.315 2.638-1.745.15.357.367.813.652 1.37a42.88 42.88 0 0 0 1.05 1.915l1.848 3.2a32.46 32.46 0 0 0 1.93 2.96l-2.057 1.188-.72-1.247-9.395 5.424 3.072 5.32c.224.39.415.68.574.875.158.195.345.304.562.327.216.023.5-.045.853-.202.353-.157.838-.405 1.455-.743.876-.47 1.734-.942 2.577-1.42a68.054 68.054 0 0 0 2.465-1.465c.754-.453 1.335-.84 1.743-1.158.407-.318.686-.66.836-1.023.15-.364.185-.81.104-1.334a26.6 26.6 0 0 0-.45-2.124c.843.437 1.734.523 2.67.26.206 1.026.324 1.854.354 2.483.03.628-.083 1.184-.34 1.665-.258.48-.698.943-1.32 1.386-.623.443-1.495.988-2.617 1.636l-2.545 1.47c-.908.524-1.758.996-2.55 1.417-1.063.558-1.902.97-2.517 1.23-.615.264-1.123.368-1.524.313-.402-.055-.75-.274-1.045-.657-.297-.385-.652-.937-1.068-1.658l-3.444-5.965a27.726 27.726 0 0 0-1.155-1.855c-.337-.49-.602-.835-.793-1.04.37-.157.762-.342 1.176-.553.414-.212.79-.425 1.13-.64.185-.125.32-.144.41-.056.087.088.085.214-.005.377a.624.624 0 0 0-.105.394c.015.12.082.286.202.494l.384.665 9.396-5.424zM10.402 63c0-29.05 23.55-52.598 52.598-52.598 29.05 0 52.598 23.55 52.598 52.598 0 29.05-23.55 52.598-52.598 52.598-29.05 0-52.598-23.55-52.598-52.598z"}})])])])},staticRenderFns:[]}},412:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("transition",{attrs:{name:"router-fade",mode:"out-in"}},[n("keep-alive",[t.$route.meta.keepAlive?n("router-view"):t._e()],1)],1),t._v(" "),n("transition",{attrs:{name:"router-fade",mode:"out-in"}},[t.$route.meta.keepAlive?t._e():n("router-view")],1),t._v(" "),n("svg-icon")],1)},staticRenderFns:[]}}});
================================================
FILE: public/elm/static/js/manifest.js
================================================
!function(e){function a(d){if(c[d])return c[d].exports;var f=c[d]={exports:{},id:d,loaded:!1};return e[d].call(f.exports,f,f.exports,a),f.loaded=!0,f.exports}var d=window.webpackJsonp;window.webpackJsonp=function(b,o){for(var r,t,i=0,n=[];i=0&&y.splice(e,1)}function s(t){var e=document.createElement("style");return e.type="text/css",i(t,e),e}function c(t,e){var n,r,o;if(e.singleton){var i=m++;n=v||(v=s(e)),r=u.bind(null,n,i,!1),o=u.bind(null,n,i,!0)}else n=s(e),r=f.bind(null,n),o=function(){a(n)};return r(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;r(t=e)}else o()}}function u(t,e,n,r){var o=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=g(e,o);else{var i=document.createTextNode(o),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function f(t,e){var n=e.css,r=e.media,o=e.sourceMap;if(r&&t.setAttribute("media",r),o&&(n+="\n/*# sourceURL="+o.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var l={},p=function(t){var e;return function(){return"undefined"==typeof e&&(e=t.apply(this,arguments)),e}},d=p(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),h=p(function(){return document.head||document.getElementsByTagName("head")[0]}),v=null,m=0,y=[];t.exports=function(t,e){e=e||{},"undefined"==typeof e.singleton&&(e.singleton=d()),"undefined"==typeof e.insertAt&&(e.insertAt="bottom");var n=o(t);return r(n,e),function(t){for(var i=[],a=0;a-1&&e.splice(n,1)}}function u(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;l(t,n,[],t._modules.root,!0),f(t,n,e)}function f(t,e,n){var r=t._vm;t.getters={};var i=t._wrappedGetters,a={};o(i,function(e,n){a[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})});var s=A.config.silent;A.config.silent=!0,t._vm=new A({data:{$$state:e},computed:a}),A.config.silent=s,t.strict&&y(t),r&&(n&&t._withCommit(function(){r._data.$$state=null}),A.nextTick(function(){return r.$destroy()}))}function l(t,e,n,r,o){var i=!n.length,a=t._modules.getNamespace(n);if(r.namespaced&&(t._modulesNamespaceMap[a]=r),!i&&!o){var s=g(e,n.slice(0,-1)),c=n[n.length-1];t._withCommit(function(){A.set(s,c,r.state)})}var u=r.context=p(t,a,n);r.forEachMutation(function(e,n){var r=a+n;h(t,r,e,u)}),r.forEachAction(function(e,n){var r=e.root?n:a+n,o=e.handler||e;v(t,r,o,u)}),r.forEachGetter(function(e,n){var r=a+n;m(t,r,e,u)}),r.forEachChild(function(r,i){l(t,e,n.concat(i),r,o)})}function p(t,e,n){var r=""===e,o={dispatch:r?t.dispatch:function(n,r,o){var i=_(n,r,o),a=i.payload,s=i.options,c=i.type;return s&&s.root||(c=e+c),t.dispatch(c,a)},commit:r?t.commit:function(n,r,o){var i=_(n,r,o),a=i.payload,s=i.options,c=i.type;s&&s.root||(c=e+c),t.commit(c,a,s)}};return Object.defineProperties(o,{getters:{get:r?function(){return t.getters}:function(){return d(t,e)}},state:{get:function(){return g(t.state,n)}}}),o}function d(t,e){var n={},r=e.length;return Object.keys(t.getters).forEach(function(o){if(o.slice(0,r)===e){var i=o.slice(r);Object.defineProperty(n,i,{get:function(){return t.getters[o]},enumerable:!0})}}),n}function h(t,e,n,r){var o=t._mutations[e]||(t._mutations[e]=[]);o.push(function(e){n.call(t,r.state,e)})}function v(t,e,n,r){var o=t._actions[e]||(t._actions[e]=[]);o.push(function(e,o){var i=n.call(t,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:t.getters,rootState:t.state},e,o);return a(i)||(i=Promise.resolve(i)),t._devtoolHook?i.catch(function(e){throw t._devtoolHook.emit("vuex:error",e),e}):i})}function m(t,e,n,r){t._wrappedGetters[e]||(t._wrappedGetters[e]=function(t){return n(r.state,r.getters,t.state,t.getters)})}function y(t){t._vm.$watch(function(){return this._data.$$state},function(){},{deep:!0,sync:!0})}function g(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function _(t,e,n){return i(t)&&t.type&&(n=e,e=t,t=t.type),{type:t,payload:e,options:n}}function b(t){A&&t===A||(A=t,C(A))}function w(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function x(t){return function(e,n){return"string"!=typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function k(t,e,n){var r=t._modulesNamespaceMap[n];return r}var C=function(t){function e(){var t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}var n=Number(t.version.split(".")[0]);if(n>=2)t.mixin({beforeCreate:e});else{var r=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,r.call(this,t)}}},O="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,$=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"==typeof n?n():n)||{}},S={namespaced:{configurable:!0}};S.namespaced.get=function(){return!!this._rawModule.namespaced},$.prototype.addChild=function(t,e){this._children[t]=e},$.prototype.removeChild=function(t){delete this._children[t]},$.prototype.getChild=function(t){return this._children[t]},$.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},$.prototype.forEachChild=function(t){o(this._children,t)},$.prototype.forEachGetter=function(t){this._rawModule.getters&&o(this._rawModule.getters,t)},$.prototype.forEachAction=function(t){this._rawModule.actions&&o(this._rawModule.actions,t)},$.prototype.forEachMutation=function(t){this._rawModule.mutations&&o(this._rawModule.mutations,t)},Object.defineProperties($.prototype,S);var E=function(t){this.register([],t,!1)};E.prototype.get=function(t){return t.reduce(function(t,e){return t.getChild(e)},this.root)},E.prototype.getNamespace=function(t){var e=this.root;return t.reduce(function(t,n){return e=e.getChild(n),t+(e.namespaced?n+"/":"")},"")},E.prototype.update=function(t){s([],this.root,t)},E.prototype.register=function(t,e,n){var r=this;void 0===n&&(n=!0);var i=new $(e,n);if(0===t.length)this.root=i;else{var a=this.get(t.slice(0,-1));a.addChild(t[t.length-1],i)}e.modules&&o(e.modules,function(e,o){r.register(t.concat(o),e,n)})},E.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var A,T=function t(e){var n=this;void 0===e&&(e={}),!A&&"undefined"!=typeof window&&window.Vue&&b(window.Vue);var o=e.plugins;void 0===o&&(o=[]);var i=e.strict;void 0===i&&(i=!1);var a=e.state;void 0===a&&(a={}),"function"==typeof a&&(a=a()||{}),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new E(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new A;var s=this,c=this,u=c.dispatch,p=c.commit;this.dispatch=function(t,e){return u.call(s,t,e)},this.commit=function(t,e,n){return p.call(s,t,e,n)},this.strict=i,l(this,a,[],this._modules.root),f(this,a),o.forEach(function(t){return t(n)}),A.config.devtools&&r(this)},j={state:{configurable:!0}};j.state.get=function(){return this._vm._data.$$state},j.state.set=function(t){},T.prototype.commit=function(t,e,n){var r=this,o=_(t,e,n),i=o.type,a=o.payload,s=(o.options,{type:i,payload:a}),c=this._mutations[i];c&&(this._withCommit(function(){c.forEach(function(t){t(a)})}),this._subscribers.forEach(function(t){return t(s,r.state)}))},T.prototype.dispatch=function(t,e){var n=this,r=_(t,e),o=r.type,i=r.payload,a={type:o,payload:i},s=this._actions[o];if(s)return this._actionSubscribers.forEach(function(t){return t(a,n.state)}),s.length>1?Promise.all(s.map(function(t){return t(i)})):s[0](i)},T.prototype.subscribe=function(t){return c(t,this._subscribers)},T.prototype.subscribeAction=function(t){return c(t,this._actionSubscribers)},T.prototype.watch=function(t,e,n){var r=this;return this._watcherVM.$watch(function(){return t(r.state,r.getters)},e,n)},T.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm._data.$$state=t})},T.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"==typeof t&&(t=[t]),this._modules.register(t,e),l(this,this.state,t,this._modules.get(t),n.preserveState),f(this,this.state)},T.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit(function(){var n=g(e.state,t.slice(0,-1));A.delete(n,t[t.length-1])}),u(this)},T.prototype.hotUpdate=function(t){this._modules.update(t),u(this,!0)},T.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(T.prototype,j);var L=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;n[r]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var r=k(this.$store,"mapState",t);if(!r)return;e=r.context.state,n=r.context.getters}return"function"==typeof o?o.call(this,e,n):e[o]},n[r].vuex=!0}),n}),M=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var r=this.$store.commit;if(t){var i=k(this.$store,"mapMutations",t);if(!i)return;r=i.context.commit}return"function"==typeof o?o.apply(this,[r].concat(e)):r.apply(this.$store,[o].concat(e))}}),n}),P=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;o=t+o,n[r]=function(){if(!t||k(this.$store,"mapGetters",t))return this.$store.getters[o]},n[r].vuex=!0}),n}),N=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var r=this.$store.dispatch;if(t){var i=k(this.$store,"mapActions",t);if(!i)return;r=i.context.dispatch}return"function"==typeof o?o.apply(this,[r].concat(e)):r.apply(this.$store,[o].concat(e))}}),n}),I=function(t){return{mapState:L.bind(null,t),mapGetters:P.bind(null,t),mapMutations:M.bind(null,t),mapActions:N.bind(null,t)}},R={Store:T,install:b,version:"2.5.0",mapState:L,mapMutations:M,mapGetters:P,mapActions:N,createNamespacedHelpers:I};t.exports=R},,,,,,function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var o=n(55),i=r(o);e.default=i.default||function(t){for(var e=1;e0?r:n)(t)}},function(t,e,n){var r=n(81),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){var r=n(46);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var r=n(30),o=n(28),i=n(68),a=n(85),s=n(34).f;t.exports=function(t){var e=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:a.f(t)})}},function(t,e,n){e.f=n(31)},function(t,e,n){"use strict";var r=n(208)(!0);n(107)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},,,,,,,,,,,function(t,e,n){t.exports={default:n(180),__esModule:!0}},function(t,e,n){t.exports={default:n(181),__esModule:!0}},function(t,e,n){t.exports={default:n(185),__esModule:!0}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var o=n(179),i=r(o),a=n(178),s=r(a),c="function"==typeof s.default&&"symbol"==typeof i.default?function(t){return typeof t}:function(t){return t&&"function"==typeof s.default&&t.constructor===s.default&&t!==s.default.prototype?"symbol":typeof t};e.default="function"==typeof s.default&&"symbol"===c(i.default)?function(t){return"undefined"==typeof t?"undefined":c(t)}:function(t){return t&&"function"==typeof s.default&&t.constructor===s.default&&t!==s.default.prototype?"symbol":"undefined"==typeof t?"undefined":c(t)}},function(t,e,n){var r=n(58),o=n(31)("toStringTag"),i="Arguments"==r(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=a(e=Object(t),o))?n:i?r(e):"Object"==(s=r(e))&&"function"==typeof e.callee?"Arguments":s}},function(t,e,n){var r=n(30).document;t.exports=r&&r.documentElement},function(t,e,n){t.exports=!n(41)&&!n(53)(function(){return 7!=Object.defineProperty(n(75)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(58);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e,n){var r=n(60),o=n(31)("iterator"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},function(t,e,n){var r=n(40);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){var i=t.return;throw void 0!==i&&r(i.call(t)),e}}},function(t,e,n){"use strict";var r=n(68),o=n(32),i=n(114),a=n(45),s=n(60),c=n(196),u=n(69),f=n(204),l=n(31)("iterator"),p=!([].keys&&"next"in[].keys()),d="@@iterator",h="keys",v="values",m=function(){return this};t.exports=function(t,e,n,y,g,_,b){c(n,e,y);var w,x,k,C=function(t){if(!p&&t in E)return E[t];switch(t){case h:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},O=e+" Iterator",$=g==v,S=!1,E=t.prototype,A=E[l]||E[d]||g&&E[g],T=A||C(g),j=g?$?C("entries"):T:void 0,L="Array"==e?E.entries||A:A;if(L&&(k=f(L.call(new t)),k!==Object.prototype&&k.next&&(u(k,O,!0),r||"function"==typeof k[l]||a(k,l,m))),$&&A&&A.name!==v&&(S=!0,T=function(){return A.call(this)}),r&&!b||!p&&!S&&E[l]||a(E,l,T),s[e]=T,s[O]=m,g)if(w={values:$?T:C(v),keys:_?T:C(h),entries:j},b)for(x in w)x in E||i(E,x,w[x]);else o(o.P+o.F*(p||S),e,w);return w}},function(t,e,n){var r=n(31)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},t(i)}catch(t){}return n}},function(t,e,n){var r=n(40),o=n(201),i=n(76),a=n(79)("IE_PROTO"),s=function(){},c="prototype",u=function(){var t,e=n(75)("iframe"),r=i.length,o="<",a=">";for(e.style.display="none",n(102).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(o+"script"+a+"document.F=Object"+o+"/script"+a),t.close(),u=t.F;r--;)delete u[c][i[r]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(s[c]=r(t),n=new s,s[c]=null,n[a]=t):n=u(),void 0===e?n:o(n,e)}},function(t,e,n){var r=n(111),o=n(76).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e,n){var r=n(44),o=n(35),i=n(190)(!1),a=n(79)("IE_PROTO");t.exports=function(t,e){var n,s=o(t),c=0,u=[];for(n in s)n!=a&&r(s,n)&&u.push(n);for(;e.length>c;)r(s,n=e[c++])&&(~i(u,n)||u.push(n));return u}},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,n){var r=n(40),o=n(46),i=n(77);t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t),a=n.resolve;return a(e),n.promise}},function(t,e,n){t.exports=n(45)},function(t,e,n){var r=n(40),o=n(67),i=n(31)("species");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||void 0==(n=r(a)[i])?e:o(n)}},function(t,e,n){var r,o,i,a=n(59),s=n(194),c=n(102),u=n(75),f=n(30),l=f.process,p=f.setImmediate,d=f.clearImmediate,h=f.MessageChannel,v=f.Dispatch,m=0,y={},g="onreadystatechange",_=function(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},b=function(t){_.call(t.data)};p&&d||(p=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return y[++m]=function(){s("function"==typeof t?t:Function(t),e)},r(m),m},d=function(t){delete y[t]},"process"==n(58)(l)?r=function(t){l.nextTick(a(_,t,1))}:v&&v.now?r=function(t){v.now(a(_,t,1))}:h?(o=new h,i=o.port2,o.port1.onmessage=b,r=a(i.postMessage,i,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(r=function(t){f.postMessage(t+"","*")},f.addEventListener("message",b,!1)):r=g in u("script")?function(t){c.appendChild(u("script"))[g]=function(){c.removeChild(this),_.call(t)}}:function(t){setTimeout(a(_,t,1),0)}),t.exports={set:p,clear:d}},function(t,e,n){var r=n(101),o=n(31)("iterator"),i=n(60);t.exports=n(28).getIteratorMethod=function(t){if(void 0!=t)return t[o]||t["@@iterator"]||i[r(t)]}},function(t,e){},function(t,e,n){n(211);for(var r=n(30),o=n(45),i=n(60),a=n(31)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),c=0;c=0&&Math.floor(e)===e&&isFinite(t)}function p(t){return null==t?"":"object"==typeof t?JSON.stringify(t,null,2):String(t)}function d(t){var e=parseFloat(t);return isNaN(e)?t:e}function h(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}function m(t,e){return bi.call(t,e)}function y(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}function g(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function _(t,e){return t.bind(e)}function b(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function w(t,e){for(var n in e)t[n]=e[n];return t}function x(t){for(var e={},n=0;n-1)if(i&&!m(o,"default"))a=!1;else if(""===a||a===Oi(t)){var c=rt(String,o.type);(c<0||s0&&(a=bt(a,(e||"")+"_"+n),_t(a[0])&&_t(u)&&(f[c]=P(u.text+a[0].text),a.shift()),f.push.apply(f,a)):s(a)?_t(u)?f[c]=P(u.text+a):""!==a&&f.push(P(a)):_t(a)&&_t(u)?f[c]=P(u.text+a.text):(i(t._isVList)&&o(a.tag)&&r(a.key)&&o(e)&&(a.key="__vlist"+e+"_"+n+"__"),f.push(a)));return f}function wt(t,e){return(t.__esModule||Xi&&"Module"===t[Symbol.toStringTag])&&(t=t.default),c(t)?e.extend(t):t}function xt(t,e,n,r,o){var i=ra();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}function kt(t,e,n){if(i(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;if(i(t.loading)&&o(t.loadingComp))return t.loadingComp;if(!o(t.contexts)){var a=t.contexts=[n],s=!0,u=function(){for(var t=0,e=a.length;t1?b(n):n;for(var r=b(arguments,1),o=0,i=n.length;oAa&&Ca[n].id>t.id;)n--;Ca.splice(n+1,0,t)}else Ca.push(t);Sa||(Sa=!0,ut(Vt))}}function Wt(t,e,n){La.get=function(){return this[e][n]},La.set=function(t){this[e][n]=t},Object.defineProperty(t,n,La)}function Jt(t){t._watchers=[];var e=t.$options;e.props&&Xt(t,e.props),e.methods&&ne(t,e.methods),e.data?Yt(t):D(t._data={},!0),e.computed&&Qt(t,e.computed),e.watch&&e.watch!==Vi&&re(t,e.watch)}function Xt(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[],i=!t.$parent;i||I(!1);var a=function(i){o.push(i);var a=Q(i,e,n,t);H(r,i,a),i in t||Wt(t,"_props",i)};for(var s in e)a(s);I(!0)}function Yt(t){var e=t.$options.data;e=t._data="function"==typeof e?Zt(e,t):e||{},u(e)||(e={});for(var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);o--;){var i=n[o];r&&m(r,i)||E(i)||Wt(t,"_data",i)}D(e,!0)}function Zt(t,e){L();try{return t.call(e,e)}catch(t){return ot(t,e,"data()"),{}}finally{M()}}function Qt(t,e){var n=t._computedWatchers=Object.create(null),r=Wi();for(var o in e){var i=e[o],a="function"==typeof i?i:i.get;r||(n[o]=new ja(t,a||k,k,Ma)),o in t||te(t,o,i)}}function te(t,e,n){var r=!Wi();"function"==typeof n?(La.get=r?ee(e):n,La.set=k):(La.get=n.get?r&&n.cache!==!1?ee(e):n.get:k,La.set=n.set?n.set:k),Object.defineProperty(t,e,La)}function ee(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),Qi.target&&e.depend(),e.value}}function ne(t,e){t.$options.props;for(var n in e)t[n]=null==e[n]?k:$i(e[n],t)}function re(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o=0||n.indexOf(t[o])<0)&&r.push(t[o]);return r}return t}function He(t){this._init(t)}function Be(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=b(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}function Ue(t){t.mixin=function(t){return this.options=Y(this.options,t),this}}function Ve(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=t.name||n.options.name,a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Y(n.options,t),a.super=n,a.options.props&&qe(a),a.options.computed&&Ge(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Ti.forEach(function(t){a[t]=n[t]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=w({},a.options),o[r]=a,a}}function qe(t){var e=t.options.props;for(var n in e)Wt(t.prototype,"_props",n)}function Ge(t){var e=t.options.computed;for(var n in e)te(t.prototype,n,e[n])}function ze(t){Ti.forEach(function(e){t[e]=function(t,n){return n?("component"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}})}function Ke(t){return t&&(t.Ctor.options.name||t.tag)}function We(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Je(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=Ke(a.componentOptions);s&&!e(s)&&Xe(n,i,r,o)}}}function Xe(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,v(n,e)}function Ye(t){var e={};e.get=function(){return Li},Object.defineProperty(t,"config",e),t.util={warn:Yi,extend:w,mergeOptions:Y,defineReactive:H},t.set=B,t.delete=U,t.nextTick=ut,t.options=Object.create(null),Ti.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,w(t.options.components,Ba),Be(t),Ue(t),Ve(t),ze(t)}function Ze(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)r=r.componentInstance._vnode,r&&r.data&&(e=Qe(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=Qe(e,n.data));return tn(e.staticClass,e.class)}function Qe(t,e){return{staticClass:en(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function tn(t,e){return o(t)||o(e)?en(t,nn(e)):""}function en(t,e){return t?e?t+" "+e:t:e||""}function nn(t){return Array.isArray(t)?rn(t):c(t)?on(t):"string"==typeof t?t:""}function rn(t){for(var e,n="",r=0,i=t.length;r-1?ls[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:ls[t]=/HTMLUnknownElement/.test(e.toString())}function cn(t){if("string"==typeof t){var e=document.querySelector(t);return e?e:document.createElement("div")}return t}function un(t,e){var n=document.createElement(t);return"select"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function fn(t,e){return document.createElementNS(as[t],e)}function ln(t){return document.createTextNode(t)}function pn(t){return document.createComment(t)}function dn(t,e,n){t.insertBefore(e,n)}function hn(t,e){t.removeChild(e)}function vn(t,e){t.appendChild(e)}function mn(t){return t.parentNode}function yn(t){return t.nextSibling}function gn(t){return t.tagName}function _n(t,e){t.textContent=e}function bn(t,e){t.setAttribute(e,"")}function wn(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.componentInstance||t.elm,a=r.$refs;e?Array.isArray(a[n])?v(a[n],i):a[n]===i&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}function xn(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&kn(t,e)||i(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&r(e.asyncFactory.error))}function kn(t,e){if("input"!==t.tag)return!0;var n,r=o(n=t.data)&&o(n=n.attrs)&&n.type,i=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===i||ps(r)&&ps(i)}function Cn(t,e,n){var r,i,a={};for(r=e;r<=n;++r)i=t[r].key,o(i)&&(a[i]=r);return a}function On(t){function e(t){return new ea(j.tagName(t).toLowerCase(),{},[],void 0,t)}function n(t,e){function n(){0===--n.listeners&&a(t)}return n.listeners=e,n}function a(t){var e=j.parentNode(t);o(e)&&j.removeChild(e,t)}function c(t,e,n,r,a,s,c){if(o(t.elm)&&o(s)&&(t=s[c]=N(t)),t.isRootInsert=!a,!u(t,e,n,r)){var f=t.data,l=t.children,h=t.tag;o(h)?(t.elm=t.ns?j.createElementNS(t.ns,h):j.createElement(h,t),y(t),d(t,l,e),o(f)&&m(t,e),p(n,t.elm,r)):i(t.isComment)?(t.elm=j.createComment(t.text),p(n,t.elm,r)):(t.elm=j.createTextNode(t.text),p(n,t.elm,r))}}function u(t,e,n,r){var a=t.data;if(o(a)){var s=o(t.componentInstance)&&a.keepAlive;if(o(a=a.hook)&&o(a=a.init)&&a(t,!1,n,r),o(t.componentInstance))return f(t,e),i(s)&&l(t,e,n,r),!0}}function f(t,e){o(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,v(t)?(m(t,e),y(t)):(wn(t),e.push(t))}function l(t,e,n,r){for(var i,a=t;a.componentInstance;)if(a=a.componentInstance._vnode,o(i=a.data)&&o(i=i.transition)){for(i=0;ih?(l=r(n[y+1])?null:n[y+1].elm,g(t,l,n,d,y,i)):d>y&&b(t,e,p,h)}function k(t,e,n,r){for(var i=n;i-1?Mn(t,e,n):es(e)?is(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):ts(e)?t.setAttribute(e,is(n)||"false"===n?"false":"true"):rs(e)?is(n)?t.removeAttributeNS(ns,os(e)):t.setAttributeNS(ns,e,n):Mn(t,e,n)}function Mn(t,e,n){if(is(n))t.removeAttribute(e);else{if(Di&&!Hi&&"TEXTAREA"===t.tagName&&"placeholder"===e&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}function Pn(t,e){var n=e.elm,i=e.data,a=t.data;if(!(r(i.staticClass)&&r(i.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=Ze(e),c=n._transitionClasses;o(c)&&(s=en(s,nn(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}function Nn(t){function e(){(a||(a=[])).push(t.slice(h,o).trim()),h=o+1}var n,r,o,i,a,s=!1,c=!1,u=!1,f=!1,l=0,p=0,d=0,h=0;for(o=0;o=0&&(m=t.charAt(v)," "===m);v--);m&&xs.test(m)||(f=!0)}}else void 0===i?(h=o+1,i=t.slice(0,o).trim()):e();if(void 0===i?i=t.slice(0,o).trim():0!==h&&e(),a)for(o=0;o-1?{exp:t.slice(0,Ga),key:'"'+t.slice(Ga+1)+'"'}:{exp:t,key:null};for(Va=t,Ga=za=Ka=0;!Xn();)qa=Jn(),Yn(qa)?Qn(qa):91===qa&&Zn(qa);return{exp:t.slice(0,za),key:t.slice(za+1,Ka)}}function Jn(){return Va.charCodeAt(++Ga)}function Xn(){return Ga>=Ua}function Yn(t){return 34===t||39===t}function Zn(t){var e=1;for(za=Ga;!Xn();)if(t=Jn(),Yn(t))Qn(t);else if(91===t&&e++,93===t&&e--,0===e){Ka=Ga;break}}function Qn(t){for(var e=t;!Xn()&&(t=Jn(),t!==e););}function tr(t,e,n){Wa=n;var r=e.value,o=e.modifiers,i=t.tag,a=t.attrsMap.type;if(t.component)return zn(t,r,o),!1;if("select"===i)rr(t,r,o);else if("input"===i&&"checkbox"===a)er(t,r,o);else if("input"===i&&"radio"===a)nr(t,r,o);else if("input"===i||"textarea"===i)or(t,r,o);else if(!Li.isReservedTag(i))return zn(t,r,o),!1;return!0}function er(t,e,n){var r=n&&n.number,o=qn(t,"value")||"null",i=qn(t,"true-value")||"true",a=qn(t,"false-value")||"false";Dn(t,"checked","Array.isArray("+e+")?_i("+e+","+o+")>-1"+("true"===i?":("+e+")":":_q("+e+","+i+")")),Vn(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+o+")":o)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Kn(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Kn(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Kn(e,"$$c")+"}",null,!0)}function nr(t,e,n){var r=n&&n.number,o=qn(t,"value")||"null";o=r?"_n("+o+")":o,Dn(t,"checked","_q("+e+","+o+")"),Vn(t,"change",Kn(e,o),null,!0)}function rr(t,e,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",i="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",a="var $$selectedVal = "+o+";";a=a+" "+Kn(e,i),Vn(t,"change",a,null,!0)}function or(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,c=!i&&"range"!==r,u=i?"change":"range"===r?ks:"input",f="$event.target.value";s&&(f="$event.target.value.trim()"),a&&(f="_n("+f+")");var l=Kn(e,f);c&&(l="if($event.target.composing)return;"+l),Dn(t,"value","("+e+")"),Vn(t,u,l,null,!0),(s||a)&&Vn(t,"blur","$forceUpdate()")}function ir(t){if(o(t[ks])){var e=Di?"change":"input";t[e]=[].concat(t[ks],t[e]||[]),delete t[ks]}o(t[Cs])&&(t.change=[].concat(t[Cs],t.change||[]),delete t[Cs])}function ar(t,e,n){var r=Ja;return function o(){var i=t.apply(null,arguments);null!==i&&cr(e,o,n,r)}}function sr(t,e,n,r,o){e=ct(e),n&&(e=ar(e,t,r)),Ja.addEventListener(t,e,qi?{capture:r,passive:o}:r)}function cr(t,e,n,r){(r||Ja).removeEventListener(t,e._withTask||e,n)}function ur(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},o=t.data.on||{};Ja=e.elm,ir(n),dt(n,o,sr,cr,e.context),Ja=void 0}}function fr(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,i,a=e.elm,s=t.data.domProps||{},c=e.data.domProps||{};o(c.__ob__)&&(c=e.data.domProps=w({},c));for(n in s)r(c[n])&&(a[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),i===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n){a._value=i;var u=r(i)?"":String(i);lr(a,u)&&(a.value=u)}else a[n]=i}}}function lr(t,e){return!t.composing&&("OPTION"===t.tagName||pr(t,e)||dr(t,e))}function pr(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}function dr(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.lazy)return!1;if(r.number)return d(n)!==d(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}function hr(t){var e=vr(t.style);return t.staticStyle?w(t.staticStyle,e):e}function vr(t){return Array.isArray(t)?x(t):"string"==typeof t?Ss(t):t}function mr(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)o=o.componentInstance._vnode,o&&o.data&&(n=hr(o.data))&&w(r,n);(n=hr(t.data))&&w(r,n);for(var i=t;i=i.parent;)i.data&&(n=hr(i.data))&&w(r,n);return r}function yr(t,e){var n=e.data,i=t.data;if(!(r(n.staticStyle)&&r(n.style)&&r(i.staticStyle)&&r(i.style))){var a,s,c=e.elm,u=i.staticStyle,f=i.normalizedStyle||i.style||{},l=u||f,p=vr(e.data.style)||{};e.data.normalizedStyle=o(p.__ob__)?w({},p):p;var d=mr(e,!0);for(s in l)r(d[s])&&Ts(c,s,"");for(s in d)a=d[s],a!==l[s]&&Ts(c,s,null==a?"":a)}}function gr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function _r(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function br(t){if(t){if("object"==typeof t){var e={};return t.css!==!1&&w(e,Ps(t.name||"v")),w(e,t),e}return"string"==typeof t?Ps(t):void 0}}function wr(t){Us(function(){Us(t)})}function xr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),gr(t,e))}function kr(t,e){t._transitionClasses&&v(t._transitionClasses,e),_r(t,e)}function Cr(t,e,n){var r=Or(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===Is?Ds:Bs,c=0,u=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++c>=a&&u()};setTimeout(function(){c0&&(n=Is,f=a,l=i.length):e===Rs?u>0&&(n=Rs,f=u,l=c.length):(f=Math.max(a,u),n=f>0?a>u?Is:Rs:null,l=n?n===Is?i.length:c.length:0);var p=n===Is&&Vs.test(r[Fs+"Property"]);return{type:n,timeout:f,propCount:l,hasTransform:p}}function $r(t,e){for(;t.length1}function Lr(t,e){e.data.show!==!0&&Er(e)}function Mr(t,e,n){Pr(t,e,n),(Di||Bi)&&setTimeout(function(){Pr(t,e,n)},0)}function Pr(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s-1,a.selected!==i&&(a.selected=i);else if(O(Ir(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Nr(t,e){return e.every(function(e){return!O(e,t)})}function Ir(t){return"_value"in t?t._value:t.value}function Rr(t){t.target.composing=!0}function Fr(t){t.target.composing&&(t.target.composing=!1,Dr(t.target,"input"))}function Dr(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Hr(t){return!t.componentInstance||t.data&&t.data.transition?t:Hr(t.componentInstance._vnode)}function Br(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Br(Ot(e.children)):t}function Ur(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[xi(i)]=o[i];return e}function Vr(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function qr(t){for(;t=t.parent;)if(t.data.transition)return!0}function Gr(t,e){return e.key===t.key&&e.tag===t.tag}function zr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Kr(t){t.data.newPos=t.elm.getBoundingClientRect()}function Wr(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}function Jr(t,e){var n=e?ic(e):rc;if(n.test(t)){for(var r,o,i,a=[],s=[],c=n.lastIndex=0;r=n.exec(t);){o=r.index,o>c&&(s.push(i=t.slice(c,o)),a.push(JSON.stringify(i)));var u=Nn(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=o+r[0].length}return c=0&&c[o].lowerCasedTag!==i;o--);else o=0;if(o>=0){for(var a=c.length-1;a>=o;a--)e.end&&e.end(c[a].tag,n,r);c.length=o,s=o&&c[o-1].tag}else"br"===i?e.start&&e.start(t,[],!0,n,r):"p"===i&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}for(var a,s,c=[],u=e.expectHTML,f=e.isUnaryTag||Si,l=e.canBeLeftOpenTag||Si,p=0;t;){if(a=t,s&&Mc(s)){var d=0,h=s.toLowerCase(),v=Pc[h]||(Pc[h]=new RegExp("([\\s\\S]*?)("+h+"[^>]*>)","i")),m=t.replace(v,function(t,n,r){return d=r.length,Mc(h)||"noscript"===h||(n=n.replace(//g,"$1").replace(//g,"$1")),Dc(h,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""});p+=t.length-m.length,t=m,i(h,p-d,p)}else{var y=t.indexOf("<");if(0===y){if(_c.test(t)){var g=t.indexOf("-->");if(g>=0){e.shouldKeepComment&&e.comment(t.substring(4,g)),n(g+3);continue}}if(bc.test(t)){var _=t.indexOf("]>");if(_>=0){n(_+2);continue}}var b=t.match(gc);if(b){n(b[0].length);continue}var w=t.match(yc);if(w){var x=p;n(w[0].length),i(w[1],x,p);continue}var k=r();if(k){o(k),Dc(s,t)&&n(1);continue}}var C=void 0,O=void 0,$=void 0;if(y>=0){for(O=t.slice(y);!(yc.test(O)||vc.test(O)||_c.test(O)||bc.test(O)||($=O.indexOf("<",1),$<0));)y+=$,O=t.slice(y);C=t.substring(0,y),n(y)}y<0&&(C=t,t=""),e.chars&&C&&e.chars(C)}if(t===a){e.chars&&e.chars(t);break}}i()}function no(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:xo(e),parent:n,children:[]}}function ro(t,e){function n(t){t.pre&&(s=!1),Sc(t.tag)&&(c=!1);for(var n=0;n<$c.length;n++)$c[n](t,e)}xc=e.warn||Rn,Sc=e.isPreTag||Si,Ec=e.mustUseProp||Si,Ac=e.getTagNamespace||Si,Cc=Fn(e.modules,"transformNode"),Oc=Fn(e.modules,"preTransformNode"),$c=Fn(e.modules,"postTransformNode"),kc=e.delimiters;var r,o,i=[],a=e.preserveWhitespace!==!1,s=!1,c=!1;return eo(t,{warn:xc,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,start:function(t,a,u){function f(t){}var l=o&&o.ns||Ac(t);Di&&"svg"===l&&(a=Oo(a));var p=no(t,a,o);l&&(p.ns=l),Co(p)&&!Wi()&&(p.forbidden=!0);for(var d=0;d':'',Lc.innerHTML.indexOf("
")>0}function vi(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}var mi=Object.freeze({}),yi=Object.prototype.toString,gi=h("slot,component",!0),_i=h("key,ref,slot,slot-scope,is"),bi=Object.prototype.hasOwnProperty,wi=/-(\w)/g,xi=y(function(t){return t.replace(wi,function(t,e){return e?e.toUpperCase():""})}),ki=y(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),Ci=/\B([A-Z])/g,Oi=y(function(t){return t.replace(Ci,"-$1").toLowerCase()}),$i=Function.prototype.bind?_:g,Si=function(t,e,n){return!1},Ei=function(t){return t},Ai="data-server-rendered",Ti=["component","directive","filter"],ji=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured"],Li={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Si,isReservedAttr:Si,isUnknownElement:Si,getTagNamespace:k,parsePlatformTagName:Ei,mustUseProp:Si,_lifecycleHooks:ji},Mi=/[^\w.$]/,Pi="__proto__"in{},Ni="undefined"!=typeof window,Ii="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Ri=Ii&&WXEnvironment.platform.toLowerCase(),Fi=Ni&&window.navigator.userAgent.toLowerCase(),Di=Fi&&/msie|trident/.test(Fi),Hi=Fi&&Fi.indexOf("msie 9.0")>0,Bi=Fi&&Fi.indexOf("edge/")>0,Ui=(Fi&&Fi.indexOf("android")>0||"android"===Ri,Fi&&/iphone|ipad|ipod|ios/.test(Fi)||"ios"===Ri),Vi=(Fi&&/chrome\/\d+/.test(Fi)&&!Bi,{}.watch),qi=!1;if(Ni)try{var Gi={};Object.defineProperty(Gi,"passive",{get:function(){qi=!0}}),window.addEventListener("test-passive",null,Gi)}catch(t){}var zi,Ki,Wi=function(){return void 0===zi&&(zi=!Ni&&!Ii&&"undefined"!=typeof e&&"server"===e.process.env.VUE_ENV),zi},Ji=Ni&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Xi="undefined"!=typeof Symbol&&j(Symbol)&&"undefined"!=typeof Reflect&&j(Reflect.ownKeys);Ki="undefined"!=typeof Set&&j(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return this.set[t]===!0},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var Yi=k,Zi=0,Qi=function(){this.id=Zi++,this.subs=[]};Qi.prototype.addSub=function(t){this.subs.push(t)},Qi.prototype.removeSub=function(t){v(this.subs,t)},Qi.prototype.depend=function(){Qi.target&&Qi.target.addDep(this)},Qi.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;eparseInt(this.max)&&Xe(c,u[0],u,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},Ba={KeepAlive:Ha};Ye(He),Object.defineProperty(He.prototype,"$isServer",{get:Wi}),Object.defineProperty(He.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(He,"FunctionalRenderContext",{value:we}),He.version="2.5.16";var Ua,Va,qa,Ga,za,Ka,Wa,Ja,Xa,Ya=h("style,class"),Za=h("input,textarea,option,select,progress"),Qa=function(t,e,n){return"value"===n&&Za(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},ts=h("contenteditable,draggable,spellcheck"),es=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),ns="http://www.w3.org/1999/xlink",rs=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},os=function(t){return rs(t)?t.slice(6,t.length):""},is=function(t){return null==t||t===!1},as={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},ss=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),cs=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),us=function(t){return"pre"===t},fs=function(t){return ss(t)||cs(t)},ls=Object.create(null),ps=h("text,number,password,search,email,tel,url"),ds=Object.freeze({createElement:un,createElementNS:fn,createTextNode:ln,createComment:pn,insertBefore:dn,removeChild:hn,appendChild:vn,parentNode:mn,nextSibling:yn,tagName:gn,setTextContent:_n,setStyleScope:bn}),hs={create:function(t,e){wn(e)},update:function(t,e){t.data.ref!==e.data.ref&&(wn(t,!0),wn(e))},destroy:function(t){wn(t,!0)}},vs=new ea("",{},[]),ms=["create","activate","update","remove","destroy"],ys={create:$n,update:$n,destroy:function(t){$n(t,vs)}},gs=Object.create(null),_s=[hs,ys],bs={create:jn,update:jn},ws={create:Pn,update:Pn},xs=/[\w).+\-_$\]]/,ks="__r",Cs="__c",Os={create:ur,update:ur},$s={create:fr,update:fr},Ss=y(function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Es=/^--/,As=/\s*!important$/,Ts=function(t,e,n){if(Es.test(e))t.style.setProperty(e,n);else if(As.test(n))t.style.setProperty(e,n.replace(As,""),"important");else{var r=Ls(e);if(Array.isArray(n))for(var o=0,i=n.length;o\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,dc="[a-zA-Z_][\\w\\-\\.]*",hc="((?:"+dc+"\\:)?"+dc+")",vc=new RegExp("^<"+hc),mc=/^\s*(\/?)>/,yc=new RegExp("^<\\/"+hc+"[^>]*>"),gc=/^]+>/i,_c=/^",""":'"',"&":"&","
":"\n"," ":"\t"},Ic=/&(?:lt|gt|quot|amp);/g,Rc=/&(?:lt|gt|quot|amp|#10|#9);/g,Fc=h("pre,textarea",!0),Dc=function(t,e){return t&&Fc(t)&&"\n"===e[0]},Hc=/^@|^v-on:/,Bc=/^v-|^@|^:/,Uc=/([^]*?)\s+(?:in|of)\s+([^]*)/,Vc=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,qc=/^\(|\)$/g,Gc=/:(.*)$/,zc=/^:|^v-bind:/,Kc=/\.[^.]+/g,Wc=y(cc.decode),Jc=/^xmlns:NS\d+/,Xc=/^NS\d+:/,Yc={preTransformNode:$o},Zc=[ac,sc,Yc],Qc={model:tr,text:Eo,html:Ao},tu={expectHTML:!0,modules:Zc,directives:Qc,isPreTag:us,isUnaryTag:uc,mustUseProp:Qa,canBeLeftOpenTag:fc,isReservedTag:fs,getTagNamespace:an,staticKeys:C(Zc)},eu=y(jo),nu=/^([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/,ru=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ou={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},iu={esc:"Escape",tab:"Tab",enter:"Enter",space:" ",up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete"]},au=function(t){return"if("+t+")return null;"},su={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:au("$event.target !== $event.currentTarget"),ctrl:au("!$event.ctrlKey"),shift:au("!$event.shiftKey"),alt:au("!$event.altKey"),meta:au("!$event.metaKey"),left:au("'button' in $event && $event.button !== 0"),middle:au("'button' in $event && $event.button !== 1"),right:au("'button' in $event && $event.button !== 2")},cu={on:Ho,bind:Bo,cloak:k},uu=function(t){this.options=t,this.warn=t.warn||Rn,this.transforms=Fn(t.modules,"transformCode"),this.dataGenFns=Fn(t.modules,"genData"),this.directives=w(w({},cu),t.directives);var e=t.isReservedTag||Si;this.maybeComponent=function(t){return!e(t.tag)},this.onceId=0,this.staticRenderFns=[]},fu=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),di(function(t,e){var n=ro(t.trim(),e);e.optimize!==!1&&To(n,e);var r=Uo(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}})),lu=fu(tu),pu=lu.compileToFunctions,du=!!Ni&&hi(!1),hu=!!Ni&&hi(!0),vu=y(function(t){var e=cn(t);return e&&e.innerHTML}),mu=He.prototype.$mount;He.prototype.$mount=function(t,e){if(t=t&&cn(t),t===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=vu(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=vi(t));if(r){var o=pu(r,{shouldDecodeNewlines:du,shouldDecodeNewlinesForHref:hu,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return mu.call(this,t,e)},He.compile=pu,t.exports=He}).call(e,function(){return this}(),n(323).setImmediate)},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){t.exports={default:n(183),__esModule:!0}},function(t,e,n){t.exports={default:n(186),__esModule:!0}},function(t,e,n){t.exports={default:n(187),__esModule:!0}},function(t,e,n){n(86),n(210),t.exports=n(28).Array.from},function(t,e,n){var r=n(28),o=r.JSON||(r.JSON={stringify:JSON.stringify});t.exports=function(t){return o.stringify.apply(o,arguments)}},function(t,e,n){n(212),t.exports=n(28).Object.assign},function(t,e,n){n(213);var r=n(28).Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},function(t,e,n){n(214),t.exports=n(28).Object.keys},function(t,e,n){n(118),n(86),n(119),n(215),n(217),n(218),t.exports=n(28).Promise},function(t,e,n){n(216),n(118),n(219),n(220),t.exports=n(28).Symbol},function(t,e,n){n(86),n(119),t.exports=n(85).f("iterator")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},function(t,e,n){var r=n(35),o=n(82),i=n(209);t.exports=function(t){return function(e,n,a){var s,c=r(e),u=o(c.length),f=i(a,u);if(t&&n!=n){for(;u>f;)if(s=c[f++],s!=s)return!0}else for(;u>f;f++)if((t||f in c)&&c[f]===n)return t||f||0;return!t&&-1}}},function(t,e,n){"use strict";var r=n(34),o=n(62);t.exports=function(t,e,n){e in t?r.f(t,e,o(0,n)):t[e]=n}},function(t,e,n){var r=n(42),o=n(78),i=n(47);t.exports=function(t){var e=r(t),n=o.f;if(n)for(var a,s=n(t),c=i.f,u=0;s.length>u;)c.call(t,a=s[u++])&&e.push(a);return e}},function(t,e,n){var r=n(59),o=n(106),i=n(105),a=n(40),s=n(82),c=n(117),u={},f={},e=t.exports=function(t,e,n,l,p){var d,h,v,m,y=p?function(){return t}:c(t),g=r(n,l,e?2:1),_=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(i(y)){for(d=s(t.length);d>_;_++)if(m=e?g(a(h=t[_])[0],h[1]):g(t[_]),m===u||m===f)return m}else for(v=y.call(t);!(h=v.next()).done;)if(m=o(v,g,h.value,e),m===u||m===f)return m};e.BREAK=u,e.RETURN=f},function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){var r=n(58);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){"use strict";var r=n(109),o=n(62),i=n(69),a={};n(45)(a,n(31)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(a,{next:o(1,n)}),i(t,e+" Iterator")}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var r=n(71)("meta"),o=n(46),i=n(44),a=n(34).f,s=0,c=Object.isExtensible||function(){return!0},u=!n(53)(function(){return c(Object.preventExtensions({}))}),f=function(t){a(t,r,{value:{i:"O"+ ++s,w:{}}})},l=function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,r)){if(!c(t))return"F";if(!e)return"E";f(t)}return t[r].i},p=function(t,e){if(!i(t,r)){if(!c(t))return!0;if(!e)return!1;f(t)}return t[r].w},d=function(t){return u&&h.NEED&&c(t)&&!i(t,r)&&f(t),t},h=t.exports={KEY:r,NEED:!1,fastKey:l,getWeak:p,onFreeze:d}},function(t,e,n){var r=n(30),o=n(116).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,c="process"==n(58)(a);t.exports=function(){var t,e,n,u=function(){var r,o;for(c&&(r=a.domain)&&r.exit();t;){o=t.fn,t=t.next;try{o()}catch(r){throw t?n():e=void 0,r}}e=void 0,r&&r.enter()};if(c)n=function(){a.nextTick(u)};else if(!i||r.navigator&&r.navigator.standalone)if(s&&s.resolve){var f=s.resolve();n=function(){f.then(u)}}else n=function(){o.call(r,u)};else{var l=!0,p=document.createTextNode("");new i(u).observe(p,{characterData:!0}),n=function(){p.data=l=!l}}return function(r){var o={fn:r,next:void 0};e&&(e.next=o),t||(t=o,n()),e=o}}},function(t,e,n){"use strict";var r=n(42),o=n(78),i=n(47),a=n(70),s=n(104),c=Object.assign;t.exports=!c||n(53)(function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach(function(t){e[t]=t}),7!=c({},t)[n]||Object.keys(c({},e)).join("")!=r})?function(t,e){for(var n=a(t),c=arguments.length,u=1,f=o.f,l=i.f;c>u;)for(var p,d=s(arguments[u++]),h=f?r(d).concat(f(d)):r(d),v=h.length,m=0;v>m;)l.call(d,p=h[m++])&&(n[p]=d[p]);return n}:c},function(t,e,n){var r=n(34),o=n(40),i=n(42);t.exports=n(41)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),s=a.length,c=0;s>c;)r.f(t,n=a[c++],e[n]);return t}},function(t,e,n){var r=n(47),o=n(62),i=n(35),a=n(83),s=n(44),c=n(103),u=Object.getOwnPropertyDescriptor;e.f=n(41)?u:function(t,e){if(t=i(t),e=a(e,!0),c)try{return u(t,e)}catch(t){}if(s(t,e))return o(!r.f.call(t,e),t[e])}},function(t,e,n){var r=n(35),o=n(110).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return o(t)}catch(t){return a.slice()}};t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?s(t):o(r(t))}},function(t,e,n){var r=n(44),o=n(70),i=n(79)("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,e,n){var r=n(32),o=n(28),i=n(53);t.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},function(t,e,n){var r=n(45);t.exports=function(t,e,n){for(var o in e)n&&t[o]?t[o]=e[o]:r(t,o,e[o]);return t}},function(t,e,n){"use strict";var r=n(30),o=n(28),i=n(34),a=n(41),s=n(31)("species");t.exports=function(t){var e="function"==typeof o[t]?o[t]:r[t];a&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e,n){var r=n(81),o=n(74);t.exports=function(t){return function(e,n){var i,a,s=String(o(e)),c=r(n),u=s.length;return c<0||c>=u?t?"":void 0:(i=s.charCodeAt(c),i<55296||i>56319||c+1===u||(a=s.charCodeAt(c+1))<56320||a>57343?t?s.charAt(c):i:t?s.slice(c,c+2):(i-55296<<10)+(a-56320)+65536)}}},function(t,e,n){var r=n(81),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},function(t,e,n){"use strict";var r=n(59),o=n(32),i=n(70),a=n(106),s=n(105),c=n(82),u=n(191),f=n(117);o(o.S+o.F*!n(108)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,o,l,p=i(t),d="function"==typeof this?this:Array,h=arguments.length,v=h>1?arguments[1]:void 0,m=void 0!==v,y=0,g=f(p);if(m&&(v=r(v,h>2?arguments[2]:void 0,2)),void 0==g||d==Array&&s(g))for(e=c(p.length),n=new d(e);e>y;y++)u(n,y,m?v(p[y],y):p[y]);else for(l=g.call(p),n=new d;!(o=l.next()).done;y++)u(n,y,m?a(l,v,[o.value,y],!0):o.value);return n.length=y,n}})},function(t,e,n){"use strict";var r=n(188),o=n(197),i=n(60),a=n(35);t.exports=n(107)(Array,"Array",function(t,e){this._t=a(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):"keys"==e?o(0,n):"values"==e?o(0,t[n]):o(0,[n,t[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(t,e,n){var r=n(32);r(r.S+r.F,"Object",{assign:n(200)})},function(t,e,n){var r=n(32);r(r.S+r.F*!n(41),"Object",{defineProperty:n(34).f})},function(t,e,n){var r=n(70),o=n(42);n(205)("keys",function(){return function(t){return o(r(t))}})},function(t,e,n){"use strict";var r,o,i,a,s=n(68),c=n(30),u=n(59),f=n(101),l=n(32),p=n(46),d=n(67),h=n(189),v=n(193),m=n(115),y=n(116).set,g=n(199)(),_=n(77),b=n(112),w=n(113),x="Promise",k=c.TypeError,C=c.process,O=c[x],$="process"==f(C),S=function(){},E=o=_.f,A=!!function(){try{var t=O.resolve(1),e=(t.constructor={})[n(31)("species")]=function(t){t(S,S)};return($||"function"==typeof PromiseRejectionEvent)&&t.then(S)instanceof e}catch(t){}}(),T=function(t){var e;return!(!p(t)||"function"!=typeof(e=t.then))&&e},j=function(t,e){if(!t._n){t._n=!0;var n=t._c;g(function(){for(var r=t._v,o=1==t._s,i=0,a=function(e){var n,i,a,s=o?e.ok:e.fail,c=e.resolve,u=e.reject,f=e.domain;try{s?(o||(2==t._h&&P(t),t._h=1),s===!0?n=r:(f&&f.enter(),n=s(r),f&&(f.exit(),a=!0)),n===e.promise?u(k("Promise-chain cycle")):(i=T(n))?i.call(n,c,u):c(n)):u(r);
}catch(t){f&&!a&&f.exit(),u(t)}};n.length>i;)a(n[i++]);t._c=[],t._n=!1,e&&!t._h&&L(t)})}},L=function(t){y.call(c,function(){var e,n,r,o=t._v,i=M(t);if(i&&(e=b(function(){$?C.emit("unhandledRejection",o,t):(n=c.onunhandledrejection)?n({promise:t,reason:o}):(r=c.console)&&r.error&&r.error("Unhandled promise rejection",o)}),t._h=$||M(t)?2:1),t._a=void 0,i&&e.e)throw e.v})},M=function(t){return 1!==t._h&&0===(t._a||t._c).length},P=function(t){y.call(c,function(){var e;$?C.emit("rejectionHandled",t):(e=c.onrejectionhandled)&&e({promise:t,reason:t._v})})},N=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),j(e,!0))},I=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw k("Promise can't be resolved itself");(e=T(t))?g(function(){var r={_w:n,_d:!1};try{e.call(t,u(I,r,1),u(N,r,1))}catch(t){N.call(r,t)}}):(n._v=t,n._s=1,j(n,!1))}catch(t){N.call({_w:n,_d:!1},t)}}};A||(O=function(t){h(this,O,x,"_h"),d(t),r.call(this);try{t(u(I,this,1),u(N,this,1))}catch(t){N.call(this,t)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(206)(O.prototype,{then:function(t,e){var n=E(m(this,O));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=$?C.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&j(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),i=function(){var t=new r;this.promise=t,this.resolve=u(I,t,1),this.reject=u(N,t,1)},_.f=E=function(t){return t===O||t===a?new i(t):o(t)}),l(l.G+l.W+l.F*!A,{Promise:O}),n(69)(O,x),n(207)(x),a=n(28)[x],l(l.S+l.F*!A,x,{reject:function(t){var e=E(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(s||!A),x,{resolve:function(t){return w(s&&this===a?O:this,t)}}),l(l.S+l.F*!(A&&n(108)(function(t){O.all(t).catch(S)})),x,{all:function(t){var e=this,n=E(e),r=n.resolve,o=n.reject,i=b(function(){var n=[],i=0,a=1;v(t,!1,function(t){var s=i++,c=!1;n.push(void 0),a++,e.resolve(t).then(function(t){c||(c=!0,n[s]=t,--a||r(n))},o)}),--a||r(n)});return i.e&&o(i.v),n.promise},race:function(t){var e=this,n=E(e),r=n.reject,o=b(function(){v(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return o.e&&r(o.v),n.promise}})},function(t,e,n){"use strict";var r=n(30),o=n(44),i=n(41),a=n(32),s=n(114),c=n(198).KEY,u=n(53),f=n(80),l=n(69),p=n(71),d=n(31),h=n(85),v=n(84),m=n(192),y=n(195),g=n(40),_=n(46),b=n(35),w=n(83),x=n(62),k=n(109),C=n(203),O=n(202),$=n(34),S=n(42),E=O.f,A=$.f,T=C.f,j=r.Symbol,L=r.JSON,M=L&&L.stringify,P="prototype",N=d("_hidden"),I=d("toPrimitive"),R={}.propertyIsEnumerable,F=f("symbol-registry"),D=f("symbols"),H=f("op-symbols"),B=Object[P],U="function"==typeof j,V=r.QObject,q=!V||!V[P]||!V[P].findChild,G=i&&u(function(){return 7!=k(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a})?function(t,e,n){var r=E(B,e);r&&delete B[e],A(t,e,n),r&&t!==B&&A(B,e,r)}:A,z=function(t){var e=D[t]=k(j[P]);return e._k=t,e},K=U&&"symbol"==typeof j.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof j},W=function(t,e,n){return t===B&&W(H,e,n),g(t),e=w(e,!0),g(n),o(D,e)?(n.enumerable?(o(t,N)&&t[N][e]&&(t[N][e]=!1),n=k(n,{enumerable:x(0,!1)})):(o(t,N)||A(t,N,x(1,{})),t[N][e]=!0),G(t,e,n)):A(t,e,n)},J=function(t,e){g(t);for(var n,r=m(e=b(e)),o=0,i=r.length;i>o;)W(t,n=r[o++],e[n]);return t},X=function(t,e){return void 0===e?k(t):J(k(t),e)},Y=function(t){var e=R.call(this,t=w(t,!0));return!(this===B&&o(D,t)&&!o(H,t))&&(!(e||!o(this,t)||!o(D,t)||o(this,N)&&this[N][t])||e)},Z=function(t,e){if(t=b(t),e=w(e,!0),t!==B||!o(D,e)||o(H,e)){var n=E(t,e);return!n||!o(D,e)||o(t,N)&&t[N][e]||(n.enumerable=!0),n}},Q=function(t){for(var e,n=T(b(t)),r=[],i=0;n.length>i;)o(D,e=n[i++])||e==N||e==c||r.push(e);return r},tt=function(t){for(var e,n=t===B,r=T(n?H:b(t)),i=[],a=0;r.length>a;)!o(D,e=r[a++])||n&&!o(B,e)||i.push(D[e]);return i};U||(j=function(){if(this instanceof j)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(n){this===B&&e.call(H,n),o(this,N)&&o(this[N],t)&&(this[N][t]=!1),G(this,t,x(1,n))};return i&&q&&G(B,t,{configurable:!0,set:e}),z(t)},s(j[P],"toString",function(){return this._k}),O.f=Z,$.f=W,n(110).f=C.f=Q,n(47).f=Y,n(78).f=tt,i&&!n(68)&&s(B,"propertyIsEnumerable",Y,!0),h.f=function(t){return z(d(t))}),a(a.G+a.W+a.F*!U,{Symbol:j});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;et.length>nt;)d(et[nt++]);for(var rt=S(d.store),ot=0;rt.length>ot;)v(rt[ot++]);a(a.S+a.F*!U,"Symbol",{for:function(t){return o(F,t+="")?F[t]:F[t]=j(t)},keyFor:function(t){if(!K(t))throw TypeError(t+" is not a symbol!");for(var e in F)if(F[e]===t)return e},useSetter:function(){q=!0},useSimple:function(){q=!1}}),a(a.S+a.F*!U,"Object",{create:X,defineProperty:W,defineProperties:J,getOwnPropertyDescriptor:Z,getOwnPropertyNames:Q,getOwnPropertySymbols:tt}),L&&a(a.S+a.F*(!U||u(function(){var t=j();return"[null]"!=M([t])||"{}"!=M({a:t})||"{}"!=M(Object(t))})),"JSON",{stringify:function(t){for(var e,n,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=e=r[1],(_(e)||void 0!==t)&&!K(t))return y(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!K(e))return e}),r[1]=e,M.apply(L,r)}}),j[P][I]||n(45)(j[P],I,j[P].valueOf),l(j,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},function(t,e,n){"use strict";var r=n(32),o=n(28),i=n(30),a=n(115),s=n(113);r(r.P+r.R,"Promise",{finally:function(t){var e=a(this,o.Promise||i.Promise),n="function"==typeof t;return this.then(n?function(n){return s(e,t()).then(function(){return n})}:t,n?function(n){return s(e,t()).then(function(){throw n})}:t)}})},function(t,e,n){"use strict";var r=n(32),o=n(77),i=n(112);r(r.S,"Promise",{try:function(t){var e=o.f(this),n=i(t);return(n.e?e.reject:e.resolve)(n.v),e.promise}})},function(t,e,n){n(84)("asyncIterator")},function(t,e,n){n(84)("observable")},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){var r;!function(){"use strict";/**
* @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.
*
* @codingstandard ftlabs-jsv2
* @copyright The Financial Times Limited [All Rights Reserved]
* @license MIT License (see LICENSE.txt)
*/
function o(t,e){function n(t,e){return function(){return t.apply(e,arguments)}}var r;if(e=e||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=e.touchBoundary||10,this.layer=t,this.tapDelay=e.tapDelay||200,this.tapTimeout=e.tapTimeout||700,!o.notNeeded(t)){for(var i=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],s=this,c=0,u=i.length;c=0,a=navigator.userAgent.indexOf("Android")>0&&!i,s=/iP(ad|hone|od)/.test(navigator.userAgent)&&!i,c=s&&/OS 4_\d(_\d)?/.test(navigator.userAgent),u=s&&/OS [6-7]_\d/.test(navigator.userAgent),f=navigator.userAgent.indexOf("BB10")>0;o.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(s&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},o.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!a;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},o.prototype.sendClick=function(t,e){var n,r;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),r=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},o.prototype.determineEventType=function(t){return a&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},o.prototype.focus=function(t){var e;s&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},o.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},o.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},o.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],s){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!c){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n},o.prototype.onTouchMove=function(t){return!this.trackingClick||((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0)},o.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},o.prototype.onTouchEnd=function(t){var e,n,r,o,i,f=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,u&&(i=t.changedTouches[0],f=document.elementFromPoint(i.pageX-window.pageXOffset,i.pageY-window.pageYOffset)||f,f.fastClickScrollParent=this.targetElement.fastClickScrollParent),r=f.tagName.toLowerCase(),"label"===r){if(e=this.findControl(f)){if(this.focus(f),a)return!1;f=e}}else if(this.needsFocus(f))return t.timeStamp-n>100||s&&window.top!==window&&"input"===r?(this.targetElement=null,!1):(this.focus(f),this.sendClick(f,t),s&&"select"===r||(this.targetElement=null,t.preventDefault()),!1);return!(!s||c||(o=f.fastClickScrollParent,!o||o.fastClickLastScrollTop===o.scrollTop))||(this.needsClick(f)||(t.preventDefault(),this.sendClick(f,t)),!1)},o.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},o.prototype.onMouse=function(t){return!this.targetElement||(!!t.forwardedTouchEvent||(!t.cancelable||(!(!this.needsClick(this.targetElement)||this.cancelNextClick)||(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1))))},o.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail||(e=this.onMouse(t),e||(this.targetElement=null),e)},o.prototype.destroy=function(){var t=this.layer;a&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},o.notNeeded=function(t){var e,n,r,o;if("undefined"==typeof window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!a)return!0;if(e=document.querySelector("meta[name=viewport]")){if(e.content.indexOf("user-scalable=no")!==-1)return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(f&&(r=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),r[1]>=10&&r[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(e.content.indexOf("user-scalable=no")!==-1)return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction||(o=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],!!(o>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(e.content.indexOf("user-scalable=no")!==-1||document.documentElement.scrollWidth<=window.outerWidth)))||("none"===t.style.touchAction||"manipulation"===t.style.touchAction))},o.attach=function(t,e){return new o(t,e)},r=function(){return o}.call(e,n,e,t),!(void 0!==r&&(t.exports=r))}()},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(f===setTimeout)return setTimeout(t,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(t,0);try{return f(t,0)}catch(e){try{return f.call(null,t,0)}catch(e){return f.call(this,t,0)}}}function i(t){if(l===clearTimeout)return clearTimeout(t);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(t);try{return l(t)}catch(e){try{return l.call(null,t)}catch(e){return l.call(this,t)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):m=-1,h.length&&s())}function s(){if(!v){var t=o(a);v=!0;for(var e=h.length;e;){for(d=h,h=[];++m1)for(var n=1;n=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,t.exports=n(320),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(t){r.regeneratorRuntime=void 0}},function(t,e){!function(e){"use strict";function n(t,e,n,r){var i=e&&e.prototype instanceof o?e:o,a=Object.create(i.prototype),s=new d(r||[]);return a._invoke=u(t,n,s),a}function r(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}function o(){}function i(){}function a(){}function s(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function c(t){function e(n,o,i,a){var s=r(t[n],t,o);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&g.call(u,"__await")?Promise.resolve(u.__await).then(function(t){e("next",t,i,a)},function(t){e("throw",t,i,a)}):Promise.resolve(u).then(function(t){c.value=t,i(c)},a)}a(s.arg)}function n(t,n){function r(){return new Promise(function(r,o){e(t,n,r,o)})}return o=o?o.then(r,r):r()}var o;this._invoke=n}function u(t,e,n){var o=O;return function(i,a){if(o===S)throw new Error("Generator is already running");if(o===E){if("throw"===i)throw a;return v()}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var c=f(s,n);if(c){if(c===A)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===O)throw o=E,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=S;var u=r(t,e,n);if("normal"===u.type){if(o=n.done?E:$,u.arg===A)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=E,n.method="throw",n.arg=u.arg)}}}function f(t,e){var n=t.iterator[e.method];if(n===m){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=m,f(t,e),"throw"===e.method))return A;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return A}var o=r(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,A;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=m),e.delegate=null,A):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,A)}function l(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function p(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function d(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(l,this),this.reset(!0)}function h(t){if(t){var e=t[b];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,r=function e(){for(;++n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return e("end");if(o.tryLoc<=this.prev){var a=g.call(o,"catchLoc"),s=g.call(o,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&g.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),p(n),A}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;p(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:h(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=m),A}}}(function(){return this}()||Function("return this")())},function(t,e,n){(function(t,e){!function(t,n){"use strict";function r(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(321),e.setImmediate="undefined"!=typeof self&&self.setImmediate||"undefined"!=typeof t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||"undefined"!=typeof t&&t.clearImmediate||this&&this.clearImmediate}).call(e,function(){return this}())},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){/**
* vue-router v2.8.1
* (c) 2017 Evan You
* @license MIT
*/
"use strict";function r(t,e){}function o(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function i(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}function a(t,e){for(var n in e)t[n]=e[n];return t}function s(t,e,n){void 0===e&&(e={});var r,o=n||c;try{r=o(t||"")}catch(t){r={}}for(var i in e)r[i]=e[i];return r}function c(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var n=t.replace(/\+/g," ").split("="),r=Ht(n.shift()),o=n.length>0?Ht(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function u(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return"";if(null===n)return Dt(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(Dt(e)):r.push(Dt(e)+"="+Dt(t)))}),r.join("&")}return Dt(e)+"="+Dt(n)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}function f(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=l(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:d(e,o),matched:t?p(t):[]};return n&&(a.redirectedFrom=d(n,o)),Object.freeze(a)}function l(t){if(Array.isArray(t))return t.map(l);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=l(t[n]);return e}return t}function p(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function d(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;void 0===o&&(o="");var i=e||u;return(n||"/")+i(r)+o}function h(t,e){return e===Ut?t===e:!!e&&(t.path&&e.path?t.path.replace(Bt,"")===e.path.replace(Bt,"")&&t.hash===e.hash&&v(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&v(t.query,e.query)&&v(t.params,e.params)))}function v(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){var r=t[n],o=e[n];return"object"==typeof r&&"object"==typeof o?v(r,o):String(r)===String(o)})}function m(t,e){return 0===t.path.replace(Bt,"/").indexOf(e.path.replace(Bt,"/"))&&(!e.hash||t.hash===e.hash)&&y(t.query,e.query)}function y(t,e){for(var n in e)if(!(n in t))return!1;return!0}function g(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function _(t){if(t)for(var e,n=0;n=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}function k(t){return t.replace(/\/\//g,"/")}function C(t,e){for(var n,r=[],o=0,i=0,a="",s=e&&e.delimiter||"/";null!=(n=Qt.exec(t));){var c=n[0],u=n[1],f=n.index;if(a+=t.slice(i,f),i=f+c.length,u)a+=u[1];else{var l=t[i],p=n[2],d=n[3],h=n[4],v=n[5],m=n[6],y=n[7];a&&(r.push(a),a="");var g=null!=p&&null!=l&&l!==p,_="+"===m||"*"===m,b="?"===m||"*"===m,w=n[2]||s,x=h||v;r.push({name:d||o++,prefix:p||"",delimiter:w,optional:b,repeat:_,partial:g,asterisk:!!y,pattern:x?T(x):y?".*":"[^"+A(w)+"]+?"})}}return i-1&&(o.params[p]=n.params[p]);if(s)return o.path=F(s.path,o.params,'named route "'+i+'"'),a(s,o,r)}else if(o.path){o.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],function(){r(o+1)}):r(o+1)};r(0)}function ft(t){return function(e,n,r){var i=!1,a=0,s=null;lt(t,function(t,e,n,c){if("function"==typeof t&&void 0===t.cid){i=!0,a++;var u,f=ht(function(e){dt(e)&&(e=e.default),t.resolved="function"==typeof e?e:Pt.extend(e),n.components[c]=e,a--,a<=0&&r()}),l=ht(function(t){var e="Failed to resolve async component "+c+": "+t;s||(s=o(t)?t:new Error(e),r(s))});try{u=t(f,l)}catch(t){l(t)}if(u)if("function"==typeof u.then)u.then(f,l);else{var p=u.component;p&&"function"==typeof p.then&&p.then(f,l)}}}),i||r()}}function lt(t,e){return pt(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function pt(t){return Array.prototype.concat.apply([],t)}function dt(t){return t.__esModule||ie&&"Module"===t[Symbol.toStringTag]}function ht(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}function vt(t){if(!t)if(zt){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/",t=t.replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function mt(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n=0?e.slice(0,n):e;return r+"#"+t}function Tt(t){ne?st(At(t)):window.location.hash=t}function jt(t){ne?ct(At(t)):window.location.replace(At(t))}function Lt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function Mt(t,e,n){var r="hash"===n?"#"+e:e;return t?k(t+"/"+r):r}var Pt,Nt={name:"router-view",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,s=e.data;s.routerView=!0;for(var c=o.$createElement,u=n.name,f=o.$route,l=o._routerViewCache||(o._routerViewCache={}),p=0,d=!1;o&&o._routerRoot!==o;)o.$vnode&&o.$vnode.data.routerView&&p++,o._inactive&&(d=!0),o=o.$parent;if(s.routerViewDepth=p,d)return c(l[u],s,r);var h=f.matched[p];if(!h)return l[u]=null,c();var v=l[u]=h.components[u];s.registerRouteInstance=function(t,e){var n=h.instances[u];(e&&n!==t||!e&&n===t)&&(h.instances[u]=e)},(s.hook||(s.hook={})).prepatch=function(t,e){h.instances[u]=e.componentInstance};var m=s.props=i(f,h.props&&h.props[u]);if(m){m=s.props=a({},m);var y=s.attrs=s.attrs||{};for(var g in m)v.props&&g in v.props||(y[g]=m[g],delete m[g])}return c(v,s,r)}},It=/[!'()*]/g,Rt=function(t){return"%"+t.charCodeAt(0).toString(16)},Ft=/%2C/g,Dt=function(t){return encodeURIComponent(t).replace(It,Rt).replace(Ft,",")},Ht=decodeURIComponent,Bt=/\/?$/,Ut=f(null,{path:"/"}),Vt=[String,Object],qt=[String,Array],Gt={name:"router-link",props:{to:{type:Vt,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:qt,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,c={},u=n.options.linkActiveClass,l=n.options.linkExactActiveClass,p=null==u?"router-link-active":u,d=null==l?"router-link-exact-active":l,v=null==this.activeClass?p:this.activeClass,y=null==this.exactActiveClass?d:this.exactActiveClass,b=i.path?f(null,i,null,n):a;c[y]=h(r,b),c[v]=this.exact?c[y]:m(r,b);var w=function(t){g(t)&&(e.replace?n.replace(i):n.push(i))},x={click:g};Array.isArray(this.event)?this.event.forEach(function(t){x[t]=w}):x[this.event]=w;var k={class:c};if("a"===this.tag)k.on=x,k.attrs={href:s};else{var C=_(this.$slots.default);if(C){C.isStatic=!1;var O=Pt.util.extend,$=C.data=O({},C.data);$.on=x;var S=C.data.attrs=O({},C.data.attrs);S.href=s}else k.on=x}return t(this.tag,k,this.$slots.default)}},zt="undefined"!=typeof window,Kt=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},Wt=R,Jt=C,Xt=O,Yt=E,Zt=I,Qt=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");Wt.parse=Jt,Wt.compile=Xt,Wt.tokensToFunction=Yt,Wt.tokensToRegExp=Zt;var te=Object.create(null),ee=Object.create(null),ne=zt&&function(){var t=window.navigator.userAgent;return(t.indexOf("Android 2.")===-1&&t.indexOf("Android 4.0")===-1||t.indexOf("Mobile Safari")===-1||t.indexOf("Chrome")!==-1||t.indexOf("Windows Phone")!==-1)&&(window.history&&"pushState"in window.history)}(),re=zt&&window.performance&&window.performance.now?window.performance:Date,oe=ot(),ie="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,ae=function(t,e){this.router=t,this.base=vt(e),this.current=Ut,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};ae.prototype.listen=function(t){this.cb=t},ae.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},ae.prototype.onError=function(t){this.errorCbs.push(t)},ae.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(o)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},ae.prototype.confirmTransition=function(t,e,n){var i=this,a=this.current,s=function(t){o(t)&&(i.errorCbs.length?i.errorCbs.forEach(function(e){e(t)}):(r(!1,"uncaught error during route navigation:"),console.error(t))),n&&n(t)};if(h(t,a)&&t.matched.length===a.matched.length)return this.ensureURL(),s();var c=mt(this.current.matched,t.matched),u=c.updated,f=c.deactivated,l=c.activated,p=[].concat(_t(f),this.router.beforeHooks,bt(u),l.map(function(t){return t.beforeEnter}),ft(l));this.pending=t;var d=function(e,n){if(i.pending!==t)return s();try{e(t,a,function(t){t===!1||o(t)?(i.ensureURL(!0),s(t)):"string"==typeof t||"object"==typeof t&&("string"==typeof t.path||"string"==typeof t.name)?(s(),"object"==typeof t&&t.replace?i.replace(t):i.push(t)):n(t)})}catch(t){s(t)}};ut(p,d,function(){var n=[],r=function(){return i.current===t},o=xt(l,n,r),a=o.concat(i.router.resolveHooks);ut(a,d,function(){return i.pending!==t?s():(i.pending=null,e(t),void(i.router.app&&i.router.app.$nextTick(function(){n.forEach(function(t){t()})})))})})},ae.prototype.updateRoute=function(t){var e=this.current;this.current=t,this.cb&&this.cb(t),this.router.afterHooks.forEach(function(n){n&&n(t,e)})};var se=function(t){function e(e,n){var r=this;t.call(this,e,n);var o=e.options.scrollBehavior;o&&W();var i=Ot(this.base);window.addEventListener("popstate",function(t){var n=r.current,a=Ot(r.base);r.current===Ut&&a===i||r.transitionTo(a,function(t){o&&J(e,t,n,!0)})})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){st(k(r.base+t.fullPath)),J(r.router,t,i,!1),e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){ct(k(r.base+t.fullPath)),J(r.router,t,i,!1),e&&e(t)},n)},e.prototype.ensureURL=function(t){if(Ot(this.base)!==this.current.fullPath){var e=k(this.base+this.current.fullPath);t?st(e):ct(e)}},e.prototype.getCurrentLocation=function(){return Ot(this.base)},e}(ae),ce=function(t){function e(e,n,r){t.call(this,e,n),r&&$t(this.base)||St()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this,e=this.router,n=e.options.scrollBehavior,r=ne&&n;r&&W(),window.addEventListener(ne?"popstate":"hashchange",function(){var e=t.current;St()&&t.transitionTo(Et(),function(n){r&&J(t.router,n,e,!0),ne||jt(n.fullPath)})})},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){Tt(t.fullPath),J(r.router,t,i,!1),e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){jt(t.fullPath),J(r.router,t,i,!1),e&&e(t)},n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Et()!==e&&(t?Tt(e):jt(e))},e.prototype.getCurrentLocation=function(){return Et()},e}(ae),ue=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ae),fe=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=G(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ne&&t.fallback!==!1,this.fallback&&(e="hash"),zt||(e="abstract"),this.mode=e,e){case"history":this.history=new se(this,t.base);break;case"hash":this.history=new ce(this,t.base,this.fallback);break;case"abstract":this.history=new ue(this,t.base)}},le={currentRoute:{configurable:!0}};fe.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},le.currentRoute.get=function(){return this.history&&this.history.current},fe.prototype.init=function(t){var e=this;if(this.apps.push(t),!this.app){this.app=t;var n=this.history;if(n instanceof se)n.transitionTo(n.getCurrentLocation());else if(n instanceof ce){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},fe.prototype.beforeEach=function(t){return Lt(this.beforeHooks,t)},fe.prototype.beforeResolve=function(t){return Lt(this.resolveHooks,t)},fe.prototype.afterEach=function(t){return Lt(this.afterHooks,t)},fe.prototype.onReady=function(t,e){this.history.onReady(t,e)},fe.prototype.onError=function(t){this.history.onError(t)},fe.prototype.push=function(t,e,n){this.history.push(t,e,n)},fe.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},fe.prototype.go=function(t){this.history.go(t)},fe.prototype.back=function(){this.go(-1)},fe.prototype.forward=function(){this.go(1)},fe.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},fe.prototype.resolve=function(t,e,n){var r=V(t,e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath,a=this.history.base,s=Mt(a,i,this.mode);return{location:r,route:o,href:s,normalizedTo:r,resolved:o}},fe.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==Ut&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(fe.prototype,le),fe.install=b,fe.version="2.8.1",zt&&window.Vue&&window.Vue.use(fe),t.exports=fe}]);
================================================
FILE: public/img/.gitignore
================================================
# Ignore everything in this directory
*
# Except this file
!.gitignore
!default.jpg
================================================
FILE: public/index.html
================================================
elm
================================================
FILE: routes/admin.js
================================================
'use strict';
import express from 'express'
import Admin from '../controller/admin/admin'
const router = express.Router()
router.post('/login', Admin.login);
// router.post('/register', Admin.register);
router.get('/signout', Admin.singout);
router.get('/all', Admin.getAllAdmin);
router.get('/count', Admin.getAdminCount);
router.get('/info', Admin.getAdminInfo);
router.post('/update/avatar/:admin_id', Admin.updateAvatar);
export default router
================================================
FILE: routes/bos.js
================================================
'use strict';
import express from 'express';
import Order from '../controller/v1/order'
const router = express.Router();
router.get('/v2/users/:user_id/orders', Order.getOrders)
router.get('/v1/users/:user_id/orders/:order_id/snapshot', Order.getDetail)
router.get('/orders', Order.getAllOrders)
router.get('/orders/count', Order.getOrdersCount)
export default router
================================================
FILE: routes/eus.js
================================================
'use strict';
import express from 'express';
import User from '../controller/v2/user'
const router = express.Router();
router.post('/v1/users/:user_id/avatar', User.updateAvatar)
export default router
================================================
FILE: routes/index.js
================================================
'use strict';
import v1 from './v1'
import v2 from './v2'
import v3 from './v3'
import v4 from './v4'
import ugc from './ugc'
import bos from './bos'
import eus from './eus'
import admin from './admin'
import payapi from './payapi'
import statis from './statis'
import member from './member'
import shopping from './shopping'
import promotion from './promotion'
export default app => {
// app.get('/', (req, res, next) => {
// res.redirect('/');
// });
app.use('/v1', v1);
app.use('/v2', v2);
app.use('/v3', v3);
app.use('/v4', v4);
app.use('/ugc', ugc);
app.use('/bos', bos);
app.use('/eus', eus);
app.use('/admin', admin);
app.use('/payapi', payapi);
app.use('/member', member);
app.use('/statis', statis);
app.use('/shopping', shopping);
app.use('/promotion', promotion);
}
================================================
FILE: routes/member.js
================================================
'use strict';
import express from 'express';
import VipCart from '../controller/member/vipcart'
const router = express.Router();
router.post('/v1/users/:user_id/delivery_card/physical_card/bind', VipCart.useCart)
export default router
================================================
FILE: routes/payapi.js
================================================
'use strict';
import express from 'express';
const router = express.Router();
router.get('/payment/queryOrder', (req, res, next) => {
res.send({
status: 0,
type: 'PAY_FAILED',
message: '暂不开放支付功能',
});
})
export default router;
================================================
FILE: routes/promotion.js
================================================
'use strict';
import express from 'express';
import Hongbao from '../controller/promotion/hongbao'
const router = express.Router();
router.get('/v2/users/:user_id/hongbaos', Hongbao.getHongbao)
router.get('/v2/users/:user_id/expired_hongbaos', Hongbao.getExpiredHongbao)
export default router
================================================
FILE: routes/shopping.js
================================================
'use strict';
import express from 'express';
import Shop from '../controller/shopping/shop'
import Food from '../controller/shopping/food'
import Category from '../controller/shopping/category'
import Check from '../middlewares/check'
const router = express.Router();
router.post('/addshop', Check.checkAdmin, Shop.addShop);
router.get('/restaurants', Shop.getRestaurants);
router.get('/restaurants/count', Shop.getShopCount);
router.post('/updateshop', Check.checkAdmin, Shop.updateshop);
router.delete('/restaurant/:restaurant_id', Check.checkSuperAdmin, Shop.deleteResturant);
router.get('/restaurant/:restaurant_id', Shop.getRestaurantDetail);
router.post('/addfood', Check.checkAdmin, Food.addFood);
router.get('/getcategory/:restaurant_id', Food.getCategory);
router.post('/addcategory', Check.checkAdmin, Food.addCategory);
router.get('/v2/menu', Food.getMenu);
router.get('/v2/menu/:category_id', Food.getMenuDetail);
router.get('/v2/foods', Food.getFoods);
router.get('/v2/foods/count', Food.getFoodsCount);
router.post('/v2/updatefood', Check.checkAdmin, Food.updateFood);
router.delete('/v2/food/:food_id', Check.checkSuperAdmin, Food.deleteFood);
router.get('/v2/restaurant/category', Category.getCategories);
router.get('/v1/restaurants/delivery_modes', Category.getDelivery);
router.get('/v1/restaurants/activity_attributes', Category.getActivity);
export default router
================================================
FILE: routes/statis.js
================================================
'use strict'
import express from 'express'
import Statis from '../controller/statis/statis'
const router = express.Router()
router.get('/api/:date/count', Statis.apiCount)
router.get('/api/count', Statis.apiAllCount)
router.get('/api/all', Statis.allApiRecord)
router.get('/user/:date/count', Statis.userCount)
router.get('/order/:date/count', Statis.orderCount)
router.get('/admin/:date/count', Statis.adminCount)
export default router
================================================
FILE: routes/ugc.js
================================================
'use strict';
import express from 'express';
import Rating from '../controller/ugc/rating'
const router = express.Router();
router.get('/v2/restaurants/:restaurant_id/ratings', Rating.getRatings)
router.get('/v2/restaurants/:restaurant_id/ratings/scores', Rating.getScores)
router.get('/v2/restaurants/:restaurant_id/ratings/tags', Rating.getTags)
export default router
================================================
FILE: routes/v1.js
================================================
'use strict';
import express from 'express'
import CityHandle from '../controller/v1/cities'
import SearchPlace from '../controller/v1/search'
import Carts from '../controller/v1/carts'
import Address from '../controller/v1/address'
import Remark from '../controller/v1/remark'
import BaseComponent from '../prototype/baseComponent'
import Captchas from '../controller/v1/captchas'
import User from '../controller/v2/user'
import Order from '../controller/v1/order'
import Hongbao from '../controller/promotion/hongbao'
const baseHandle = new BaseComponent();
const router = express.Router();
router.get('/cities', CityHandle.getCity);
router.get('/cities/:id', CityHandle.getCityById);
router.get('/exactaddress', CityHandle.getExactAddress);
router.get('/pois', SearchPlace.search);
router.post('/addimg/:type', baseHandle.uploadImg);
router.post('/carts/checkout', Carts.checkout);
router.get('/carts/:cart_id/remarks', Remark.getRemarks);
router.post('/captchas', Captchas.getCaptchas);
router.get('/user', User.getInfo);
router.get('/user/:user_id', User.getInfoById);
router.get('/users/list', User.getUserList);
router.get('/users/count', User.getUserCount);
router.get('/users/:user_id/addresses', Address.getAddress);
router.post('/users/:user_id/addresses', Address.addAddress);
router.get('/user/city/count', User.getUserCity);
router.get('/addresse/:address_id', Address.getAddAddressById);
router.delete('/users/:user_id/addresses/:address_id', Address.deleteAddress);
router.post('/users/:user_id/carts/:cart_id/orders', Order.postOrder);
router.post('/users/:user_id/hongbao/exchange', Hongbao.exchange);
export default router
================================================
FILE: routes/v2.js
================================================
'use strict';
import express from 'express';
import Entry from '../controller/v2/entry'
import CityHandle from '../controller/v1/cities'
import User from '../controller/v2/user'
const router = express.Router();
router.get('/index_entry', Entry.getEntry);
router.get('/pois/:geohash', CityHandle.pois);
router.post('/login', User.login);
router.get('/signout', User.signout);
router.post('/changepassword', User.chanegPassword);
export default router
================================================
FILE: routes/v3.js
================================================
'use strict';
import express from 'express';
import Explain from '../controller/v3/explain'
const router = express.Router();
router.get('/profile/explain', Explain.getExpalin)
export default router
================================================
FILE: routes/v4.js
================================================
'use strict';
import express from 'express';
import Food from '../controller/shopping/shop'
const router = express.Router();
router.get('/restaurants', Food.searchResaturant);
export default router
================================================
FILE: todo.txt
================================================
## TODO
- [ ] 图片管理系统 -- 进行中
- [ ] 七日数据查询优化
- [ ] 日志优化
- [ ] 内存管理优化
- [ ] 负载均衡优化
- [ ] 弃用百度地图,改用腾讯地图
================================================
FILE: views/home.ejs
================================================
首页
================================================
FILE: views/index.html
================================================
test