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: "![anonymous buy](https://fuss10.elemecdn.com/f/08/bb0bcfc2a10e26524633e38ea47f6jpeg.jpeg)", 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: "![](http://fuss10.elemecdn.com/5/de/5efc9ee81ceba1ae835b0c2298ba9jpeg.jpeg) ## 1. 清晰 拍照时持稳手机,避免出现大幅度晃动。将焦点对准食物本身,锁焦后、点击快门。


![](http://fuss10.elemecdn.com/8/89/4920bc3a0a34c0d26a4460ce03157jpeg.jpeg) ## 2. 光线 尽量选择明亮、柔和的光线,避免强光直射;拍摄时避免身体或器物的阴影遮住食物本身,有条件时,可以用小型手电进行补光,以提高食物质感。


![](http://fuss10.elemecdn.com/4/9b/ca198810b12c8fc57ae562c6fa92cjpeg.jpeg) ## 3. 构图 构图可以选择通用的三分构图法或中心构图法,如果是拍摄整体食物时,需要考虑食物的完整性;如果拍摄特写时,需要将细节体现清楚。


![](http://fuss10.elemecdn.com/c/3b/958696046787bb467708c8d9a5171jpeg.jpeg) ## 4.角度 可以选择45度拍摄、90度俯拍或者水平拍摄,一切都看你的心情哦~


![](http://fuss10.elemecdn.com/2/d3/d31b1f81eb853c6042b9c172a514bjpeg.jpeg) ## 5. 背景 可以选择合适的背景拍摄,例如黑色能体现食物蒸腾的热气,白色让食物更有质感,米色更加温馨等;但背景尽量不要太乱,以免影响整体效果。


![](http://fuss10.elemecdn.com/a/fe/b9716e028917fd81f6c5a99242b6fjpeg.jpeg) ## 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]*?)(]*>)","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
sdfsfsfdsfsdfsfsf 顶部